62. Программирование циклов с заданным условием окончания работы

62. Программирование циклов с заданным условием окончания работы

Цикл с заданным условием окончания работы (цикл-ДО) программируется в языке Паскаль с помощью оператора repeat. Общий вид оператора:

repeat <оператор1; оператор2; ...; > until <условие>

Здесь:

<оператор1>, <оператор2>,... — операторы, образующие тело цикла;

<условие> — логическое выражение; если оно ложно, то выполняется тело цикла.

Пример:

Запишем на языке Паскаль алгоритм решения задачи о графике тренировок спортсмена.

Спортсмен приступает к тренировкам по следующему графику: в первый день он должен пробежать 10 км; каждый следующий день следует увеличивать дистанцию на 10 % от нормы предыдущего дня.

Как только дневная норма достигает или превысит 25 км, необходимо прекратить её увеличение и далее пробегать ежедневно ровно 25 км. Начиная с какого дня спортсмен будет пробегать 25 км?

ПРОГРАММИРОВАНИЕ ЦИКЛОВ С ЗАДАННЫМ УСЛОВИЕМ ОКОНЧАНИЯ РАБОТЫ

Цикл Repeat/until

Цикл Repeat/until характеризуется следующими моментами:

Работает пока условие ложно.

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

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

Операторные скобки вокруг тела цикла repeat-until не нужны не нужны -- так как их заменяют сами два слова repeat и until ("повторяй" и "пока не")

Пример: выведем на экран все целые числа от 1 до n (числа введённого пользователем):

var i, n: integer;

begin

  writeln('vvedite celoe chislo >1 :');

  readln(n);

  i := 1;

  repeat // начало тела цикла

    write(i, ' ');

    i := i + 1; // увеличиваем счетчик на 1

  until (i>n); // выход из цикла только если счетчик станет больше n

   readln();

end.

Repeat/until и другие циклы в Паскаль -- связь между ними

Ранее мы уже изучили циклы:

1. while (т.н. цикл "с предусловием") -- цикл похожий на Repeat/until -- также проверяющий логическое выражение, но while от repeat отличается по следующим пунктам:

1. По условию выхода из цикла:

while работает пока его логическое условие истинно,

repeat-until наоборот пока ложно.

2. По порядку проверки условия:

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

repeat-until сначала делает виток, а потом проверяет условие (если ложно - то продолжает работу).

Теоретические вопросы

1. Что такое виток цикла?

2. Чем отличается цикл repeat/until от циклов for и while? Похож ли он в чем-то на них?

Задачи для самостоятельного решения

Примечание: в задачах данного урока, в качестве конструкции для организации цикла (если требуется) используйте repeat-until, если в задаче явно не сказано использовать какую-то другую конструкцию.

1. Выведите на экран, все числа от 55 до 9236

2. Пользователь вводит целое число, если оно больше единицы, то выведите на экран все целые числа от этого числа до единицы (в обратном порядке), которые делятся на 23 без остатка. Иначе (если введённое пользователем число не больше единицы) сообщите об ошибке.

3. Пользователь вводит символы, в ответ выводите символ '&', до тех пор пока пользователь не введёт '#', после чего завершите программу.

4. Выведите на экран, все нечетные числа, делящиеся на 3 и на 6 нацело , лежащие в диапазоне от 35 до 117.

5. Выведите на экран, все четные числа от 35 до 117 и нечетные числа, делящиеся на 7 и 3 нацело и при этом лежащие в диапазоне от 45 до 99.

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

Домашнее задание

Выучить §3.5.2. Программирование циклов с заданным условием окончания работы

Выполнить №8, № 9 к §3.5.2. № 196-196