Урок 18 (Решенная задача номер 2)

Урок 18 (Решенная задача номер 2)

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

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

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

Vasya    N      M

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

Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.

type
     MasCis = array[1..5] of integer;
     Masstring = array[1..5] of string;

var f1 : text;
    filename, s: string;
    i : integer;
    globalmassivcisl : MasCis;
    globalmassiimeny : Masstring;
procedure RazdelStrokiNaMassivImeni(h : string; nomer : integer; var MasivImy : Masstring);
var g: integer;
    stringcisla : string;
begin
  for g := 1 to length(h) do
    if (h[g] > '9') and (h[g] <> ' ') then
      MasivImy[nomer] := MasivImy[nomer] + h[g];
end;

procedure RazdelNaBall(h : string; nomer : integer; var MasivBalPlus : MasCis);
var  g, cislo, c : integer;
     cislstr : string;
     d : boolean;
begin
  for g := 1 to length(h) do
  begin
    if (h[g-1] >= '0') and (h[g-1] <= '9') and (h[g] = ' ') then
    begin
      val(cislstr, cislo, c);
      MasivBalPlus[nomer] := cislo;
      cislstr := '';
      Inc(d);
    end;
    if (h[g] >= '0') and (h[g] <= '9') then
      cislstr := cislstr + h[g];
    if (d = true) and (g = length(h)) then
    begin
      val(cislstr, cislo, c);
      MasivBalPlus[nomer] := cislo - MasivBalPlus[nomer];
    end;
  end;
end;

function OpredelitPobed(arayBal : MasCis) : integer;
var g, pobed : integer;

begin
  for g := 1 to 3 do
  if (arayBal[g] > pobed) then
  begin
    pobed := arayBal[g];
    result := g;
  end;
end;

begin
  filename := '/home/rm/Pascal/unput.txt';
  assign(f1, filename);
  reset(f1);
  i := 1;
  while not eof(f1) do
  begin
    readln(f1, s);
    RazdelStrokiNaMassivImeni(s, i, globalmassiimeny);
    RazdelNaBall(s, i, globalmassivcisl);
    Inc(i);
  end;
  i := 0;
  for i := 1 to 3 do
  begin
    if (i = OpredelitPobed(globalmassivcisl)) then
      writeln('Pobeditel nomer - ', i, ' Ego Imy - ', globalmassiimeny[i]);
  end;
end.