Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДРАЗРАБОТКА ИНФОРМАТИКА ПАСКАЛЬ_p.doc
Скачиваний:
6
Добавлен:
07.05.2019
Размер:
503.81 Кб
Скачать

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

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

4.2.1. Оператор цикла For

Конструкция ForTo (DownTo) …Do называется перечисляемым циклом, или циклом со счетчиком.

Синтаксис:

For <Переменная цикла> :=<Нач. значение> To (DownTo) <Кон. значение> Do

Begin

<блок операторов>

End;

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

Если требуется, чтобы <Переменная цикла> не увеличивалась, а уменьшалась, то вместо слова To используется слово DownTo. Конструкция цикла с заданным количеством повторений изображена на рис.4.1.

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

n_nach — начальное значение параметра цикла;

n_kon_ - конечное значение параметра цикла;

1 — шаг изменения параметра цикла;

Рис. 4.1. Блок-схема конструкции цикла с заданным количеством повторений

Повторение цикла прекращается, если значение <Переменной цикла> превысит <Кон. значение>. Если заданы "противоречивые" начальное и конечное значения счетчика цикла, то цикл может не выполниться ни разу (for i:=1 to 0 do …).

Пример: печать первых десяти натуральных чисел на экран.

for i:=1 to 10 do

begin

writeln(i);

end;

Задача. Найти сумму заданного количества натуральных чисел, начиная с первого.

Var i,s,n:integer;

BEGIN

Writeln(‘Ведите количество’);

Readln(n);

for i:=1 to n do

begin

s:=s+i;

end;

writeln(s);

END.

4.2.2. Оператор цикла Repeat..Until

Конструкция Repeat..Until является называется циклом с постусловием.

Синтаксис:

Repeat

<блок операторов>;

Until <условие>;

Выполняется <блок операторов>, затем проверяется условие выхода из цикла, записанное после слова Until. Если условие выполняется, то цикл завершается, в противном случае вновь выполняется <блок операторов> и вновь проверяется условие и т. д.

Особенности:

1. <Блок операторов> обязательно выполнится хотя бы один раз.

2. Внутри конструкции Repeat..Until не нужны операторные скобки Begin...End, хотя их использование не запрещается.

3. В теле цикла (в отличие от цикла For) необходимо предусмотреть изменение значения параметра цикла!!!

Пример 1. Печать первых десяти натуральных чисел.

i:=1; {присвоение начального значения параметру цикла}

repeat

writeln(i);

i:=i+1; {изменение значения параметра цикла}

until (i<=10);

Пример 2. Определение стоимости покупки при ее указанной предельной сумме.

Var х, к, р, s: Integer;

Begin

WriteLn('Предельная сумма — ');

ReadLn(p);

s:=0;

Repeat

WriteLn('Введите цену товара и его количе­ство9); ReadLn(x,k);

s:=s+x*k;

WriteLn('Стоимость покупки равна',s);

Until s>p;

WriteLn('Суммарная стоимость покупки превысила предельную сумму');

End.

Пример 3. Задержка выполнения программы до нажатия любой клавиши.

Writeln("Нажмите любую клавишу");

Repeat

Until KeyPressed;

Readkey;

При нажатии клавиш данные поступают в буфер клавиатуры и хранятся там до тех пор, пока не будут считаны процедурами или функциями ввода данных, либо сам буфер не будет очищен программно.

Пример 4 .

Алгоритм Евклида — это алгоритм нахождения наибольшего общего делителя (НОД) двух целых неотрицательных чисел.

Алгоритм Евклида нахождения НОД основан на следующих свойствах этой величины. Пусть х и у одновременно не равные нулю целые неотрицательные числа и пусть х>у, тогда, если у=0, то НОД(х, у)=х, а если у0, то для чисел х, у и r, где r — остаток от деления х на у выполняется равенство НОД(х, у)=НОД(у, r).

Например, пусть х=48, а у=18, найдем их наибольший общий делитель.

x

y

Результаты

48

18

48 mod 8=12

18

x>y

НОД(48,18)=НОД(12,18)

12

18 mod 12=6

x<y

НОД(12,18)=НОД(12,6)

12 mod 6=0

6

x>y

НОД(12,6)=НОД(0,6)

0

6

x=0

НОД(0,6)=6

Таким образом, НОД(48, 18)=6.

Написать программу нахождения наибольшего общего делителя (НОД) двух неотрицательных чисел. Для решения данной задачи воспользуемся циклом с постусловием:

Program Euclid;

Var х, у: Integer;

Begin

Writeln('Bвeдитe два числа');

Readln(x,y);{вводим два целых числа}

Repeat {выполнять}

If x>y Then

x:=x Mod у

Else y:=y Mod x;

Until (x=0) Or (у=0);{до тех пор, пока одно из чисел не станет равно нулю}

Writeln('HOД=',х+у); {вывод НОД - без условного оператора, так как одно из чисел обязательно равно нулю}

ReadLn;

End.