Задача 2 Урок 20

Задача 2 Урок 20 У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл
Вася 16 485
Коля 17 555
Юра 18 61
слева указаны имена участников, а справа число баллов.
Первое число в каждой строке -- штрафные баллы набранные участниками, а второе число -- "положительные баллы", то есть если у нас есть строка:
где N
-число шрафных баллов, а M
-число баллов положительных, то итоговая оценка Васи Z
вычисляется как разность:Z=M−N.
Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.

type myarrs = array [1..100] of string;   // массив для имени
     myarri = array [1..100] of integer;  // масств для балла
Var
    f1:text; // тип для открытия текстового файла
    filename, s: string;  // для чтения файла
    name : string;  // переменная для изначального хранения имени
    ball:integer;   // переменная для изначального хранения баллла
    namerecord : myarrs;
    ballrecord : myarri;
    i,j : integer; // счётчики

procedure writearray(h : string; var sname : string; var sbal:integer);
var  i, c : integer;   // подпрош для преоброазования и поиска строк и числе
     n,m: string;    // лок переменные для хранения  чисел
     n1,m1: integer;  // лок переменные для расчёта балла
     flag:boolean;    // флаг для определения в какую переменную записывать
begin
  flag:=false;
  sname:='';
  n:='';
  m:='';
  for i:=1 to length(h) do // цикл от начала до конца строки
    begin
      val(h[i], sbal, c); // в подпрог для определения где числа, а где строки
      if (c<>0) then  // если код<>0 то это строка
        sname := sname + h[i]; // то запись в эту переменную(имя)
      if (h[i]=' ') and (n<>'') then flag:=true; // если встретили пробел и n не пустует(штрафной балл), то флаг правда(начнётсяф запись в m)
      if (h[i] >= '0') and (h[i] <= '9') and (flag=false) then // если цифра и флаг лож
        n := n + h[i] // то запись в n(штрафные баллы)
      else // если нет
        if (h[i] >= '0') and (h[i] <= '9') then // если цифра
          m:=m+h[i]; //  то запись в m(победные баллы)
  end;
  val(n, sbal, c); // преобразуем строку в число
    n1:=sbal;
  val(m, sbal, c); // преобразуем строку в число
    m1:=sbal;
  sbal:=m1-n1; // расчитываем финальный балл
end;

procedure winner(namerecord : myarrs; ballrecord : myarri ; j:integer);
var w,i:integer;// счётчики
begin
  w:=1;
  for i:=2 to j do
    if (ballrecord[i]>ballrecord[w]) then
      w:=i;
  writeln('winner: ',namerecord[w],' ',ballrecord[w]);
end;

begin
  i:=0;
  filename := 'C:\Users\user\Documents\sorevnovanie.txt'; // путь к файлу

  assign(f1, filename); { связывание переменной дескриптора  с путём к файлу }
  reset(f1); // открываем файла для чтения

  while not eof(f1) do // пока не достигнут конец файла
    begin
      readln(f1, s);  // читаем из него очередную строку
      writearray(s, name, ball); // в процедуру передаём строчку, имя и балл
      j+=1; // плюс к счётчику
      namerecord[j]:=name; // запись имени в массив
      ballrecord[j]:=ball; // запись финального балла в массив
    end;
   for i:=1 to j do
     writeln(namerecord[i],ballrecord[i]);  // вывод на экран имён с баллами
   winner (namerecord,ballrecord,j); // в процедуру для опр победителя
  readln();
end.                          

Вывод консоли:

Vasilii  85
Ilia  90
Vova  125
Evgen  197
winner: Evgen   197