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

Урок 18

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

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

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

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

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

procedure getData(str: string; var name: string; var ball: integer);
type arrString = array[1..3] of string;
     arrInteger = array[1..3] of integer;

var fromStringArr: arrString = ('','','');
    arrScore: arrInteger;
    arrName: arrString;

function getStringArr(fromStringArr1: arrString): arrString;
  var inputString: string;
      loopCount: integer;

begin
  loopCount := 0;
  writeln('Введите результаты участников Имя Счет');
  while (inputString <> 'end') do
  begin
    Inc(loopCount);
    readln(inputString);
    if loopCount <= 3 then
      fromStringArr1[loopCount] := inputString;
  end;
  result := fromStringArr1;
end;

procedure getData(str: string; var toStringName: string; var newInt1: integer);
  var toInt, errorCode, loopCountString: integer;
      toStringNum: string;

begin
    toStringNum := '';
    toStringName := '';
    newInt1 := 0;
    toInt := 0;
    for loopCountString := 1 to length(str) do
    begin
      val(str[loopCountString], toInt, errorCode);
      if (errorCode = 0) then
      begin
        toStringNum := toStringNum + str[loopCountString];
        val(toStringNum, newInt1, errorCode);
      end
      else if (str[loopCountString] = ' ') then
      begin
        toStringNum := '';
      end
      else if (errorCode <> 0) and (str[loopCountString] <> ' ') then
      begin
        toStringName :=  toStringName + str[loopCountString];
      end;
    end;
end;

procedure getArrsForNameAndScore(fromStringArr1: arrString; var arrName1: arrString; var arrScore1: arrInteger);

  var loopCountArr, newInt1: integer;
      toStringName: string;

begin
  toStringName := '';
  newInt1 := 0;
  for loopCountArr := 1 to 3 do
  begin
    getData(fromStringArr1[loopCountArr], toStringName, newInt1);
    writeln('Имя: ', toStringName, ', счёт: ', newInt1, ';');
    arrName1[loopCountArr] := toStringName;
    arrScore1[loopCountArr] := newInt1;
  end;
end;

procedure lookForWinner(arrName1: arrString; arrScore1: arrInteger);
  var loopCountArr, key, win: integer;

begin
  key := 0;
  win := 0;
  for loopCountArr := 1 to 3 do
  begin
    if arrScore1[loopCountArr] > win then
    begin
      key := loopCountArr;
      win := arrScore1[loopCountArr];
    end;
  end;
  writeln('Победитель ', arrName1[key], ', со счетом: ', win);
end;

begin
  fromStringArr := getStringArr(fromStringArr);
  getArrsForNameAndScore(fromStringArr, arrName, arrScore);
  lookForWinner(arrName, arrScore);
  readln();
end.

КОНСОЛЬ

Введите результаты участников Имя Счет
Вася    147
Дима  852
Саша 654
Давид 258
Гоша 753
end
Имя: Вася, счёт: 147;
Имя: Дима, счёт: 852;
Имя: Саша, счёт: 654;
Победитель Дима, со счетом: 852
vedro-compota's picture

засчитано

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