задача 6 урок 18
Primary tabs
Решите предыдущую задачу:
Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):Вася 485 Коля 555 Юра 61 .......... .... end // признак завершения ввода(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3) считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл.С использованием процедуры, которая разбирала бы очередную строку, изменяя по ссылке значения двух перемененных (одна для имени и одна для балла), уже после вызова этой процедуры для очередной строки записывайте очередные значения переменных в массивы (каждую в свой).
Подсказка: Т.е. такая процедура может иметь следующую сигнатуру:
procedure getData(str: string; var name: string; var ball: integer);
Решение
program task_6_lesson18;
type
imy = array[1..3] of string;
bal = array[1..3] of integer;
procedure otdel(s : string; var name: string; var ball: integer);
var i, j, code: integer;
point: string;
begin
i := 1;
while s[i] <> ' ' do
begin
name := name + s[i];
i += 1;
end;
for j := i to length(s) do
if (s[j] >= '0') and (s[j] <= '9') then
point := point + s[j];
val(point, ball, code)
end;
var
s, vihod: string;
name: imy; // для хранения строк
//point: bal; // для хранения наибольшего point
ball: bal;
i, j, n1, code: integer;
begin
s := '';
vihod := 'end';
i := 0;
writeln('vvedite name - point:');
while s <> vihod do
begin
readln(s);
i += 1;
otdel(s, name[i], ball[i]);
end;
n1 := ball[1];
j := 1;
for i := 2 to 3 do // поиск победителя
if (ball[i] >= n1) then
begin
n1 := ball[i];
j := i; // номер имени соответсвующий победителю
end;
writeln('pobedil: ',name[j],' --- ', n1);
readln
end. Консоль
vvedite name - point: John 784 MIsha 566 Stenli 687 end pobedil: John --- 784
- Log in to post comments
- 1025 reads
vedro-compota
Wed, 11/03/2021 - 19:05
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)