- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Приоритет операций и отношений в выражениях
В математике, как всем известно еще со школы, всегда сначала выполняется умножение и деление, и лишь затем – сложение и вычитание.
Выражение в языке Паскаль состоит из констант, переменных, указателей функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке Паскаль принят следующий приоритет операций.
Приоритет |
Операции и отношения |
1 |
@, - и +(унарные), NOT |
2 |
*, /, DIV, MOD, AND, SHR, SHL |
3 |
+, -, OR, XOR |
4 |
IN, >, <, =, <>, >=, <= |
Порядок вычисления выражения определяется следующим образом:
если в выражении расставлены скобки, то чем меньше глубина вложенности скобок, тем позже выполняются заключенные в них операции;
если скобок нет, то в первую очередь выполняются операции с более высоким приоритетом;
если в выражении несколько операций имеют одинаковый приоритет, то они выполняются по порядку слева направо.
Примеры:
2 + 3 * 4 – 6 / (2+1) сначала выполняется умножение, затем вычисляется скобка, затем выполняется деление, и, наконец, операции без скобок и с приоритетом 3: сначала сложение, затем вычитание. Результат равен 12.
(7+2)/(2+1)-6*9/(3*3) сначала выполняются операции в скобках, затем деление левое, умножение и деление правое. В последнюю очередь – вычитание. В результате получаем: 9/3-6*9/9 = 3-54/9 = 3-6 = -3
(x > 4) and (3 = y) сначала выполняется левая скобка, затем правая, и в завершение – логическая операция AND. При отсутствии скобок будет ошибка: т.к. AND имеет приоритет 2, а операции отношения – 3, то компилятор при отсутствии скобок попытается выполнить операцию 4 and 3, что является некорректным.
Стандартные (встроенные) функции
При построении выражений на языке Паскаль программист может воспользоваться одной из существующих стандартных функций. Ниже приводится список основных из таких функций.
Функция |
Входные данные |
Выходные данные |
Описание |
Abs(X) |
целое веществ |
целое веществ |
Возвращает модуль числа X |
Sqr(X) |
целое веществ |
целое веществ |
Возвращает квадрат числа X |
Sqrt(X) |
целое веществ |
вешеств веществ |
Возвращает корень числа X |
Succ(X) |
целое символь |
целое символь |
Возвращает значение, следующее за X |
Pred(X) |
целое символь |
целое символь |
Возвращает значение, предшествующее X |
Sin(X) |
целое веществ |
веществ веществ |
Возвращает синус числа X, где X – угол в радианах |
Cos(X) |
целое веществ |
веществ веществ |
Возвращает косинус числа X, где X – угол в радианах |
Arctan(X) |
целое веществ |
веществ веществ |
Возвращает арктангенс числа X |
Pi |
|
веществ |
Возвращает число Пи |
Ln(X) |
целое веществ |
веществ веществ |
Возвращает натуральный логарифм числа X |
Exp(X) |
целое веществ |
веществ веществ |
Возвращает число e в степени X |
Round(X) |
веществ |
целое |
Возвращает число, равное целой части числа X – округление по правилам математики |
Trunc(X) |
веществ |
целое |
Возвращает число, равное целой части числа X |
Int(X) |
веществ |
веществ |
Возвращает число, равное целой части числа X |
Frac(X) |
веществ |
веществ |
Возвращает число, равное дробной части числа X |
Odd(X) |
целое |
веществ |
True, если число нечетное |
Ord(C) |
символь |
целое |
Возвращает число, соответствующее символу C в ASCII-таблице |
Chr(K) |
целое |
символь |
Возвращает символ, соответствующий ASCII-коду числа K |
UpCase(C) |
символь |
символь |
Возвращает число, соответствующее символу C в ASCII-таблице |
Примеры:
sqrt (9) + sqr (2) * trunc (pi)
Сначала выполняется умножение. Для этого необходимо выполнить функции sqr(2) – возведение в квадрат (результат 4), и trunc(pi) – взятие целой части. При этом в качестве аргумента второй функции выступает другая функция – pi. В результате получаем 3 (целая часть от 3.14). Перемножая 4 и 3, получаем 12.
Следующая операция – сложение. Здесь сначала выполняется функция sqrt(9) – извлечение корня (результат 3). В итоге получаем, что представленное выше выражение возвращает результат 15.
Теперь посмотрим, какого типа будет полученный результат. Функция sqr возвращает целый результат, т.к. аргумент целого типа. Функция trunc всегда возвращает целое. Произведение двух целых дает целое. Функция sqrt всегда возвращает вещественное значение. Складывая целое и вещественное, получаем вещественное. Таким образом, результатом нашего выражения будет вещественное значение 15.0.
(-7+sqrt(sqr(7)-4*3*2))/(2*3)
Сначала выполняются операции в скобках, с учетом приоритета операций в каждой из них. В результате получим (-7+sqrt(sqr(7)-24))/(6). Затем вычитаем из квадрата 7 значение 24 и из результата вычисляем корень. Получим (-7+sqrt(49-24))/(6), далее (-7+5)/(6). Наконец, произведя последние вычисления, получим -2/6, или -1/3.
Результат выражения имеет вещественный тип, т.к. здесь присутствуют такие операции, как извлечение корня и деление, которые всегда возвращают результат вещественного типа независимо от операндов.
sqrt(5+sqr(2)) > 4 – sqr – квадрат, т.е. sqr(2)=4. 5+4=9. sqrt – корень, т.е. sqrt(9)=3. В итоге получаем 3>4, что не является истиной, следовательно, результатом данного выражения будет False.
odd(sqr(round(x/2))), при x=5
Подставляем в формулу вместо x число 5. Получаем 5 / 2 = 2.5. Функция round производит округление числа по законам математики, следовательно, round (2.5) = 3. Далее результат возводим в квадрат – sqr (3) = 9. Наконец, функция odd(x) возвращает True, если целое число x является нечетным, и False, если x – четное (т.е. проверка числа на нечетность). Следовательно, odd(9) = True. Результат выражения – True.
Указать порядок выполнения операций: true or false and true.
Согласно приоритетам, сначала выполнится операция AND и лишь затем – OR. Результатом выражения станет True.
Указать порядок выполнения операций: not b = a and c xor d.
Согласно приоритету, сначала выполнится операция NOT, затем AND, далее XOR и лишь затем «=». Обратите внимание, что все перечисленные операции имеют разный приоритет.