Помощь - Поиск - Пользователи - Календарь
Полная версия: задачи на рекурсию и записи
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
буян
огромная порсьба помочь решить задачи:
:molitva:
1) Написать рекурсивную функцию, которая находит минимальный элемент в матрице (двумерном массиве).
2) Создать файл в котором содержится информация троих учащихся (фамилия,имя,телефон,средние оценки по предметам). Вывести на экран фамилию и имя учащегося с максимальной и минимальной оценкой, использовать тип запись.
APAL
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.

Не исключаю некоторых опечаток и неточностей... будут вопросы - задавай.
APAL
1)
Здесь я не очень понял куда "приладить" рекурсию...
Guest
СПАСИБО ОГРОМНЕЙШЕЕ !!!!!!!!!!!!!!!!!!!!!!
никогда не забуду.
выручили !
еще раз спасибо !
APAL
Что, неужели работает? И ни одной ошибки/опечатки?
Я же не проверял.... удивительно!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.