Помощь - Поиск - Пользователи - Календарь
Полная версия: типизированные файлы
Форум «Всё о Паскале» > 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. 


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