Урок 18. Задача 7.

Урок 18. Задача 7.

Решите предыдущую задачу:
С использованием процедуры, которая разбирала бы очередную строку, изменяя по ссылке значения двух перемененных (одна для имени и одна для балла), уже после вызова этой процедуры для очередной строки записывайте очередные значения переменных в массивы (каждую в свой).

type arrI = array[1..3] of integer;
type arrS = array[1..3] of string;
var i, j, n, c, ind, ball :integer;
    str, imya :string;
    aI :arrI;
    Sa :arrS;

function get_index(aI :arrI) :integer;
begin
  if aI[1] < aI[2] then
    if aI[2] < aI[3] then
      get_index := 3
    else
      get_index := 2
  else
    if aI[1] < aI[3] then
      get_index := 3
    else
      get_index := 1;
end;

procedure getData(str: string; var imya: string; var ball: integer);
var i, n, c :integer;
    s_3 :string;
begin
  for i := 1 to length(str) do
  begin
    val(str[i], n, c);
    if c = 1 then
      if str[i] = ' ' then
        continue
      else
        imya := imya + str[i]
    else
      s_3 := s_3 + str[i];
  end;
  val(s_3, n);
  ball := n;
end;

begin
  j := 0;
  while true do
  begin
    j := j + 1;
    writeln('enter');
    readln(str);
    if str = 'end' then
      break;
    imya := '';
    ball := 0;
    getData(str, imya, ball);
    aI[j] := ball;
    Sa[j] := imya;
    writeln(ball, ' ', imya); //аномалия
  end;
  ind := get_index(aI);
  writeln('Победитель - ', Sa[ind], ' число - ', aI[ind]);
  readln();
end.    
vedro-compota's picture

переписать код под N=100, так чтобы он был адаптирован к поиску по массиву произвольной длины

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

type arrI = array[1..3] of integer;
type arrS = array[1..3] of string;
var i, j, n, c, ind, ball :integer;
    str, imya :string;
    aI :arrI;
    Sa :arrS;

function get_index(aI :arrI) :integer;
var n, i :integer;
begin
  for i := 1 to (high(aI) - 1) do
    if aI[i] < aI[i + 1] then
      n := i + 1
    else
      n := i;
  get_index := n;
end;

procedure getData(str: string; var imya: string; var ball: integer);
var i, n, c :integer;
    s_3 :string;
begin
  for i := 1 to length(str) do
  begin
    val(str[i], n, c);
    if c = 1 then
      if str[i] = ' ' then
        continue
      else
        imya := imya + str[i]
    else
      s_3 := s_3 + str[i];
  end;
  val(s_3, n);
  ball := n;
end;

begin
  j := 0;
  while true do
  begin
    j := j + 1;
    writeln('enter');
    readln(str);
    if str = 'end' then
      break;
    imya := '';
    ball := 0;
    getData(str, imya, ball);
    aI[j] := ball;
    Sa[j] := imya;
    writeln(ball, ' ', imya); //аномалия
  end;
  ind := get_index(aI);
  writeln('Победитель - ', Sa[ind], ' число - ', aI[ind]);
  readln();
end. 
vedro-compota's picture

 
function get_index(aI :arrI) :integer;
var n, i :integer;
begin
  for i := 1 to (high(aI) - 1) do
    if aI[i] < aI[i + 1] then
      n := i + 1
    else
      n := i;
  get_index := n;
end;
 

--проверить. Если это поиск индекса максимума, то тут что-то не то

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

type arrI = array[1..3] of integer;
type arrS = array[1..3] of string;
var i, j, n, c, ind, ball :integer;
    str, imya :string;
    aI :arrI;
    Sa :arrS;

function get_index(aI :arrI) :integer;
var i, max :integer;
begin
  max := 1;
  for i := 2 to high(aI) do
    if aI[max] < aI[i] then
      max := i;
  get_index := max;
end;

procedure getData(str: string; var imya: string; var ball: integer);
var i, n, c :integer;
    s_3 :string;
begin
  for i := 1 to length(str) do
  begin
    val(str[i], n, c);
    if c = 1 then
      if str[i] = ' ' then
        continue
      else
        imya := imya + str[i]
    else
      s_3 := s_3 + str[i];
  end;
  val(s_3, n);
  ball := n;
end;

begin
  j := 0;
  while true do
  begin
    j := j + 1;
    writeln('enter');
    readln(str);
    if str = 'end' then
      break;
    imya := '';
    ball := 0;
    getData(str, imya, ball);
    aI[j] := ball;
    Sa[j] := imya;
    writeln(ball, ' ', imya); //аномалия
  end;
  ind := get_index(aI);
  writeln('Победитель - ', Sa[ind], ' число - ', aI[ind]);
  readln();
end.  
vedro-compota's picture

засчитано

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