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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2008, 23:42   #1
GaJIbI4
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 77
Сообщение требуется помощь записи и типизированные файлы в паскале

Задача такая создать файл с фамилией именем отчеством и годом рождения студентов, выбрать самого старшего студента. Моя прога выводит не самого младшего а всех разберитесь пожалуйста

Код:
type
ANKETS=RECORD
FAM,IM,OT:string[20];
G:integer;
end;
Spisok=FILE OF ANKETS;

var
SPI:SPISOK;
AN:ANKETS;
D:array [1..3] of spisok;
B:integer;
i,C:integer;
begin
assign(SPI, 'D:\BID3D.DAT');
rewrite(SPI);
for I:=1 to 3 DO
begin
With AN do
begin
readln(FAM);
readln(IM);
readln(OT);
readln(G);
end;
write(SPI,AN);
end;
close(SPI);
RESET(SPI);
B:=2000;

for I:=1 to 3 do
begin
read(SPI,AN);
if B<=AN.G then B:=AN.G;
if AN.G<>B then writeln('    ',AN.FAM,'    ',AN.IM,'    ',AN.G);
end;
close(SPI);
end.
GaJIbI4 вне форума Ответить с цитированием
Старый 27.11.2008, 00:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
выбрать самого старшего студента.
если учесть, что старших может быть несколько (несколько с одинаковым годом рождения), то прийдётся либо заводить массив для их хранения, либо (более предпочтительно) - проходить по файлу с данными два раза - первый раз ищем минимальный год (самый старший), второй раз - банально выводим всех студенов, у которых год равен найден минимальному.

если же допустить, что достаточно вывести только одного "старшого", то код упрощается до банальности:
Код:
var
  MaxStud : ANKETS;
....

  Reset(SPI);
  MaxStud.G := MaxInt;
  while Not Eof(SPI) do begin
     Read(SPI,AN);
     if AN.G<MaxStud.G then MaxStud := AN;
  end;
  {проверили -вдруг записей вообще нет...}
  if MaxStud.G <> MaxInt then
     writeln('    ',MaxStud.FAM,'    ',MaxStud.IM,'    ',MaxStud.G);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.11.2008, 15:41   #3
GaJIbI4
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 77
По умолчанию

вывести всех студенов, у которых год равен найденому минимальному.
так будет?, чёт неработает
Код:
while Not Eof(SPI) do
begin
Read(SPI,AN);
while  MaxStud.G = AN.G do
writeln('    ',MaxStud.FAM,'    ',MaxStud.IM,'    ',MaxStud.G);
end;
GaJIbI4 вне форума Ответить с цитированием
Старый 27.11.2008, 21:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

GaJIbI4, без обид, но, похоже, Вы не понимаете, что Вы пишете в коде ;-(
Ну какой же WHILE ??? "выполнять пока" ?! ;-(
надо WHILE ... do заменить на IF ... THEN

Вот, например, можно так:
Код:
var
  GodMin : Integer;
begin
...
  Reset(SPI);
  GodMin := MaxInt;
  {первый цикл - проходим по всем записям, 
    ищем минимальный год и сохраняем его в GodMin}
  while Not Eof(SPI) do begin
     Read(SPI,AN);
     if AN.G<GodMin then GodMin := AN.G;
  end;

  {а вот и второй цикл - вывод данных}
  Seek(SPI,0); { <- установим указатель на начало файла}
  while Not Eof(SPI) do begin
     Read(SPI,AN);
     if AN.G=GodMin then 
        writeln('    ',MaxStud.FAM,'    ',MaxStud.IM,'    ',MaxStud.G);
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типизированные файлы Xeon332 Помощь студентам 8 27.02.2009 20:15
типизированные файлы MyQwErTy Паскаль, Turbo Pascal, PascalABC.NET 7 11.11.2008 20:54
типизированные и нетипизированные файлы andrey4623 Общие вопросы Delphi 1 28.12.2007 19:09
Типизированные файлы в C++ Builder Amateur Помощь студентам 3 12.11.2007 20:42