- •Основы языка Pascal Историческая справка и основные свойства языка Pascal
- •Структура простейшей программы
- •Раздел описаний
- •Раздел операторов
- •Типы данных. Операции и функции над данными разных типов Концепция типов данных
- •2. Символьный тип
- •3. Логические типы
- •4. Перечислимый тип
- •Вещественные числа
- •Правила преобразования типов
- •Функции преобразования типов:
- •Цепочка if-else-if
- •Операторы повторений
- •Счетный цикл
- •Пример использования цикла for
- •Оператор цикла с предусловием (while)
- •Пример использования цикла while
- •Оператор цикла с постусловием (repeat)
- •Пример использования цикла repeat
Цепочка if-else-if
Одна из распространенных программных конструкций, основанных на последовательности вложенных операторов IF – это цепочка if-else-if. Выглядит она так:
IF <логическое выражение>
Then оператор;
else if <логическое выражение>
Then оператор1;
Else if <логическое выражение>
Then оператор2;
……
else операторN;
Порядок работы:
Логические выражения вычисляются сверху вниз. Как только одно из условий, управляющих таким if, оказывается равным true, тогда выполняется связанный с ним оператор, а оставшаяся часть цепочки пропускается. Если все логические выражения = false, то выполнятся операторN. Если конечный операторN отсутствует, то не выполняется никаких действий.
Пример: Задано целое число Y. Вычислить новое значение Y по правилу:
Y =
Решение. Сначала составим программу без использования цепочки if-else-if. Попробуем реализовать правило вычисления Y «в лоб»:
Program myif;
Var y:real;
Begin
Writeln (‘Введите y ’); readln(y);
If Y>2 then Y:=Y/10;
If y<0 then Y:=sqr(Y)
Else Y:=-10*Y;
Writeln(‘Результат Y = ’,Y:0:3);
End.
Проанализируем работу программы при:
1) Y = -1.
В первом операторе IF выражение Y>2 дает значение false, поэтому ветка Then пропускается. Второй оператор If при вычислении выражения Y<0 получает значение True и результирующее значение Y вычисляется в операторе Y:=sqr(Y). Ветка Else этого оператора IF пропускается. Ответ соответствует условию.
2) Y=10.
В первом операторе IF выражение Y>2 дает значение True, происходит переход к оператору, относящемуся к ветке Then. Вычисляется выражение 10/10 и Y := 1, т.е. ответ уже получен. Далее по правилам выполнения программ происходит переход к следующему после IF оператору – второму оператору If. При вычислении выражения Y<0 (1<0) получается значение False и происходит переход на ветку Else. Выполняется оператор Y:=-10*Y (Y:=-10*1) и Y := -10. Т.о., вторично изменяется значение Y, что не соответствует условию.
Исправить эту ошибку можно, применив цепочку if-else-if. Тогда текст программы будет следующий:
Program myif;
Var y:real;
Begin
Writeln (‘Введите y ’); readln(y);
If Y>2 then Y:=Y/10
Else If y<0 then Y:=sqr(Y)
Else Y:=-10*Y;
Writeln(‘Результат Y = ’,Y:0:3);
End.
Теперь при Y=0 выражение Y>2 дает True, выполняется оператор, стоящий на ветке Then : Y:=10/10 (=1). Второй оператор If теперь относится к ветке Else и пропускается. Т.о., результат соответствует условию.
Операторы повторений
В языке Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты алгоритмов:
Счетный цикл (цикл с параметром) – FOR
Цикл с предусловием (цикл «пока»)– WHILE
Цикл с постусловием (цикл «до»)– REPEAT
Счетный цикл
Используется тогда, когда в программе требуется организовать повторение определенных действий известное число раз. Для подсчета количества повторений используется переменная цикла. Этот цикл в Паскале требует соблюдения наибольшего числа ограничений и поэтому из всех циклов применять его наиболее сложно.
Оператор цикла с параметром имеет такую структуру:
F
or
<имя переменной>:=<выражение1>
To <выражение2>
Do
<оператор>;
Здесь:
<имя переменной> - параметр цикла
<выражение1> - начальное значение параметра цикла
<выражение2> - конечное значение параметра цикла
Все три эти объекта должны быть одного порядкового типа.
<оператор> - тело цикла.
Пример написания оператора:
For I := 1 to 10 do writeln(I); - выполняет повторение вывода на экран значения параметра цикла с переводом строки.
Правила работы:
1. Вычисляются значения выражения 1 и выражения 2.
2. Параметру цикла присваивается начальное значение (в примере I:=1).
3. Параметр цикла сравнивается с конечным значением (10). Если параметр цикла меньше или равен конечному значению, то перейти к п.4, иначе - конец цикла (переход на следующий оператор после оператора цикла).
4. Выполняется тело цикла (итерация).
5. Параметр цикла принимает следующее значение, которое вычисляется с помощью функции Succ (шаг переменной цикла “+1”)
6. Выполняется переход к п.3.
Второй вариант записи этого оператора:
For <имя переменной>:=<выражение1> DownTo <выражение2> Do <оператор>;
Отличия от первого варианта:
Повторение работы цикла происходит, если значение параметра цикла больше или равно конечному значению.
Параметр цикла после каждой итерации цикла принимает следующее значение, полученное с помощью функции Pred (шаг переменной цикла “-1”).
Особенности оператора FOR:
После слова DO тело цикла составляет только один оператор. Если нужно включить в тело цикла два и более оператора, то используется составной оператор – группа операторов, заключенная в операторные скобки Begin и End.
Шаг переменной цикла может быть только +1 (DO) или -1 (DOWNTO).
Если в начале работы цикла начальное значение больше конечного (вариант c TO) или начальное значение меньше конечного (вариант с DOWNTO), то оператор тела цикла не будет выполнен ни разу.
Изменять в теле цикла значение параметра цикла не рекомендуется.
