- •Основы программирования на языке Паскаль
- •Часть 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. Разветвляющийся вычислительный процесс и условный оператор
Главное, чего недостает нашим первым программам – гибкости и умения принимать решения. Ведь уже несложный алгоритм решения квадратного уравнения предусматривает два варианта расчета, реальные же алгоритмы могут выдавать результаты, зависящие от десятков и сотен условий.
Разветвляющийся вычислительный процесс (РВП) реализуется по одному из нескольких направлений вычисления (ветвей алгоритма). Выбор одной из ветвей зависит от истинности или ложности некоторого условия (логического выражения), включенного в состав условного оператора. Программа должна учитывать все возможные ветви вычислений. Всегда выполняется только одна из всех возможных ветвей.
7.1. Логические выражения строятся из арифметических выражений, операций отношения, логических операций и круглых скобок.
Результатом вычисления логического выражения является одно из двух значений: TRUE или FALSE.
7.2. Операции отношения имеют следующий общий вид:
арифм.выраж.1 ОО арифм.выраж.2
где ОО – один из следующих знаков операций:
< <= > >= = <>
Последний знак обозначает отношение "не равно". Обратите также внимание на запись отношений "меньше или равно", "больше или равно".
В любое логическое выражение должна входить хотя бы 1 операция отношения!
Пр.
d<0 выбор ветви вычислений зависит от значения d
sqr(x)+sqr(y)<=sqr(R) результат = TRUE для точек с коорд. (x,y), лежащих внутри круга радиуса R с центром в начале координат
cos(x)>1 результат всегда = FALSE
К вещественным значениям операция = ("равно") в общем случае неприменима из-за неточного представления этих значений в памяти компьютера. Поэтому для вещественных переменных отношение вида a=b заменяется на abs(a–b)<E, где Е – малая величина, определяющая допустимую погрешность.
7.3. Логические операции применимы только в логических выражениях и служат для составления сложных условий, требующих более одной операции отношения. В Паскале определены 3 логических операции:
Математическая запись |
Запись на Паскале |
Название |
|
not |
Отрицание |
|
and |
Операция "И" (логическое умножение) |
|
or |
Операция "ИЛИ" (логическое сложение) |
|
xor |
Операция "исключающее ИЛИ" |
Операция NOT применима к одному логическому выражению (является унарной). Результат равен TRUE, если выражение ложно и наоборот.
Пр. NOT (sin(x)>1) результат всегда TRUE
Операция AND связывает не менее двух логических выражения (является бинарной). Результат равен TRUE, если все выражения истинны и FALSE, если хотя бы одно из выражений ложно.
Пр. Распишем выражение Так как операции принадлежности в Паскале нет, используем операцию AND и операции отношения: (x>=a) and (x<=b)
Распишем выражение a,b,c>0 (одновременно): (a>0) and (b>0) and (c>0)
Операция OR также связывает не менее 2 логических выражений. Результат равен TRUE, если хотя бы одно выражение истинно и FALSE, если все выражения ложны.
Пр. Распишем выражение : (x<a) or (x>b)
другой способ – not ((x>=a) and (x<=b))
Пр. Распишем условие "хотя бы одно из значений a,b,c положительно":
(a>0) or (b>0) or (c>0)
Пр. Условие "только одно из значений a,b,c положительно":
(a>0) and (b<=0) and (c<=0) or (a<=0) and (b>0) and (c<=0) or (a<=0) and (b<=0) and (c>0)
Операция XOR, в отличие от OR, дает ложь (false) и в том случае, когда все связанные ей логические выражения истинны. Чтобы лучше уяснить это отличие, составим так называемую таблицу истинности этих двух логических операций. Для краткости значение false обозначим нулем, а true – единицей. Для двух логических аргументов возможно всего 4 комбинации значений 0 и 1:
Аргумент A |
Аргумент B |
A or B |
A xor B |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
Пр. Условие "только одно из значений a,b положительно":
(a>0) xor (b>0)
К сожалению, записать условие "только одно из значений a,b,c положительно" в напрашивающемся виде (a>0) xor (b>0) xor (c>0) нельзя – результат этого выражения будет равен true и в случае, когда все три значения положительны! Связано это с тем, что при последовательном расчете логических выражений слева направо (1 xor 1) xor 1 будет равно 0 xor 1 = 1.
С помощью xor удобно организовывать различного рода переключатели, которые последовательно должны принимать одно из двух состояний:
x := x xor true;
writeln ('x=',x);
x := x xor true;
writeln ('x=',x);
Независимо от начального значения логической переменной x, второе выведенное на экран значение будет логическим отрицанием первого. В реальной практике конструкции подобные x := x xor true; не дублируются в коде многократно, а применяются внутри цикла (см. главу 9).
Приоритет операций: 1. not. 2. and. 3. or и xor. 4. Отношения.
Поскольку отношения имеют самый низкий приоритет, то их необходимо заключать в круглые скобки.