Лекция 6. Операторы цикла

Repeat

Begin

Begin

Begin

Var

Begin

//инструкции цикла

end;

2. Переменная цикла должна быть объявлена в том же блоке, где находится оператор цикла.

3. Нельзя в теле цикла менять значение переменной цикла.

4. При естественном завершении цикла переменная цикла объявляется неопределенной.

Задача1. Вывести на экран буквы от A до Z (инкрементный вариант)

…..

m :Char;// Объявление символьного типа

for m :=' A ' to ' Z ' do

Write(m,' ');

Readln

end.

Задача2. Обратный отсчет времени перед запуском (декрементный вариант)

…….

var

Seconds :byte;

Writeln ( ' Obratny otchet vremeni ' ); // Обратный отсчет времени

for Seconds := 10 downto 1 do

Writeln ( ' Ostalocy ', Seconds:3, ' Sec ' );

Writeln ( ' Start ' );

Readln

end.

Задача3. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел (инкрементный вариант).

       
 
program Example3; {$APPTYPE CONSOLE} uses SysUtils; var x:integer; //число y:integer; //квадрат числа i:integer; //счетчик циклов begin writeln( ' Tables square ' ); writeln( '------------------' ); writeln( ' x | y ' ); writeln( '------------------'); x:=1; fori:=1to10do begin y:=x*x; writeln(x:5,' |', y:6); x:=x+1; end; writeln( '------------------'); readln; end.
   
Tables square ------------------ x | y ------------------ 1 | 1 2 | 4 3 | 9 4 | 16 5 | 25 6 | 36 7 | 49 8 | 64 9 | 81 10 | 100 ------------------
 

 

 

 


Оператор цикла с предусловием while . . do

Цикл с оператором whileиспользуется в том случае, если последовательность действий надо выполнить несколько раз, причем количество повторений может быть определено только во время работы программы (заранее оно не известно).

Процессы, в которых количество повторений заранее не определено, называются итерационными. А сами циклы – называются итеративными.

 

В этом виде цикла условие стоит перед телом цикла, поэтому этот цикл называют с предусловием.

 

Алгоритмическая структура «Пока» реализуется оператором

while . . do

while<выражение> do <оператор>;

 

while - пока есть,

do - делать,

 

Выражение – логическое, истинность которого

проверяется в начале каждой итерации.

 

Пока <выражение> = true (истинно), выполняется оператор тела цикла.

При условии <выражение> = false (ложно) цикл прекращается.

 

Тело цикла может не выполняться ни разу.

 

Если в цикле требуется выполнить несколько инструкций, то надо применить составной оператор.

Например:

while<условие истинно> do

//инструкции, которые надо выполнить несколько раз;

end;

Оператор whileвыполняется следующим образом:

1. Сначала вычисляется значение выражения условия.

2. Если значение выражения условия равно true (истина), то выполняются очередные инструкции тела цикла. После этого снова проверяется выполнение условия. Если условие выполняется, то инструкции цикла выполняются еще раз. И так до тех пор, пока условие не станет ложным (false).

3. Если значение выражения условия равно false (ложно), то цикл прекращается, выполнение оператора цикла заканчивается и выполняется следующий оператор, предусмотренный программой.

 

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

Задача4. Вычислить наибольшее положительное целое число n, удовлетворяющее условию: 3n5 - 690n £ 7.

 
 
program Example4; {$APPTYPE CONSOLE} uses SysUtils; var n: byte ; begin n:=1; while 3*exp( 5*ln(n)) - 690*n<= 7do n : = n + 1; writeln('n= ', n - 1); readln end.  


 

 

Задача5. Определить число К натуральных чисел, сумма которых не превышает S.

program Example5;   {$APPTYPE CONSOLE} uses SysUtils; var S, K :integer; Sum : real; begin Writeln(' Vvedite S'); readln(S); IfS>=0 Then begin K:=0; // Начальное значение К. Sum:=0; // Начальное значение суммы while (Sum<=S) Do// Начало цикла begin K:=K+1; // Получить очередное число Sum:=K*(K+1)/2; // Расчет по формуле end; // Конец цикла Writeln(' Summa', K-1, ' naturally chisel <= ', S ); end // Вывод правильного результата else Writeln(' Error – S<0 ' ); readln // Вывод сообщения об ошибке end.

 

 

 
 


Оператор цикла с постусловием Repeat . . Until

 

Оператор цикла с постусловием repeat . . until

Цикл с оператором repeat используется в том случае, если последовательность действий надо выполнить несколько раз, причем количество повторений может быть определено только во время работы программы.

Относится к итеративным циклам.

 

В этом виде цикла условие стоит после тела цикла, поэтому этот цикл называют с постусловием.

Алгоритмическая структура «До» реализуется оператором

repeat… until

 

repeat . . .

<группа операторов> // тело цикла

. . .

until <выражение>;

 

repeat - повторять,

until - пока не станет.

 

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

Пока <выражение> = false(ложно), инструкции цикла повторяются.

Если <выражение> = true (истинно), осуществляется выход из цикла.

 

Тело цикла выполняется хотя бы один раз.

repeat и until образуют операторные скобки. Поэтому тело цикла может содержать несколько операторов.

Например:

//инструкции, которые надо выполнить несколько раз;

until <условие ложно>;

Оператор repeat выполняется следующим образом:

1. Сначала выполняются находящиеся между repeat и until инструкции тела цикла.

2. Затем вычисляется значение выражения условия.

3. Если значение выражения условия ложно (false), то инструкции тела цикла выполняются еще раз.

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

 

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

 

Задача6. Вычислить наибольшее положительное целое число n, удовлетворяющее условию: 3n5 - 690n £ 7.

 
 
program Example6; {$APPTYPE CONSOLE} uses SysUtils var n: byte; //вводимое число begin n:=1; repeat n : = n + 1; until 3*exp(5*ln(n)) - 690*n > 7; writeln('n= ', n - 1); readln end.  


Задача7. Написать программу, вычисляющую сумму и среднее арифметическое последовательности положительных чисел, которые вводятся с клавиатуры.

           
   
 
program Example7; {$APPTYPE CONSOLE} uses SysUtils;   var a:integer; // вводимое с клавиатуры число n:integer; // количество чисел s:integer; // сумма чисел m:real; // среднее арифметическое begin s:=0; n:=0; // начальные значения writeln('Vvodite posle > chisla. ', 'Dly zaversheniy cikla vvedite 0 .'); repeat write(' > '); readln(a); // ввод чисел s:=s+a; // накопление суммы n:=n+1; // подсчет чисел until a<=0; n:=n-1; writeln('vvedeno chisel: ',n); // количество writeln('summa chisel: ',s); // сумма m:=s/n; writeln('srednee: ',m:6:2); // среднее readln //арифметическое end.
 
   
 

 

 


Регулярные циклы с шагом не равным 1

 

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

Задача8.

Вычислить на ЭВМ значения функций

 

при а=1.3, b=1.29, t = [ 0.1… 2.2], t изменяется в диапазоне от 0.1 до 2.2 с шагом h=0.3.

program Example8; {$APPTYPE CONSOLE} uses SysUtils; const a=1.3; b=1.29; var s,t,tk,h:real; label 10;   begin writeln('Vvedite to,tk,h'); readln(to, tk, h); t:=to; writeln; writeln(' Tables fun s(t);'); writeln //пропуск строки 10: if a*t<1 then s:=a*t+b else if a*t=1 then s:=cos(a*t) else s:=exp(-a*t)*cos(a*t); writeln('***************************'); writeln('* t=', t:8:3, ' * s=', s:8:3, ' *'); t :=t + h; if t <= tk then goto 10; witeln('***************************'); readln end.  
Организовать вывод значений аргумента и вычисленного значения функции в виде таблицы с заголовком.

 

 

 

 

Операторы цикла используются для вычислений, повторяющихся многократно. В С# имеется четыре вида циклов: цикл с предусловием while, цикл с постусловием do while, цикл с параметром for и цикл перебора foreach. Каждый из них состоит из определенной последовательности операторов.

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

Проверка условия продолжения цикла выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием), либо после тела цикла (цикл с постусловием). Разница между ними состоит в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, после чего проверяется, надо ли его выполнять еще раз. Проверка необходимости выполнения цикла с предусловием делается до тела цикла, поэтому возможно, что он не выполнится ни разу.

Параметром цикла называется переменная, которая используется при проверке условия продолжения цикла и принудительно изменяется на каждой итерации, причем, как правило, на одну и ту же величину. Если параметр цикла целочисленный, он называется счетчиком цикла. Количество повторений такого цикла можно определить заранее. Параметр есть не у всякого цикла. В так называемом итеративном цикле условие продолжения содержит переменные, значения которых изменяются в цикле по рекуррентным формулам.

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto. Передавать управление извне внутрь цикла запре­щается (при этом возникает ошибка компиляции).