Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
В отличие от цикла for циклы while (оператор цикла с предусловием) и repeat (оператор цикла с постусловием) позволяют повторять выполнение тех или иных операторов не фиксированное количество раз, а только пока выполняется некоторое условие. Структура записи этих операторов выглядит следующим образом:
while <условие> do begin <Операторы> end;
<Условие> — любое логическое выражение.
<Операторы> — любые операторы.
Перед каждым выполнением тела цикла анализируется значение выражения <условие>. Если оно истинно (true), выполняется тело цикла. Затем снова проверяется условие и т.д. Если значение условия ложно (false), то работа цикла завершается. Если результат условие окажется ложным при первой проверке, то тело цикла не выполнится ни разу.
Цикл repeat работает похожим образом, однако в нем условие проверяется в конце цикла (после выполнения каждого шага). Структура записи оператора выглядит следующим образом:
repeat <Операторы> until <Условие>;
Один раз тело цикла будет выполнено в любом случае. Затем будет проверено условие и, если оно истинно, то выполнение цикла повторится. Повторение продолжается пока не выполнится условие, стоящее после слова until («пока не»). Таким образом, если в цикле while мы задаем условие для продолжения повторений, то в случае repeat‘а ставится условие на прекращение повторений.
Ниже работа обоих циклов показано с помощью блок-схем.
Рис. 1. Блок-схемы работы циклов while (а) и repeat (б).
Пример 1: Имитация работы цикла for.
Циклы с условиями более универсальны, чем for. С их помощью можно легко сделать все то же самое только об изменении значения переменной счетчика придется позаботиться самостоятельно. В качестве примера напечатаем числа от 1 до 10.
i:=1; while i<=10 do begin writeln(i); i:=i+1; end; |
i:=1; repeat writeln(i); i:=i+1; until i>10; |
Заметим, что в отличие от цикла for, где увеличение счетчика всегда происходит на единицу, здесь мы сами управляем счетчиком и можем организовать увеличение на любую требуемую величину. Так в следующем примере используется увеличение счетчика на 2.
Пример 2: Напечатайте все нечетные числа от 3 до 25.
i:=3; while i<=25 do begin writeln(i); i:=i+2; end;
В большинстве случаев циклы while и repeat взаимозаменяемы. Цикл repeat предпочтительнее, если известно, что тело цикла необходимо выполнить хотя бы один раз.
Следующий раздел:
Предыдущий раздел:
Доброго времени суток! Хотелось бы уточнить одну деталь: мне показалось что во второй схеме цикл заканчивает работу в том случае, если условие не выполняется, на схеме же цикл заканчивается при выполнении условия.
Все, понял, я нуп и апазорилсо ) Извиняюсь )
Я так понимаю, что в цикле while если мне надо напечатать повтор фразы то i он будет учитывать сразу i:=i+1 не считая начального значения, а в цикле repeat считается и начальное значение i и дальше с шагом указанным.
program zd40;
var i:integer;
begin
i:=1;
repeat
i:=i+1;
writeln(‘Hello’);
until i>10
end. И ещё одно, если until i>10 то мне ещё делает цикл когда i=10 ? а если бы стоял знак >= то 10 не учитывалось бы ? так ?
{program zd40;
var i:integer;
begin
i:=0;
while i<10 do
begin
writeln('Hello');
i:=i+1
end;
end. } в 2-х случаях мне напишет 10 раз, просто в одном случае i:=0 потому как первое i начинается сразу с шага I+1
и да, ещё заметил, что если поставить writeln выше или ниже, будет менятся показание i. Но всё равно будет 10 раз напечатно hello. т.е (i,’ hello’); если стоит выше то 1-10. А если ниже то от 2 до 11, почему так?
>> Я так понимаю, что в цикле while если мне надо напечатать повтор фразы то i он будет учитывать сразу i:=i+1 не считая начального значения, а в цикле repeat считается и начальное значение i и дальше с шагом указанным.
Не совсем понял вопрос. Приведи пример, когда непонятно, как что-то работает.
>> end. И ещё одно, если until i>10 то мне ещё делает цикл когда i=10 ? а если бы стоял знак >= то 10 не учитывалось бы ? так ?
Да, так. Важно, чему i равно на момент проверки условия. В твоем примере с repeat’ом сначала делается i:=i+1, а только потом проверяется условие i > 10. В примере с while’ом — сначала проверяется условие, а только потом увеличивается i.
>> и да, ещё заметил, что если поставить writeln выше или ниже, будет менятся показание i. Но всё равно будет 10 раз напечатно hello. т.е (i,’ hello’); если стоит выше то 1-10. А если ниже то от 2 до 11, почему так?
Операторы в цикле выполняются последовательно. Ставишь writeln ниже и сначала i увеличивается на 1. Выше, и сначала оно печатается, а только потом увеличивается.
В for’е счетчик увеличивался автоматически в конце тела цикла. Здесь ты сам пишешь оператор его увеличивающий. Соответственно, ставишь его, куда хочешь. Можно в начало, можно в конец или в середину цикла.
спасибо) насчёт первого вопроса, это я уже понял)
мне завтра на олимпиаду. никто не знает какого типа там будут задания??? 10 кл.
Спасибо автору. Как-то забросил информатику, а тут понял тему.
Операторы цикла и их сравнительный анализ…,,,???