Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача. Записи+Файлы, Как прочитать запись из файла 
V
    Опции темы
GreMail
Дата 13.9.2009, 19:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.10.2006

Репутация: нет
Всего: 1



Собственно задача:
Известнф фамилии и оценки по трем предметам каждого ученика класса (в классе 10 учеников). Данные записаны в файл в виде: Ivanov 532...
Вычислить сумму баллов и вывести фамилии людей с максимальным суммой баллов.
начало программы:
Код

type
 rec=record
 fio:string[15]; 
 b1,b2,b3,b0:byte;
 end;
var
 F:text;
 a,b,c:rec;
 i,n:integer;
 name: string;
 M: array [1..10] of rec;
begin
 read(name);
 assign(F,name);
 reset(F);


И дальше ступор... как сделать так, чтобы он читал fio как тот же Ivanov а b1,b2,b3 - 5 3 и 2 соответственно, а не Fio первого ученика как весь файл целиком?

PM MAIL   Вверх
ФедосеевПавел
Дата 13.9.2009, 22:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Я так полагаю, что исходные данные по ученикам находятся в текстовом файле. Т.к. специально не оговаривается, то можно сделать допущение, что данные на каждого ученика находятся на отдельной строке, на фамилии отводится фиксированное количество символов, а далее идут символы оценок без пробелов.
Код

Ivanov    543
Petrov    234
Sidorov   443
Malvina   554
Booratino 333
Pierro    344

Тогда читать данных можно так
Код

PROGRAM TextBase;
CONST
  FileName = 'Scoolers.txt';
  LenFIO   = 10;        {длина поля fFIO}
TYPE
  TRec = RECORD         {тип формата одной строки в файле с данными}
    fFIO : String[LenFIO];
    fB1  : Char;
    fB2  : Char;
    fB3  : Char;
  END;
VAR
  f      : Text;        {файловая переменная}
  Scooler: TRec;        {данные об одном ученике (ФИО, оценки)}
  SumB   : Integer;     {сумма оценок ученика}
  SumMax : Integer;     {максимальная сумма оценок среди учеников}
  B      : Integer;     {вспомогательная переменная для процедуры Val}
  Code   : Integer;     {вспомогательная переменная для процедуры Val}
BEGIN
  SumMax:=0;
  Assign(f, FileName);
  Reset(f);
  while NOT(eof(f)) do begin
    ReadLn(f, Scooler.fFIO, Scooler.fB1, Scooler.fB2, Scooler.fB3);
    Val(Scooler.fB1, B, Code);
    SumB:=B;
    Val(Scooler.fB2, B, Code);
    SumB:=SumB+B;
    Val(Scooler.fB3, B, Code);
    SumB:=SumB+B;
    WriteLn(Scooler.fFIO, Scooler.fB1, Scooler.fB2, Scooler.fB3, ' ', SumB);
    if SumMax<SumB
    then begin
      SumMax:=SumB;
    end;
  end;
  Close(f);
  WriteLn('Максимальная сумма оценок - ', SumMax);
END.

Если бы оценки разделялись пробелом, то можно было бы упростить
Код

.....................
TYPE
  TRec = RECORD         {тип формата одной строки в файле с данными}
    fFIO : String[LenFIO];
    fB1  : Integer;
    fB2  : Integer;
    fB3  : Integer;
  END;
.......................
  while NOT(eof(f)) do begin
    ReadLn(f, Scooler.fFIO, Scooler.fB1, Scooler.fB2, Scooler.fB3);
    with Scooler do
      SumB:=fB1+fB2+fB3;
    WriteLn(Scooler.fFIO, Scooler.fB1, Scooler.fB2, Scooler.fB3, ' ', SumB);
    if SumMax<SumB
    then begin
      SumMax:=SumB;
    end;
  end;

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.