ЗАДАНИЕ 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.
помогите её закончить!!! плиииз! Очень нужно!!!
Паскаль. Типизированные файлы. Текстовые файлы.
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
Открыть выходной файл для чтения.
Вывести обновленную таблицу на экран
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);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Код программы 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.
но здесь не записываются и не сортируются данные в текстовом файле ((
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.
но здесь не записываются и не сортируются данные в текстовом файле ((