Студопедия — Операторы цикла
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Операторы цикла

Операторы цикла

Для многократного повторения одних и тех же действий в ТР предусмотрены три оператора цикла:

 

1) счетный оператор цикла (оператор цикла с параметром) - FOR

2) оператор цикла с предусловием - WHILE

3) оператор цикла с постусловием – REPEAT

Если число повторений цикла (или итераций) заранее неизвестно, однако известно условие завершения цикла, в таких случаях примеряются операторы WHILE и REPEAT.

Если число повторений известно, то применяется оператор FOR.

 

 

Для любого оператора цикла вход в цикл возможен только через его начало, выход осуществляется как вследствие естественного окончания цикла, так и путем выполнения оператора перехода GOTO или процедур выхода, содержащихся внутри цикла.

Счетный оператор цикла FOR реализует циклический процесс с известным числом повторений, и имеет две формы записи:

Первая форма позволяет наращивать параметр цикла на единицу:

 

FOR <параметр цикла>:= <min.значение> ТО <mаx.значение> DO <оператор>;

<параметр цикла> - это переменная целого либо любого порядкового типа, <min> и <max> значения - это выражения, определяющие соответственно начальное и конечное значения параметра цикла.

Их типы должны быть совместимыми для присваивания с параметром цикла.

 

Вторая форма позволяет уменьшать на единицу значение параметра цикла:

 

FOR<параметр цикла>:=<max.значение> DОWNTO<min.значение> DO

<оператор>;

Если начальное значение превышает (или не превышает во второй форме) или равно конечному значению с самого начала, <оператор> (стоящий после DO) не выполнится ни разу.

Вот примеры оператора цикла с параметром:

-----------------------------------------------------------

Program L_1;

var p, x, i: integer;

begin

writeln('введите x');

read(x);

p:=1;

for i:=1 to 5 do

p:=p*sqr(x);

writeln('p=',p);

end.

-------------------------------------------------------------

F9 – ctrl+F9 – alt+F5 –

получим результат

 

введите x

p=59049

 

введите x

p=9765625

 

В этом примере значение переменной x возводится в квадрат, затем полученная величина присваивается переменной p и так пять раз.

---------------------------------------

 

Program L;

var i: char;

begin

for i:='z' downto 'a' do

write(i,’ ‘);

end.

---------

ответ:

z y x w v u t s r q p o n m l k j i h g f e d c b a

 

В этом примере оператор цикла с параметром использован для вывода букв латинского алфавита в обратном порядке (с z до a). Дело в том, что тип Char является порядковым, причём буквы начала алфавита (как значения типа Char), считаются меньше букв, взятых в конце алфавита. Не будет, например, ошибочным неравенство

A<B; d<f

-------------------------------------------------------------

 

Program L;

var i:integer;

begin

writeln;

for i:=170 downto 100 do

write(chr(i),’ ‘);

end.

---------

ответ:

к й и з ж е д г в б а Я Ю Э Ь Ы Ъ Щ Ш Ч Ц Х Ф У Т С Р П О Н М Л К Й И З Ж Е Д Г В Б А ⌂ ~ } | { z y x w v u t s r q p o n m l k j i h g f e d

-------------------------------------------------------------------------------------------------

 

Program L;

var i:char;

begin

writeln;

for i:='z' downto 'a' do

write(ord(i),' ');

end.

----------

Ответ:

122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97

---------------------------------------------------------------------------------------------------

 

Пример:

Вычислить Y=1+1/2+1/3+…+1/N;

 

Для реализации программы необходимо многократно произвести вычисления по формуле Y=1+1/i при изменении параметра i от 1 до N

------------------------------------------------------------------------------------------------ Реализация 1:

Program L_2;

var i, N: integer;

y: real;

begin

writeln('введите N');

read(N);

y:=0;

for i:=1 to N do

y:=y+1/i;

writeln('y=',y:5:2);

end.

---------------------------------------------------------------------

Ответ:

введите N

y= 2.45

введите N

y= 1.50

---------------------------------------------------------------------

Реализация 2:

Program L_2;

var i, N: integer;

y: real;

begin

writeln('введите N');

read(N);

y:=0;

for i:=N downto 1 do

y:=y+1/i;

writeln('y=',y:5:2);

end.

---------------------------------------------------------------------

Ответ:

введите N

y= 2.45

введите N

y= 1.50

---------------------------------------------------------------------------------

 

Значение параметра цикла в теле цикла может не использоваться, а лишь выполнять функцию счетчика. Например, пусть необходимо вычислить Y=Xn. Тогда фрагмент тела программы запишется в следующем виде:

.

.

Y:=1;

FOR i:=1 ТО N DO Y=Y*X;

.

.

 

Пример вложенности операторов с применением оператора IF:

------------------------------------------------------------------------------------

Program L5;

var i, n: integer;

p:longint;

begin

writeln('введите n');

read(n);

p:=1;

for i:=1 to n do

begin

if i mod 2=0 then

begin

p:=p*i;

writeln(p:8);

end;

end;

end.

---------------------------------------------------------------------------------

Ответ:

введите n

---------------------------------------------------------------------------------

 

Два других оператора цикла (с предусловием и постусловием) проверяют условия повторения или окончания цикла, но не изменяют значения параметра цикла. Они организуют выполнение цикла с неизвестным заранее числом повторений.

 

Оператор цикла с предусловием используется в случае, когда число повторений цикла заранее не известно и действия в цикле по условию могут ни разу не выполниться. Структура этого оператора имеет вид:

 

WHILE <условие> DO <оператор>;

WHILE – «пока»; DO – «выполнить».

 

где < условие> - это любое логическое выражение, истинность которого проверяется в начале каждой итерации (условие выполнения тела цикла), <оператор> - произвольный оператор языка, в том числе и составной.

 

Если условие истинно, то выполняется оператор, стоящий за ключевым словом DO. Если условие ложно, то производится выход из цикла.

 

После выполнения <оператора>, вновь вычисляется и анализируется <условие> и вновь в случае его истинности выполняется <оператор>. Эти действия повторяются до тех пор, пока <условие> не станет ложным.

 

Пример. Вычислить Y=1+1/2+1/3+...+1/N.

-------------------------------------------------------------------------------------

Программа с применением оператора WHILE может быть составлена в следующем виде:

 

Program L15_2;

var

i, n: integer;

y: real;

begin

writeln(‘введите N’);

read(N);

Y:=0;

i:=1;

while i<= N do

begin

Y:=Y+1/i;

i:=i+1

end;

writeln(‘y=’,y:5:2);

end.

---------------------------------------------------------------------

ответ:

введите n

y= 2.59

-----------------------------------------------------------------------

Пример:

Для значения a=0.5 протабулировать функцию при изменении аргумента x на интервале [0,2] с шагом равным dx=a/2.

------------------------------------------------------------------------

Program L5_3;

const a=0.5;

var x, p: real;

begin

x:=0;

while x<=2 do

begin

p:=sqr(x)*exp(((-x)*x)/a);

x:=x+a/2;

writeln(p:5:5);

end;

end.

------------------------------------------------------------------------

Ответ:

0.00000

0.05516

0.15163

0.18262

0.13534

0.06865

0.02500

0.00670

0.00134

-----------------------------------------------------------------------

Эта же задача, но результат требуется записать в виде таблицы

 

Program L5_3;

const a=0.5;

var x, p: real;

n: integer;

begin

writeln('---------------------');

writeln(' n | x | p ');

writeln('---------------------');

x:=0;

n:=0;

while x<=2 do

begin

p:=sqr(x)*exp(((-x)*x)/a);

x:=x+a/2;

n:=n+1;

writeln(n:3,' ',x:5:2,' ',p:5:5);

end;

writeln('----------------------');

end.

_____________________________________________________

Ответ:

--------------------------

n | x | p

--------------------------

1 0.25 0.00000

2 0.50 0.05516

3 0.75 0.15163

4 1.00 0.18262

5 1.25 0.13534

6 1.50 0.06865

7 1.75 0.02500

8 2.00 0.00670

9 2.25 0.00134

---------------------------

_____________________________________________________

 

 

Оператор цикла с постусловием производит проверку условия после выполнения операторов тела цикла, которые должны выполниться хотя бы один раз. Его структура следующая:

 

REPEAT <оператор1>;

...

<операторN>

UNTIL <условие_выхода>;

REPEAT – «повторять до тех пор»;

UNTIL – «пока не будет выполнено условие».

(PEREAT и UNTIL – зарезервированные слова).

 

<оператор1>...<операторN> - любой оператор ТР

<условие выхода> - выражение логического типа.

 

При истинности значения логического выражения <условие_выхода> выполняется выход из цикла. В данном операторе ключевые слова REPEAT и UNTIL выполняют роль операторных скобок, поэтому точку с запятой перед словом UNTIL не ставят.

Оператор цикла REPEAT отличается от WHILE

во-первых:

здесь условие проверяется после выполнения тела цикла. Иными словами, гарантируется хотя бы однократное его выполнение;

во-вторых:

оператор REPEAT выполняется до тех пор, пока условие равно false, и управление передаётся следующему (за repeat ) оператору, когда условие становится равным true (для оператора while имеет место обратная зависимость).

 

Пример фрагмента программной реализации вычисления значения Y=1+1/2+1/3..+1/N при использовании оператора цикла с постусловием.

.

.

begin

Y:=0;

i:=1;

Repeat

Y:=Y+1/i;

i:=i+1

until i>N;

end.

 

Пример:

Вычислить сумму с точностью E=0.00001

Y=1+x/3+x2/5+x3/7+…+xn/(2n+1)+…

где |x|<1,

т.е. когда очередное слагаемое будет меньше E, мы заканчиваем вычисление.

-------------------------------------------------------------------

Program l5_4;

const e=0.00001;

label M;

var

i, n: byte;

x, y, r: real;

begin

M: writeln('введите x');

read(x);

if abs(x)>=1 then goto M;

y:=1;

n:=1;

repeat

r:=1; {расчёт x в степени n}

for i:=1 to n do { ---\\--- }

r:=r*x; { ---\\--- }

y:=y+r/(2*n+1); {расчёт суммы, к итогу добавляется новое слагаемое}

n:=n+1 {переход к следующему слагаемому}

until(r/(2*n+1))<e;

writeln('y=',y:7:5);

end.

-------------------------------------------------------------------

Ответ:

введите x

0.5

y=1.24644

введите x

введите x

0.9

y=1.91674

--------------------------------------------------------------------

Или эта же задача, но без r

 

Program l5_4;

const e=0.00001;

label M;

var

i, n: byte;

x, y: real;

begin

M: writeln('введите x');

read(x);

if abs(x)>=1 then goto M;

y:=1;

n:=1;

repeat

y:=y+exp(n*ln(x))/(2*n+1); {расчёт суммы, к итогу добавляется новое слагаемое}

n:=n+1 {переход к следующему слагаемому}

until(exp(n*ln(x))/(2*n+1))<e;

writeln('y=',y:7:5);

end.

--------------------------------------------------------------------------

Ответ: тот же

 

 




<== предыдущая лекция | следующая лекция ==>
Задание. Составьте программу, которая решает поставленную в вашем варианте задачу | Этиология. UNTIL <условие_выхода>;

Дата добавления: 2015-03-11; просмотров: 445. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Словарная работа в детском саду Словарная работа в детском саду — это планомерное расширение активного словаря детей за счет незнакомых или трудных слов, которое идет одновременно с ознакомлением с окружающей действительностью, воспитанием правильного отношения к окружающему...

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

ТЕХНИКА ПОСЕВА, МЕТОДЫ ВЫДЕЛЕНИЯ ЧИСТЫХ КУЛЬТУР И КУЛЬТУРАЛЬНЫЕ СВОЙСТВА МИКРООРГАНИЗМОВ. ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА БАКТЕРИЙ Цель занятия. Освоить технику посева микроорганизмов на плотные и жидкие питательные среды и методы выделения чис­тых бактериальных культур. Ознакомить студентов с основными культуральными характеристиками микроорганизмов и методами определения...

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия