Top.Mail.Ru

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

В языке Турбо Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы – организовать цикл:

  • оператор цикла с предварительным условием;
  • оператор цикла с последующим условием;
  • оператор цикла с параметром.

Для всех операторов цикла характерна следующая особенность. Повторяющиеся вычисления записываются только один раз. Вход в цикл возможен только через его начало. Переменные оператора цикла должны быть определены до входа в циклическую часть. Необходимо предусмотреть выход из цикла: или по естественному его окончанию, или по оператору перехода. Если это не предусмотреть, то циклическая часть вычислений будет повторяться бесконечно. В этом случае говорят, что произошло «зацикливание» выполнения программы.

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

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

Оператор цикла с предварительным условием While имеет следующий формат:

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

 где

 While (пока), do (делать) – зарезервированные слова;
выражение– выражение логического типа;
оператор– произвольный оператор.

Оператор цикла действует следующим образом. Предварительно, до начала цикла, (отсюда и название «Оператор цикла с предварительным условием») проверяется логическое выражение. Если выражение имеет значение True(истина), то выполняются операторы циклической части (тело цикла), после чего снова проверяется логическое выражение. Пока выражение имеет значение True(истина) выполняются операторы циклической части. Как только оно становиться ложным – False, происходит выход из цикла. Если с самого начала значение логического выражения ложно (False), то операторы циклической части не выполняются ни разу.

Блок-схема оператора цикла с предварительным условием:

Оператор цикла с предварительным условием (While)

ЗАДАЧА 1. Вычислить сумму целых чисел от 0 до 99.

Program a10;

var

i:integer; {количество чисел}

s:integer; {сумма чисел}

begin

i:=1; s:=0;

while i<99> do

begin

s:=s+i;

i:=i+1;

end; {после выхода из цикла i = 99}

i:=i-1; {поэтому уменьшаем на 1}

writeln('Cумма',i:4, ' чисел равна:', s:6);

end.

Результаты работы программы:

 Cумма 98 чисел равна: 4851 

ЗАДАЧА 2. Вычислить сумму нечетных целых чисел от 0 до 99.

Program a11;

var

i:integer; {нечётное число}

s:integer; {сумма чисел}

begin

i:=1; s:=0;

while i<99> do

begin

s:=s+i;

i:=i+2;

end;

i:=i-2;

writeln('Сумма нечетных чисел равна:', s:6);

end.

Результаты работы программы:

 Cумма нечетных чисел равна: 2401 

Пример.

program example1;

var

ch:char;

begin

Write('Продолжить вычисления (Y/N)?');

ch:=' ';

while(UpCase(ch)<>'Y') and (UpCase(ch)<>'N')do

ch:=Readkey;

end.

Примечание:

  • Функция UpCase () преобразует символ в верхний регистр.
  • Функция Readkey () считывает символ с клавиатуры.

Оператор цикла с последующим условием Repeat

Формат оператора:

 Repeat
операторы циклической
 
 части программы 
 Until логическое выражение 

Здесь Repeat (повторять), Until (до тех пор) – зарезервированные слова языка.

Блок-схема оператора цикла с последующим условием:

Блок-схема оператора цикла с последующим условием

Оператор цикла с последующим условием Repeat работает следующим образом.

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

Итак, сначала выполняется циклическая часть, а затем проверяется условие. При этом нижняя граница операторов циклической части обозначена словом Until, поэтому нет необходимости заключать операторы циклической части в операторные скобки Begin...End.

ЗАДАЧА 3. Вычислить сумму нечетных целых чисел от 0 до 99 (см. Задачу 2).

Program a12;

Var

i:integer; {нечётное число}

s:integer; {сумма чисел}

Begin

i:=1; s:=0;

Repeat

s:=s+i;

i:=i+2;

Until i=99;

i:=i-2;

writeln('сумма нечетных чисел',' равна:', s:6);

End.

Результаты работы программы:

 Сумма нечетных чисел равна: 2401 

ЗАДАЧА 4. Написать программу, которая выводит таблицу квадратов первых пяти целых положительных нечетных чисел

Program a13;

var

x:integer; {число}

y:integer; {квадрат числа}

begin

writeln('Таблица квадратов');

writeln('==================');

writeln('Число квадрат');

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

x:=1;

repeat

y:=x*x;

writeln(x:4,y:6);

x:=x+2;

until x=11;

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

End.

Результаты работы программы:

 Таблица квадратов 
 ================== 
 Число   квадрат 
 ------------------ 
     1       1      
     3       9      
     5       25     
     7       49     
     9       81     
 ------------------ 

 Оператор цикла с параметром For

Оператор цикла с параметром For используется в тех случаях, когда заранее известно, сколько раз должна повторяться циклическая часть программы. 

Блок-схема оператора цикла For

Формат оператора

 For i:=m1 to m2 Do
begin
 
 операторы циклической 
 части программы 
 end; 

здесь For (для), to (до), Do (делать) – зарезервированные слова языка;

 i – параметр цикла;

 m1m2 – начальное и конечное значения параметра цикла, могут задаваться выражениями, за исключением типа Real.

В операторе цикла For начальное m1 и конечное значение m2 параметра цикла i должны быть заданы. Параметр цикла i увеличивается/уменьшается автоматически.

Если i=1 и m1>m2, то циклическая часть не выполняется ни разу.

После естественного завершения работы оператора цикла (выход из цикла) значение параметра цикла i не определено.

Если параметр цикла увеличивается, то его шаг равен +1.

Если параметр цикла должен уменьшаться, то в этом случае m1 должно быть больше m2, а вместо служебного слова TO необходимо поставить DOWNTO. Шаг уменьшения равен –1.

ЗАДАЧА 5. Напечатать все буквы латинского алфавита.

Programa14;

var

ch:char;

begin

writeln('Латинский алфавит:');

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

write(' ',ch);

end.

Результаты работы программы:

 Латинский алфавит: 

 ABCDEFGHIJKLMNOPQRSTUVWXYZ 

ЗАДАЧА 6. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел.

program a15.

var

x:integer; {число}

y:integer; {квадрат числа}

i:integer; {параметр цикла}

begin

writeln('Таблица квадратов');

writeln('=================');

writeln('Число квадрат');

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

x:=1;

for i:= 1 to 10 do

begin

y:=x*x;

writeln(x:4,y:6);

x:=x+1;

{лучше так!}

{y:=i*i;}

{writeln(i:4,y:6);}

end;

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

end.

Результат работы программы:

 Таблица квадратов 
 ================== 
 Число   квадрат 
 ------------------ 
     1       1      
     2       4      
     3       9      
     4       16     
     5       25     
     6       36     
     7       49     
     8       64     
     9       81     
    10       100    
 ------------------