- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •2. Зарезервированные слова.
- •X a8 alpha Massiv z52d9 eps Res_52_a ___75
- •6. Метка.
- •2. Целые типы данных.
- •4. Вещественные типы.
- •1. Раздел описания меток.
- •2. Раздел описания констант.
- •3. Раздел описания типов.
- •4. Раздел описания переменных.
- •6. Раздел операторов.
- •7. Последовательность разделов.
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Ввод массива из текстового файла.
- •3. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
- •1. Параметр цикла должен быть ординального типа.
- •2. Параметр должен быть описан в том же блоке, где находится сам оператор цикла.
- •5. В теле цикла параметр не должен изменяться.
- •6. Начальное и конечное значения параметра цикла вычисляются только один раз, до начала цикла.
- •7. При нормальном завершении цикла значение его параметра считается неопределенным.
- •Контроль ординальных переменных
- •Вставка элемента в упорядоченный массив
- •Удаление элементов из массива
- •«Школьный» алгоритм сортировки
- •Группировка массива методом прямой выборки
- •Группировка массива методом прямого обмена
- •Var c : array[1..10,1..15,1..8] of real.
- •1. Ввод элементов матрицы с клавиатуры.
- •2. Ввод матрицы из текстового файла.
- •3. Вывод матрицы на экран.
- •Тождественные и совместимые типы
- •Обработка в процедуре одномерных массивов с различными именами типов
- •Обработка в процедуре матриц с различными именами типов
- •Var s : string[V],
- •Процедуры и функции для обработки строк
- •Определение битовой структуры поля памяти
- •Процедуры и функции для файлов любого типа
- •Var p : pointer;
- •1. Формирование стека из текстового файла.
- •7. Определение значения и местоположения максимального элемента в стеке.
- •8. Удаление из стека максимального элемента.
- •9. Добавление элемента в упорядоченный стек.
- •2. Добавление нового элемента в очередь.
- •3. Удаление элемента из очереди.
- •6. Удаление произвольного элемента из очереди.
- •7. Добавление нового элемента в произвольное место очереди.
- •1. Формирование дека.
- •Var sin : integer;
- •Процедура заполнения FillChar
- •Процедура перемещения данных move
- •Управление экраном в текстовом режиме
- •Сохранение и восстановление экрана
- •Interface
- •Implementation
- •Процедуры управления текстовым режимом экрана
- •Intr(n:byte; Var Reg:Registers),
- •If KeyPressed then
- •Автоматическая оптимизация программ
- •1. Свертывание констант.
- •2. Слияние констант.
- •3. Вычисление по короткой схеме.
- •4. Удаление неиспользуемого кода.
- •If false then
- •5. Эффективная компоновка.
- •Оверлейная структура программы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Использование сопроцессора
Оверлейная структура программы
Как уже ранее отмечалось, максимальный размер модуля не может превышать 64 Кбайт, однако количество модулей в программе не ограничивается. Это дает возможность создавать программы, занимающие весь доступный объем оперативной памяти ПЭВМ. В ряде случаев для больших программ этого объема также недостаточно. Тогда программист может использовать механизм оверлеев, позволяющий создавать программы практически неограниченного объема.
Оверлеи представляют собой части программы, которые размещаются в отдельном файле дисковой памяти и в процессе работы программы совместно используют общую область оперативной памяти. В один и тот же момент времени в памяти размещается одна или несколько оверлейных частей программы, а в процессе ее выполнения происходит смена оверлеев. Оверлейные части Паскаль-программы оформляются как отдельные модули.
Предположим, что программа состоит из основной части Main и трех модулей A, B и С, при этом их объем составляет соответственно и . Без использования оверлеев для размещения программы требуется байт. Структура такой программы имеет следующий вид:
M a i n
|
A
|
B |
C |
С использованием оверлеев получим такую структуру:
Для размещения такой программы требуется байт памяти.
В многомодульной программе содержится основная программа (Program), резидентные (неоверлейные) и оверлейные модули. При компиляции такой программы создаются два файла: исполнимый файл с расширением exe и оверлейный с расширением ovr. При загрузке оверлеев в память они размещаются в оверлейном буфере, расположенном между сегментом стека и динамически распределяемой областью памяти. Размер этого буфера по умолчанию принимается равным размеру наибольшего оверлейного модуля.
Управление оверлеями реализуется в Турбо Паскале с помощью стандартного модуля Overlay. При этом в программе пользователя должны быть выполнены следующие требования.
1. Все оверлейные модули должны компилироваться с директивами {$O+, F+}.
Директива {$O+, F+} означает, что данный модуль может быть использован как оверлейный. В связи с этим в программе, имеющей оверлейную структуру, обычно для всех модулей устанавливают такую директиву.
2. В основной программе после предложения Uses следует в директивах {$O Имя_файла} перечислить имена оверлейных модулей.
3. В основной программе в предложении Uses имя стандартного модуля Overlay должно быть первым.
Инициализация оверлейного файла выполняется процедурой
OvrInit(Имя_файла:string),
в которой указывается имя файла с расширением ovr.
Код результата инициализации сохраняется в предописанной переменной OvrResult, которая при успешном завершении работы процедуры OvrInit принимает значение 0.
С помощью функции
OvrGetBuf : longint
можно получить значение размера оверлейного буфера (в байтах).
С помощью процедуры
OvrSetBuf(OvrSize:longint)
это значение можно увеличить.
Пример.
{$O+,F+}
Program OverDemo;
Uses Overlay,Crt,Unit1,Unit2;
{$O Unit1}
{$O Unit2}
Begin
OvrInit('OverDemo.ovr');
If OvrResult<>0 then
Begin
Writeln(#7'Оверлейный файл не найден');
Halt
End;
Proc1;
Proc2;
End.
{O+,F+}
Unit Unit1;