program Facility;

{$MODE DELPHI}

uses
    SysUtils;
    
type
    TStudent = record
        name: string;
        group: string;
        grade: double;
        scholarship: Integer;
    end;
    
var
    students: array[1..5] of TStudent; 
    i: Integer;

// процедура заполнения данными студентов
procedure fillData(var arr: array of TStudent);
begin
  arr[0].name := 'Иванов И.И.';   arr[0].group := '28ПИБ';  arr[0].grade := 4.7;
  arr[1].name := 'Петров П.П.';   arr[1].group := '27ИТб';  arr[1].grade := 3.8;
  arr[2].name := 'Сидоров С.С.';  arr[2].group := '27ГУб';  arr[2].grade := 4.3;
  arr[3].name := 'Кузнецов К.К.'; arr[3].group := '28ПИЖб'; arr[3].grade := 4.0;
  arr[4].name := 'Васильев В.В.'; arr[4].group := '26УСб';  arr[4].grade := 3.5;
end;

// процедура вывода студентов с баллом выше 4
procedure printHighGradeStudents(const arr: array of TStudent);
var i: Integer;
begin
  Writeln('Студенты с баллом выше 4.0:');
  for i := Low(arr) to High(arr) do
    if arr[i].grade > 4.0 then
      Writeln(arr[i].name, ' (группа: ', arr[i].group, ', балл: ', arr[i].grade:0:1, ')');
end;

// процедура вычисления стипендии
procedure calculateScholarships(var arr: array of TStudent);
var i: Integer;
begin
  Writeln(#13#10'Список студентов со стипендиями:');
  for i := Low(arr) to High(arr) do
  begin
    if arr[i].grade >= 4.5 then arr[i].scholarship := 3000
    else if arr[i].grade >= 4.0 then arr[i].scholarship := 2000
    else arr[i].scholarship := 0;

    if arr[i].scholarship > 0 then
      Writeln(arr[i].name, '(', arr[i].group, '): ', arr[i].scholarship, ' руб.');
  end;
end;

// процедура сортировки студентов по среднему баллу (по убыванию)
procedure sortStudent(var arr: array of TStudent);
var
  i, j: Integer;
  temp: TStudent;
begin
  for i := Low(arr) to High(arr) - 1 do
    for j := i + 1 to High(arr) do
      if arr[i].grade < arr[j].grade then
      begin
        temp := arr[i]; arr[i] := arr[j]; arr[j] := temp;
      end;

  Writeln(#13#10'Отсортированный список (по убыванию балла):');
  for i := Low(arr) to High(arr) do
    Writeln(arr[i].grade:0:1, ' | ', arr[i].name, '(', arr[i].group, ')');
end;

begin
  // заполянем
  fillData(students);
  
  // выводим студентов с баллом выше 4
  printHighGradeStudents(students);
  
  // считаем стипендию
  calculateScholarships(students);
  
  // сортируем студентов 
  sortStudent(students);

	Readln;
end.
