Какие есть отличия оператора while от оператора repeat
На предыдущем уроке было показано, как использовать оператор цикла с параметром For.
В этом уроке Вы познакомитесь с операторами цикла с условием.
Операторы цикла с условием используются тогда, когда число повторений тела цикла заранее неизвестно, а задано лишь условие повторения (или окончания) цикла.
Оператор цикла с условием содержит две части: условие и тело цикла. В зависимости от их взаимного расположения, различают две разновидности циклов с условием: циклы с предусловием и циклы с постусловием.
В языке программирования Паскаль для организации циклов с условием используются операторы While и Repeat.
Оператор цикла с предусловием While
Оператор while (пока) называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора, до операторов тела цикла. Если условие изначально не выполнится, то операторы тела цикла не выполнятся ни разу.
Формат оператора:
На русском языке это звучит примерно так:
пока выполняется условие делай
начало
<тело цикла>
конец
Алгоритм выполнения оператора:
- Проверяется условие выполнения цикла (вычисляется булевское выражение).
- Если условие выполняется (значение выражения равно true), то выполняются операторы, составляющие тело цикла.
- Если условие не выполняется (значение выражения равно false), то происходит выход из цикла и переход к первому после while оператора.
При использовании цикла с предусловием надо помнить следующее:
- Начальное значение переменной цикла нужно присвоить до начала выполнения цикла.
- Условие продолжения цикла должно зависеть от значения переменной цикла.
- Переменная цикла должна изменяться при каждом новом выполнении цикла, иначе цикл будет повторяться бесконечное число раз.
Пример. Составить программу для нахождения суммы 10 произвольных чисел, введенных с клавиатуры.
В данном примере перед циклом обнуляются значение счетчика введенных чисел k и их суммы sum.
В начале оператора while проверяется условие k < 10.
Если условие верно, то выполняется составной оператор в теле цикла. В этом операторе вводится значение очередного числа, и на это значение увеличивается значение суммы. После этого управление в программе вновь передается оператору цикла while, опять проверяется условие k < 10.
Как только значение станет равно 10, выполнение цикла завершиться, а управление будет передано на оператор, находящийся за словом end, т. е. первый оператор за границей while.
Оператор цикла с постусловием repeat
Оператор цикла repeat аналогичен оператору while, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения тела цикла (за это и называется циклом с постусловием) и таким образом гарантируется хотя бы однократное выполнение цикла, а во-вторых, тем, что выполнение условия (равенство булевского выражения константе true) является критерием не повторения, а прекращения цикла.
где Repeat (повторять), until (до тех пор).
Обратите внимание на то, что данный оператор цикла предполагает несколько операторов в теле цикла, поэтому операторные скобки begin и end не нужны.
- Выполняется тело цикла (операторы, заключенные между словами repeat / until).
- Проверяется условие выхода из цикла.
- Если условие выполняется, то происходит выход из цикла к первому после repeat оператору.
- Если условие не выполняется, то алгоритм повторяется с пункта 1.
Пример. Составить программу, которая будет вводить и суммировать любое количество чисел. Если будет введено число 999, на экран вывести результат суммирования.
Для решения этой задачи сначало нужно ввести число, а потом проверить его значение (проверить условие выхода из цикла). Для этого нужен цикл с постусловием.
Коротко о главном
1. Операторы While Repeat используют в тех случаях, когда заранее неизвестно число повторений тела цикла или шаг отличен от 1.
2. При организации циклов с проверкой условия обязательно нужно указать:
- начальное значение параметра цикла;
- условие, при котором действия должны выполняться;
- приращение параметра цикла.
На следующем уроке рассмотрим применение циклов в задачах на целочисленную арифметику.
Чем отличаются while . do от repeat. until в Паскале именно по выполнению? Ведь одно можно заменить другим. (Я понимаю, что while . do делает действие, пока выполняется условие послеwhile, а repeat . until выполняется наоборот, пока не выполнится условие после until.)
Допустим, while a<>2 do smth можно ведь заменить на:
repeat smth until a=2
repeat всегда выполнит хотя бы одну итерацию, а вот while может и не выполнить ни одной, если условие неподходящее.
То есть, допустим:
a := 0
while a<=3 do
inc(a);
После этого a=3, но
a := 0
repeat
inc(a);
until a>3
после этого a будет равно 4?
Можете
на каком-нибудь примере показать различие, а то я ерунду полнейшую написал.
Metotron Искусственный Интеллект (113117) a : = 0; repeat dec(a); until a < 10; Выполнится один раз while a > 10 do dec(a); Не выполнится ни разу Хотя и там и там условие остановки цикла сразу подходит под значение a.
repeat гарантированно войдет в тело цикла хотя бы раз. while не войдет ни разу, если условие false
То есть, в других случаях различий абсолютно никаких?
Metotron Искусственный Интеллект (113117) В других случаях и то и то является циклом, они выполняют одну функцию.
А что здесь понимать? Цикл while иначе называется циклом с предусkовием, а цикл repeat с постусловием. Это означает, что в цикле while условие проверяется ДО начала выполнения операторов цикла, а в цикле repeat ПОСЛЕ. Это и есть ключевое отличие этих циклов, т. к. операторы тела цикла while могут не выполниться ни одного раза, если не будет выполнено условие входа в цикл. Опрераторы же тела цикла repeat выполняются по-крайней мере один раз.
Выполнение цикла while происходит при истинности условия. Т. е. цикл: while True do; будет "бесконечным". Цикл repeat выполняется пока условие ложно. "Бесконечный" цикл с repeat будет выглядеть так: repeat until False;
a:=10
While a<10 do
Begin
Writeln(a);
Inc(a);
End;
Я репит не люблю, и по этому плохо помню его структуру. Репит безполезный цикл.. .
a:=10;
Reteat
Begin
Writeln(a);
Inc(a);
End;
Until (a<10);
begin
end;
- это оператор с предусловием. т. е. сначала проверяется условие, а затем выполняется команда. Если условие ложно, команда не выполнится никогда.
repeat
begin
end
until (boolean);
- оператор с постусловием, т. е. сначала выполняется команда, а затем проверяется условие, и, если оно ложно, выполнение прекращается. здесь команда будет выполнена ХОТЯ БЫ один раз.
Во-первых, не repead, а repeat. Это операторы цикла с предусловием и постусловием.
С предусловием:
While <условие> do <оператор>;
Пока условие истинно, выполняется оператор (простой или составной, если составной, это несколько действий, заключенных в операторные скобки begin. end;)
С постусловием:
Repeat
<тeло цикла>
until условие<>;
Выполнять цикл до тех пор, пока не выполнится условие.. .
Отличие этих циклов - первый работает, пока выполняется условие, выход из цикла, когда условие перестанет выполняться, он может вообще ни разу не выполнится, если условие ложно. Второй цикл сработает по крайней мере один раз и будет работать, пока условие ложно, выход из цикла, когда условие наконец станет истинным.
Например выведем на экран четные числа из интервала от 10 до 20:
WHILE (цикл работает, действия повторяются пока условия истинны)
.
i:=10;
while i<=20 do
begin
writeln(i);
i:=i+2; (четные чила)
end;
.
REPEAT (действия повторяются до выполнения условий)
.
i:=10;
repeat
writeln(i);
i:=i+2; (четные числа)
untilе i>20;
end;
.
1. Циклы нужны для сокращения количества строк кода, экономии памяти компьютера и нервов программиста в случае, когда необходимо повторять подобные действия много раз.
2. а) должны быть четко обозначены границы переменной, отвечающие за вход и выход из цикла б) необходимо определить, каким образом эта переменная будет изменяться по ходу цикла.
3. В цикле while условие ставится в начале, а в repeat в конце. То есть repeat 100% пройдет хотябы 1 раз, а while может и ни разу.
4. В заголовке ставится условие. Пока оно выдает true, цикл будет повторяться. На счёт предпочтительности сложнее. Я бы сказала, что практически всегда предпочтительнее while, тк за всю свою практику лично мне хорошо если раз 5 пришлось использовать repeat. В общем предпочтительнее всегда использовать while за исключением некоторых очень редких случаев, когда с его помощью невозможно решить поставленную задачу (т.е. необходимо хотябы одно повторение).
Хотя если сравнивать с циклом for, то for чаще всего используется при наращивании управляющей переменной численного типа. То есть while часто используется, когда управляющая переменная булева типа.
5. Описывается прямо в теле цикла.
6. Тут мне сложно ответить. Я так понимаю, у вас речь про Pascal, а я могу только в C++ и Java. В этом вопросе вроде есть различия.
Читайте также: