Консультация № 176835
21.02.2010, 18:01
0.00 руб.
0 4 2
Здравствуйте,Уважаемые эксперты,помогите пожалуйста:Дана матрица А(m, n), содержащая только два одинаковых числа. Найти эти числа и их индексы
Премного благодарен.

Обсуждение

Неизвестный
21.02.2010, 18:10
общий
Вопрос, увы, стандартный - "Как задавать матрицу?"
давно
Профессор
401888
1232
21.02.2010, 18:27
общий
27.02.2010, 12:18
это ответ
Здравствуйте, max123!
Вопрос соблюдения условия задачи на Вашей совести. Написал только поиск элементов.
Код в приложении.

Приложение:
uses crt;
const max=20;
var a,b:array[1..max,1..max] of integer;
m,n,i,j,k,l,i1,j1,i2,j2:byte;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',max,' m=');
readln(m);
until m in[1..max];
repeat
write('Количество столбцов до ',max,' n=');
readln(n);
until n in[1..max];
writeln('Введите элементы матрицы, в том числе 2 одинаковых:');
for i:=1 to m do
for j:=1 to n do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
clrscr;
writeln('Матрица A:');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln;
end;
for i:=1 to m do
for j:=1 to n do
for k:=1 to m do
for l:=1 to n do
if (a[i,j]=a[k,l])and((i<>k)or(j<>l)) then
begin
i1:=i;
j1:=j;
i2:=k;
j2:=l;
end;
writeln('Одинаковые элементы a[',i1,',',j1,']=',a[i1,j1],' и a[',i2,',',j2,']=',a[i2,j2]);
readln
end.
давно
Профессор
401888
1232
21.02.2010, 21:26
общий
Я там напартачил в коде, кое-где перепутал m и n, проверял на квадратной, поэтому ошибку не заметил. Вот исправленный код, все комментарии в силе.
Код:
uses crt;
const max=20;
var a,b:array[1..max,1..max] of integer;
m,n,i,j,k,l,i1,j1,i2,j2:byte;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',max,' m=');
readln(m);
until m in[1..max];
repeat
write('Количество столбцов до ',max,' n=');
readln(n);
until n in[1..max];
writeln('Введите элементы матрицы, в том числе 2 одинаковых:');
for i:=1 to m do
for j:=1 to n do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
clrscr;
writeln('Матрица A:');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln;
end;
for i:=1 to m do
for j:=1 to n do
for k:=1 to m do
for l:=1 to n do
if (a[i,j]=a[k,l])and((i<>k)or(j<>l)) then
begin
i1:=i;
j1:=j;
i2:=k;
j2:=l;
end;
writeln('Одинаковые элементы a[',i1,',',j1,']=',a[i1,j1],' и a[',i2,',',j2,']=',a[i2,j2]);
readln
end.

Неизвестный
22.02.2010, 00:29
общий
это ответ
Здравствуйте, max123.
Лобовое решение в приложении

Приложение:
{
Дана матрица А(m, n), содержащая только два одинаковых числа.
Найти эти числа и их индексы
}
Uses
Crt;
Const
Rows = 5;
Columns = 8;
NumberX = -9;

Var
row, column, i, j, r1, c1: Byte;
Ar: Array[1..Rows, 1..Columns] of Integer;
flag: Boolean;

begin
ClrScr;
Randomize;
{Init array items}
for row:=1 to Rows do
for column:=1 to Columns do
Ar[row, column] := row*10 + column;

Ar[Random(Rows)+1, Random(Columns)+1] := NumberX;
Ar[Random(Rows)+1, Random(Columns)+1] := NumberX;

{Print array items}
for row:=1 to Rows do begin
for column:=1 to Columns do begin
Write(Ar[row, column]:4);
end;
WriteLn;
end;
WriteLn;

{N^2 Solving}
flag := false;
for row:=1 to Rows do begin
for column:=1 to Columns do begin
for r1:=1 to Rows do begin
for c1:=1 to Columns do begin
if (row = r1) and (column = c1) then
continue;
if Ar[row, column] = Ar[r1, c1] then begin
Write('Found ', Ar[row, column], ': Ar[', row, ',', column, '] = Ar[', r1, ',', c1, ']');
flag := true;
break;
end;
end;
if flag then break;
end;
if flag then break;
end;
if flag then break;
end;
if not flag then
Write('Equals items NOT FOUND');
readkey;
end.
Форма ответа