
- •Глава 3. Реализация алгоритмов ветвления
- •3.1. Условный оператор
- •Полная форма оператора
- •Краткая форма оператора.
- •3.2. Задачи к пройденной теме
- •3.3. Задачи для самостоятельного решения
- •Глава 4. Реализация циклических алгоритмов
- •4.1. Конструкция цикла со счетчиком
- •4.2. Базовые алгоритмы
- •4.3. Циклы с предварительной и последующей проверкой условия
- •Цикл с последующей проверкой условия.
- •4.4. Вложенные циклы
- •4.5 Решение задач
- •Задачи для самостоятельного решения
- •Глава 5. Пользовательские типы данных.
- •5.1. Общие понятия
- •5.2. Одномерные массивы
- •5.4. Задачи для самостоятельного решения.
- •Глава 6. Многомерные массивы
- •6.1. Двумерные массивы
- •1. Заполнение двумерного массива по строке.
- •2. Заполнение двумерного массива по столбцу.
- •3. Печать содержимого двумерного массива в виде таблицы.
- •4. Вычисление суммы элементов каждой строки (столбца).
- •6. Задача поиска максимального (минимального) элемента и его индексов (считая, что элемент единственный).
- •Алгоритм поиска минимального элемента и его индексов для всего массива.
- •6.2. Квадратные матрицы.
- •Введем некоторые понятия:
- •6.3. Задачи
- •Глава 7. Типы данных Char и String
- •7.1. Символьные данные
- •7.2. Кодирование
- •7.3. Операции над данными типа char.
- •7.4. Строки
Цикл с последующей проверкой условия.
Конструкция цикла с последующей проверкой условия.
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.
Выбор конструкции цикла зависит от конкретного алгоритма. Для каждого задания необходимо продумывать, какая конструкция является наиболее оптимальной.
Пример.
С клавиатуры вводятся последовательно целые числа, и вычисляется их сумма до первого встреченного отрицательного числа (не включая его самого).
Давайте разберемся, какая конструкция цикла наиболее оптимальна для данного задания.
Конструкция цикла со счетчиком FOR отпадает сразу, так как заранее не известно, количество повторений тела цикла.
Конструкция цикла с последующей проверкой условия 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, условие задачи нарушено. Мы должны из суммы удалять лишнее отрицательное слагаемое.
Конструкция цикла с предварительной проверкой условия WHILE. Эту конструкцию так же можно использовать, но при этом помнить, что в тело цикла можно попасть только в случае истинности условия.
Для того чтобы попасть в тело цикла первое значение переменной a необходимо ввести до цикла.
...
readln(a);
S:=0;
WHILE a>0 DO
BEGIN
S:=S+a;
readln(a)
END;
...
Итак, мы пришли к выводу, что при решении такого типа задач используется конструкция цикла либо с предварительной, либо с последующей проверкой условия. Какую из этих конструкций выбрать это уже каждый решает сам, самое главное выбранную конструкцию использовать грамотно, избежав ошибок.
А теперь давайте попробуем применить оператор условного перехода 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 не изменяется.