Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Arrays auswerten mit for-schleife (https://www.delphipraxis.net/87604-arrays-auswerten-mit-schleife.html)

zecke 2. Mär 2007 21:01


Arrays auswerten mit for-schleife
 
:hi:

Also der Titel war nicht einfach zu wählen, hoffe er ist passend.

Ich habe eine Schleife, die mir ausspuckt ob zwei Integer-Werte (die gleichen) innerhalb eines Arrays vorhanden sind:
Delphi-Quellcode:
for a := 1 to 5 do
  begin
    if (AvBlatt[a] <> nil) then
      begin
        if ((AvBlatt[a].X)=(AvBlatt[(AvBlatt[a].X)].Y)) then
          begin
            Showmessage('Karte '+IntToStr(AvBlatt[(AvBlatt[a].X)].X)+' und Karte '+IntToStr(AvBlatt[a].X));
            Break;
          end;
      end;
    if (AvBlatt[a] = nil) then
      begin
        //
      end;
end;
Zugewiesen habe ich tesweise wie folgt:
Delphi-Quellcode:
ABlatt[1]:=TKarte.Create((random(13)+1),kfKaro,1);
ABlatt[2]:=TKarte.Create((random(13)+1),kfPik,2);
ABlatt[3]:=TKarte.Create((random(13)+1),kfKreuz,3);
ABlatt[4]:=TKarte.Create((random(13)+1),kfKaro,4);
ABlatt[5]:=TKarte.Create((random(13)+1),kfHerz,5);
Ich habe also ein Array (ABlatt) mit gleichen/verschiedenen Zahlenwerten. Welche dieser Werte gleich sind oder nicht schreibe ich ein weiteres Array (AvBlatt). Dieses Array (AvBlatt) hat dann zwei integer-Einträge z.B. "X=1,Y=2".

AvBlatt[1].X:=1 und AvBlatt[1].Y:=3 würde also bedeuten: ABlatt[1].X = ABlatt[3].X

Mit der obigen Schleife gehe ich also die Werte durch und .gehe bei der 1. Übereinstimmung raus. Das funktioniert wunderbar für den fall, dass nur ein mal 2/3/4 zahlen gleich sind. Wenn ich 2 mal 2 gleiche habe bekomme ich nur das 1. paar zurück, weil ich aus der Schleife herausgehe, bevor sie beim späteren Päärchen angekommen ist.

Es ist etwas kompliziert, aber ich hoffe mir kann jemand helfen :?

Ich möchte natürlich alle doppelten Zahlen aus dem Array (AvBlatt), allerdings ohne dass ich eine Ausgabe wie "Karte 1 und Karte 3" und "Karte 3 und Karte 1" bekomme. Das hatte ich schon und hilft mir nicht weiter. Ich baute das break; ein, damit ich nur noch "Karte 1 und Karte 3" bekomme. Dadurch entstand aber das Problem, das nachfolgende Pärchen ignoriert werden.

:cry:

zecke 2. Mär 2007 23:42

Re: Arrays auswerten mit for-schleife
 
Ha! Eigenlob stinkt, aber ich kann ganz genial sein :mrgreen:

Ich habs hinbekommen und kann mir den kompletten 2. Array gleich noch sparen :D

Der Code:
Delphi-Quellcode:
for a := 1 to 5 do begin
   for b := 1 to 5 do
     begin
      if (ABlatt[a].Wert = ABlatt[b].Wert) then
       begin
         if (ABlatt[a].Position <> ABlatt[b].Position) then
           begin
             Showmessage('Karte '+IntToStr(ABlatt[b].Position)+' und Karte '+IntToStr(ABlatt[a].Position));
           end else
         break;
       end;
     end;
end;
Der Code überprüft jetzt, ob doppelte Zahlen vorhanden sind, egal an welcher Stelle. Muss nur noch der Fall von drei/vier gleichen Zahlen eingebaut werden :???:

Danke an die, die sich immerhin die Mühe gemacht haben, mein Problem zu verstehen :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz