Задача 5 урок 17

Задача 5 урок 17

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

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

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

var i, x, n, T, Code, max: integer;
    s, k, winner: string;
    a: array[1..3] of string;
    b: array[1..3] of integer;
begin
  n:=1; //индекс массива
  while(s<>'end') do
    begin
    writeln('Enter name and points');
    readln(s);
    if (s<>'end') then
      for i:=1 to length(s) do
        begin
          if Not((s[i]>='0')and(s[i]<='9')) AND (s[i]<>' ') then
            a[n]:=a[n]+s[i]          //если не число и не пробел string
          else if (s[i]>='0')and(S[i]<='9') then
            k:=k+s[i];           //если число сохраняем в string
          if i=length(s) then   //после последнего символа число(string)
            begin
              Val(k, T, Code);     //преобразуем  в integer
              b[n] := T;
              k:='';
            end;
        end;
      inc(n);
     end;
   max := b[1];
   if max < b[2] then max := b[2]; //определяем максимальный integer
   if max < b[3] then max := b[3];
   for i:=1 to high(b) do
     if b[i]=max then //по индексу integer ищем значение string
       winner:=a[i];

  writeln('The winner is ',winner,', scores = ',max);
  readln();
end.
vedro-compota's picture

разбить на процедуры и функции

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

var i, x, n, max: integer;
    s, y, winner: string;
    a: array[1..3] of string;
    b: array[1..3] of integer;
function maximum(b: array of integer): integer;
begin
  max := b[1];
  if max < b[2] then max := b[2]; //определяем максимальный integer
  if max < b[3] then max := b[3];
  result:=max;
end;

procedure recording(s: string; var x: integer; var y: string);
var i, T, Code: integer; k: string;
begin
  if (s<>'end') then
    y:='';
    for i:=1 to length(s) do
      begin
        if Not((s[i]>='0')and(s[i]<='9')) AND (s[i]<>' ') then
          y:=y+s[i]          //если не число и не пробел string
        else if (s[i]>='0')and(s[i]<='9') then
          k:=k+s[i];           //если число сохраняем в string
        if i=length(s) then   //после последнего символа число(string)
          begin
            Val(k, T, Code);     //преобразуем  в integer
            x := T;
            k:='';
          end;
      end;
end;
begin
 n:=1; //индекс массива
  while(s<>'end') do
    begin
      writeln('Enter name and points');
      readln(s);
      recording(s, x, y);
      a[n]:=y;
      b[n]:=x;
      inc(n);
    end;
   for i:=1 to high(b) do
     if b[i]=maximum(b) then //по индексу integer ищем значение string
       winner:=a[i];

  writeln('The winner is ',winner,', scores = ',max);
  readln();
 end.

var i, n, max: integer;
    s, winner: string;
    a: array[1..3] of string;
    b: array[1..3] of integer;
function maximum(b: array of integer): integer;
begin
  max := b[1];
  if max < b[2] then max := b[2]; //определяем максимальный integer
  if max < b[3] then max := b[3];
  result:=max;
end;

procedure recording(s: string; n: integer; var a: array of string; var b: array of integer);
var i, T, Code: integer; k: string;
begin
  if (s<>'end') then
    for i:=1 to length(s) do
      begin
        if Not((s[i]>='0')and(s[i]<='9')) AND (s[i]<>' ') then
          a[n]:=a[n]+s[i]          //если не число и не пробел string
        else if (s[i]>='0')and(s[i]<='9') then
          k:=k+s[i];           //если число сохраняем в string
        if i=length(s) then   //после последнего символа число(string)
          begin
            Val(k, T, Code);     //преобразуем  в integer
            b[n] := T;
            k:='';
          end;
      end;
end;
begin
 n:=0; //индекс массива                ПОЧЕМУ РАБОТАЕТ С 0 ???
  while (s<>'end') do
    begin
      writeln('Enter name and points');
      readln(s);
      recording(s, n, a, b);
      inc(n);
    end;
   //writeln('a[1]= ',a[1]); ДЛЯ ОТЛАДКИ
   //writeln('b[1]= ',b[1]);
   //writeln('a[2]= ',a[2]);
   //writeln('b[2]= ',b[2]);
   //writeln('a[3]= ',a[3]);
   //writeln('b[3]= ',b[3]);
   for i:=1 to high(b) do
     if b[i]=maximum(b) then //по индексу integer ищем значение string
       winner:=a[i];

  writeln('The winner is ',winner,', scores = ',max);
  readln();
 end.
vedro-compota's picture

решение засчитано

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