
- •Основы программирования на языке Паскаль
- •Часть 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. Компилятор и оболочкаTurboPascal
- •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. Назначение и структура модулей
- •Implementation
- •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. Отношения.
Поскольку отношения имеют самый низкий приоритет, то их необходимо заключать в круглые скобки.