porównac 2 tablice

0

W jaki sposób porównać zawartości 2 tablic 2-u wymiarowych i wypisać ich elementy wspólne i elementy rożne ?

0

hmm... lecisz po elementach tablicy i sprawdzasz przykladowo:

var
 a1,a2:array[0..5,0..2] of byte;

...

var
i,j:byte;
begin
for i:=0 to 5 do
 for j:=0 to 2 do
  if a1[i,j]<>a2[i,j] then showmessage(Format('a1[%d,%d]: %d '#10'a2[%d,%d]: %d',[i,j,a1[i,j],i,j,a2[i,j]]));

nie sprawdze bo w tej chwili nie mam Delphi pod reka moze gdzies zgubilem nawiad albo przecinek, albo calosc jest zle ;) :P

0

W macierzy 3 na 3 mam znaleźć te liczby, których NIE MA

  • w macierzy znajdują się liczby z zakresu 1..9 które się nie powtarzają
  • w danej komórce znajduje się liczba albo jej brak
  • nie jest ważna kolejność

2 1 3
4
8 7

w jaki sposób wykazać ze brak 5 6 i 9

0

jako pustej liczby uzywaj -1 :]

0
type TMat=array[0..2,0..2]of Byte;
const Mat:TMat=((2,1,3),(0,4,0),(8,7,0));

function Sprawdz(const M:TMat):Word;
var X,Y:Integer;
begin
  Rezult:=0;
  for Y=0 to 2 do for X=0 to 2 do Result:=(Result)or((1)shl(M[Y,X]));
end;

function BrakujeCzegos(WordZeSprawdz:Word):Boolean;
begin
   Result:=((WordZeSprawdz)and(1))<>0;
end;

function BrakujeLiczby(WordZeSprawdz:Word;Liczba:Byte):Boolean;
begin
   Result:=((WordZeSprawdz)and((1)shl(Liczba)))=0;
end;

procedure Jakas;
var W:Word;
var B:Byte;
begin
  W:=Sprawdz(Mat);
  if BrakujeCzegos(W) then
  begin
    for B:=1 to 9 do if BrakujeLiczby(W,B) then ShowMessage(...);
  end;
end;
0

Tak a propos czy to nie do rozwiazania sudoku programik piszesz ?

0

Zapomnialem dodac ze po obliczeniu tego WordZeSprawdz1 dla pierwszej tablicy i WordZeSprawdz2 do drugiej mozna uzyc:
var Wspolne,Rozne,Razem:Word;

Wspolne:=WordZeSprawdz1 and WordZeSprawdz2;
Rozne:=WordZeSprawdz1 xor WordZeSprawdz2;
Razem:=WordZeSprawdz1 or WordZeSprawdz2;

a potem traktowac funkcja CzyBrakLiczby.

0

Nie wiem, dlaczego ale powyższy kod nie wyświetla mi ze brak niektórych liczb

0

tamto pisalem z reki no i sa bledy ale wylacznie syntaksyczne.
ten kod u mnie dziala:

type TMat=array[0..2,0..2]of Byte;

function Sprawdz(const M:TMat):Word;
var X,Y:Integer;
begin
  Result:=0;
  for Y:=0 to 2 do for X:=0 to 2 do Result:=(Result)or((1)shl(M[Y,X]));
end;

function BrakujeCzegos(WordZeSprawdz:Word):Boolean;
begin
   Result:=((WordZeSprawdz)and(1))<>0;
end;

function BrakujeLiczby(WordZeSprawdz:Word;Liczba:Byte):Boolean;
begin
   Result:=((WordZeSprawdz)and((1)shl(Liczba)))=0;
end;

function JestLiczba(WordZeSprawdz:Word;Liczba:Byte):Boolean;
begin
   Result:=((WordZeSprawdz)and((1)shl(Liczba)))<>0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var W1,W2,Wspolne,Rozne,Razem:Word;
var B:Byte;
var Str:String;
const Mat1:TMat=((2,1,3),(0,4,0),(8,7,0));
const Mat2:TMat=((0,0,4),(1,0,0),(9,5,0));
begin
  W1:=Sprawdz(Mat1);
  if BrakujeCzegos(W1) then
  begin
    SetLength(Str,0);
    for B:=1 to 9 do if BrakujeLiczby(W1,B) then Str:=Str+IntToStr(B)+',';
    SetLength(Str,Length(Str)-1);
    ShowMessage('W Mat1 brakuje liczb: '+Str);
  end;
  W2:=Sprawdz(Mat2);
  if BrakujeCzegos(W2) then
  begin
    SetLength(Str,0);
    for B:=1 to 9 do if BrakujeLiczby(W2,B) then Str:=Str+IntToStr(B)+',';
    SetLength(Str,Length(Str)-1);
    ShowMessage('W Mat2 brakuje liczb: '+Str);
  end;

  Wspolne:=W1 and W2;
  SetLength(Str,0);
  for B:=1 to 9 do if JestLiczba(Wspolne,B) then Str:=Str+IntToStr(B)+',';
  SetLength(Str,Length(Str)-1);
  ShowMessage('Wspolne liczby w Mat1 i Mat2: '+Str);

  Rozne:=W1 xor W2;
  SetLength(Str,0);
  for B:=1 to 9 do if JestLiczba(Rozne,B) then Str:=Str+IntToStr(B)+',';
  SetLength(Str,Length(Str)-1);
  ShowMessage('Rozne liczby w Mat1 i Mat2: '+Str);

  Razem:=W1 or W2;
  SetLength(Str,0);
  for B:=1 to 9 do if JestLiczba(Razem,B) then Str:=Str+IntToStr(B)+',';
  SetLength(Str,Length(Str)-1);
  ShowMessage('Razem liczby w Mat1 i Mat2: '+Str);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1