
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Другие функции используемые при прямом доступе
Filesize(f); - возвращает количество записей типа longint(0, если файл пустой)
Filepos(f); - возвращает значение longint, которое показывает текущую позицию указателя в файле(номер условной границы)
Пример
If filepos(f)=filesize(f) then write(‘’);
While filepos<>filsesize(f) do
Read(f,ch);
К последней записи
Seek(f,filesize(f)-1);
Reed(f,ch);
Truncate(f); - отсекает часть открытого файла с условной границы, на которой установлен указатель, подтягивая конец файла к этой границе.
Пример:
Seek(f,10);
Truncate(f);
Добавление записи в т.п. с помощью процедуры Reset.
reset(f);
Seek(f, filesize(f));
write(f, ch);
reset(f);
write(f, ‘*’);
close(f);
пример: пусь требуется записать в файл три записи содержащие слово «строка»,и к концу строки добавить номер записи в файле.
const
st:string=’строка’;
var
f:FILE of string;
s:strig;
i:byte;
begin
.
.
Rewrite(f);
For i:=1 to 3 do
Begin
S:=’’;
Str(i,s);
St:=st+s;
Write(f,st);
Delete(st,7,1);
End;
Close(f);
Reset(f);
Write(f,st);
Close(f);
Лекция №15
Файлы ввода/вывода. Не типизированные файлы ввода/вывода. Процедура работы с не типизированным файлом.
Не типизированные файлы и операции над ними.
Эти файлы состоят из машинных представлений данных, причем в отличие от типизированных файлов, данные могут быть произвольных типов. с помощью этих файлов можно записывать на внешний носитель произвольные участки памяти и считывать их обратно.
Определение
f: file; - объявление ф.п.
Reset(<ф.п.>, <размер буфера>);
Rewrite(<ф.п.>, <размер буфера>); - используя эти процедуры, можно явно указать размер буфера ввода/вывода, который указывается вторым параметром.
Если 2 параметр не указан, то по умолчанию размер буфера 128 байт. Размер буфера показывает какое количество байт будет считываться из файла или записываться в файл за одно обращение. Минимальный размер буфера 1 байт, а максимальный 64 кб. Т.к. чтение и запись в не типизированные файлы производится блоками, то вместо процедур write и read используются процедуры
Для чтения BlockRead(<>, <>, <N>, [,<NN>]);
Для записи BlockWrite (<>, <>, <N>, [,<NN>]);
Первой процедурой информация из файла записывается в буферную переменную. Второй процедурой осуществляется запись данной буферной переменной в файл.
Параметр <N> определяет количество записей, которое должно быть прочитано или записано за 1 обращение к диску. Если N=1 то за 1 обращение будет считана и записана 1 ёмкость буфера. Если N>1, то запишется N ёмкостей буфера.
N<1 – не имеет смысла!
При установке значения N необходимо учитывать, чтобы выполнялось условие N* размер буфера было меньше 64 кб.
параметр NN возвращает количество фактически обработанных( записанных или считанных с записи) ёмкостей буфера. Если после завершения работы с файлом NN =N, то можно считать , что работа прошла успешно. В противном случае будет содержать количество успешно записанных емкостей буфера. Неудача посередине блока равносильна отмене его чтения или записи. При использование процедур blockread и blockwrite буферная переменная (без типовая) определяет адрес памяти начиная с которого заданная параметром N и буфером количество байт будет писаться в файл или читаться из него.
Пример записи и чтения в файла.
***
const
a:array[1..5] of byte=(1,2,3,4,5);
var
b:array[1..5] of byte;
f:file;
NN:word;
begin
Assign(f, ‘a.dat’);
rewrite(f,5);
Blockwrite(f, <>, 1, NN);
close(f);
reset (f,5);
Blockread(f, <>, 1,NN);
close(f);
***
Поскольку под статические переменные память отводится в порядке их следования в описание, то возможно записать или считать блоком сразу несколько структур данных.
Пример считывания статических данных.
Var
A,b,c:array[1..10] of byte;
.
.
Begin
.
.
Rewrite(f,sizeof(a));
Blockwrite(f,a,3);
Close(F);
.
.
RESET(f,sizeof(a));
Blockread(f,a,3);
Close(f);
Запись и чтение динамического массива.
Type
Mas=array[1..10] of byte;
Var
P:^mas;
F:file;
I:byte;
Begin
New(p);
For i:=1 to 10 do
P^[i]:=I;
Assign(f,’a’);
Rewrite(f,sizeof(mas));
Blockwrite(f,p^,1);
Close(f);
Использование не типизированного файла для хранения образа текстового экрана.
Type
V=record;
Inf:char;
Attr:byte;
End;
Mas_v=array[1..200] of v;
Var
F:file ;
Ptr_V:^MAS_v;
.
.
Ptr_v:=ptr($b800,$0);
Assign(f,’a’);
Rewrite(f,sizeof(mas_v));
Blockwrite(f,ptr_v^,1);
Close(f);
Модульность программ
ЛЕКЦИЯ №16
Модульность программ. Структура модуля. Библиотечные и программные данные. Компиляция модулей. Правила подключения модулей, загрузка в память, перекрытие библиотечных данных. Закольцованность модулей.
Под модульностью понимают принцип построение программ из отдельных программных единиц - модулей .
В паскале модуль представляет собой автономно компенсируемую программную единицу , включающую в себя различные компоненты раздела описаний такие как типы : константы , константы , процедуры и функции , а так же может включать исполнимые операторы инициирующей части .
Модули используют в следующих случаях:
Для создание (построение ) программ код , которых превышает 64 кб. , таким образом модульность позволяет создавать программы практически любого размера . Сам код модуля не может превышать 64 кб. Поскольку модули при подключении к программе загружаются в ОЗУ , то количество подгружаемых модулей ограничивается объемом ОЗУ . (при условии если не используется оверлейная структура организации модулей )
Для построения собственных библиотек процедур и функций , которые можно подключать к различным программам . Это использование модулей аналогично использованию стандартных библиотек Паскаля таких как Crt , Graph, Dos , overlay .(они организованны как модули )