задача 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
- 672 reads
vedro-compota
Wed, 11/03/2021 - 19:05
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)