#12.1 Цикл Repeat/Until "с постусловием" в Паскаль
Primary tabs
Цикл 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.
-- по сути это пример замены for на repeat-util, для ситуации перебора ряда чисел.
Repeat/until и другие циклы в Паскаль -- связь между ними
Ранее мы уже изучили циклы:
- for -- "с известным числом повторений", который не проверяет логических условий.
- и while (т.н. цикл "с предусловием") -- цикл похожий на Repeat/until -- также проверяющий логическое выражение, но while от repeat отличается по следующим пунктам:
- По условию выхода из цикла:
- while работает пока его логическое условие истинно,
- repeat-until наоборот пока ложно.
- По порядку проверки условия:
- while сначала проверяет условие (если истинно - то продолжает работу), а потом делает очередной (в том числе первый) свой виток.
- repeat-until сначала делает виток, а потом проверяет условие (если ложно - то продолжает работу).
- По условию выхода из цикла:
Теоретические вопросы
- Что такое виток цикла?
- Чем отличается цикл repeat/until от циклов for и while? Похож ли он в чем-то на них?
Задачи для самостоятельного решения
Примечание: в задачах данного урока, в качестве конструкции для организации цикла (если требуется) используйте repeat-until, если в задаче явно не сказано использовать какую-то другую конструкцию.
- Выведите на экран, все числа от $55$ до $9236$.
- Пользователь вводит целое число, если оно больше единицы, то выведите на экран все целые числа от этого числа до единицы (в обратном порядке), которые делятся на $23$ без остатка. Иначе (если введённое пользователем число не больше единицы) сообщите об ошибке.
- Пользователь вводит в консоль символы (после каждого нажимая Enter), в ответ выводите символ '&', до тех пор пока пользователь не введёт '#', после чего завершите программу.
- Решите с помощью цикла repeat/until:
Выведите на экран, все четные числа, делящиеся на $3$ и на $6$ нацело , лежащие в диапазоне от 35 до 117. -
Решите с помощью цикла repeat/until:
Выведите на экран, все четные числа от 35 до 117 и нечетные числа, делящиеся на $7$ и $3$ нацело и при этом лежащие в диапазоне от 45 до 99.
Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции).
- Log in to post comments
- 31931 reads
vedro-compota
Tue, 09/25/2018 - 21:09
Permalink
обратный порядок с помощью repeat-until
Если непонятно, можно глянуть тут: http://fkn.ktu10.com/?q=node/8811
_____________
матфак вгу и остальная классика =)