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

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

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

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

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

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

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

procedure getData(str: string; var name: string; var ball: integer);
type
  chisla = array[1..3] of integer;
  stroki = array[1..3] of string;
 var
  str, name, vrem: string;
  i, j, h, ball: integer;
  b: chisla;
  n: stroki;

procedure getData(str: string; var name: string; var ball: integer);
var
  i, j, h: integer;
  vrem: string;
begin
  i:= 0;
  j:= 0;
  h:= 1;
  while not (h > 3) do
  begin
    i:= i+1;
    if (str[i]>='0')and(str[i]<='9') or not ((str[i]>='0')and(str[i]<='9') or (str[i] =' ')) then  // если встретилось число
    begin
      if j = 2 then
      begin
        j:= 1;
        i:= 1;
        val(vrem, ball);
        vrem:= '';
        h:= h+1;
      end else begin
        j:= j + 1;
        name:= '';
      end;
      for i:= i to length(str) do
        if not ((str[i]>='0')and(str[i]<='9') or (str[i] =' ')) then
            name:=  name + str[i]
          else if (str[i]>='0')and(str[i]<='9')  then
              vrem:=  vrem + str[i]
            else
                break;
    end;
  end;
end;

begin
  writeln ('Введите имя и количество баллов: ');
  for i:= 1 to 3 do
  begin
    readln(str);
    if str = 'end' then
      break
    else begin
      name:= '';
      vrem:= '';
      getData (str, name, ball);
      n[i]:= name;
      b[i]:= ball;
    end;
  end;
  writeln;
  writeln ('Ответ:');
  for i:= 1 to 3 do
  begin
    write (n[i], '     ');
    writeln (b[i]);
  end;
  readln();
end.

type
  chisla = array[1..3] of integer;
  stroki = array[1..3] of string;
 var
  str, name, vrem: string;
  i, j, h, ball, a: integer;
  b: chisla;
  n: stroki;

procedure pobeditel (n: stroki; b: chisla);
var
  i, j, a, x: integer;
begin
  writeln ('Победитель:');
  for i:= low(b) to high(b) do
  begin
    if i = 1 then
    begin
      x:= b[1];
      for j:= 2 to high(b) do
        if x < b[j] then
          x:= b[j];
    end;
    if b[i] = x then
    begin
      write (n[i], '     ');
      writeln (b[i]);
    end;
  end;
end;

procedure getData(str: string; var name: string; var ball: integer);
var
  i, j, h: integer;
  vrem: string;
begin
  for i:=1 to length(str) do
  if (str[i]>='0')and(str[i]<='9') then
    vrem:=  vrem + str[i]
  else
    if not (str[i] =' ') then
      name:=  name + str[i];
  val(vrem, ball);
  vrem:= '';
end;

begin
  writeln ('Введите имя и количество баллов: ');
  for i:= 1 to 3 do
  begin
    readln(str);
    if str = 'end' then
      break
    else begin
      name:= '';
      getData (str, name, ball);
      n[i]:= name;
      b[i]:= ball;
    end;
  end;
  writeln;
  writeln ('Ответ:');
  for i:= 1 to 3 do
  begin
    write (n[i], '   ');
    writeln (b[i]);
  end;
  writeln;
  pobeditel (n, b);
  readln();
end.

Вывод в консоли:

Введите имя и количество баллов: 
Вася  34
Петя  45
Коля  37
Ответ:
Вася    34
Петя    45
Коля    37
Победитель:
Петя      45
vedro-compota's picture

засчитано

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