Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > поиск в двумерном массиве


Автор: Oliko 2.2.2010, 15:43
Здравствуйте. Помогите, пожалуйста, с задачей.
Нужно определить, есть ли одинаковые элементы в двумерном массиве.
Я понимаю, что перебирать весь массив каждый раз не нужно, но по-другому реализовать не получается.

Код

program test;
uses crt;
const  N=10;
var i,j,k, m, maxi, maxj, num:integer;
    a:array [1..N, 1..N] of integer;
       prover : boolean;
begin
clrscr;
randomize;   
Write('Количество строк в массиве до ', N,'  ');
read(maxi);
write('Количество столбцов в массиве до ', N,' ');
read(maxj); 
        writeln;
        for i:=1 to maxi do
            begin
                for j:=1 to maxj do
                    begin
                        a[i, j]:=round((random*21)-10);
                        write(a[i,j],' ');
                    end;
                    writeln;
            end;
                
writeln;
prover:=false;
m:=1;
k:=1;
num:=a[m,k];
while ( k<=maxj ) do 
begin 
    for j:=1 to maxj do
            begin
                for i:=1 to maxi do 
                    begin
                        if a[i, j]=num then 
                            begin
                                if ((i<>m) or(j<>k) ) then 
                                    prover:=true;
                            end; 
                        if (prover) then
                            break;
                    end;
                if(prover ) then
                    break;
            end;
            if(prover) then
                break;


    if(prover=false) then    
        begin
            if ((m+1 > maxi) and(k<=maxj)) then 
                begin
                    m:=1;
                    k:=k+1; 
                    num:=a[m,k];
                end

            else 
                begin
                    m:=m+1;
                    num:=a[m,k];
                end;
        end;                

end;    
writeln;
    
    if (prover) then 
        writeln('Одинаковые элементы есть')
    else 
        writeln('Одинаковых элементов нет');
end.        

Автор: Mikel 2.2.2010, 16:10
Как-то громоздко все. Но как минимум можно заменить на 
Код

...
    for j:=m to maxj do
            begin
                for i:=k to maxi do 
...

Автор: Oliko 2.2.2010, 20:53
Mikel, спасибо. Мне почему-то казалось, что нужно 

Код

...
for j:=k to maxj do
            begin
                for i:=m to maxi do 
...

отсюда у меня ошибки начались в ресультатах

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)