Задача 6 Урок 17
Primary tabs
Урок 17. Явное приведение типа в Паскаль -- преобразование строки в число
{17 - 6
Решите предыдущую задачу:
Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):Вася 485 Коля 555 Юра 61 end // признак завершения ввода(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3)
считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл.С использованием процедуры, которая разбирала бы очередную строку,
изменяя по ссылке значения двух перемененных (одна для имени и одна для балла),
уже после вызова этой процедуры для очередной строки записывайте
очередные значения переменных в массивы (каждую в свой).Подсказка: Т.е. такая процедура может иметь следующую сигнатуру:
procedure getData(str: string; var name: string; var ball: integer);}
procedure getData(s: string; var name: string; var score: integer); var score_string: string; i: integer; toggle: boolean; begin name:= ''; score:= 0; toggle := true; for i:=1 to length(s) do begin if (s[i] <> ' ') then begin if (toggle = true) then name := name + s[i] else score_string := score_string + s[i] end else if ((length(name) <> 0) and (toggle = true)) then toggle := false end; val(score_string, score); writeln('procedure: ', 'name: ',name, ', points: ', score); // необязательная иллюстрация end; var s, name: string; i, n, max, win, score: integer; points: array [1..3] of integer; names, nums: array [1..3] of string; toggle: boolean; begin n:=1; while (s <> 'end') do begin writeln('write name and points'); readln(s); if (s = 'end') then break; toggle := true; getData(s,name,score); for i:=1 to length(s) do begin if (s[i] <> ' ') then begin if (toggle = true) then names[n] := names[n] + s[i] // имена в массив else nums[n] := nums[n] + s[i] // очки в массив end else if ((length(names) <> 0) and (toggle = true)) then toggle := false end; n :=n + 1; end; for i:=1 to high(nums) do val(nums[i], points[i]); // преобразование типа массива for i:=1 to high(points) do begin if (points[i] > max) then begin max := points[i]; win := i; // индекс победителя end end; writeln('winner name: ', names[win]); writeln('winner points: ', points[win]); readln(); end.
//write name and points //triangle 3 //procedure: name: triangle, points: 3 //write name and points //square 4 //procedure: name: square, points: 4 //write name and points //circle 0 //procedure: name: circle, points: 0 //write name and points //end //winner name: square //winner points: 4
- Log in to post comments
- 554 reads
vedro-compota
Sun, 06/13/2021 - 12:18
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)