Помощь - Поиск - Пользователи - Календарь
Полная версия: типизированные файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bast
Разработайте программу вывода файла содержащего некоторые данные. Сведенья о сдаче студентами сесии:
-номер группы;
-фио;
-оценка по 5 экзаментам и зачетам(зачет\незачет).
Вот собственно код
Uses
Crt;
Type
Book = Record
fam:String[20];
name:String[20];
otch:String[20];
End;
Zap=Record
Fio:Book;
n_grup:String[6];
ocenki:String[1];
Zachet:string[7];
End;
Var
fv: file of Zap;
file_name:string;
razmer:Integer;
sved:Zap;
ch:Char;
p,i:Byte;
Procedure Add_Rec;
Begin
WriteLn('Ввдите количество записей');
ReadLn(razmer);
For i:= 1 to razmer do
Writeln('Fam');
ReadLn(sved.fio.fam);
Writeln('n_grup');
readLn(sved.n_grup);
Writeln('ocenki');
readLn(sved.ocenki);
Writeln(' Zachet');
readLn(sved. Zachet);
end;
Procedure Sozd_file;
Var
Ch1:Char;
begin
Writeln('создание файла');
Writeln('введите имя файла');
Read(file_name);
Assign(fv, file_name);
Rewrite(fv);
writeln('введите сведенья');
repeat
Add_rec;
Until Ch1=#27;
Close(fv);
End;
Procedure Out_rec;
Begin
Read(fv,sved);
Writeln(sved.fio.fam);
Writeln(sved.n_grup);
Writeln(sved.ocenki);
Writeln(sved. Zachet);
End;
Procedure Out_All_Rec;
Begin
Writeln('чтение файла');
Writeln('введите имя файла');
readln(file_name);
Assign(fv,file_name);
reset(fv);
seek(fv,0);
While not Eof(fv) do
Close(fv);
End;
Begin
Writeln('1:add_rec');
Writeln('2:Sozd_file');
Writeln('3:Out_rec');
Writeln('4:Out_all_rec');
Case P of
1:Add_rec;
2:sozd_file;
3:Out_rec;
4:out_all_rec;
end;
ReadKey;
End.


мисс_граффити
что сразу бросается в глаза:
Procedure Add_Rec;
Begin
WriteLn('Ввдите количество записей');
ReadLn(razmer);
For i:= 1 to razmer do
begin //<-вот...
Writeln('Fam');
ReadLn(sved.fio.fam);
Writeln('n_grup');
readLn(sved.n_grup);
Writeln('ocenki');
readLn(sved.ocenki);
Writeln(' Zachet');
readLn(sved. Zachet);
end; //<--и вот
end;


 Procedure Out_All_Rec;
Begin
Writeln('чтение файла');
Writeln('введите имя файла');
readln(file_name);
Assign(fv,file_name);
reset(fv);
seek(fv,0);
While not Eof(fv) do
//здесь ничего не забыла?
Close(fv);
End;

и что-то при беглом осмотре не нашла, где оно пишется в файл...
volvo
Цитата
Вот собственно код

