
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Внешние подпрограммы.
Имеется возможность использования при компиляции и компоновке программ вместо подпрограмм виде объектных кодов (obj – файлов ), созданных другими компиляторами . Obj - файлы должны при этом удовлетворять и использовать модели памяти и способы передачи значений . Разработчиками гарантируется совместимость кодов , полученных компиляторами Turbo и макси _________ и файлов , скомпонованных по стандарту .
Поскольку подпрограмма образованна в других языках программирования , имеет интерфейс отличный от языка описания Paskal , должны быть выполнены некоторые действия по совместимости интерфейса . Например при подключении Obj – файлом созданного на ассемблере , сегмент кода и сегмент данных , определяется в ассемблере , должны иметь определенные названия а параметры различной длинны должны передаваться через различные определенные регистры . Для подключении объектных файлов используется директива компилятора :{$L «имя файла ».obj}
Подпрограммы реализованные в подключенных файлах которые предполагают использовать в основной программе , должны быть объявлены в основной программе заголовка с директивой :External.
Пример
{$L a.obj}
Procedure p1 ; external;
Procedure p2 (x:byte); external;
Function F1 (c : char ):byte ; external;
Procedure p;
Begin
……
End;
…….
Подключают таким образом внешние подпрограммы использующиеся в основной программе аналогично обычным подпрограммам. Обычно директиву {$L «имя файла ».obj}
И описание внешней подпрограммы размещают рядом , хотя порядок следования подпрограмм может быть другим .
Asm
«юникод ассемблера »
End;
Пример подключения графического драйвера и графичесих шрифтов в ехе –файле
Пусть необходимо “ прошить “ в ехе –файл стандартный драйвер egavga.bgi и два шрифта : trip.chr и goth.chr .
Преобразуем бинарные файлы bgi и chr в obj-файл . Используются утилиты системы MS Dos:
BINOBJ «имя бинарного файла » « имя obj –файла» «имя подпрограммы »
Имя подпрограммы используется при подключается с помощью директивы {$L}
BINOBJ egavga.obj egavga.obj dr
BINOBJ trip.chr trip.obj trip
BINOBJ goth.chr goth.obj goth
После выполнения данных утилит будет получено три объектных файла
Пример подпрограммы подключения
Uses graph ;
Var
Gd,gm:integer;
{$L egavga.obj}
Procedure dr ; external;
{$L trip.obj}
Procedure trip; external ;
{$L goth.obj}
Procedure goth; external;
Begin
Gd:=9;
Gm:=1;
Register bgidriver(@dr);
Register bgiFont(@trip);
Register bgiFont(@dgth);
Initgraph (gd,gm, ‘ ’);
…..
Closegraph;
End.
Процедура Register bgidriver используется для загрузки драйвера в память . В качестве параметра используется адрес процедуры , связанной с драйвером процедуры Register bgifont загружается шрифт в память (поддерживает таблицу из m шрифтов , в Паскале – 4 шрифта + default (по умолчанию )).
Процедуры и функции как параметры подпрограмм .
Возможность передачи подпрограмм в качестве параметра другим подпрограммам становиться особенно важной при программной реализации алгоритмов вычисления математике .
Чтобы использовать подпрограмму в качестве параметра , необходимо определить функциональный или процедурный тип ( в зависимости от того , что передается в качестве параметра ).
Функциональный (процедурный ) тип представляет собой тип заголовка подпрограммы , в котором указывается имя типа , ключевое слово , определяющее процедуру или функцию , набор параметров и тип возвращаемого значения , если описывается функциональный тип .
Type
Type_func=function (p:real ; I:integer ):char ;
Type_prac = procedure (a:Boolean );
При таком описании имя подпрограмм не задаются , идентификаторы параметров задаются произвольно . Основной смысл заключается в порядке следования и типах параметра . Необходимо описать реальные подпрограммы , которые будут использоваться как параметры . Данные подпрограммы должны быть описаны как подпрограммы дальнего вызова поскольку при передачи их в качестве параметров необходим полный адрес их размещения : {$F+}; {$F-}; Far.
Пример использования функций в качестве параметров подпрограмм – подсчет определенного интеграла методом треугольника :
=
h= const
,
i=1,2,..,n
Основные переменные – параметры :функция Integral , параметры а – нижний , в – верхний пределы интегрирования , h – шаг интегрирования , Res – результат, ff – функция – параметр , определяющая подынтегральное выражение .
Type
Type_func= function (x_t: real): real;
Var
{$F+}
Function f (x_tmp :real): real;
Begin
F:=1/
(1 + sqr (x_tmp)); {
}
End;
{$F-}
Procedure integral (a, b ,h: real; var res:real; ff :type_func);
Var
X:real ;
Begin
X:=a;
Res:=a;
While (x<=h) do
Begin
Res:=res +h*ff(x+h/2);
X:=x+h;
End;
End;
Begin
Integral (0 , 1 , 0,001,I,f);
Write (i:6:4);
End.
Организация памяти .
Лекция №7
Ссылочный и указательный типы данных. Организация памяти. Типы распределения памяти (статическая, динамическая). Ссылочный тип данных. Работа с адресами. Указатель. Основные операции с ссылочными переменными.
В режиме DOS процессор позволяет адресовать до 1 мегабайта памяти . Обращение к памяти ведется через регистры – указатели , в которых содержаться адреса ячеек памяти , к которым осуществляется обращение (SP- обращение к стеку , ВР – дополнительный указатель стека , IP- указатель команд, SI,DI - индексные регистры ). Эти регистры имеют разрядность 16 бит , в связи с этим прямой доступ к памяти через эти регистры возможен только к 64 кб памяти . Эти 64 кб называют сегментом памяти . Таким образом память организована как последовательность таких сегментов . Для того , чтобы обратиться к какой-либо ячейки необходимо указать ее адрес , который при такой организации памяти представляет собой послать из двух cлов : адрес сегмента (16 бит ) и адрес смещения(16 бит ) .
Фактически для адресации ячейки памяти вычисляется 20 битный физический адрес . Для вычисления этого адреса используется 2 регистра : 1.сегментный регистр (адрес сегмента ) 2. Указательный регистр выделяются 4 сегментных регистра : 1) CS –сегментный регистр кода 2) DS – сегмент регистр данных 3) SS – сегментный регистр стЭка 4) ES – дополнительный ( расширенный ) сегментный регистр данных.
Физический 20 битный адрес вычисляется следующим образом : значение сегментного регистра сдвигается влево на одну 16тиричную цифру и к нему добавляется адреса смещения .
Исходя из этого существует множество способов адресации одной и той же ячейки памяти . Поле компиляции программы и компоновки , программа загружается в память . При этом код программы и данные распределяются по отдельным сегментам памяти , помимо этих 2х сегментов выделяется сегмент стэка , в которых могут записываться параметры и локальные переменные . Адреса с этим сегментами связываются в процессе компиляции .