2)Не тестировал - кодил прямо здесь...
Код
Const
MaxPredmet = 6;
MaxUchenik = 3;
FileName = 'Data.dat';
Type
String16 = String[16];
NameT = Record
F,I : String16;
End;
danT = Record
Name : NameT;
Phone : String16;
Ocen : Array [1..MaxPredmet] of Real;
End;
Var
i,j : Byte;
f : File of DanT;
dan : DanT;
Procedure EnterData(k : Byte);
Begin
Write('Фамилия ученика № ',k,' : '); Readln(Dan.name.F);
Write('Имя ученика № ',k,' : '); Readln(Dan.name.I);
Write('Телефон ученика № ',k,' : '); Readln(Dan.Phone);
For j:=1 to MaxPredmet do
Begin
Write('Средняя оценка учиника № ',k,' по предмету № ',j,' : '); Readln(Dan.Ocen[j]);
End;
Reset(f);
Write(f,Dan);
Close(f);
End;
Procedure ViewMinMaxOcenka;
Var
MinName, MaxName : String;
MinOc, MaxOc : Real;
Function FindMinOc : Real;
Begin
j:=Dan.Ocen[1];
For i:=2 to MaxPredmet do
If j>Dan.Ocen[i] then j:=Dan.Ocen[i];
FindMinOc:=j;
End;
Function FindMaxOc : Real;
Begin
j:=Dan.Ocen[1];
For i:=2 to MaxPredmet do
If j<Dan.Ocen[i] then j:=Dan.Ocen[i];
FindMinOc:=j;
End;
Begin
Reset(f);
Read(f,dan);
MinName:=Dan.name.f+' '+Dan.name.i; MaxName:=MinName;
MinOc:=FindMinOc; MaxOc:=FindMaxOc;
While not EOF(f) do
Begin
Read(f,Dan);
If FindMinOc<MinOc then
Begin
MinName:=Dan.name.f+' '+Dan.name.i;
MinOc:=FindMinOc;
End;
If FindMaxOc>MaxOc then
Begin
MaxName:=Dan.name.f+' '+Dan.name.i;
MaxOc:=FindMaxOc;
End;
End;
Close(f);
Writeln(& #39;Фамилия Имя ученика с минимальной оцен
кой ',MinOc:4:2,' : ',MinName);
Writeln(& #39;Фамилия Имя ученика с максимальной оце
нкой ',MaxOc:4:2,' : ',MaxName)
End;
Begin
Assign(f,FileName);
For i:=1 to MaxUchenik do EnterData(i);
Writeln;
ViewMinMaxOcenka;
End.
Не исключаю некоторых опечаток и неточностей... будут вопросы - задавай.