И что, собственно? Что-то не работает? Значит, что-то сделала неправильно. Уточняй, что не работает... Навскидку - я вижу, что у тебя в Sozd_File возможен вечный цикл (Ch1 не инициализируется, и не читается ниоткуда, а почему-то сравнивается с #27), да и в файл, собственно, ничего не пишется (Add_Rec вообще придется переписывать полностью)...
zoha
Цитата(мисс_граффити @ 3.01.2008 23:31) *

что сразу бросается в глаза:
Procedure Add_Rec;
Begin
WriteLn('Ввдите количество записей');
ReadLn(razmer);
For i:= 1 to razmer do
begin //<-вот...
Writeln('Fam');
ReadLn(sved.fio.fam);
Writeln('n_grup');
readLn(sved.n_grup);
Writeln('ocenki');
readLn(sved.ocenki);
Writeln(' Zachet');
readLn(sved. Zachet);
end; //<--и вот
end;


 Procedure Out_All_Rec;
Begin
Writeln('чтение файла');
Writeln('введите имя файла');
readln(file_name);
Assign(fv,file_name);
reset(fv);
seek(fv,0);
While not Eof(fv) do
//здесь ничего не забыла?
Close(fv);
End;

и что-то при беглом осмотре не нашла, где оно пишется в файл...


можно обойтесь без процедуры если нужно только по теме не типизированные файлы.
мисс_граффити
Цитата
можно обойтесь без процедуры если нужно только по теме не типизированные файлы.

можно.
а зачем?
с ними намного удобнее... имхо
zoha
Цитата(мисс_граффити @ 4.01.2008 0:38) *

можно.
а зачем?
с ними намного удобнее... имхо



А если попросит обяснить, и скажет мы это не проходили и 2 поставит бедному чуваку!!!! norespect.gif norespect.gif norespect.gif
мисс_граффити
zoha , а ты не заметил, что "бедный чувак"(с) это САМ написал?
Bast
Помогите доделать d3.gif Завтра обязательно надо сдать, последний день, а потом сессия cray.gif cray.gif cray.gif
Bast
mega_chok.gif
Michael_Rybak
Ты получил два ответа и проигнорировал их. Удачи.
Bast
Где я их прогнорировала, я напи сала так как на паре дали
Michael_Rybak
Цитата
Где я их прогнорировала


А где ты кому-то ответила, кроме меня?
Bast
{Сведенья о сдаче студентами сессии:номер группы, ФИО судента, 
оценки по по 5 экзаменам и зачетам}

Uses
Crt;
Type
Book = Record
am:String[20];
name:String[20];
otch:String[20];
End;
Zap=Record
Fio:Book;
n_grup:integer;
ocenki:integer;
Zachet:string[7];
End;
Var
fv: file of Zap;
file_name:string;
razmer:Integer;
sved:Zap;
ch:Char;
p,i:Byte;
Procedure Add_Rec;
Begin
WriteLn('Ввдите количество записей');
ReadLn(razmer);
For i:= 1 to razmer do
Begin
Writeln('Fam');
ReadLn(sved.fio.fam);
Writeln('n_grup');
readLn(sved.n_grup);
For i:= 1 to 5 do
Begin
Writeln('ocenki');
readLn(sved.ocenki);
Writeln(' Zachet');
readLn(sved. Zachet);
end;
end;
End;
Procedure Sozd_file;
Var
Ch1:Char;
begin
Writeln('создание файла');
Writeln('введите имя файла');
Read(file_name);
Assign(fv, file_name);
Rewrite(fv);
writeln('введите сведенья');
repeat
Add_rec;
Writeln (fv,sved);
Until Ch1=#27;
Close(fv);
End;
Procedure Out_rec;
Begin
Read(fv,sved);
Writeln(sved.fio.fam);
Writeln(sved.n_grup);
Writeln(sved.ocenki);
Writeln(sved. Zachet);
End;
Procedure Out_All_Rec;
Begin
Writeln('чтение файла');
Writeln('введите имя файла');
readln(file_name);
Assign(fv,file_name);
reset(fv);
seek(fv,0);
While not Eof(fv) do
Out_rec;
Close(fv);
End;
Begin
Repeat
ClrScr;
Writeln('1:add_rec');
Writeln('2:Sozd_file');
Writeln('3:Out_rec');
Writeln('4:Out_all_rec');
read(p)
Case p of
1:Add_rec;
2:sozd_file;
3:Out_rec;
4:out_all_rec;
end;
Until p=0;
ReadKey;
End.


Вот что у меня поучилось, я исправила все ошибки что мне показали, но все равно не пошет blink.gif
volvo
Цитата
я исправила все ошибки что мне показали
Не все... Перечитай пост №3 внимательно.
Bast
Цитата(volvo @ 10.01.2008 20:00) *

Не все... Перечитай пост №3 внимательно.

В том-то и проблема, что я не могу понять как это сделать
volvo
Твоя программа не только не работает, она даже не компилируется... Во-первых, поле в записи Book должно называться Fam, а не Am... Во-вторых, в процедуре Add_Rec у тебя внутри цикла по i присутствует еще один цикл, тоже по i, что в принципе приведет к очень неожиданным результатам... В третьих -
Writeln (fv,sved);
в той же процедуре смысла не имеет, нельзя WriteLn использовать с типизированными файлами... Это что касается синтаксиса...

Теперь о логике: какой смысл в том, что ты 5 раз подряд читаешь в одну и ту же переменную:
For i:= 1 to 5 do
Begin
Writeln('ocenki');
readLn(sved.ocenki);
Writeln(' Zachet');
readLn(sved. Zachet);
end;

? Может, тебе надо массив оценок сделать все-таки?

Ну, и наконец, я говорил в третьем посте: ты нигде ничего не читаешь в переменную Ch1 (процедура Sozd_File), почему ты думаешь, что цикл Repeat ... Until Ch1 = #27 когда-нибудь закончится?

Исправляй все ошибки, потом продолжим...
noname
Uses
Crt;
Type
Book = Record
fam:String[20];
name:String[20];
otch:String[20];
End;
Zap=Record
Fio:Book;
n_grup:integer;
ocenki:integer;
Zachet:string[7];
End;
Var
fv: file of Zap;
file_name:string;
razmer:Integer;
sved:Zap;
ch:Char;
p,i:Byte;
Procedure Add_Rec;
Begin
WriteLn('Ввдите количество записей');
ReadLn(razmer);
For i:= 1 to razmer do
Begin
Writeln('Fam');
ReadLn(sved.fio.fam);
Writeln('n_grup');
readLn(sved.n_grup);
For i:= 1 to 5 do
Begin
Writeln('ocenki');
readLn(sved.ocenki);
Writeln(' Zachet');
readLn(sved. Zachet);
end;
end;
End;
Procedure Sozd_file;
Var
Ch1:Char;
begin
Writeln('создание файла');
Writeln('введите имя файла');
Read(file_name);
Assign(fv, file_name);
Rewrite(fv);
writeln('введите сведенья');
repeat
Add_rec;
Write(fv,sved);
Until Ch1=#27;
Close(fv);
End;
Procedure Out_rec;
Begin
Read(fv,sved);
Writeln(sved.fio.fam);
Writeln(sved.n_grup);
Writeln(sved.ocenki);
Writeln(sved. Zachet);
End;
Procedure Out_All_Rec;
Begin
Writeln('чтение файла');
Writeln('введите имя файла');
readln(file_name);
Assign(fv,file_name);
reset(fv);
seek(fv,0);
While not Eof(fv) do
Out_rec;
Close(fv);
End;
Begin
Repeat
ClrScr;
Writeln('1:add_rec');
Writeln('2:Sozd_file');
Writeln('3:Out_rec');
Writeln('4:Out_all_rec');
read(p)
Case p of
1:Add_rec;
2:sozd_file;
3:Out_rec;
4:out_all_rec;
end;
Until p=0;
ReadKey;
End.


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.