- •Эвм. Различные виды обеспечения эвм. Аппаратное обеспечение эвм.
- •10) Алфавит и лексемы языка Pascal. Идентификаторы. Нотации идентификаторов.
- •11) Понятие оператора. Операторы описания. Исполняемые операторы.
- •12) Структура программы. Правила оформления программы. Комментарии.
- •13) Константы.
- •14) Переменные. Понятие. Изменение значений. Описание.
- •15) Понятие типа данных. Классификация типов данных.
- •16) Логический, целые и вещественные типы. Понятие. Основные операции и функции.
- •18. Выражения. Приоритеты операций.
- •19. Операторы ввода-вывода. Форматированный вывод.
- •17) Символьный и порядковые типы данных. Понятие. Основные операции и функции.
- •20. Условный оператор. Оператор выбора.
- •21. Циклы. Цикл с параметром. Циклы с пост и предусловием. Операторы циклов
- •Инкрементный цикл с параметром
- •Декрементный цикл с параметром
- •Оператор безусловного перехода goto
- •22. Одномерные массивы. Понятие. Описание. Инициализация. Ввод-вывод. Понятие структуры
- •Массив – однородная совокупность элементов
- •Индекс массива
- •Вычисление индекса массива Паскаля
- •Основные действия с массивами Паскаля
- •Ввод массива Паскаля
- •Вывод массива Паскаля
- •22. Одномерные массивы. Понятие. Описание. Инициализация. Ввод-вывод. Массивы
- •Описание массива
- •Нумерация
- •Описание переменных размерностей
- •Обращение к компонентам массива
- •Задание массива константой
- •23. Сортировка массивов простым выбором и «пузырек».
- •24. Многомерные массивы. Понятие. Описание. Инициализация. Ввод-вывод. Двумерные массивы Паскаля – матрицы
- •Описание двумерного массива Паскаля.
- •Основные действия с двумерными массивами Паскаля
- •Ввод двумерного массива Паскаля.
- •Вывод двумерного массива Паскаля на экран.
- •Представление двумерного массива Паскаля в памяти
- •Сколько памяти выделяется для массива?
- •25. Строки. Типы строк. Описание. Операции, процедуры и функции обработки строк.
- •Описание строк
- •Стандартные функции и процедуры обработки строк
- •26. Записи. Описание. Обработка записей. Записи с вариативной частью. Записи
- •Описание записей
- •Задание записей константой
- •Доступ к полям
- •Оперирование несколькими полями
- •Вложенные операторы with
- •Запись с вариантной частью
- •Описание записи с вариантной частью
- •27. Множества. Описание. Операции, процедуры и функции обработки множеств. Множества
- •Описание множеств
- •Множество-константа Неименованная константа
- •Нетипизированная константа
- •Типизированная константа
- •Представление множеств массивами
- •Представление множеств линейными массивами
- •28. Текстовые файлы. Доступ к данным в текстовых файлах. Работа с текстовыми файлами. Описание файлов
- •Пробельные символы
- •Работа с текстовыми файлами
- •29. Бестиповые файлы. Доступ к данным в бестиповых файлах. Работа с бестиповыми файлами. Процедуры и функции обработки бестиповых файлов.
- •Поиск в нетипизированном файле
- •Запись и чтение
- •Подпрограммы обработки директорий
- •30. Компонентные файлы файлы. Доступ к данным в компонентных файлах. Работа с компонентными файлами. Процедуры и функции обработки компонентными файлов. Типизированные файлы
- •Описание типизированных файлов
- •Назначение типизированного файла
- •Открытие и закрытие типизированного файла
- •Считывание из типизированного файла
- •Поиск в типизированном файле
- •Запись в типизированный файл
- •31. Подпрограмма. Понятие. Виды. Синтаксис. Вызов подпрограмм. Локальные и глобальные переменные. Подпрограммы
- •Вызов подпрограмм
- •Побочный эффект
- •Совпадение имен
- •32. Подпрограммы. Виды параметров. Обмен данными между подпрограммами и основной программой. Список параметров
- •Возвращаемые значения
- •Способы подстановки аргументов
- •Параметр-значение Описание
- •Механизм передачи значения
- •Параметр-переменная Описание
- •Механизм передачи значения
- •Параметр-константа Описание
- •Механизм передачи значения
- •Нетипизированные параметры
- •Явное преобразование типа
- •Совмещение в памяти
- •Открытые массивы
- •33. Модули. Синтаксис. Создание и использование модуля.
- •Подключение модулей
- •Секция реализации
- •Секция инициализации
- •Взаимодействие модулей
- •Компиляция модулей
- •34. Стандартные модули языка Pascal. Стандартные модули языка Pascal
- •35. Указатели. Виды указателей. Операции и функции обработки указателей. Статически выделяемая память
- •Разыменование
- •Динамическое освобождение памяти Типизированные указатели
- •Нетипизированные указатели
- •Присваивания
- •Сравнения
- •36. Динамические переменные. Процедуры и функции работы с динамическими переменными. Работа с динамическими переменными. Динамическое выделение памяти Типизированные указатели
- •Нетипизированные указатели
- •Процедуры работы с динамической памятью
- •37. Стек. Добавление и выборка элемента из стека. Стеки Pascal-Паскаль
- •Занесение элемента в стек
- •Извлечение элемента из стека
Процедуры работы с динамической памятью
Модуль System
Procedure Dispose(var P: Pointer);
Освобождает память, распределенную для динамической переменной.
После вызова Dispose значение P не определено. При включенной директиве {$I+}, вы можете использовать исключительные ситуации, чтобы обработать эту ошибку.
Procedure FreeMem(var P: Pointer [; Size: Integer]);
Освобождает память, выделенную динамической переменной данного размера.
P - переменная любого типа-указателя, предварительно созданная процедурой GetMem.
Size определяет размер динамической переменной в байтах. Для корректной работы этой процедуры, Size должно быть точно равно числу байтов, предварительно распределенных для этой переменной процедурой GetMem.
FreeMem уничтожает переменную P и возвращает память «куче». Если P не указывает на память в «куче», возникает ошибка времени выполнения.
После вызова FreeMem, значение P не определено, и происходит ошибка, если Вы впоследствии ссылаетесь на P^. Вы можете использовать исключительные ситуации, чтобы обработать эту ошибку.
Procedure GetMem(var P: Pointer; Size: Integer);
GetMem создает динамическую переменную определенного размера и помещает адрес блока в переменную Р.
P - переменная любого типа-указателя. Size - выражение, определяющее размер в байтах динамической переменной. Вы должны ссылаться на созданную переменную как P^.
Procedure New(var P: Pointer);
Создает новую динамическую переменную и помещает ее адрес в переменную Р. P - переменная любого типа-указателя. Размер распределенного блока памяти равен размеру типа, на который указывает P. Если памяти недостаточно, чтобы распределить динамическую переменную, возникает исключительная ситуация EOutOfMemory.
При завершении программы, все динамические переменные, созданные процедурами New или GetMem, должны быть уничтожены соответственно процедурами Dispose или FreeMem.
37. Стек. Добавление и выборка элемента из стека. Стеки Pascal-Паскаль
Линейные списки, в которых операции вставки, удаления и доступа к значениям выполняются в первом или последнем узле, получили следующие названия:
Стек - особый вид списка, обращение к которому идет только через указатель на первый элемент. Если в стек нужно добавить элемент, то он добавляется впереди первого элемента, при этом указатель на начало стека переключается на новый элемент. Алгоритм работы со стеком характеризуется правилом: «последним пришел - первым вышел» (LIFO, last in - first out).
Очередь - это вид списка, имеющего два указателя на первый и последний элемент цепочки. Новые элементы записываются вслед за последним, а выборка элементов идет с первого. Этот алгоритм типа «первым пришел - первым вышел» (FIFO, first in - first out).
Дек или двусторонняя очередь - это линейный список, в котором все операции вставки и удаления (и, как правило, операции доступа к данным) выполняются на обоих концах списка.
Стеки
Интуитивными моделями стека могут служить колода карт на столе при игре в покер, стопка тарелок на полке буфета; во всех этих моделях взять можно только верхний предмет, а добавить новый объект можно, только положив его на верхний. Стеки также иногда называют «магазинами» по аналогии с магазином патронов, в этом случае патрон, помещенный в магазин первым, выстреливает последним.
Механизм работы стека можно представить, если воспользоваться аналогией с железнодорожным разъездом, которая предложена Э. Дейкстрой. Сейчас Вы познакомитесь с одной из разновидностей обычного линейного списка – стеком. Этот вид списка очень часто используется в программировании.
Стек – это линейный список, в котором добавление новых элементов и удаление существующих производится только с одного конца, называемого вершиной стека.
Стек часто называют структурой LIFO (сокращение LIFO означает Last In – First Out, т.е. последним пришел – первым вышел). Это сокращение помогает запомнить механизм работы стека.
Изобразим стек графически:
При программировании на Паскале стек чаще всего реализуется в виде однонаправленного списка. Каждый элемент структуры содержит указатель на следующий. Однако, к этому виду списка, по определению, неприменима операция обхода элементов. Доступ возможен только к верхнему элементу структуры.
Стек предполагает вставку и удаление элементов, поэтому он является динамической, постоянно меняющейся структурой.
Стеки довольно часто встречаются в практической жизни. Простой пример: детская пирамидка. Процесс ее сборки и разборки подобен процессу функционирования стека.
Итак, стек – это такой список, добавление или извлечение элементов которого происходит с начала и только с начала (или, возможно, с конца и только с конца) списка.
Значением указателя, представляющего стек, является ссылка на вершину стека, и каждый элемент стека содержит поле ссылки на соседний, "нижний" элемент.
Таким образом, описать стек можно следующим образом:
Type EXST = ^ST; ST = record Data : integer; Next : EXST; end; Var Stack : EXST; {Текущая переменная} |
Если стек пуст, то значение указателя равно Nil.
Рассмотрим возможные операции со стеком.
