Страница 1 из 1

Паскаль. Типизированные файлы. Текстовые файлы.

Добавлено: 20 дек 2009, 15:19
maxster
ЗАДАНИЕ 1
Постановка задачи:
a)Создать типизированный файл заданной структуры, заполнить его информацией, вывести данные в виде таблицы на экран. (Файлы, создаваемые в задании, должны содержать не менее 5-ти строк).
b)Разработать подпрограмму обработки данного файла.
Вариант 19.
a)Создать файл, содержащий сведения о личной коллекции книголюба: шифр книги, автор, название, год издания, местоположение (номер шкафа, стеллажа и т.п.), упорядоченных по алфавиту.
b)Добавить в файл информацию о новых книгах таким образом, чтобы упорядоченность не нарушилась.
ЗАДАНИЕ 2
Выполнить ЗАДАНИЕ 1 с использованием текстового файла. Данные в текстовый файл вывести в виде таблицы.

вот часть кода:
Program Pr_1;
uses crt;
Type Knigolub=record
Shrift:string;
Avtor:string[10];
Nazvanie:string[20];
God:byte;
Mestopol:string[20];
end;
var f,g:file of Knigolub;
s,s1:knigolub;i:integer;

Procedure Zapol_File;
begin

rewrite(f);

for i:=1 to 5 do
begin
write('Avtor ');
readln(s.Avtor);
write('Srift ') ;
readln(s.Shrift);
write('Nazvanie ');
readln(s.Nazvanie);
write('God ');
readln(s.God);
write('Mestopol ');
readln(s.Mestopol);
write(f,s);
end;
close(f);
end;

procedure Find_Poz;
var poz:integer;
begin
reset(f);
rewrite(g);
repeat

read(f,s);
until eof(f) or (s.Mestopol>s1.mestopol) ;
if not eof(f) then
poz:=filepos(f)+1;
end;

procedure Copi_V_Temp;
begin
write(g,s);
while not eof(f) do
begin
read(f,s);
write(g,s);
end;
close(f);
close(g);
end;

procedure Vstavka;
var poz:integer;
begin
Find_poz;
if not eof(f) then
begin
copi_v_Temp;
reset(f);
reset(g);
seek(f,poz);
write('Avtor ');
readln(s.Avtor);
write('Srift ') ;
readln(s.Shrift);
write('Nazvanie ');
readln(s.Nazvanie);
write('God ');
readln(s.God);
write('Mestopol ');
readln(s.Mestopol);
write(f,s1);
while not eof(g) do
begin
read(g,s);
write(f,s);
end;
end
else
write(f,s1);
close(f);
close(g);
end;

BEGIN
clrscr;
assign(f,'D:\KNIGOLUB.dat');
assign(g,'D:\KNIGI.dat');
Zapol_File;
vstavka;

END.

помогите её закончить!!! плиииз! Очень нужно!!!

Re: Паскаль. Типизированные файлы. Текстовые файлы.

Добавлено: 21 дек 2009, 10:09
Хыиуду
Type Knigolub=record
Shrift:string;
Avtor:string[10];
Nazvanie:string[20];
God:byte;
Mestopol:string[20];
end;
Ну, во-первых не Шрифт, а Шифр. И его следовало бы как раз ограничить - вряд ли там больше 10-15 символов. А вот фамилию автора и название книги вы жестоко урезали до 10 и 20 символов. Салтыков-Щедрин, "Повесть о том, как один мужик двух генералов прокормил", на свете не существует?
Год в байте - это тоже сильно. После 255 года нашей эры книги не выпускались? Сделайте word.
Далее: на кой вам сдался входной файл, если вы все равно каждый раз при запуске программы вводите данные заново? Сделайте считывание их из файла.
write('Avtor ');
readln(s.Avtor);
write('Srift ') ;
readln(s.Shrift);
write('Nazvanie ');
readln(s.Nazvanie);
write('God ');
readln(s.God);
write('Mestopol ');
readln(s.Mestopol);
- вот это вот все неплохо бы вынести в отдельную процедуру. И вывод содержимого файла на экран - тоже.
Алгоритм работы, я полагаю, таков:
Считать из входного файла все данные
Вывести на экран
Ввести новую книгу в переменную s
Открыть выходной файл для чтения.

Код: Выделить всё

repeat
   read(f,s1);
   if s1.mestopol<s.mestopol
      then write(g,s1)
  else begin write(g,s); write(g, s1); end;
until (s1.mestopol>s.mestopol) or eof(f);
if eof(f) then write(g,s)
else 
repeat
   read(f,s1);
   write(g,s1);
until eof(f);
Вывести обновленную таблицу на экран

Re: Паскаль. Типизированные файлы. Текстовые файлы.

