Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите, пожалуйста, найти ошибки!
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.