- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •Var a,b,c: Real; {описаны переменные вещественного типа}
- •I,j,k,l,m,n:Integer; {описаны переменные целого типа}
- •Оператор присваивания
- •Условные операторы
- •Оператор If
- •Оператор Case
- •Операторы цикла
- •Цикл While
- •Цикл Repeat-Until
- •Цикл For
- •Оператор безусловного перехода и метки
- •Пустой оператор
- •1: End; {конец тела цикла с помеченным пустым оператором}
- •Процедуры и функции
- •Описание
- •Список формальных параметров
- •Вызов процедур и функций
- •Локализация (области видимости) имен. Глобальные и локальные объявления.
- •Статическое и динамическое выделение памяти переменным
- •Рекурсия и опережающее описание
- •Стандартные функции
- •Стандартные процедуры
- •Стандартный ввод-вывод
- •Сложные типы данных и их использование
- •Квалификаторы
- •Конструкция записи, тип записи и переменная типа запись
- •Id:Person; {личные данные}
- •Id:Person; {личные данные}
- •Index: Ch; {Название/номер группы}
- •Использование записей в программе
- •Оператор With
- •Записи с вариантными полями
- •0:(I:Integer) {Два байта как одно поле Integer}
- •1:(Lo,hi:Char); {отдельно младш. И старш. Байты}
- •Var e: Integer; {в этой переменной будем менять байты}
- •Указатели и динамические структуры данных
- •Определение и описание
- •I:integer; {Информационное поле}
- •Var p,q:Point; {переменные-указатели на записи типа Rec}
- •Использование указателей и динамических переменных
- •Создание и уничтожение динамических переменных
- •Простейшие динамические структуры
- •Множества
- •Назначение и описание
- •Константы типа множество
- •Операции с множествами
- •Назначение и описание
- •Работа с файлами
- •Файлы типа Text
Операторы цикла
Цикл While
<цикл While>::="While" <условие> "do" [<оператор>].
Здесь условие – выражение типа Boolean, оператор – любой оператор. Оператор, вложенный в цикл, называют также телом цикла. Выполнение цикла: вычисляется выражение, являющееся условием цикла. Если его значение False, происходит выход из цикла. Если его значение True, выполняется оператор после слова do, и цикл повторяется сначала. Цикл While – это цикл с предусловием.
Примеры:
While True do;
Этот цикл выполняется "вечно". После слова do нет оператора, что допускается синтаксисом. Однако можно считать, что между словом do и точкой с запятой помещен так называемый пустой оператор, описанный далее.
i:=100; S:=0;
While i>10 do begin
S:=S+i;
i:=i–1
end;
В этом цикле в переменной S накапливается сумма чисел от 100 до 11, в то время, как переменная i уменьшается от 100 до 11. Когда переменная i становится равной 10, происходит выход из цикла, и число 10 не добавляется к сумме. Если оператор i:=i–1 поставить перед S:=S+i, в цикле будут суммироваться числа от 99 до 10.
Если первый оператор в этом примере будет i:=10, цикл не выполнится ни разу, потому что выражение условия будет иметь значение False. После проверки условия будет выполняться оператор, следующий за циклом.
Цикл Repeat-Until
<цикл Repeat-Until>::="Repeat" [<оператор>] {";"<оператор>} "Until" <условие>.
Здесь условие – выражение типа Boolean, а оператор – любой оператор.
Выполнение цикла: выполняются операторы между ключевыми словами Repeat и Until (эти операторы называют также телом цикла), затем вычисляется условие. Если его значение False, цикл повторяется сначала. Если его значение True, происходит выход из цикла. Оператор Repeat-Until реализует цикл с послеусловием.
Примеры:
Repeat Until False;
Этот цикл выполняется "вечно".
i:=100; S:=0;
Repeat
S:=S+i;
i:=i–1
Until i<10;
В этом цикле в переменной S накапливается сумма чисел от 100 до 9, а переменная i уменьшается от 100 до 9. Когда переменная i становится равной 9, происходит выход из цикла, число 9 также добавляется к сумме.
Если первый оператор в этом примере будет i:=10, цикл выполнится два раза, и в переменной S будет сумма 10+9. При i:=9 цикл выполнится 1 раз, и в переменной S будет 9. Вообще, при любом начальном значении i, меньшем 10, цикл выполнится 1 раз, и в переменной будет записано начальное значение переменной i, а сама переменная i будет уменьшена на единицу.
Цикл For
<цикл For>::= "For" <параметр> ":=" <выражение> ("to" | "downto") <выражение> "do" <оператор>.
Здесь параметр – это параметр цикла, то есть, переменная, автоматически изменяющаяся в процессе работы цикла. Параметр может быть переменной любого ординального типа. Оба выражения – того же типа, что и параметр, или совместимого типа. Оператор – любой оператор. Оператор, вложенный в цикл, называют также телом цикла.
Выполнение цикла происходит следующим образом.
Перед началом цикла вычисляется первое выражение, и его значение заносится в параметр. Также вычисляется и запоминается значение второго выражения. После этого начинается выполнение цикла.
Вначале значение параметра сравнивается со значением второго выражения. Если в цикле использовано слово to, и значение параметра меньше, либо равно значению второго выражения, выполняется оператор тела цикла. В цикле со словом downto тело цикла выполняется в том случае, если при сравнении значение параметра оказалось больше, чем значение второго выражения.
После выполнения тела цикла изменяется значение параметра цикла. Если в цикле использовано слово to, значение параметра увеличивается на одно ординальное значение, если использовано слово downto, значение параметра уменьшается на одно ординальное значение. После этого происходит переход к началу цикла, то есть, к сравнению параметра со значением второго выражения.
Если при сравнении в цикле со словом to значение параметра больше значения второго выражения, а в цикле со словом downto значение параметра меньше, чем значение второго выражения, происходит выход из цикла.
Обычно считается, что значение параметра после выхода из цикла For становится неопределенным. Однако в некоторых реализациях значение параметра после выхода из цикла равно его значению на последнем проходе цикла, либо равно значению после последнего изменению параметра.
Таким образом, цикл For – это разновидность цикла с предусловием. Кроме того, он называется циклом с параметром, поскольку у него есть автоматически изменяемая переменная-параметр. Цикл For со словом to называют также инкрементным циклом, а со словом downto – декрементным циклом. В Паскале в цикле с параметром шаг изменения параметра всегда равен одному ординальному значению. В некоторых языках программирования параметр может быть вещественной переменной, а шаг может быть произвольным, но в Паскале это не так, и для аналогичных задач нужно использовать цикл While или Until.
Примеры:
S:=0;
For i=100 downto 10 do S:=S+i;
В этом цикле в переменной S накапливается сумма чисел от 100 до 10, в то время, как переменная i неявно уменьшается от 100 до 10. Когда переменная i становится равной 9, происходит выход из цикла, и число 9 не добавляется к сумме. После выхода из цикла переменная i либо имеет неопределенное значение, либо имеет значение 9, либо имеет значение 10 – в зависимости от реализации.
S:=0;
For i=10 to 100 do S:=S+i;
В этом цикле в переменной S накапливается сумма чисел от 10 до 100, а переменная i увеличивается от 10 до 100. Когда переменная i становится равной 101, происходит выход из цикла, и число 9 не добавляется к сумме.