Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование 2 семестр 1 курс.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
523.82 Кб
Скачать

Другие функции используемые при прямом доступе

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

Модульность программ. Структура модуля. Библиотечные и программные данные. Компиляция модулей. Правила подключения модулей, загрузка в память, перекрытие библиотечных данных. Закольцованность модулей.

Под модульностью понимают принцип построение программ из отдельных программных единиц - модулей .

В паскале модуль представляет собой автономно компенсируемую программную единицу , включающую в себя различные компоненты раздела описаний такие как типы : константы , константы , процедуры и функции , а так же может включать исполнимые операторы инициирующей части .

Модули используют в следующих случаях:

  1. Для создание (построение ) программ код , которых превышает 64 кб. , таким образом модульность позволяет создавать программы практически любого размера . Сам код модуля не может превышать 64 кб. Поскольку модули при подключении к программе загружаются в ОЗУ , то количество подгружаемых модулей ограничивается объемом ОЗУ . (при условии если не используется оверлейная структура организации модулей )

  2. Для построения собственных библиотек процедур и функций , которые можно подключать к различным программам . Это использование модулей аналогично использованию стандартных библиотек Паскаля таких как Crt , Graph, Dos , overlay .(они организованны как модули )