- •Основы программирования на языке Паскаль
- •Часть 1. Основы языка Паскаль 2
- •Часть 2. Элементы профессионального программирования на Паскале 44
- •От автора
- •Часть 1. Основы языка Паскаль
- •1. Алгоритм и программа
- •1.1. Алгоритм
- •1.2. Свойства алгоритма
- •1.3. Формы записи алгоритма
- •1.4. Программа и программное обеспечение
- •1.5. Этапы разработки программы
- •2. Данные в языке Паскаль
- •2.1 Константы
- •2.2 Переменные и типы переменных
- •3. Арифметические выражения
- •4. Линейный вычислительный процесс
- •4.1 Оператор присваивания
- •4.2 Оператор ввода
- •4.3 Оператор вывода
- •4.4 Управление выводом данных
- •4.5 Вывод на печать
- •5. Структура простой программы на Паскале
- •6. Компилятор и оболочка Turbo Pascal
- •7. Разветвляющийся вычислительный процесс и условный оператор
- •7.4. Короткий условный оператор
- •If логическое_выражение then оператор1;
- •7.5. Полный условный оператор
- •If логическое_выражение then оператор1
- •7.7. Вложенные условные операторы
- •7.9. Примеры программ с условным оператором
- •8. Директивы компилятора и обработка ошибок ввода
- •9. Оператор цикла. Циклы с предусловием и постусловием
- •10. Цикл со счетчиком и досрочное завершение циклов
- •11. Типовые алгоритмы табулирования функций, вычисления количества, суммы и произведения
- •11.1 Алгоритм табулирования
- •11.2 Алгоритм организации счетчика
- •11.3 Алгоритмы накопления суммы и произведения
- •12. Типовые алгоритмы поиска максимума и минимума
- •13. Решение учебных задач на циклы
- •14. Одномерные массивы. Описание, ввод, вывод и обработка массивов на Паскале
- •15. Решение типовых задач на массивы
- •Часть 2. Элементы профессионального программирования на Паскале
- •16. Кратные циклы
- •16.1 Двойной цикл и типовые задачи на двойной цикл
- •16.2 Оператор безусловного перехода
- •17. Матрицы и типовые алгоритмы обработки матриц
- •18. Подпрограммы
- •18.1 Процедуры
- •18.2 Функции
- •18.3 Массивы в качестве параметров подпрограммы
- •18.4 Открытые массивы
- •19. Множества и перечислимые типы
- •20. Обработка символьных и строковых данных
- •20.1. Работа с символами
- •20.2 Работа со строками
- •21. Текстовые файлы
- •21.1 Общие операции
- •21.2 Примеры работы с файлами
- •21.3 Работа с параметрами командной строки
- •22. Записи. Бинарные файлы
- •23. Модули. Создание модулей
- •23.1. Назначение и структура модулей
- •23.2. Стандартные модули Паскаля
- •24. Модуль crt и создание простых интерфейсов
- •25. Модуль Graph и создание графики на Паскале
- •Приложение 1. Таблицы ascii-кодов символов для операционных систем dos и Windows
- •Приложение 2. Основные директивы компилятора Паскаля
- •Приложение 3. Основные сообщения об ошибках Паскаля
- •Приложение 4. Дополнительные листинги программ
- •Приложение 5. Расширенные коды клавиатуры
- •Ascii‑коды
- •Расширенные коды
- •Приложение 6. Правила хорошего кода
- •Приложение 7. Рекомендуемая литература
7.4. Короткий условный оператор
If логическое_выражение then оператор1;
Сначала вычисляется логическое выражение, если оно имеет значение TRUE, то выполняется оператор1, иначе оператор1 игнорируется.
Если по условию требуется выполнить несколько операторов, их необходимо заключить в операторные скобки begin...end;, образуя единый составной оператор:
Пр. if d>0 then begin
x1:= . . .;
x2:= . . .;
writeln (x1:8:3,x2:8:3);
end;
Пр. Вычислить y=max(a,b,c)
y:=a;
if b>y then y:=b;
if c>y then y:=c;
7.5. Полный условный оператор
If логическое_выражение then оператор1
else оператор2;
Если логическое выражение имеет значение TRUE, то выполняется оператор1, иначе выполняется оператор2. Всегда выполняется только один из операторов. Перед else точка с запятой не ставится, т.к. if-then-else – единый оператор.
Пр. Вычислить m=min(x,y):
if x<y then m:=x else m:=y;
Пр. Если a и b одного знака, найти их произведение, иначе заменить нулями.
if a*b>0 then c:=a*b
else begin
a:=0; b:=0;
end;
Из примера видно, что к ветви алгоритма, состоящей более чем из одного оператора, здесь также применяются операторные скобки.
7.6. Составной условный оператор применяется, когда есть более 2 вариантов расчета.
if логическое_выражение1 then оператор1
else if логическое_выражение2 then оператор2
. . .
else if логическое_выражениеN then операторN
else оператор0;
Последовательно проверяются условия 1,2,…,N, если некоторое условие истинно, выполняется соответствующий оператор и управление передается на оператор, следующий за условным. Если все условия ложны, выполняется оператор0. Число ветвей N неограниченно, ветви else оператор0; может и не быть.
Пр. Вычислить значение функции, заданной графически:
if x<-1 then y:=0
else if x<0 then y:=x+1
else if x<1 then y:=1-x
else y:=0;
или иначе:
if (x<-1) or (x>=1) then y:=0
else if (x<0) then y:=x+1
else y:=1-x;
7.7. Вложенные условные операторы
Когда после ключевых слов then и else вновь используются условные операторы, они называются вложенными. Число вложений может быть произвольно, при этом действует правило: else всегда относится к ближайшему then. Часто вложением полных условных операторов можно заменить использование составного.
Пр. Определить, в какой координатной четверти находится точка с координатами (x,y), не лежащая на осях координат.
Вариант 1 – без использования вложений
if (x>0) and (y>0) then p:=1
else if (x<0) and (y>0) then p:=2
else if (x<0) and (y<0) then p:=3
else p:=4;
Вариант 2 – с вложениями
if x>0 then begin
if y>0 then p:=1
else p:=4;
end
else begin
if y>0 then p:=2
else p:=3;
end;
В первом фрагменте программе проверяется от 2 до 6 условий, во втором – всегда только 2 условия. Здесь использование вложений дало существенный выигрыш в производительности.
Пр 2. Вычислить значение y, равное знаку числа x.
Способ 1:
if x>1 then y:=1
else if x=0 then y:=0
else y:=-1;
Способ 2:
if x>1 then y:=1
else begin
if x=0 then y:=0
else y:=-1;
end;
Здесь в обеих вариантах проверяется не более 2 условий, способы примерно равноценны.
7.8. Оператор выбора. Для случаев, когда требуется выбор одного значения из конечного набора вариантов, оператор if удобнее заменять оператором case:
case выражение of
список1: оператор1;
список2: оператор2;
. . .
списокN: операторN;
else оператор0;
end;
Оператор выполняется так же, как составной условный оператор.
Выражение должно иметь порядковый тип (целый или символьный). Элементы списка перечисляются через запятую, ими могут быть константы и диапазоны значений того же типа, что тип выражения. Диапазоны указываются в виде:
Мин.значение .. Макс.значение
В диапазон входят все значения от минимального до максимального включительно.
Пр. По номеру месяца m определить число дней d в нем.
case m of
1,3,5,7..8,10,12: d:=31;
2: d:=28;
4,6,9,11: d:=30;
end;
Пр. По символу c определить и вывести, к какому классу символов он относится.
case c of
'A'..'Z','a'..'z': writeln ('Лат.буква');
'А'..'Я','а'..'п','р'..'я': writeln ('Рус.буква');
'0'..'9': writeln ('Цифра');
else writeln ('Другой символ');
end;
Здесь отдельные диапазоны для русских букв от "а" до "п" и от "р" до "я" связаны с тем, что между "п" и "р" в кодовой таблице DOS находится ряд не-буквенных символов (см. Приложение 1).
Если по ветви оператора case нужно выполнить несколько операторов, действует то же правило, что для оператора if (ветвь заключается в операторные скобки begin…end;).