Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование часть1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
656.22 Кб
Скачать

Цикл с последующей проверкой условия.

Конструкция цикла с последующей проверкой условия.

REPEAT

тело цикла

UNTIL <условие>;

Служебное слово repeat (англ. повторять) открывает тело цикла, выполняются последовательно операторы тела цикла, а затем проверяется условие выхода из цикла. Переводится конструкция так — повторять до тех пор, пока условие не станет истиной.

О ЧЕМ НАДО ПОМНИТЬ:

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

  • Выход из тела цикла происходит только при достижении истинности условия.

PROGRAM REPEAT1;

USES CRT;

VAR

K: integer; {слагаемое}

S: integer; {сумма}

BEGIN

clrscr;

K:=1;

S:=0;

REPEAT

S := S + K*K;

K := K + 1

UNTIL K > 20;

writeln('сумма равна = ', S);

writeln('Нажмите любую клавишу...');

readln;

END.

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

Пример.

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

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

  1. Конструкция цикла со счетчиком FOR отпадает сразу, так как заранее не известно, количество повторений тела цикла.

  2. Конструкция цикла с последующей проверкой условия REPEAT — UNTIL. Данную конструкцию можно использовать, но при этом продумать последовательность операторов.

Поясним на примере:

VAR

a: integer; {вводимое число}

S: integer; {сумма}

BEGIN

S:=0;

a:=0; {мы вынуждены выполнить этот искусственный шаг}

REPEAT

S:=S+a;

readln(a)

UNTIL a<0;

................

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

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

S:=0;

REPEAT

readln(a);

S:=S+a

UNTIL a<0;

..................

Первое прохождение:

Вводим a = -10

Тело цикла выполняется (см. пункт 1 предупреждения), затем происходит выход из цикла, и получаем сумму равную -10, условие задачи нарушено. Мы должны из суммы удалять лишнее отрицательное слагаемое.

  1. Конструкция цикла с предварительной проверкой условия WHILE. Эту конструкцию так же можно использовать, но при этом помнить, что в тело цикла можно попасть только в случае истинности условия.

Для того чтобы попасть в тело цикла первое значение переменной a необходимо ввести до цикла.

...

readln(a);

S:=0;

WHILE a>0 DO

BEGIN

S:=S+a;

readln(a)

END;

...

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

  1. А теперь давайте попробуем применить оператор условного перехода IF. Напомню, что оператор (или операторы заключенные в скобки begin end) стоящие за оператором условного перехода, выполнятся только в случае истиности условия.

VAR

a: integer; {вводимое число}

S: integer; {сумма}

BEGIN

S:=0;

REPEAT

readln(a)

IF a > 0 THEN

S := S + a

UNTIL a<0;

...

В данном примере a прибавляется к сумме только в том случае, когда выполняется условие a > 0, в противном случае сумма S не изменяется.