Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 22:36   #1
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию запись в типизированый файл

Задача была такова: нужно было ввести в таблицу и отсортировать тех студентов в которых средний бал 4.
Теперь вот этот код:
Код:
const
     n=4;
type
    student=record
    N:byte;
    prizv:string;
    matan:real;
    prog:real;
    Os:real;
    alg:real;
    end;
  var 
        i:integer;
        tabl:array[1..n] of student;
 procedure lin(m:integer);
        var 
           i:integer;
 begin
 for i:=1 to m do 
 write('-');
 writeln;
 end;
 begin
 writeln('VVedi dani stydentiv');
 for i:=1 to 4 do
 begin
 tabl[i].N:=i;
 readln(tabl[i].Prizv,tabl[i].matan,tabl[i].prog, tabl[i].OS, tabl[i].alg);
 end;
 Lin(69);
 writeln('|   | Призвіще | Matematuchnuy | Programyvannya | OS | Algebra | cer|');
writeln('|   |          |    analis     |                |    |  i geom.|    |');
Lin(69);
For i:=1 to n do
begin
write('|', tabl[i].N:2,' |', tabl[i].Prizv:10, '|');
write(tabl[i].matan:15,'|',tabl[i].prog:16,'|', tabl[i].OS:4,'|', tabl[i].alg:9,'|',((tabl[i].matan+tabl[i].prog+tabl[i].OS+tabl[i].alg)/n):0:2,'|');
writeln;
Lin(69);
end;
writeln;
writeln('vidcortov');
Lin(69);
For i:=1 to n do
begin
If ((tabl[i].matan+tabl[i].prog+tabl[i].OS+tabl[i].alg)/4>=4) then
begin
write('|', tabl[i].N:2,' |', tabl[i].Prizv:10, '|');
write(tabl[i].matan:15,'|',tabl[i].prog:16,'|', tabl[i].OS:4,'|', tabl[i].alg:9,'|',((tabl[i].matan+tabl[i].prog+tabl[i].OS+tabl[i].alg)/n):0:2,'|');
writeln;
Lin(69);
end;
end;
end.
нужно превратить в типизированый файл, тоесть просто в файл записать введеные в таблицу данные! Вот что вышло:
Код:
const
     n=4;
type
    student=record
    N:byte;
    prizv:string;
    matan:real;
    prog:real;
    Os:real;
    alg:real;
    end;
  var 
        i:integer;
        tabl:array[1..n] of student; tabik:file of student;
 procedure lin(m:integer);
        var 
           i:integer;
 begin
 for i:=1 to m do 
 write('-');
 writeln;
 end;
 begin
assign(tabik,'d:\result.pas');
rewrite(tabik);
 writeln('VVedi dani stydentiv');
 for i:=1 to 4 do
 begin
 tabl[i].N:=i;
 readln(tabl[i].Prizv,tabl[i].matan,tabl[i].prog, tabl[i].OS, tabl[i].alg);
  write(tabik,tabl[i]);
 end;
 Lin(69);
 writeln('|   | Призвіще | Matematuchnuy | Programyvannya | OS | Algebra | cer|');
