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