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

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

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

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

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

Vasya    N      M

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

var i, k, c, id, Code, scoreInt,deScoreInt: integer;
    s, Name,scoreStr,deScoreStr: string;
    flag: boolean;
    nameArr : array[1..5] of string;
    scoreArr : array[1..5] of integer;
    f1:text;
    filename: string;

procedure getData(s: string; var Name: string; var scoreStr: string);
begin
  flag := false; // фолз - штрфные очки
  Name := '';
  scoreStr := '';    // обнуление положительных баллов
  deScoreStr := '';  //  обнуление   штрафные баллы
  for i := 1 to length(s) do
    begin
      if((s[i] >= '0') and (s[i] <= '9') and (flag = false)) then
        begin
          deScoreStr := deScoreStr + s[i];
          if(s[i+1] = ' ') then
            flag := true;
        end
      else if((s[i] >= '0') and (s[i] <= '9') and (flag)) then
        ScoreStr := ScoreStr + s[i]
      else if(s[i] <> ' ') then
        Name := Name + s[i];
    end;
  Val(scoreStr, scoreInt, Code);
  Val(deScoreStr, deScoreInt, Code);
  scoreInt := scoreInt - deScoreInt;
end;


begin
  k:=0; // индексирует массив
  filename := 'C:\Users\Gomynkyl\AppData\Local\Temp\input.txt';
  assign(f1, filename);
  reset(f1);

  while not eof(f1) do
    begin
      readln(f1, s);
      getData(s,Name,scoreStr);
      k:=k+1;
      nameArr[k] := Name;
      scoreArr[k] := scoreInt;
    end;


  // поиск победителя
  c := scoreArr[1];
  for i := 1 to high(scoreArr) do
    begin
      if(scoreArr[i] > c) then
        begin
          c := scoreArr[i];
          id := i;
        end;
    end;
  writeln('pobedil ', nameArr[id], ' c rezultom ', c);

  readln();
end.      
vedro-compota's picture

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

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