Глава 17.Задача №6.Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл) с помощью процедуры

Задача №6 из главы 17

Решите предыдущую задачу:

 Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):
Вася         485
Коля       555
Юра        61
..........
....
end // признак завершения ввода
(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3) считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл.

С использованием процедуры, которая разбирала бы очередную строку, изменяя по ссылке значения двух перемененных (одна для имени и одна для балла), уже после вызова этой процедуры для очередной строки записывайте очередные значения переменных в массивы (каждую в свой).

program pascal_17_5;
type a = array[1..3] of integer; // секция обьявления типов
     b = array[1..3] of string;
     
{ процедура изменения двух переменных, с именем и баллами по ссылке }
procedure filling_arrays( s : string; var ball_int: integer; var  name_string : string );
var i, num, code : integer;
  ball_string : string;
begin // начало тела процедуры
  num := 0;
  for i := 1 to length( s ) do // обходим строку
  begin
    if( s[i] <> ' ' ) and ( num = 0 ) then // если условие верно 
      name_string += s[i] // в пустую строку добавляем элемент
    else
    begin
      if( s[i] = ' ' ) then // если равна пустой строке
      begin
        num := 1; // делаем первый if невыполнимым  
        continue;  //  пропускаем если символ пустая строка
      end;
      if ( s[i] >= '0' ) and ( s[i] <= '9' ) then
        ball_string += s[i]; // добавляем в другую пустую строку символы
    end;
  end;
  Val( ball_string , ball_int ,code ); // преобразуем в число
end; // завершение тела процедуры

{ процедура вывода строки результата }
procedure print_result( ind_arr, max_value : integer;str_name_arr : b );
begin // начало тела процедуры
  writeln( str_name_arr[ ind_arr ], ' max completed ', max_value );  
end; // завершение тела процедуры

{ процедура вывода результата }
procedure conclusion( arr_ball : a; arr_str_name : b );
var i, max, index : integer;
begin // начало тела процедуры
  max := 0;
  index := 0;
  for i := 1 to high( arr_ball ) do // обходим integer  массив
  begin
    if( arr_ball[i] > max ) then // если значение массива больше max
    begin
      max := arr_ball[i]; // присваиваем max значение массива
      index := i; // считаем индекс string массива
    end;
  end;
  print_result( index, max, arr_str_name ); // вызов процедуры 
end; // завершение тела процедуры
    
var name, str : string; // секция обьявления переменных
    i, j, count, ball: integer;
    arr_int_ball : a;
    arr_str_name : b;
begin // начало тела основной программы
  str := '';
  while( str <> 'end' ) do
  begin
    name := '';
    ball := 0;
    writeln('input name and ball: ' );  
    readln( str );
    if( str <> 'end' ) then
    begin
      filling_arrays( str, ball, name ); // вызов процедуры
      j += 1; // увеличиваем индекс массива с баллами
      arr_int_ball[j] := ball;
      i += 1; // увеличиваем индекс массива с именами
      arr_str_name[i] := name;
    end;
  end;
  conclusion( arr_int_ball , arr_str_name ); // вызов процедуры
end.// завершение программы