
- •Свойства алгоритма
- •Компиляция, отладка и тестирование
- •Средства разработки программ
- •Структура Pascal-программы
- •Внешний вид исходного текста программы
- •Комментарии
- •Директивы компилятора
- •Идентификаторы
- •Переменные и типы данных
- •Константы
- •Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Простейшие операторы
- •Метки и безусловный переход
- •Ввод и вывод: консоль
- •Ввод с консоли
- •Вывод на консоль
- •Форматный вывод
- •Пример простейшей программы на языке Pascal
- •2. Лекция: Типы данных и операции
- •Типы данных языка Pascal
- •Порядковые типы данных
- •Стандартные подпрограммы, обрабатывающие порядковые типы данных
- •Типы данных, относящиеся к порядковым
- •Вещественные типы данных
- •Конструируемые типы данных
- •Операции и выражения
- •Арифметические операции
- •Другие операции
- •Стандартные арифметические функции
- •Арифметические выражения
- •Полнота вычислений
- •Порядок вычислений
- •Совместимость типов данных
- •Эквивалентность
- •Совместимость
- •Совместимость по присваиванию
- •Приведение типов данных
- •Неявное приведение типов данных
- •Явное приведение типов данных
- •Функции, изменяющие тип данных
- •3. Лекция: Ветвления. Массивы. Циклы
- •Операторы ветвления
- •Условный оператор if
- •Оператор выбора case
- •Иллюстрация if и case
- •Массивы
- •Описание массива
- •Нумерация
- •Описание переменных размерностей
- •Обращение к компонентам массива
- •Задание массива константой
- •Операторы циклов
- •for-to и for-downto
- •Инкрементный цикл с параметром
- •Декрементный цикл с параметром
- •while и repeat-until
- •break и continue
- •Оператор безусловного перехода goto
- •Пример использования циклов
- •Вывод массива, удобный для пользователя
- •4. Лекция: Сортировки массивов
- •Задача сортировки
- •Простые сортировки
- •Сортировка простыми вставками
- •Сортировка бинарными вставками
- •Сортировка простым выбором
- •Сортировка простыми обменами
- •Улучшенные сортировки
- •Сортировка Шелла
- •Пирамидальная сортировка
- •Быстрая сортировка
- •5. Лекция: Символы и строки. Множества
- •Символы и строки
- •Описание строк
- •Символ-константа и строка-константа
- •Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Действия с символами
- •Операции
- •Стандартные функции
- •Стандартные функции и процедуры обработки строк
- •Операции со строками
- •Сравнения
- •Обращение к компонентам строки
- •Конкатенация
- •Множества
- •Описание множеств
- •Множество-константа
- •Неименованная константа
- •Нетипизированная константа
- •Типизированная константа
- •Операции с множествами
- •Представление множеств массивами
- •Представление множеств линейными массивами
- •Представление множеств битовыми массивами
- •Примеры использования символов, строк и множеств
- •Ввод и вывод: файлы
- •Что такое файл
- •Когда нужно использовать файлы
- •Разновидности файлов
- •Описание файлов
- •Текстовые файлы
- •Оперирование файлами
- •Назначение файла
- •Открытие файла
- •Закрытие файла
- •Считывание из файла
- •Запись в файл
- •Пробельные символы
- •Пример использования файлов
- •Решение
- •Реализация
- •Изменение реакции на ошибку
- •Пример использования директив {$I}
- •Записи
- •Описание записей
- •Задание записей константой
- •Доступ к полям
- •Оперирование несколькими полями
- •Вложенные операторы with
- •Запись с вариантной частью
- •Описание записи с вариантной частью
- •Механизм использования записи с вариантной частью
- •Бинарные файлы
- •Типизированные файлы
- •Описание типизированных файлов
- •Назначение типизированного файла
- •Открытие и закрытие типизированного файла
- •Считывание из типизированного файла
- •Поиск в типизированном файле
- •Запись в типизированный файл
- •Нетипизированные файлы
- •Описание нетипизированных файлов
- •Назначение нетипизированного файла
- •Открытие и закрытие нетипизированного файла
- •Поиск в нетипизированном файле
- •Запись и чтение
- •Подпрограммы обработки директорий
- •Применимость подпрограмм обработки файлов
- •Подпрограммы
- •Объявление и описание
- •Объявление функции
- •Объявление процедуры
- •Описание подпрограммы
- •Список параметров
- •Возвращаемые значения
- •Вызов подпрограмм
- •Способы подстановки аргументов
- •Параметр-значение
- •Описание
- •Механизм передачи значения
- •Параметр-переменная
- •Описание
- •Механизм передачи значения
- •Параметр-константа
- •Описание
- •Механизм передачи значения
- •Области действия имен
- •Разграничение контекстов
- •Побочный эффект
- •Совпадение имен
- •Нетипизированные параметры
- •Явное преобразование типа
- •Совмещение в памяти
- •Открытые параметры
- •Открытые массивы
- •Открытые строки
- •Процедурный тип данных
- •Описание
- •Аргументы
- •Вызов
- •Динамические структуры данных
- •Стек
- •Операции
- •Очередь
- •Операции
- •Рекурсия
- •Рекурсивные подпрограммы
- •Пример рекурсивного алгоритма
- •Алгоритм решения
- •Стековая организация рекурсии
- •Ограничение глубины рекурсии
- •Замена рекурсивных алгоритмов итеративными
- •Пример сравнения рекурсивного и нерекурсивного алгоритма
- •Рекурсивный алгоритм
- •Реализация рекурсивного алгоритма
- •Полный перебор с отсечением
- •Нерекурсивный алгоритм
- •Реализация нерекурсивного алгоритма
- •Иллюстрация
- •Эффективность
- •Быстрая сортировка2
- •Алгоритм Быстр
- •Реализация алгоритма Быстр
- •Эффективность алгоритма Быстр
- •Статически выделяемая память
- •Адреса
- •Указатели
- •Описание указателей
- •Операции с указателями
- •Определение адреса
- •Разыменование
- •Присваивания
- •Сравнения
- •Динамически распределяемая память
- •Динамическое выделение памяти
- •Типизированные указатели
- •Нетипизированные указатели
- •Динамическое освобождение памяти
- •Типизированные указатели
- •Нетипизированные указатели
- •Списочные структуры
- •Структура списков
- •Описание списков
- •Оперирование элементами списка
- •Хранение списка
- •Обращение к элементам списка
- •Создание списков
- •Просмотр элементов списка
- •Удаление элементов списка
- •Перестройка списков
- •Примеры перестройки линейных списков
- •Реализация