writeln('|   |          |    analis     |                |    |  i geom.|    |');
Lin(69);
reset(tabik);
For i:=1 to n do
begin
write('|', tabl[i].N:2,' |', tabl[i].Prizv:10, '|');
write(tabl[i].matan:15,'|',tabl[i].prog:16,'|', tabl[i].OS:4,'|', tabl[i].alg:9,'|',((tabl[i].matan+tabl[i].prog+tabl[i].OS+tabl[i].alg)/n):0:2,'|');
writeln;
Lin(69);
end;
writeln;
writeln('vidcortov');
Lin(69);
For i:=1 to n do
begin
If ((tabl[i].matan+tabl[i].prog+tabl[i].OS+tabl[i].alg)/4>=4) then
begin
write('|', tabl[i].N:2,' |', tabl[i].Prizv:10, '|');
write(tabl[i].matan:15,'|',tabl[i].prog:16,'|', tabl[i].OS:4,'|', tabl[i].alg:9,'|',((tabl[i].matan+tabl[i].prog+tabl[i].OS+tabl[i].alg)/n):0:2,'|');
writeln;
Lin(69);
end;
end;
close(tabik);
readln
end.
но в файл сохраняет только 1 введеную фамилию ( и всё помогите исправить пожалуйста
mishammm вне форума Ответить с цитированием
Старый 11.12.2013, 22:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, должно писать четыре записи в файл.
Только обязательно закройте файл перед его открытием на чтение!!!
И, кстати, зачем Вы открываете файл на чтение и НЕ ЧИТАЕТЕ из него?!

Кроме того, в связи с тем, что Вы КАЖДЫЙ раз при запуске программы перезаписываете файл и заставляете пользователя вводить заново все четыре записи, то Вы можете и не заметить, что в файле реально 4 (четыре) записи, а не одна.

Рекомендую вынести код записи данных в отдельную программу или, хотя бы в отдельную процедуру, которую вызывать только при необходимости!

ну, например, так:
Код:
const
  n = 4;
type
  student = record
    N: byte;
    prizv: string;
    matan: real;
    prog: real;
    Os: real;
    alg: real;
  end;
var
  i: integer;
  tabl: array[1..n] of student; tabik: file of student;
  otv: integer;

procedure lin(m: integer);
var i: integer;
begin
  for i := 1 to m do write('-'); writeln;
end;

begin
  assign(tabik, 'd:\result.dat');

  Write('Perezapisat fail ? (1 - tak, 0 - ni):');
  ReadLn(otv);
  if otv = 1 then
  begin
    rewrite(tabik);
    writeln('VVedi dani stydentiv');
    for i := 1 to n do
    begin
      tabl[i].N := i;
      readln(tabl[i].Prizv, tabl[i].matan, tabl[i].prog, tabl[i].OS, tabl[i].alg);
      write(tabik, tabl[i]);
    end;
    Close(tabik);
  end;

  {прочитать из файла в массив}
  reset(tabik);
  for i := 1 to n do
    Read(tabik, tabl[i]);
  Close(tabik);

  Lin(69);
  writeln('|   | Призвіще | Matematuchnuy | Programyvannya | OS | Algebra | cer|');
  writeln('|   |          |    analis     |                |    |  i geom.|    |');
  Lin(69);
  for i := 1 to n do
  begin
    write('|', tabl[i].N: 2, ' |', tabl[i].Prizv: 10, '|');
    write(tabl[i].matan: 15, '|', tabl[i].prog: 16, '|', tabl[i].OS: 4, '|', tabl[i].alg: 9, '|', ((tabl[i].matan + tabl[i].prog + tabl[i].OS + tabl[i].alg) / n): 0: 2, '|');
    writeln;
    Lin(69);
  end;
  writeln;
  writeln('vidcortov');
  Lin(69);
  for i := 1 to n do
  begin
    if ((tabl[i].matan + tabl[i].prog + tabl[i].OS + tabl[i].alg) / 4 >= 4) then
    begin
      write('|', tabl[i].N: 2, ' |', tabl[i].Prizv: 10, '|');
      write(tabl[i].matan: 15, '|', tabl[i].prog: 16, '|', tabl[i].OS: 4, '|', tabl[i].alg: 9, '|', ((tabl[i].matan + tabl[i].prog + tabl[i].OS + tabl[i].alg) / n): 0: 2, '|');
      writeln;
      Lin(69);
    end;
  end;
  readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2013, 02:36   #3
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

спасибо вам! файлы немонго не понял. а так хочу где то книжку толковую по паскалю найти где всё в примерах
mishammm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(типизированый файл)Уже три часа сижу над задачей не знаю как записать правильно idzaya2311 Паскаль, Turbo Pascal, PascalABC.NET 3 02.12.2013 09:39
Типизированый файл Sina Помощь студентам 1 17.12.2009 20:36
Программа. Типизированый файл. Ввод данных. ArtS Помощь студентам 0 07.12.2009 17:02
Можно ли в типизированый файл записывать обьекты класса? Tania Общие вопросы Delphi 1 19.04.2007 13:17