
- •3 Этапы разработки
- •Алфавит языка
- •1.4 Выражения
- •1.4.1. Операнды
- •1.4.2. Предопределенные знаки операций
- •1.4.2.1. Логические операции
- •1.4.2.2 Арифметические операции
- •1.4.2.3. Знаки операций для множеств
- •1.4.2.4. Отношения
- •1.4.3. Определенные пользователем знаки операций и объявления знаков операций
- •1.4.3.1. Базисные знаки операций, для которых допустима перегрузка
- •1.4.3.2. Объявления новых знаков операций
- •1.4.3.3. Правила, управляющие перегрузкой
- •1.4.3.4. Старшинство операций
- •1.4.3.5. Численные разрешения внутри выражений
- •7. Операторы ввода-вывода
- •Условный оператор
- •Оператор цикла с предусловием в Паскале
- •Оператор цикла с постусловием в языке Паскаль
- •Оператор цикла с параметром в языке Паскаль
- •10 Одномерные и двумерные массивы
- •11 Пузырьковая сортировка (bubble sort)
- •Сортировка выборочная (selection sort)
- •Быстрая сортировка (quick sort)
- •Алгоритм поиска путей в лабиринте из песочницы
- •Предыстория
- •История
- •Анализ алгоритмов и программ, 2 семестр. Рекуррентность и рекурсия
- •Основы систем счисления из песочницы
- •Введение
- •Непозиционные системы
- •Единичная система счисления
- •Древнеегипетская десятичная система
- •Вавилонская шестидесятеричная система
- •Римская система
- •Позиционные системы счисления
- •Десятичная система счисления
- •Двоичная система счисления
- •Восьмеричная система счисления
- •Шестнадцатеричная система счисления
- •Однородные позиционные системы счисления
- •Смешанные системы счисления
- •Перевод из одной системы счисления в другую
- •Преобразование в десятичную систему счисления
- •Преобразование из десятичной системы счисления в другие
- •Преобразование из двоичной в восьмеричную и шестнадцатеричную системы
- •Преобразование из восьмеричной и шестнадцатеричной систем в двоичную
- •Преобразование дробной части двоичной системы в 8- и 16-ую
- •Преобразование дробной части десятичной системы в любую другую
1.4.1. Операнды
За исключением конструкторов множеств и литеральных констант (числа, символьные константы или строки), операнды изображаются обозначениями. Обозначение состоит из идентификатора, ссылающегося на константу, переменную или процедуру. Возможно, что этот идентификатор квалифицируется идентификатором, обозначающим модуль, определение, реализацию или объект и может завершаться селекторами, если обозначаемый объект является элементом структуры.
Designator = Instance
| Designator "{" Type “}”// Приведение | Designator "^" // Разыменование | Designator "[" Expression { "," Expression } "]"// Элемент массива | Designator "(" [ ActualParameters ] ")" // Вызов функции | Designator "." MemberName // Селектор члена
Instance = (self| InstanceName | DefinitionName "(" InstanceName ")" ).
ActualParameters = Actual { "," Actual }.
Actual = Expression [ "{" [var] FormalType "}" ]. // Аргумент с сигнатурой типа
Символ ^ используется, с тем чтобы факультативно сделать явной ссылку в программном тексте.
Примеры:
Обозначение Тип Значение size integer Значение переменной, называемой size a[i] real Элемент массива a в позиции i dateOfBirth.day integer{8} Поле day объекта, называемого dateOfBirth w[3].name[i] char Элемент в позиции i в поле name у элемента массива w в позиции 3
Если a обозначает массив, то a[e] обозначает тот элемент a, чей индекс является текущим значением выражения e. Выражение e должно быть либо типом перечисления, либо кардинального или целого типа. Обозначение вида a[e0, e1, …., en] означает a[e0][e1]….[en].
Если obj обозначает объект, то obj.f обозначает поле f у obj или метод f у объекта obj (см. 1.9.1).
Если обозначаемый объект является константой или переменной, то обозначение ссылается на ее текущее значение. Если он является процедурой, обозначение ссылается на эту процедуру. Однако если объект является процедурой-функцией и за ним следует (возможно, пустой) список параметров, это обозначение приводит к активации этой процедуры и представляет значение, являющееся результатом этого исполнения. Фактические параметры должны соответствовать формальным параметрам как в подходящих вызовах процедуры (см. 1.5.2).
1.4.2. Предопределенные знаки операций
Предопределенные знаки операций зафиксированы и встроены в язык.
1.4.2.1. Логические операции
Эти знаки операций применимы к операндам boolean и производят результат boolean.
or логическая дизъюнкция p or q “если p то true, иначе q” & логическая конъюнкция p & q “если p то q, иначе false” ~ отрицание ~ p “не p”
1.4.2.2 Арифметические операции
Знаки операций +, -, и * применимы в выражениях к операндам числовых типов (см. 1.4.3.1). Знак операции деления применим к операндам типа real и производит результат типа real. При использовании знаков унарных операций, - обозначает изменение знака и + обозначает тождественную операцию. + сложение - вычитание * умножение / вещественное деление (вещественных)
Примеры:
i :=j + k; x := real(i) / float(j); (* см. раздел 1.3.3.9*)
Знаки операций div и mod применимы только к целым операндам.
div целочисленное деление mod модуль
Они удовлетворяют следующим формулам, определенным для любого x и положительного делителя y: x = (x div y) * y + (x mod y) 0 <= (x mod y) < y
Если значение делителя отрицательно, то смысл знаков операций div и mod определяется реализацией. Рекомендуется программисту проверять это условия и использовать математические рассуждения для обеспечения гарантии того, что используются в качестве делителей только положительные значения.
Примеры:
x y x div y x mod y 5 3 1 2 -5 3 2 1