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

Задача 2 урок 18

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

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

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

Vasya    N      M

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

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

program U18Z2;
type sarr = array [1..100] of string;
     iarr = array [1..100] of integer;
Var n:sarr;
    b:iarr;
    f1:text;
    filename,s: string;
    i,j:integer;

procedure getData(str:string; j:integer; var name:sarr; var ball:iarr);
var sb:string;
    code,t:integer;
begin
  sb:='';
  for i:=1 to length(s) do
  begin
    if (str[i]>='0') and (str[i]<='9') then
      sb:=sb+s[i]
    else
    begin
      if (str[i]<>' ') then
        name[j]:=name[j]+str[i];
      if (sb<>'') then
      begin
        val(sb,ball[j],code);
        sb:='';
      end;
    end;
  end;
  val(sb,t,code);
  ball[j]:=t-ball[j];
end;

procedure winner(nam:sarr; bal:iarr; j:integer);
var w:integer;
begin
  w:=1;
  for i:=2 to j do
    if (bal[i]>bal[w]) then
      w:=i;
  writeln('winner: ',nam[w],' ',bal[w]);
end;

begin
  filename := 'C:\Users\admin\Desktop\pascal\u18z2.txt';
  assign(f1, filename);
  reset(f1);
  j:=0;
  writeln('========nachalo faila=====');
  while not eof(f1) do
  begin
    readln(f1, s);
    writeln(s);
    j:=j+1;
    getData(s,j,n,b);
  end;
  writeLn('========= konez faila =========');
  winner(n,b,j);
  readln();
end. 
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)