Однако включение директивы {$B+} принудит компилятор завершить эти вычисления даже в таком случае. Ее выключение {$B-} вернет обычную схему вычислений.
Порядок вычислений
Если в выражении расставлены скобки, то вычисления производятся в порядке, известном всем еще с начальной школы: чем меньше глубина вложенности скобок, тем позже вычисляется заключенная в них операция. Если же скобок нет, то сначала вычисляются значения операций с более высоким приоритетом, затем - с менее высоким. Несколько подряд идущих операций одного приоритета вычисляются в последовательности "слева направо".
Таблица 2.1. Приоритеты (для всех) операций языка Pascal
|
Операции |
Приоритет |
|
|
|
Унарные2) операции |
+, -, not, @, ^, # |
Первый(высший) |
|
||
Операции, эквивалентные умножению |
*, /, div, mod, and, shl, shr |
Второй |
|
|
|
Операции, эквивалентные сложению |
+,-, or, xor |
Третий |
|
|
|
Операции сравнения |
=, <>, >, <, <=, >=, in |
Четвертый |
|
|
|
Замечание: Вызов любой функции имеет более высокий приоритет, чем все внешние относительно этого вызова операции. Выражения, являющиеся аргументами вызываемой функции, вычисляются в момент вызова (см. лекцию 8).
Примеры выражений (с указанием последовательности вычислений) для целых чисел:
a + b * |
c / d |
|
(результат принадлежит к вещест- |
|
3 |
1 |
2 |
|
венному типу данных); |
a * not |
b or c * d = 0 |
(результат принадлежит к логиче- |
||
2 |
1 |
4 3 |
5 |
скому типу данных); |
-min(a + b, 0) * (a + 1) |
(результат принадлежит к целочис- |
|||
3 2 |
1 |
5 |
4 |
ленному типу данных). |
Совместимость типов данных
Вобщем случае при выполнении арифметических (и любых других) операций компилятору требуется, чтобы типы операндов совпадали: нельзя, например, сложить массив и множество, нельзя передать вещественное число функции, ожидающей целый аргумент, и т.п.
Вто же время, любая процедура или функция, написанная в расчете на вещественные значения, сможет работать и с целыми числами.
Правила, по которым различные типы данных считаются взаимозаменяемыми, мы приводим ниже.
Эквивалентность
Эквивалентность - это наиболее высокий уровень соответствия типов. Она требуется при действиях с указателями (см. лекцию 10), а также при вызовах подпрограмм. "А как же тогда быть с оговоркой, сделанной двумя абзацами выше?" - спросите вы. Мы не станем сейчас описывать механизм передачи аргументов процедурам и функциям, поясним лишь, что эквивалентность типов требуется только для параметров-переменных (см. лекцию 8).
Итак, два типа - Т1 и Т2 - будут эквивалентными, если верен хотя бы один вариант из перечисленных ниже: