Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите, пожалуйста, найти ошибки!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Catherinektz
1. Введите в типизированный файл учебную нагрузку на 8 преподавателей (ФИО, количество недель, нагрузка). С помощью Random выработайте количество недель из диапазона 1..16, среднее количество часов занятий в неделю из диапазона 1..30 и общее количество часов (нагрузка). ФИО обозначьте одной буквой.

Program KEA17;
Type SchoolJob=Record
     FIO: String[3];
     Kolned:Integer;
     Srznach:Byte;
     Nagruzka:Byte;
     End;
Var FP1:File of SchoolJob;
    PP1:SchoolJob;
    I:Byte;
Begin
Randomize;
  Assign (FP1, 'D:/KEA.017');
  ReWrite (FP1);
    For I:=1 To 8 Do Begin
                     ReadLn(PP1.FIO);
                     PP1.Kolned:=Random(16)+1;
                     PP1.Srznach:=Random(30)+1;
                     PP1.Nagruzka:=PP1.Kolned*PP1.Srznach;
                     End;
Close(FP1);
End.



2. Введите все данные из файла в форме таблицы. Программными средствами определите, у какого преподавателя самая большая нагрузка и введите эти данные на экран.
Program KEA17;
Type SchoolJob=Record
     FIO: String[3];
     Kolned:Integer;
     Srznach:Byte;
     Nagruzka:Byte;
     End;
Var FP2:File of SchoolJob;
    PP2:SchoolJob;
    I:Byte;
Begin
Randomize;
  Assign (FP2, 'D:/KEA.017');
  Reset (FP2);
  WriteLn ('FIO   Kolned   Srznach   Nagruzka');
    For I:=1 To 8 Do Begin
                     Read(FP2,PP2);
                     WriteLn(PP2.FIO,PP2.Kolned,PP2.Srznach,PP2.Nagruzka);
                     PP2.Kolned:=Random(16)+1;
                     PP2.Srznach:=Random(30)+1;
                     PP2.Nagruzka:=PP2.Kolned*PP2.Srznach;
                     End;
ReadLn;
Close(FP2);
End.


Эти обе задачи взаимосвязаны. Буду очень благодарна, если кто-то поможет.
IUnknown
Цитата
2. Введите все данные из файла в форме таблицы. Программными средствами определите, у какого преподавателя самая большая нагрузка и введите эти данные на экран.
Зачем здесь опять что-то пытаться записывать в файл? Из него надо только читать:

Program KEA17_2;

Type
   SchoolJob = Record
      FIO: String[3];
      Kolned:Integer;
      Srznach:Byte;
      Nagruzka:Byte;
   End;

Var
   FP2 : File of SchoolJob;
   PP2 : SchoolJob;
   maxNagruzka : byte;
   savedFIO : string[3];
Begin
   maxNagruzka := 0;
   Assign (FP2, 'D:/KEA.017'); Reset (FP2);
   WriteLn ('FIO Kolned Srznach Nagruzka');
   while not eof(FP2) do
   begin
      Read(FP2, pp2);
      writeln(PP2.FIO:3, PP2.Kolned:7,PP2.Srznach:8,PP2.Nagruzka:9);
      if pp2.nagruzka > maxNagruzka then
      begin
         maxNagruzka := pp2.nagruzka;
         savedFIO := pp2.FIO;
      end;
   end;
   writeln;
   writeln('Самая большая нагрузка - у ', savedFIO);
   ReadLn;
   Close(FP2);
End.

Как-то вот так. Набирал прямо здесь, так что проверяй...
Гость
Здравствуйте, я все понимаю, но вот почему первая программа записывает файл, но он пустой?!Что там нужно изменить???
Catherinektz
Здравствуйте, я все понимаю, но вот почему первая программа записывает файл, но он пустой?!Что там нужно изменить???
IUnknown
Цитата
первая программа записывает файл, но он пустой?!Что там нужно изменить???
В том то и дело, что она не записывает ничего. Подготавливает структуру для записи в файл, но не записывает ...
    For I:=1 To 8 Do Begin
                     ReadLn(PP1.FIO);
                     PP1.Kolned:=Random(16)+1;
                     PP1.Srznach:=Random(30)+1;
                     PP1.Nagruzka:=PP1.Kolned*PP1.Srznach;
                     Write(FP1, PP1); { <--- Нужно добавить вот эту строку }
                     End;
Catherinektz
Спасибо, вот я тупая!!! blink.gif У меня еще вот со второй никак не выходит. Вместо фамилии со всей необходимой нагрузкой выходит строка: Самая большая нагрузка - у и все. Что там нужно поменять??? А то у меня уже мозг взрывается после работы!
IUnknown
Все работает, проверил только что специально...

Кстати, возможно - причина в этом. Я заменил тип поля Nagruzka с Byte на Word, потому что при тех значениях, которые заносятся в Kolned и Srznach - очень легко может произойти переполнение: если перемножить максимально возможные значения (16*30), то в Byte это значение уже не помещается.

Так что измени везде (и в описании поля Nagruzka в обеих программах, и в описании maxNagruzka байт на слово, заново создай файл первой программой и прогони вторую программу)...
Catherinektz
Огромнейшее спасибо, все получилось!!! give_rose.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.