Урок 18 Задача 7
Primary tabs
Решите предыдущую задачу:
Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):
Вася 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.- Log in to post comments
- 1072 reads
Patrick
Wed, 01/04/2023 - 16:30
Permalink
Исправил
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.Вывод в консоли:
vedro-compota
Wed, 01/04/2023 - 17:19
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)