#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
- 51544 reads
vedro-compota
Tue, 09/25/2018 - 21:09
Permalink
обратный порядок с помощью repeat-until
Если непонятно, можно глянуть тут: http://fkn.ktu10.com/?q=node/8811
_____________
матфак вгу и остальная классика =)
Pages