Добавлено: 21 дек 2009, 12:03
maxster
Код программы 1:
uses crt;
type knigolub = record
shifr:string[30];
avtor:string[20];
nazvanie:string[20];
god:string[4];
mestopol:string[15];
end;


var knigi:knigolub;
f:file of knigolub;
g:text;

i, max, n:word;

begin
clrscr;
assign(f, 'knigi.dat');
rewrite(f);
writeln('Vvodite dannie o knigax');
repeat
with knigi do
begin

write('Shifr: ');readln(shifr);
write('Avtor: ');readln(avtor);
write('Nazvanie: ');readln(nazvanie);
write('God Izdaniya: ');readln(god);
write('Mestopologhenie: ');readln(mestopol);
end;
write(f, knigi);
writeln('ENTER-prodolghenie vvoda, ESC-zavershenie vvoda');
until readkey=#27;

clrscr;

reset(f);
writeln('Spisok knigoluba:' :40);
writeln;
writeln('-----------------------------------------------------------------------');
writeln('| Shifr | Avtor | Nazvanie | God Izdaniya | Mestopologhenie |');
writeln('-----------------------------------------------------------------------');
while not eof(f) do
begin
read(f, knigi);
with knigi do
begin
gotoXY(1,whereY);write('| ',shifr);
gotoXY(11,whereY);write('| ',avtor);
gotoXY(21,whereY);write('| ',nazvanie);
gotoXY(34,whereY);write('| ',god);
gotoXY(51,whereY);write('| ',mestopol);
gotoXY(71,whereY);write('|');
end;
writeln;
end;
writeln;
close(f);

writeln('ENTER - exit programm');


readkey;

end.

не хватает сортировки по алфавиту, да и последующее добавление не осуществлено ( помогите пожалуйста с этим..

код программы 2:
uses crt;
var
f:text;
god:string[4];
n,k:integer;
tek:string[25];

procedure output(var a:text);

begin
reset(a);
writeln;
while not eof(a) do
begin
readln(a,tek);
write(tek);
end;
close(a);

procedure add(var a:text);
begin
append(a);
write('Vvedite kol-vo dobavliayemix
{clrscr;
repeat
assign(f, 'knigi.txt');
reset(f);
write('Shifr: ');
readln(shifr);
write('Avtor: ');
readln(avtor);
write('Nazvanie: ');
readln(nazvanie);
write('God: ');
readln(god);
write('Mestopologhenie: ');
readln(mestopol);

until readkey = #27;
writeln('Sozdan fail KNIGI.TXT soderghashiy informaciyu o knigax,');

end.

{Max := i;}
{with knigi do
for i := 1 to n-1 do
for j := i to n do
if a.avtor > a[j].avtor then
begin
temp := a;
a := a[j];
a[j] := temp;
end;
b := a;
end;

begin

clrscr;
assign(f, 'knigi.dat');
rewrite(f);
writeln('Vvodite dannie o knigax');
repeat
with knigi do
begin

write('Shifr: ');readln(shifr);
write('Avtor: ');readln(avtor);
write('Nazvanie: ');readln(nazvanie);
write('God Izdaniya: ');readln(god);
write('Mestopologhenie: ');readln(mestopol);
end;
write(f, knigi);
writeln('ENTER-prodolghenie vvoda, ESC-zavershenie vvoda');
until readkey=#27;

clrscr;
begin
Sortirovka(Mas, Max, Mas);

assign(g, 'KNIGI.txt');
rewrite(g);
for i := 1 to n do
begin
write(g, Mas.shifr:31);
write(g, Mas.avtor:20);
write(g, Mas.nazvanie:11);
write(g, Mas.god:13);
write(g, Mas.mestopol:10);
end;
close(g);
writeln('Sozdan fail KNIGI.TXT soderghashiy informaciyu o knigax,');
writeln('uporiadochennaya v alfavitnom poriadke');
writeln;
end;
}
{reset(f);}
append(f);
writeln('Spisok knigoluba:' :40);
writeln;
writeln('-----------------------------------------------------------------------');
writeln('| Shifr | Avtor | Nazvanie | God Izdaniya | Mestopologhenie |');
writeln('-----------------------------------------------------------------------');
{while not eof(f) do}
begin
read(f, knigi);
with knigi do
begin
gotoXY(1,whereY);write('| ',f.shifr);
gotoXY(11,whereY);write('| ',avtor);
gotoXY(21,whereY);write('| ',nazvanie);
gotoXY(34,whereY);write('| ',god);
gotoXY(51,whereY);write('| ',mestopol);
gotoXY(71,whereY);write('|');
end;

end;
read(f, shifr, avtor, nazvanie, god, mestopol);

close(f);

end.

но здесь не записываются и не сортируются данные в текстовом файле ((