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

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

Решите предыдущую задачу:

Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):

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

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

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

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

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

Решение:

program u18z07;
var s,s0,pobeditel,name:string;
  i,j,Code,maxScore,ball:integer;

procedure abc123(s:string; var name:string; var ball:integer);
begin
  j:=1;
  for i:=1 to length(s) do
  begin
    if(s[i]>='0')and(s[i]<='9') then
      s0:=s0+s[i]
    else
    begin
      if s[i]<>' ' then
        name:=name+s[i];
      if s0<>'' then
      begin
        s0:='';
        j:=j+1;
      end;
    end;
    Val(s0,ball,Code);
  end;
end;

begin
  maxScore:=0;
  while (s<>'end') do
  begin
    name:='';
    writeln('Vvedite stroku');
    readln(s);
    abc123(s,name,ball);
    if ball>maxScore then
    begin
      maxScore:=ball;
      pobeditel:=name;
    end;
  end;
  writeln('Pobedil ',pobeditel,' s rezultatom - ',maxScore);
  readln();
end.

Консоль:

Vvedite stroku
dima 123
Vvedite stroku
maks 111
Vvedite stroku
lena    222
Vvedite stroku
end
Pobedtel: lena  |  rezultat: 222