Цикл Repeat..Until.
Как уже было сказано, циклы с условием делятся на циклы с предусловием и на циклы с постусловием. В этой статье рассказывается об использовании цикла с постусловием Repeat. Until для написания программ на языке Pascal.
Предположим, нужно написать программу, в которой мы будем вводить с клавиатуры числа, и подсчитывать их сумму.
Цикл с постусловием Repeat..Until.
program ciklih4; uses crt; var sum, A:real; begin clrscr; SUM:=0; A:=0; repeat sum:=sum+A; write (‘Ведите число:’); readln (A); until AВ строке №3 запишем 2 переменные: «SUM» – для хранения суммы и «A» для хранения значения введенного нами числа.
В строке №6 обнуляем сумму. Каждый раз, когда в той или иной программе следует подсчитать сумму чего-нибудь, нужно сначала обнулить эту сумму.
В строке №7 указываем первоначальное значение для переменной «A».
В строке №8 записываем оператор цикла Repeat (от англ. «повторять»). Все действия, которые записаны после оператора Repeat (строка №9 - №11) будут выполняться до тех пор, пока не выполнится условие в строке №12 (Until в пер с англ. «до»), т.е. пока переменная «A» не станет отрицательным числом.
Таким образом, получается, что в цикле выполняется 3 действия (строка №9 - №11). Сначала подсчитывается сумма (строка №9). Она, первоначальна, равна 0, т.к. sum=0 и A=0. Затем выводится сообщение на экран (строка №10), затем мы вводим с клавиатуры какое-нибудь число, и оно записывается в переменную «A». Если мы вводим положительное число, то опять подсчитывается сумма (строка №9), только теперь значение переменной «A» равно не 0, а тому числу, которое мы введем с клавиатуры. Соответственно, и сумма (sum) увеличится на это число.
При вводе положительных чисел, программа будет продолжать работать. Как только мы введем отрицательное число, цикл перестанет работать, и на экран выведится сумма всех введенных с клавиатуры чисел.
Дополнение к материалу.
Конструкция Repeat. Until подобна операторным скобкам Begin. End. Поэтому перед Until не обязательно ставить точку с запятой. Т. е. в конце строки №11 можно пропустить точку с зяпятой без каких-либо последствий для программы.
Следует сказать, что для решения одних и тех же задач программирования можно использовать как циклы с предусловием, так и циклы с постусловием. Выбор того или иного варианта во многом будет зависеть от ваших личных предпочтений.
#12.1 Цикл 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 (aRepeat/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.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.Если мы введем число 55, то программа должна вывести в ответ:
46 23Подсказка: если не получается решить или для лучшего понимания см. этот видео-разбор данной задачи
Key Words for FKN + antitotal forum (CS VSU):
- Паскаль цикл repeat until примеры
- Паскаль отличия цикла while от repeat-until
Until паскаль что означает
Операторы между словами repeat и until повторяются до тех пор, пока булево выражение является Истинным ( True ).
Синтаксис
repeat
Оператор;
Оператор;
.
Оператор;
until выражениеЗамечания
Последовательность операторов выполнится по крайней мере один раз!
Пример
repeat
Write('Введите значение : ');
ReadLn(I);
until (I >= 0) and (IАда
Аналогом repeat-until является loop-end-loop со встроенным exit-when :
loop
Get_Immediate (Ch);
exit when Ch /= ' ';
end loop;loop
Put ("Введите значение : ");
I := Integer'Value (Get_Line);
exit when I in 0 .. 9;
end loop;Бывает так, что проверку условия нужно делать не в начале цикла и не в конце, а именно где–то посередине:
loop
Put ("Введите значение : ");
I := Integer'Value (Get_Line);
exit when I = 0;
Put_Line ("Результат :" & Integer'Image (I + 1));
end loop;Выход по нулю или по пустой строке особенно частая ситуация в учебных программах. В Borland Pascal нужно писать цикл while , а операцию считывания дублировать до while и в конце:
< Это Паскаль >
Write('Введите значение : ');
ReadLn(I);
while I <> 0 do
begin
WriteLn('Результат : ', I + 1);
Write('Введите значение : ');
ReadLn(I);
end;Либо имитировать оператор языка Ада с помощью if then Break внутри while True do или repeat until False.
Pascal. Оператор цикла REPEAT-UNTILL.
То есть цикл сначала проверяет истина ли условие или нет, и если истина, то выполняет операторы заключённые в цикле, если условие ложно, то он не выполняет операторы в цикле.
Бывают случаи в программировании, когда нужно выполнить операторы в цикле последний раз, даже если условие будет ложно.
Для этого используется цикл repeat-until, он сначала выполняет операторы, а потом проверяет условие. Давайте рассмотрим конструкцию этого цикла:
REPEAT оператор(группа операторов); UNTIL (условие); ПОВТОРЯЙ оператор(группа операторов); ДО (тех пор, пока условие не будет верным);Давайте попробуем написать программу, которая в цикле считывала бы с клавиатуры данные, а именно число, и в специальную переменную заносила бы сумму, этого числа, и этой переменной, и когда сумма стала бы равна или больше десяти, то цикл бы остановился:
Program repeat_until; uses crt; var num, sum: Integer; begin clrscr; repeat write('Введите число - '); readln(num); sum := sum + num; until (sum >= 10); write('Сумма чисел равна - ', sum); readln; end.