#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, для ситуации перебора ряда чисел.
Еще примеры (необходимо доофромить):
var a, b: integer;
f: boolean;
begin
//writeln('Введите число:');
//readln(a);
//while (a < 15) do
//begin
// writeln(5);
// writeln('Введите число:');
// readln(a);
//end;
repeat
writeln('Введите число:');
readln(a);
f := a < 15;
if (f) then
writeln(5);
until (not f);
readln();
end.
//var a, b: integer;
//begin
// a := 1;
// repeat
// write(a, ' ');
// a := a + 1;
// until (a > 10);
//
// writeln();
//
// a := 1;
// while (a <= 10) do
// begin
// write(a, ' ');
// a := a + 1;
// end;
//
// readln();
//end.
//
//var a, b, c, d : integer;
//begin
// writeln('Введите целое число:');
// readln(a);
// writeln(a, '/2=', a div 2);
// writeln('Остаток=', a mod 2);
//
// readln();
//end.
Repeat/until и другие циклы в Паскаль -- связь между ними
Ранее мы уже изучили циклы:
- for -- "с известным числом повторений", который не проверяет логических условий.
- и while (т.н. цикл "с предусловием") -- цикл похожий на Repeat/until -- также проверяющий логическое выражение, но while от repeat отличается по следующим пунктам:
- По условию выхода из цикла:
- while работает пока его логическое условие истинно,
- repeat-until наоборот пока ложно.
- По порядку проверки условия:
- while сначала проверяет условие (если истинно - то продолжает работу), а потом делает очередной (в том числе первый) свой виток.
- repeat-until сначала делает виток, а потом проверяет условие (если ложно - то продолжает работу).
- По условию выхода из цикла:
Видео-пояснения
Для этого урока есть следующию видео-пояснения:
Теоретические вопросы
- Что такое виток цикла?
- Чем отличается цикл repeat/until от циклов for и while? Похож ли он в чем-то на них?
Задачи для самостоятельного решения
Примечание: в задачах данного урока, в качестве конструкции для организации цикла (если требуется) используйте repeat-until, если в задаче явно не сказано использовать какую-то другую конструкцию.
- Вывести на экран все числа от 1 до N с помощью цикла repeat/until.
-
Сдавать решение не обязательно:
Исправьте форматирование кода:var a,b: char; begin repeat writeln ('введи символ и нажми Enter'); readln (a); if a='#' then break else writeln ('&'); until (a='#'); writeln('Конец'); end.Примечание: Если решить не получается или для лучшего понимания, см. этот видео-разбор
- Выведите на экран, все числа от $55$ до $9236$.
-
Сдавать решение не обязательно:
Исправьте форматирование кода:var f: integer; begin writeln('Введите целое число'); readln(f); if f < 25 then begin repeat if f mod 23 = 0 then begin f := f - 1; writeln(f); end else f := f - 2; until (f < 1); end else writeln('ошибка'); writeln('Конец!'); readln(); end.Примечание: Если решить не получается или для лучшего понимания, см. этот видео-разбор
- Пользователь вводит целое число, если оно больше единицы, то выведите на экран все целые числа от этого числа до единицы (в обратном порядке), которые делятся на $23$ без остатка. Иначе (если введённое пользователем число не больше единицы) сообщите об ошибке.
Как проверять:
- Если мы введем число 55, то программа должна вывести в ответ:
46 23
-- т.е. два числа
- Если мы введем число 5, то программа должна вывести в ответ ноль чисел (вообще ничего)
- Если мы введем число -4, то программа должна сообщить об ошибке
Подсказка: если не получается решить или для лучшего понимания см. этот видео-разбор данной задачи
- Если мы введем число 55, то программа должна вывести в ответ:
- Пользователь вводит в консоль символы (после каждого нажимая Enter), в ответ выводите символ '&', до тех пор пока пользователь не введёт '#', после чего завершите программу (не выводя ничего в ответ).
- Решите с помощью цикла repeat/until:
Выведите на экран, все четные числа, делящиеся на $3$ и на $6$ нацело , лежащие в диапазоне от 35 до 117. -
Решите с помощью цикла repeat/until:
Выведите на экран, все четные числа от 35 до 117 и нечетные числа, делящиеся на $7$ и $3$ нацело и при этом лежащие в диапазоне от 45 до 99.
Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции).
- Log in to post comments
- 52758 reads
vedro-compota
Tue, 09/25/2018 - 21:09
Permalink
обратный порядок с помощью repeat-until
Если непонятно, можно глянуть тут: http://fkn.ktu10.com/?q=node/8811
_____________
матфак вгу и остальная классика =)
Pages