Основы программирования на языке Паскаль

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

while not Eof(bf) do{ выйти из цикла, когда закончится файл }

begin read(bf,rb);

writeln(nomer:5,avtor:16,Nazv:10,index:6); { вывод на экран }

end; Close(bf); end;

procedure Rash;

begin Assign(bf,C:\TURBO\PRIM\bibl.dos);

Reset(bf);

Seek(bf,Filesize(bf)); { установить указатель на конец файла }

with rb do

while True do

begin writeln(ввести номер); readln(nomer);

if nomer=9999 then begin Close(bf);Exit end;

writeln(ввести имя автора); readln(avtor);

writeln(ввести название книги); readln(nazv);

writeln(ввести значение индекса); readln(index);

write(bf,rb); end;end;

BEGIN { основная программа }

Org; Obr; Rash; Obr; readln;

END.

При создании больших программ их части удобно создавать в виде отдельных файлов (объектов), которые затем с помощью директивы компилятора {$i...} можно объединить в одну программу. Это удобно еще и тем, что несколько программистов могут создавать различные программы, что в несколько раз может ускорить процесс их создания.

Создадим ту же программу, что и Prim 47, только пообъектно, тогда процедуру Org запишем в C:\TURBO\Org1.pas, процедуру Obr в C:\TURBO\Orb1.pas, процедуру Rash в C:\TURBO\Rash1.pas, а вызывающую (основную программу в C:\TURBO\Prim. 48, в которой предусмотрим подключение объектов процедур Org, Obr, Rash к основной программе через директивы компилятора $i.

procedure Org1;

begin

assign(bf,C:\TURBO\bibl.dos);

Rewrite(bf);

with rb do

while True do

begin writeln(ввести номер книги);

readln(nomer);

if nomer=9999 then

begin close(bf); Exit;

end;

writeln(ввести имя автора);

readln(avtor);

writeln(ввести название книги);

readln(nazv);

writeln(ввести название индекса);

readln(index);

write(bf,rb);

end;

end;

procedure Obr1;

begin

Assign(bf,C:\TURBO\bibl.dos);

Reset(bf);

with rb do

while not eof(bf) do

Begin read(bf,rb);

writeln(nomer:5,avtor:16,Nazv:10,index:6);

end;

Close(bf);

writeln(нажмите enter); readln;

end;

procedure Rash1;

begin Assign(bf,C:\TURBO\bibl.dos);

Reset(bf);

Seek(bf,Filesize(bf));

with rb do

while True do

begin writeln(введите номер); readln(nomer);

if nomer=9999 then begin Close(bf);exit end;

writeln(введите имя автора); readln(avtor);

writeln(введите название книги); readln(nazv);

writeln(введите значение индекса); readln(index);

write(bf,rb);

end;end;

Работу построим в режиме меню.

Program Prim48;

label M;

type books=record

nomer:integer;

avtor:string[16];

nazv:string[30];

index:integer; end;

Var bf:file of books;

rb:books; regim:byte;

{$i C:\TURBO\Org1.pas}

{$i C:\TURBO\Obr1.pas}

{$i C:\TURBO\Rash1.pas}

BEGIN

M: writeln(введите режим работы);

writeln(1 создание, 2 обработка,

3 расширение, 4 выход);

readln(regim);

case regim of

1:Org1;

2:Obr1;

3:Rash1;

4:Exit; else writeln(неправильно задан режим); end;

goto M;

END.

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

Program Prim49;

label M1,M2 ;

type books=record

nomer:integer;

avtor:string[16];

nazv:string[30];

index:integer; end;

Var bf:file of books;

rb:books; regim:byte; si:char; fl:string;

{$i C:\TURBO\Org.pas}

{$i C:\TURBO\Obr.pas}

{$i C:\TURBO\Rash.pas}

BEGIN

M1: writeln(где будет храниться файл? диск:\каталог\имя),

readln(fl);

M2: writeln(введите режим работы);

writeln(1 создание, 2 обработка,

3 расширение, 4 выход);

readln(regim);

case regim of

1:Org;

2:Obr;

3:Rash;

4:begin writeln(будем ещё работать с файлами? - "Y");

writeln(или конец работы любая клавиша);

readln(si);

if (si=Y)or(si=y) then goto M1 else HALT; end;

else begin writeln(неправильно задан режим);

goto M2; end; end; goto M2;

END.

Procedure Org2;

begin

assign(bf, fl);

Rewrite(bf);

with rb do

while True do

begin writeln(введите номер книги);

readln(nomer);

if nomer=9999 then

begin close(bf); Exit end;

writeln(введите имя автора);