- •Обращение к полям записи
- •Оператор with
- •Записи с вариантами
- •Рекурсия
- •Вычислить n!
- •Вычисления чисел Фибоначчи
- •Вычисления значений формул
- •Быстрая сортировка
- •Процедуры и функции общие для всех типов файлов
- •Режимы работы файла
- •Опция компиляции
- •Процедуры и функции модуля system
- •Процедуры и функции для типизированных файлов
- •Как добиться прямого доступа??
- •Стандартная конструкция редактирования файла
- •Тектовые файлы
- •Процедуры и функции для текстовых файлов
- •Способы считывания
- •Бинарные файлы
- •Работа с динамической памятью
- •Pointer
- •Дерево Absolute
- •Типизированные ( переменные ) указатели
- •Процедуры работы с кучей
- •Динамические массивы
- •Связные списки
- •Упорядоченные списки
- •Деревья
Бинарные файлы
Компонента занимает от 1 до 64 кбайт.
Процедуры и функции:
Procedurereset(varf:file[;n:word]);{Открывает бинарный файл для чтения поnбайт}
Rewrite (var f:file [;N:word]);
Filesize(var f):longint {Разме файла в компанентах} {по умолчанию считается порция 128 байт}
Blockread (var f:file; var buf; cont:word; [var rez:word]) {Эта процедура считывает из файла F в буфер buf кол-во КОМПОНЕНТ count . параметр rez позволяет контролировать сколько компонент ьыло прочитано}
Blockwrite (var f:file; var buf; count:word; [var rez:word]);
Buf>=N*count(N- Размер компоненты)
Var i:integer; qaz:record;
G:integer;
M:string;
End;
F:file’
begin;
assignfile(f,’a.txt’);
rewrite(f);
for i:=1 to 10 do begin
readln(qaz.g);
readln(qaz.m);
blockwrite(f,qaz,1);
End;
Closefile(f);
End.
Program copyfile;
Var formF, ToF:file;
numRead,numwritten:word;
buf:array[1..512] of byte;
srt1,str2:string;
begin
assignfile(fromF,str1);
{sI-}
Reset(formf,1);
{$I+}
If ioresult<>0 then begin
Writeln(‘Файл-источник не найден’);
Halt;
End;
Assignfile(tof,str2);
Rewrite(tof,1);
Writeln(‘Копиуем’,filesize(formf),’байт ‘ );
Repeat
Blockread(fromF,buf,size(buf),numread);
Blockwrite(tof,buf,numread,numwriteln);
Unti (numread=0) or(numwriteln<>numread);
Closefile(fromF);
Closefile(tof);
End.
Для чего нужны бинарные файлы:
Работа с файлами для которой не важна природа данных хранящихся в файлах
Запись в файл только необходимой информации. Только те данные что информативны для нас. Эффективное храненнние данных
Var f:file; n:integer;
t:Boolean;
nomer:byte;
rec:record
group:integer;
memo:string:
end;
begin
nomer:=1;
assignfile(f,’b.txt’);
reset(f);
while not eof(f) do begin
t:=(nomer mod 2)=0
blockread(f,rec,1);
if t then begin
writeln(rec.group);
writeln(rec.memo);
end;
inc(nomer);
end;
closefile(f);
end.
Type TRec= record
Group:integer;
Name:string[30];
End;
Var f,f1:file;
Procedure writenew;
Var a:trec;
Len:byte;
Begin
Write (‘Номер’); readln(a.group);
Write(‘Имя’); readln(a.name);
Len:=length(a.name);
Reset(f,1);
Seek(f,filesize(f));
Blockwrite(f,a.group,4);
Blockwrite(f,len,1);
Blockwrite(f,a.name,len);
Close(f);
Var
Group:integer;
Meno:string;
I:byte;
F,f2:file;
Bb:Boolean;
Procedure writeff;
Begin
Reset(f,1);
Seek(f,filesize(f));
Readln(group); readln(memo);
Blockwrite (f,group,2);
Blockwrite(f,memo[o],1);
For i:=1 to length(memo) do
Blockwrite(f,memo[i],1);
End;
Procedure readff;
Begin
Reset(f,1);
Reset(f2,1);
Repeat
Blockread(f,group,2);
Blockread(f,memo[0],1);
Blockread(f,memo,ord(memo[0]));
Bb:=false;
For i:=1 to length(memo) do
If memo[i] in [‘0’..’9’]); then bb:=true;
If not bb then blockwrite(f2,memo,length(memo)+1);
Until eof(f);
End;
Работа с динамической памятью
Оперативная память компьютера представляет собой совокупность элементарных ячеек для хранения информации – байтов, каждый из которых имеет номер. Эти номера – адреса позволяют, обращается к любому байту.
Гибкое средство управление динамической памятью – указатель.
Указатель – Это переменная, которая в качестве своего значения содержит адрес байта памяти. Адрес задается двумя шестнадцатиразрядными словами (в двоичной СС).
Адрес = Сегмент : Смещение
Сегмент – это участок памяти, имеющий длину 64кб и начинающийся с адреса, кратного 16.
Смещение указывает, сколько байт от начала сегмента нужно пропустить, что бы обратится к нужному байту.
СА = сегмент*16+Сегмент (Стандартный адрес)
Сегмент = СА div16
Смещение = СAmod16
Виды памяти:
Куча(heap)
Стек
Сегмент данных
Рабочий код модуля
Служебная информация
Options/compile/memorysize
{$M…}
{$M, стек, тип Heap, max Heap}
По умолчанию: {$M. 16384.0.655360}
Стек: 0..65520
MinHeap: 0..655360
Max heap^ 0..655360