Задача 6 Урок 17

Урок 17. Явное приведение типа в Паскаль -- преобразование строки в число

{17 - 6
Решите предыдущую задачу:
Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):

Вася         485
Коля       555
Юра        61
end // признак завершения ввода

(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3)
считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл.

С использованием процедуры, которая разбирала бы очередную строку,
изменяя по ссылке значения двух перемененных (одна для имени и одна для балла),
уже после вызова этой процедуры для очередной строки записывайте
очередные значения переменных в массивы (каждую в свой).

Подсказка: Т.е. такая процедура может иметь следующую сигнатуру:

procedure getData(str: string; var name: string; var ball: integer);

}

procedure getData(s: string; var name: string; var score: integer);
var score_string: string;
    i: integer;
    toggle: boolean;
begin
  name:= '';
  score:= 0;
  toggle := true;
  for i:=1 to length(s) do
    begin
      if (s[i] <> ' ') then
         begin
           if (toggle = true) then
             name := name + s[i]
           else
             score_string := score_string + s[i]
         end
      else
        if ((length(name) <> 0) and (toggle = true)) then
          toggle := false
    end;
  val(score_string, score);
  writeln('procedure: ', 'name: ',name, ', points: ', score);  // необязательная иллюстрация
end;

var s, name: string;
    i, n, max, win, score: integer;
    points: array [1..3] of integer;
    names, nums: array [1..3] of string;
    toggle: boolean;
begin
  n:=1;
  while (s <> 'end') do
  begin
    writeln('write name and points');
    readln(s);
    if (s = 'end') then break;
    toggle := true;
    getData(s,name,score);
    for i:=1 to length(s) do
      begin
        if (s[i] <> ' ') then
           begin
             if (toggle = true) then
               names[n] := names[n] + s[i] // имена в массив
             else
               nums[n] := nums[n] + s[i]   // очки в массив
           end
        else
          if ((length(names) <> 0) and (toggle = true)) then
            toggle := false
      end;
    n :=n + 1;
  end;

  for i:=1 to high(nums) do
    val(nums[i], points[i]);  // преобразование типа массива

  for i:=1 to high(points) do
    begin
      if (points[i] > max) then
        begin
          max := points[i];
          win := i;     // индекс победителя
        end
    end;

  writeln('winner name: ', names[win]);
  writeln('winner points: ', points[win]);
  readln();
end.
//write name and points
//triangle 3
//procedure: name: triangle, points: 3
//write name and points
//square 4
//procedure: name: square, points: 4
//write name and points
//circle 0
//procedure: name: circle, points: 0
//write name and points
//end
//winner name: square
//winner points: 4
vedro-compota's picture

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

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