- •Министерство образования украины
- •Введение
- •Порядок выполнения контрольной работы
- •Cодержание пояснительной записки
- •Контрольная работа № 8 массивы записей
- •Варианты
- •Запросы:
- •Запросы:
- •Запросы:
- •Запросы:
- •Запросы:
- •Запросы:
- •КонтрольныЕ вопросы
- •Контрольная работа № 9 файлы записей (типизированные файлы)
- •КонтрольныЕ вопросы
- •Контрольная работа № 10 динамическая обработка файлов записей
- •КонтрольныЕ вопросы
- •Список использованной и рекомендуемой литературы
- •Приложение 1 пример выполнения контрольной работы № 8
- •П.1.1. Структура записи «товар»
- •П.1.2. Структура базы данных «товаРы»
- •П.1.3. Листинг программы Work8.Pas
- •П.1.4. Описание программы и алгоритмов Описание главной программы
- •Алгоритм выполнения функции MainMenu
- •1: InputRecord; {Создать массив записей}
- •Описание процедурTopT и EndT
- •Описание процедурыInputFields(var Rec: RecType)
- •Описание процедуры OutputRec(rec: RecType)
- •Описание процедурыInputRecord
- •Описание процедурыOutRecord (MaxElem :integer)
- •Описание процедурыZapros1
- •Описание процедуры KeyRec
- •Алгоритм выполнения процедурыChangeDel (flag: boolean)
- •Алгоритм выполнения процедуры AddRecord
- •ПрИложение 2 пример выполнения контрольной работы № 9
- •П.2.1. Структура базы данных «товаРы»
- •П.2.2. Листинг модуля input.Pas
- •П.2.3. Листинг модуля File_Rec.Pas
- •П.2.4. Листинг программы Work9.Pas
- •{Главная программа}
- •ПрИложение 3 пример выполнения контрольной работы № 10
- •Листинг программы Work10.Pas
- •{Главная программа}
- •ПрИложение 4 Расширенные ascii - коды
- •Продолжение табл. П.4.1.
- •Приложение 5 особенности реализации текстового вывода (модуль crt)
- •П.5.1. Пример использования переменной TextAttr
- •П.5.2. Демонстрационный пример
- •Приложение 6 распределение оперативной памяТи
- •П.6.1. Карта памяти программ на Turbo Pascal
- •П.6.2. Монитор кучи
- •П.6.2.1. Освобождение памяти
- •П.6.2.2. Список свободных блоков
- •П.6.2.3. Переменная HeapError
- •П.6.3. Примеры динамических структур данных п.6.3.1. Работа с указателями
- •П.6.3.2. Проверка возможности размещения записи в куче
- •П.6.3.3. Организация очереди
- •П.6.3.4. Организация списка
- •П.6.3.5. Организация стека
- •© Голубь Надежда Григорьевна, кириленко Елена Георгиевна основы программированИя и алгоритмические языки
П.6.3.2. Проверка возможности размещения записи в куче
{Проверка возможности непрерывного размещения записи в куче}
Uses CRT;
Type Rec=
Record
Name : String[30];
Address : String[20];
Sex : char;
age : byte;
End;
Var p: ^Rec;
Begin
ClrScr;
if MaxAvail < SizeOf(Rec) then
Writeln('НЕ хватает памяти для записи Rec!!!!!!')
else
begin
{ Распределение памяти в «куче» определенного размера и получение адреса P }
GetMem(p, SizeOf(Rec));
Writeln('Память под запись Rec удалось непрерывно разместить в куче.....');
{
Рис. П.6.11. Состояние кучи.
}
{ ... Использование динамической памяти, обработка записи Rec... }
{ Освобождение динамической памяти, начиная с адреса P }
FreeMem(p, SizeOf(Rec));
{
Рис. П.6.12. Исходное состояние кучи.
}
end;
Readln
End.
П.6.3.3. Организация очереди
{Очередь - FiFo (First In - First Out) - первый вошел, первый вышел}
Uses CRT;
Type Pointer=^Line;
Line=Record
Inf : Integer;
Next :Pointer
End;
Var Head, {голова очереди}
Tail, {хвост}
First,{очередной первый элемент в очереди}
PointerNew, P : Pointer;
f : Boolean;
{Вставить в очередь целое число}
Procedure PutInLine(Var Head, NewP, Tail : Pointer);
Var a: Real;
Begin
f:=True;
Repeat
Write('Введите целое число====>');
{$I-}
Readln(a);
{$I+}
if IOResult<>0 then {Признак окончания ввода - НЕ числовой символ}
begin
f:=False;
Exit;
end;
Until (IOResult=0)and(a>=-32768)and(a<=32767);
New(NewP);
if Head=Nil Then {Очереди еще нет. Создаем ее.}
Head:=NewP
{
Рис. П.6.13. Первый элемент в очереди.
}
else Tail^.Next:=NewP; {Очередь уже есть - становимся в хвост очереди}
Tail:=NewP; {Новый хвост очереди}
NewP^.Inf:=trunc(a);
NewP^.Next:=Nil;
{
Рис. П.6.14. Образование нового элемента в очереди.
}
{
Рис. П.6.15. Общий вид очереди.
}
End;
{Чтение информации из очереди}
Procedure GetOutLine;
Begin
First:=Head;
if First<>Nil then
begin
Head:=First^.Next;
Write(First^.Inf,' ');
end
End;
Begin
ClrScr;
Head:=Nil; {Очереди пока нет}
Mark(P); {отметка начала кучи - адрес P}
Writeln('============== Создание очереди ======================');
Writeln('Признак окончания ввода - НЕ числовой символ');
Repeat PutInLine(Head, PointerNew, Tail) Until not f;
Writeln('============== Содержимое очереди ============');
if Head=Nil then
begin
Writeln('Очередь пуста...');
Readln;
Readln;
Exit
end;
First:=Head; {Установка указателя в начало очереди - голова очереди}
While First<>Nil do GetOutLine;
Readln;
Readln;
Release(P);{Освобождение кучи, начиная с адреса P}
End.