Цикл с параметром. Структура и синтаксис оператора for
Рассмотрим в качестве примера несложную задачу: найти сумму первых ста положительных целых чисел: S = 1 + 2 + 3 + … + 99 + 100.
Алгоритм решения может быть представлен в виде:
РИСУНОК
Переменная i играет в этом алгоритме двоякую роль: с одной стороны, она является счётчиком числа повторений цикла. При этом до начала цикла ей присваивается определённое начальное значение: i := 1; на каждой итерации её значение увеличивается на единицу i := i + 1; и, кроме того, очередная итерация выполняется лишь в том случае, если значение i не превысило конечное значение: i £ 100.
С другой стороны, переменная i представляет собой очередное слагаемое искомой суммы, поэтому именно она добавляется в теле цикла к переменной S, в которой и накапливается эта сумма.
Чтобы показать более наглядно различие двух этих сторон использования переменной i, слегка изменим условие задачи: найти сумму первых ста положительных нечётных чисел: S = 1 + 3 + 5 + … + 197 + 199. Пронумеруем слагаемые, входящие в сумму:
№ слагаемого | … | |||||
Слагаемое | … |
Общая структура алгоритма останется той же, что и в предыдущем примере: необходимо «пробежаться» по всем слагаемым, с первого по сотое, и накапливать их кумулятивную сумму в переменной S. Точно так же, переменной i можно придать смысл счётчика числа повторов цикла (т.е. счётчика слагаемых), однако в выражении для накапливания суммы теперь нельзя просто использовать i, поскольку теперь значение слагаемого отличается от его порядкового номера. Рассматривая приведённую выше таблицу несложно заметить, что между номером слагаемого и его значением существует функциональная связь:
.
Таким образом, схема алгоритма для данного примера примет вид:
РИСУНОК
Точно так же, как и в предыдущем случае, здесь присутствует переменная-счётчик числа повторений, которой до первого попадания в цикл присваивается начальное значение, на каждой итерации производится приращение счётчика на единицу, и цикл повторяется до тех пор, пока счётчик не превысит некоторое конечное значение.
На практике довольно часто возникают задачи, аналогичные по структуре рассмотренным выше, т.е. задачи программирования циклических алгоритмов, для которых число повторений известно заранее. И хотя они могут быть запрограммированы с использованием изученных ранее циклов типа while или repeat..until, здесь целесообразнее использовать специальный оператор цикла, который в Паскале называется оператор цикла с параметром for. С его помощью реализуются циклы, количество повторений которых заранее известно или может быть определено до начала выполнения цикла.
В общем виде алгоритмическая структура этого оператора имеет вид:
РИСУНОК
Синтаксически оператор for имеет вид:
for переменная_цикла := нач_знач to конечн_знач do оператор;
Переменная цикла в процессе выполнения цикла принимает все возможные значения в диапазоне от начального до конечного, увеличиваясь на единицу по завершении очередной итерации. Начальное и конечное значения фактически определяют число повторений оператора, образующего тело цикла.
Существует еще одна форма оператора for:
for переменная_цикла := нач_знач downto конечн_знач do оператор;
В этом случае переменная цикла после каждой итерации не увеличивает, а уменьшает свое значение на единицу (предполагается, что ее начальное значение должно быть больше конечного).
Оператор for также относится к циклам с предусловием.
Примеры программирования итерационных алгоритмов
Пример 1. Вычислить y = x^n путем многократного умножения (n- целое положительное число).
Program Mult;
Var x,y : real;
i,n : word;
Begin
Ввод и печать x,n
y:=x;
For i:=1 to n do y:=y*x;
Печать y
End.
Раздел №13 (2 часа)
Диапазонный тип данных. Массивы
План:
• Понятие диапазонного типа данных
• Массивы. Описание и использование массивов
13. Диапазонный тип данных. Массивы
Диапазонные типы данных
С помощью диапазонного типа программист может объявить новый ординальный тип как часть ранее определенного типа, который в этом случае называют базовым. Диапазон определяется указанием наименьшего и наибольшего постоянного значения, входящего в диапазон.
Синтаксис объявления можно пояснить следующими примерами:
Type
Positive = 1 .. MaxInt;
Natural = 0 .. MaxInt;
Rist = -20 .. 20;
Parn = 'a' .. 'k';
В этих примерах MaxInt – предопределённая константа, соответствующая максимальному целому числу, допустимому для используемой платформы/компилятора.
Использование диапазонных типов данных позволяет, с одной стороны, экономить память, а с другой, – контролировать значения переменных диапазонного типа, предотвращая их выход за установленный диапазон.