- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •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
Условные операторы
Оператор If
Формат оператора:
<оператор If>::="If" <условие> "then" <оператор> ["else" <оператор>].
Здесь условие – это выражение, результат которого имеет тип Boolean. При выполнении оператора сначала вычисляется выражение условия. Если его значение True, выполняется оператор после слова then. Если False, выполняется оператор после слова else, либо ничего не выполняется, если часть условного оператора со словом else отсутствует.
Если в операторе If после слова then или после слова else нужно поместить более одного оператора, следует использовать составной оператор. Перед словом else нельзя ставить точку с запятой, т.к. слово else – продолжение оператора If, а не новый оператор.
При наличии вложенных операторов If действует правило: слово else относится к ближайшему слева оператору If, для которого нет слова, находящегося левее, чем рассматриваемое слово else.
Пример:
If A then
If B then
If C than D:=1
else D:=2
else D:=3;
Это выражение эквивалентно следующему:
If A then
begin
If B then
begin
If C than D:=1
else D:=2
end;
else D:=3;
end;
То есть, D получает значения в соответствии со следующей таблицей:
Значение A |
Значение B |
Значение C |
Значение D |
True |
True |
True |
1 |
True |
True |
False |
2 |
True |
False |
любое |
3 |
False |
любое |
любое |
не меняется |
Порядок выполнения вложенных операторов If можно изменить, используя составные операторы. Например:
If A then
begin
If B then
begin
If C than
D:=1
else D:=2
end;
end
else D:=3;
Здесь D получает значения в соответствии со следующей таблицей:
Значение A |
Значение B |
Значение C |
Значение D |
True |
True |
True |
1 |
True |
True |
False |
2 |
True |
False |
любое |
не меняется |
False |
любое |
любое |
3 |
Оператор If реализует в Паскале базовую алгоритмическую структуру ветвления.
Оператор Case
Формат оператора:
<оператор Case>::= "Case" <выражение> of <вариант> {";" <вариант>} "end".
<вариант>::= (<константа>|<диапазон>) {"," (<константа>|<диапазон>)} ":" <оператор>.
Выражение должно быть ординального типа, константы должны быть того же типа, что и выражение. Константы не должны повторяться и диапазоны констант не должны перекрываться ни в одном из вариантов в пределах одного оператора Case. Определение диапазона дано в соответствующем пункте ранее.
При выполнении оператора вначале вычисляется выражение, затем в вариантах отыскивается константа, равная значению выражения, или диапазон, в который входит значение выражения. Если такая константа или диапазон найдены, выполняется оператор после двоеточия в соответствующем варианте, затем происходит выход из оператора Case, т.е., операторы в вариантах, следующих за найденным вариантом, не выполняются.
Если ни в одной из альтернатив не найдено значение, соответствующее значению выражения, в стандартном Паскале фиксируется ошибка. В большинстве реализаций такая ситуация ошибкой не считается – в этом случае происходит выход из оператора Case без выполнения каких-либо действий.
Оператор в варианте может быть любым, в том числе, это может быть еще один оператор Case. Если в варианте нужно выполнить несколько операторов, их нужно поместить в составном операторе.
Во многих реализациях, в том числе, в Turbo Pascal, синтаксис оператора расширен следующим образом:
<оператор Case>::= "Case" <выражение> of <вариант> {";" <вариант>} ["else" <оператор>] "end".
То есть, после слова else можно добавить оператор, который будет выполнен, если ни в одном из вариантов не найдено значение, соответствующее значению выражения.
Пример:
............
Var d:0..20; c:'A'..'D';
i,j,k:integer;
............
Begin
............
d:=4; c:=b;
............
Case d div 2 of
0: i:=0;
1..4: begin i:=1; j:=k end;
2: Case c of
'A': i:=2;
'B': i:=3;
'C','D': i:=5
end
end;
............
end.