Nota10

Уроки · BAC · Информатика

Циклические структуры: for, while и repeat

Тема из тестов ANCE: Циклические структуры

Тема II требует проследить, что выведет цикл, заменить for на while и написать программу с повторением. Здесь три оператора на двух языках, техника таблицы трассировки и баллы, которые дает барем.

Читать урок на румынском

Что нужно знать

Три циклических оператора

Что делаетПаскальC++
повторение со счетчикомfor i := 1 to n dofor (i = 1; i <= n; i++)
повторение покаwhile cond dowhile (cond)
повторение доrepeat ... until cond;do { ... } while (cond);

У оператора for счетчик, начальное и конечное значения записаны в заголовке, а число повторений известно заранее: от до тело выполняется раз. while проверяет условие перед каждым повторением, поэтому может не выполниться ни разу. repeat проверяет в конце, поэтому его тело выполняется хотя бы один раз; учти, что until останавливает цикл, когда условие становится истинным, а while продолжает, пока оно истинно.

Тело цикла
Если повторяешь больше одной инструкции, нужен begin ... end; в Паскале и фигурные скобки в C++. Без них повторяется только первая инструкция, а остальные выполняются один раз, после цикла.

Замена for на while
Именно это требуют тесты, и барем оценивает замену по элементам:

  1. 1)присваивание начального значения счетчику, до цикла
  2. 2)условие в while, с той же границей, что была в for
  3. 3)составной оператор со всеми инструкциями тела
  4. 4)увеличение счетчика внутри тела

Без увеличения цикл не остановится, а без начального присваивания счетчик стартует с неопределенного значения.

for i := 1 to 5 do
 begin
  read(x);
  s := s + x;
 end;
i := 1;
while i <= 5 do
 begin
  read(x);
  s := s + x;
  i := i + 1;
 end;

Таблица трассировки
Когда спрашивают, что выведет программа, составь таблицу: по столбцу на каждую переменную и по строке на каждое повторение. Записывай и то, что выводится, по порядку. Это единственный способ не потерять итерацию.

Приемы, которые повторяются в тестах

  • сумма и подсчет: s := s + x, k := k + 1
  • цифры числа: n mod 10 дает последнюю цифру, n div 10 отбрасывает ее, цикл идет while n > 0; при цикл не выполняется ни разу, поэтому этот случай разбирают отдельно
  • последовательные степени: p := 1, затем p := p * a, пока p <= Q
  • продвижение с откатом (улитка в колодце): днем dist := dist + x, ночью, если не вышла, dist := dist - y
  • вывод по столбцам: write(i:5) выравнивает по пяти позициям, writeln переводит строку

Что именно выводится
write оставляет курсор на той же строке, writeln переводит его на следующую. Если программа пишет write('s=', s), то в ответ входит и префикс s=, а не только значение: формат — часть ответа.

Остальная часть урока доступна по подписке

Настоящие задания ANCE по этой теме, разбор примера шаг за шагом, типичные ошибки и 7 вопросов для самопроверки открываются по подписке. «Что нужно знать» остаётся бесплатным.

Открывается по подписке

  • Как это бывает на экзамене
  • Разбор примера
  • Типичные ошибки
  • Проверь себя

Проверь свой уровень бесплатно