Цикл for: Pascal для начинающих

Основа программирования – циклы, например, for. Pascal. Как и любой компьютерный язык, он также содержит такие конструкции в своём синтаксисе.

Назначение циклических операторов

Типичная задача – заставить компьютер выполнять одно и то же действие несколько раз. Вот здесь и спасают конструкции, позволяющие организовать повторение кода. Итак, цикл в программировании – это многократно исполняемое действие, организуемое с помощью средств языка.

Язык программирования Pascal включает несколько таких конструкций:

  • for – повтор с параметром;
  • while – повтор с предусловием;
  • repeat ... until – повтор с постусловием.

Несмотря на кажущуюся простоту и очевидность циклических конструкций, начинающие программисты сталкиваются с рядом проблем при их реализации. Наибольшие сложности вызывает постановка условий выхода из цикла. В этом отношении счётный оператор for является самым незамысловатым.

Структура

Чтобы записать конструкцию повтора с параметром, нужно набрать следующий код:

FOR {a} := {b} TO {c} DO {d}.

В примере зарезервированные слова языка для удобства написаны заглавными буквами, на практике можно использовать строчное начертание. Используемые переменные и операторы приведены в фигурных скобках. Они означают:

  • {a} – переменная любого счётного типа, чаще всего INTEGER;
  • {b}, {c} – выражения счётного типа, такого же, как и {a};
  • {d} – произвольный оператор/операторы языка, называемые также телом цикла.

Отрабатывая конструкцию for, Pascal рассчитывает значение {b}, присваивает {a} := {c}, после чего запускается повтор действий:

  • проверка условия {b} <= {c}, при выполнении которого цикл останавливает свою работу;
  • запуск оператора {d};
  • увеличение значения {a} на единицу, то есть {a} := {a} + 1.

Поскольку количество повторений внутри тела for известно, данную конструкцию относят к детерминированным циклам.

Пример

Чтобы понять, как будет выполняться for, далее, приведён пример, кода на языке паскаль для «чайников».

  • s := 0;
  • for a := 1 to 5 do
  • begin
  • s := s + a;
  • end;
  • writeln(s);

Разбираясь в написанных инструкциях, можно записать значения в каждой итерации:

  • 1-я итерация: a = 1; s = 1;
  • 2-я итерация: a = 2; s = 3;
  • 3-я итерация: a = 3; s = 6;
  • 4-я итерация: a = 4; s = 10;
  • 5-я итерация: a = 5; s = 15.

В итоге пользователь увидит на экране число «15» – сумму чисел от 1 до 5.

Чтобы сделать первую программу более универсальной, следует заменить числа 1 и 5 переменными.

Частые ошибки

При использовании цикла for, Pascal требует внимательного отношения к значениям {a}, {b}, {c}. Если не выполнять правила написания программ, компилятор сообщит об ошибке. Таких правил пять.

  1. Счётчик (параметр цикла) {a} задаётся целым числом.
  2. Значения {b} и {c} также должны иметь целочисленный тип. Например, нужно просчитать значения угла, заданного в радианах от 0 до p. Но следующая запись кода будет неверной for a := 0 to pi do. Решение – использовать функции округления trunc() или round(). Первая отбрасывает дробную часть вещественного числа, вторая – округляет его до ближайшего целого.
  3. Если пользователь ошибся и указал {b} < {c}, оператор {d} ни разу не отработает.
  4. После выполнения цикла счётчик {a} может иметь любое значение. Хотя это противоречит логике, но на практике {a} <> {c}. Вывод: не рекомендуется обращаться к {a} после выполнения конструкции for.
  5. В теле цикла (то есть после слова do) не рекомендуется использовать какие-либо операторы, изменяющие значения параметра {a}. Следование данному правилу ошибки не вызовет, но будет нарушена логика программы.

Следующее правило является общепринятым и соответствует «хорошему тону» в программировании: чтобы было удобно работать с кодом, необходимо записывать операторы тела цикла не с первой колонки. Например, делая 2–3 пробела слева или используя клавишу Tab.

Данное предписание применимо не только к языку паскаль. Для «чайников» оно позволяет быстро найти и исправить ошибку в инструкциях.

Типичные задачи

Допустим, необходимо выполнить табуляцию функции вида f(x) = 3*x + 15, то есть получить таблицу из M значений функций в диапазоне [x1; x2], где x1 и x2 – минимальное и максимальные значения аргумента. Решать эту и подобные задачи помогает конструкция for. Pascal рекомендует записать программный код следующим способом:

  • for a := 1 to M do
  • begin
  • x:= x1+(x2–x1)*(a–1)/(M–1);
  • f:= 3*x + 15;
  • writeln (x, ‘ ’, f);
  • end.

Поскольку шаг изменения x не задан, значение аргумента рассчитывается в ходе программы при каждой итерации с помощью формулы: x:= x1+(x2–x1)*(a–1)/(M–1).

Цикл в цикле

Ввиду того, что внутри конструкции разрешается использовать любые операторы, допускается поместить в её тело ещё один цикл for. Pascal имеет стандартное описание для данной задачи, сходное с другими языками программирования:

  • FOR {a} := {b} TO {c} DO
  • FOR {a1} := {b1} TO {c1} DO

Чтобы конструкция работала верно, необходимо соблюдать условие: счётчики в каждом цикле должны быть разные. Иначе внутренний цикл будет менять значение параметра внешнего цикла, что приведёт к логическим ошибкам.

Комментарии