Задача 6 Урок 18
Primary tabs
Решите предыдущую задачу:
Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):Вася 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
- Log in to post comments
- 1149 reads
vedro-compota
Sun, 12/05/2021 - 13:26
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)