// In Variante 1 wird geprüft, ob ein kleineres Array in einem größeren
// enthalten ist bzw. ob zwei Arrays gleich sind, unter der Voraussetzung,
// dass die Elemte der Arrays vom gleichen Typ sind. Im Beispiel verwende
// ich den Typ "Double", es könnte aber jeder andere Typ sein.
// In Variante 2 wird geprüft, ob die Elemente des einen Arrays im anderen
// enthalten sind, unabhängig von ihrer Reihenfolge.


// Getestet mit D4 unter XP

// Varinate 1

type 
  art = Double; // für diesen Fall 
 
var 
  Grss: array[0..7] of Double = (1, 13, 33, 125, 2, 77, 120, 5); 
  Kln1: array[0..3] of Double = (2, 77, 120, 5); 
  Kln2: array[0..2] of Double = (33, 125, 77); 
  Kln3: array[0..2] of Double = (1, 13, 73); 
  Kln4: array[0..2] of Double = (1, 90, 2000); 
  Kln5: array[0..1] of Double = (1, 5); 
 
function KinG(K, G: array of art): Integer; 
var 
  se, sg, sk: integer; 
  A, P: PChar; 
begin 
  Result := -1; 
  sg := sizeof(G); 
  sk := sizeof(K); 
  if sk <= sg then begin 
    se := sizeof(G[0]); 
    P := @G; 
    A := P; 
    repeat 
      if comparemem(@K, P, sk) then begin 
        Result := (P - A) div se; 
        break; 
      end; 
      inc(P, se); 
    until P - A > sg - sk; 
  end; 
end; 
 
// Beispielaufruf 
// Zählung der Position beginnt bei "0" 
 
procedure TForm2.Button3Click(Sender: TObject); 
var 
  i: integer; 
begin 
  i := KinG(Kln1, Grss); 
  if i >= 0 then 
    showmessage('Grss enthält Kln1 an Position ' + inttostr(i)) 
  else showmessage('Nichts gefunden'); 
end; 
 
//-------------------------------------------- 
 
// Varinate 2

function KinGx(K, G: array of art): Integer; 
var x, y: integer; 
begin 
  Result := 0; 
  for x := 0 to high(K) do 
    for y := 0 to high(G) do 
      if K[x] = G[y] then begin 
        inc(Result); 
        break; 
      end; 
end; 
 
// Beispielaufruf 
 
procedure TForm2.Button4Click(Sender: TObject); 
var 
  i: integer; 
  s: string; 
begin 
  i := KinGx(Kln4, Grss); 
  if i = 0 then showmessage('Nichts gefunden') else 
    if i = length(Kln4) then showmessage('Grss enthält alle Elemente von Kln4') 
    else begin 
      s := 'Element'; 
      if i <> 1 then s := s + 'e'; 
      showmessage('Grss enthält nur ' + inttostr(i) + #32 + s + ' von Kln4') 
    end; 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke