двумерный массив ошибка

Ответить
frogg
Сообщения: 6
Зарегистрирован: 30 мар 2009, 20:41

Код: Выделить всё

program laba;

type mas=array [1..10,1..10] of integer;
 var i,j:integer;
procedure input(var t,r:byte; var m:mas; c:string);

begin
writeln(c);
writeln('ââåäèòå ðàçìåðíîñòü ìàññèâà');
readln(t,r);
for i:=1 to t do
for j:=1 to r do begin
write ('m[',i,',',j,']=');
readln (m[i,j]);
end;
end;
procedure output(t,r:byte; var m:mas; c:string);
var i,j:integer;
begin
writeln(c);
for i:=1 to t do  begin
for j:=1 to r do
write(m[i,j],'':3);
writeln;
end;
end;

procedure q(t,r:byte; m:mas; c:string);
var i,j:integer;
    max,min,jmax,jmin,p:integer;
begin
for i:=1 to t do
begin
min:=m[i,10];
max:=m[i,10];
for j:=1 to r do
if m[i,j]<min then begin
min:=m[i,j];
jmin:=j;
end;
for j:=1 to r do
if m[i,j]>max then begin
max:=m[i,j];
jmax:=j;

end;
p:=m[i,jmin];
m[i,jmin]:= m[i,jmax];
m[i,jmax]:=p;

for i:=1 to t do  begin
for j:=1 to r do
write(m[i,j],'':3);
writeln;
end;
end;
end;

var a1,a2,a3:mas;
n1,n2,n3,m1,m2,m3: byte;

begin

input(n1,m1,a1,'Ìàòðèöà a1');
output(n1,m1,a1,'');
q(n1,m1,a1,'');

{input(n2,m2,a2,'Ìàòðèöà a2');
output(n2,m2,a2,'');

input(n3,m3,a3,'Ìàòðèöà a3');
output(n3,m3,a3,'');}


end.
ошибка в строке
p:=m[i,jmin];
пишет выходит за границы диапазона изменения индекса 1..10

помоги пожалуйста
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

1) раздел нужно выбирать правильно
2) текст б\должен быть оформлен так:

Код: Выделить всё

program laba;

uses wincrt;

type
  mas=array [1..10,1..10] of integer;
var
  i,j:integer;

procedure input(var t,r:byte; var m:mas; c:string);
begin
  writeln(c);
  writeln('aaaaeoa ?acia?iinou ianneaa');
  readln(t,r);
  for i:=1 to t do
  for j:=1 to r do begin
    write ('m[',i,',',j,']=');
    readln (m[i,j]);
  end;
end;


procedure output(t,r:byte; var m:mas; c:string);
var
  i,j:integer;
begin
  writeln(c);
  for i:=1 to t do  begin
    for j:=1 to r do write(m[i,j],'':3);
    writeln;
  end;
end;

procedure q(t,r:byte; m:mas; c:string);
var
  i,j:integer;
  max,min,jmax,jmin,p:integer;
begin
  for i:=1 to t do begin
    min:=m[i,10];
    max:=m[i,10];
    for j:=1 to r do if m[i,j]<min then begin
      min:=m[i,j];
      jmin:=j;
    end;
    for j:=1 to r do if m[i,j]>max then begin
      max:=m[i,j];
      jmax:=j;
    end;
    p:=m[i,jmin];
    m[i,jmin]:= m[i,jmax];
    m[i,jmax]:=p;
    for i:=1 to t do  begin
      for j:=1 to r do write(m[i,j],'':3);
      writeln;
    end;
  end;
end;

var
  a1,a2,a3:mas;
  n1,n2,n3,m1,m2,m3: byte;

begin
  input(n1,m1,a1,'Iao?eoa a1');
  output(n1,m1,a1,'');
  q(n1,m1,a1,'');

  {
  input(n2,m2,a2,'Iao?eoa a2');
  output(n2,m2,a2,'');
  input(n3,m3,a3,'Iao?eoa a3');
  output(n3,m3,a3,'');
  }

end.
3) укащанная Вами ошибка будет иметь место если при вводе массива t или r будут больше 10
4) текст исходной задачи тоже лучше было бы привести, так как однозначно в алгоритме есть ошибки. Например, min:=m[i,10];
- неверно. Так как при R<10 значения m[i,10] будус скорее всего нулевыми и поиск минимума не будет правильно выполнен. Условие задачи нужно.

5) Ну и если русские буквы не вставились нормаольно, то неужели так трудно руками перепечатать 6 слов, три из которых одинаковые?!
Ответить