задача 2 урок 19

задача 2 урок 19

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

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

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

Vasya    N      M

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

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

Решение

program task_2_lesson19;

procedure name(s: string; var imy: string);  // имя
var i: integer;
begin
  i := 1;
  imy := '';
  while s[i] <> ' ' do
  begin
    imy := imy + s[i];
    i := i + 1;
  end;
end;

procedure point(s: string; var shtraf: string; var ball: string); // шрафы и очки
var i: integer;                                                   // в виде строк
    p: string;
begin
    p := '';
    for i :=1 to length(s) do
      begin
        if ((s[i] >= '0') and (s[i] <= '9')) then
          p := p + s[i]
        else if s[i + 1] <> ' ' then
          begin
            shtraf := p;
            p := '';
          end;
      end;
    ball := p;
end;

function finalPoint(shtraf, ball: string) : integer;    // общий счет
var n, n1, code: integer;
begin
  val(shtraf, n, code);
  val(ball, n1, code);
  result := n1 - n;
end;

var filename, s, shtraf, ball, imy, winner: string;
    i, a: integer;
    f1: text;
begin
  winner := ''; // сохраняет имя соответсвующее большему балу
  imy := '';    // хранит следующее имя
  shtraf := ''; // штрафные баллы
  ball := '';   // баллы
  a := 0;       // текущий общий балл
  i := 0;       // наибольший балл
  filename := 'C:\Users\XE\Documents\Pascal\input2.txt';
  assign(f1, filename);
  reset(f1);
  while not eof(f1) do
    begin
      readln(f1,s);
      writeln(s);
      name(s, imy);
      point(s, shtraf, ball);
      a := finalPoint(shtraf, ball);
      if a >= i then
        begin
          winner := imy;
          i := a;
        end;
    end;
  writeln();
  write('Pobedil ',winner, ' nabral ', i,' ballov');
  readln
end. 

Консоль

Vasia   16 485
Kolya   17 555
Ura     18 61
Pety    15 365
Sergey  19 500

Pobedil Kolya nabral 538 ballov
vedro-compota's picture

засчитано

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