Задача 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
- 1502 reads
vedro-compota
Sun, 12/05/2021 - 13:26
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)