Урок 18. Задача №2. Решение.

Урок 18. Задача №2.

У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл 2):

Вася    16     485
Коля    17   555
Юра     18   61
..........

-- где:
слева указаны имена участников, а справа число баллов.
Первое число в каждой строке -- штрафные баллы набранные участниками, а второе число -- "положительные баллы", то есть если у нас есть строка:

Vasya    N      M

где N -- число штрафных баллов, а M - число баллов положительных, то итоговая оценка Васи Z вычисляется как разность:
Z = M − N.
Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.

type
  ArrStr = array[1..3] of string;
  ArrInt = array[1..6] of integer;

function Check_tmp(st: string; mas: ArrInt): ArrInt;
var a: integer;
begin
  if(st <> '') then
  begin
    val(st, a);
    mas[6] := a;
  end;
  result := mas;
end;

procedure defWin(arrI: ArrInt; arrS: ArrStr);
var res1, res2, res3: integer;
begin
  res1 := arrI[2] - arrI[1];
  res2 := arrI[4] - arrI[3];
  res3 := arrI[6] - arrI[5];
  if(res1 > res2) and (res1 > res3) then
    writeln('And with result = ', res1, ' ', arrS[1], ' won ')
  else if(res2 > res3) then
    writeln('And with result = ', res2, ' ', arrS[2], ' won ')
  else
    writeln('And with result = ', res3, ' ', arrS[3], ' won ');
end;

var f1: text;
  conv, i, k, j: integer;
  key : boolean;
  tmp, tmpName, filename, s: string;
  strName: ArrStr;
  int_arr: ArrInt;
begin
  filename := 'C:\Users\Win10\Documents\input.txt';
  assign(f1, filename);
  reset(f1);
  while not eof(f1) do
  begin
    readln(f1, s);
    for i := 1 to length(s) do
    begin
      key := false;
      if(s[i] >= '0') and (s[i] <= '9') then
        tmp += s[i]
      else if(s[i] <> ' ') then
        tmpName += s[i]
      else
        key := true;

      if(key = true) and (tmp <> '') then
      begin
        val(tmp, conv);
        k += 1;
        int_arr[k] := conv;
        tmp := '';
      end;
    end;
    j += 1;
    strName[j] := tmpName;
    tmpName := '';
  end;
  int_arr := Check_tmp(tmp, int_arr);
  defWin(int_arr, strName);

  readln(); // Удержание консоль
end.// Завершение программы