Урок 17 (решенная задача номер 5)

Урок 17 (решенная задача номер 5)

Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):

Вася         485
Коля       555
Юра        61
..........
....
end // признак завершения ввода

(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3) считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл.

var s, Namepobed: string;
    balpobed : integer;
procedure ru36(h : string);
var  bal, i, c: integer;
     name, g: string;
begin
for i := 1 to length(h) do
    begin
      if (h[i] <> '') and (h[i] > '9') then
      name := name + s[i];
      if (h[i] >= '0') and (h[i] <= '9') then
        g := g + s[i];
      if (i = length(h)) then
          val(g, bal, c);
    end;
  writeln('imy ', name);
  writeln('colicestvo ballov - ', bal);
  if (bal > balpobed) then
  begin
    balpobed := bal;
    Namepobed := name;
  end;
end;

begin
  while (s <> 'end') do
  begin
    writeln('vvedite stroky');
    readln(s);
    if (s <> 'end') then
    ru36(s);
  end;
  writeln('Pobeditel - ', Namepobed);
  writeln('Ego kol-vo ballov sostavilo ', balpobed);
end.

(С Использованием массивов)

type myarr = array[1..3] of integer;
     miarr = array[1..4] of string;

var s : string;
    o : integer;
    glStrMassiv : miarr;
    glCisMassiv : myarr;
procedure ru36(h : string; var a : myarr; var m : miarr; j : integer);
var  bal, i, c: integer;
     name, g: string;
begin
  for i := 1 to length(h) do
  begin
    if (h[i] <> '') and (h[i] > '9') then
      name := name + s[i];
    if (h[i] >= '0') and (h[i] <= '9') then
      g := g + s[i];
    if (i = length(h)) then
      val(g, bal, c);
  end;
    a[j] := bal;
    m[j] := name;
    Inc(j);
end;

procedure ru37(a : myarr; m : miarr);

begin
  if (a[1] > a[2]) and (a[1] > a[3]) then
    writeln('Pobeditel - ', m[1],' ', 'ego kol-vo ballov - ', a[1])
  else if (a[2] > a[3]) then
    writeln('Pobeditel - ', m[2],' ', 'ego kol-vo ballov - ', a[2])
       else  writeln('Pobeditel - ', m[3],' ', 'ego kol-vo ballov - ', a[3]);
end;

begin
  o := 1;
  while (s <> 'end') and (o <= 3) do
  begin
    writeln('vvedite stroky');
    readln(s);
    if (s <> 'end') and (o <= 3) then
    ru36(s, glCisMassiv, glStrMassiv, o);
    Inc(o);
  end;
    ru37(glCisMassiv, glStrMassiv);
end.
vedro-compota's picture

поменять названия процедурам

_____________
матфак вгу и остальная классика =)

Romakip's picture

type myarr = array[1..3] of integer;
     miarr = array[1..4] of string;

var s : string;
    o : integer;
    glStrMassiv : miarr;
    glCisMassiv : myarr;
procedure VicislenieBallov(h : string; var a : myarr; var m : miarr; j : integer);
var  bal, i, c: integer;
     name, g: string;
begin
  for i := 1 to length(h) do
  begin
    if (h[i] <> '') and (h[i] > '9') then
      name := name + s[i];
    if (h[i] >= '0') and (h[i] <= '9') then
      g := g + s[i];
    if (i = length(h)) then
      val(g, bal, c);
  end;
    a[j] := bal;
    m[j] := name;
    Inc(j);
end;

procedure OperedelPoditely(a : myarr; m : miarr);

begin
  if (a[1] > a[2]) and (a[1] > a[3]) then
    writeln('Pobeditel - ', m[1],' ', 'ego kol-vo ballov - ', a[1])
  else if (a[2] > a[3]) then
    writeln('Pobeditel - ', m[2],' ', 'ego kol-vo ballov - ', a[2])
       else  writeln('Pobeditel - ', m[3],' ', 'ego kol-vo ballov - ', a[3]);
end;

begin
  o := 1;
  while (s <> 'end') and (o <= 3) do
  begin
    writeln('vvedite stroky');
    readln(s);
    if (s <> 'end') and (o <= 3) then
      VicislenieBallov(s, glCisMassiv, glStrMassiv, o);
    Inc(o);
  end;
    OperedelPoditely(glCisMassiv, glStrMassiv);
end.