Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen ob Integer in Array? (https://www.delphipraxis.net/67367-pruefen-ob-integer-array.html)

100nF 13. Apr 2006 17:54


Prüfen ob Integer in Array?
 
hallo zusammen,

ich hoffe mal das ist die richtige sparte...

also ich habe ein array:
Delphi-Quellcode:
var a: Array[0..8] of Integer;
nun möchte ich prüfen, ob in diesem array jede zahl von 1 bis 9 GENAU 1 MAL vorkommt.
ich wollte das so prüfen:
Delphi-Quellcode:
if 1 in a then // blabla
if 2 in a then // blabla
if 3 in a then // blabla
//...
leider geht das ja nicht mit arrays.

wie kann ich prüfen ob z.B. die Zahl 1 in dem array ist?

gruss
urbanbruhin

jbg 13. Apr 2006 17:55

Re: Prüfen ob Integer in Array?
 
Da musst du wohl oder übel eine FOR-Schleife bemühen.

Hawkeye219 13. Apr 2006 18:28

Re: Prüfen ob Integer in Array?
 
Hallo,

falls das zu prüfende Array immer genau 9 Elemente besitzt, hilft Dir vielleicht folgender Code:

Delphi-Quellcode:
var i : Integer;
    s : set of 1..9;
begin
  // Menge der enthaltenen Zahlen zusammenstellen
  s := [];
  for i := 0 to 8 do
    if (a[i] in [1..9]) then
      Include (s, a[i]);
  // Ergebnis prüfen
  if (s = [1..9]) then
    ShowMessage ("Jede Zahl genau 1x enthalten");
end;
Falls das Array mehr als 9 Elemente enthält, kann mit dem Code nur noch das Vorhandensein, nicht aber die Eindeutigkeit einer Zahl überprüft werden:

Delphi-Quellcode:
if (4 in s) then...
Gruß Hawkeye

Sharky 13. Apr 2006 18:42

Re: Prüfen ob Integer in Array?
 
Hai ihr,

hier mal mein Ansatz für diesen Fall ;-)
Delphi-Quellcode:
procedure TDemoForm.Button1Click(Sender: TObject);
var
  TestArray: array[0..8] of Integer;
  TestInteger: Integer;
  ndx: Integer;
begin
  // Ersteinmal für den Test das Array mit den Zahlen 1 bis 9 füllen
  for ndx := Low(TestArray) to High(TestArray) do
  begin
    TestArray[ndx] := ndx + 1;
  end;

  // Jetzt der Test.
  TestInteger := 0; // Alle Bits auf 0
  for ndx := Low(TestArray) to High(TestArray) do
  begin
    TestInteger := (TestInteger xor (1 shl (TestArray[ndx] - 1)));
  end;

  if (TestInteger = $1FF) then // Das ist 2^9 -1
  begin
    ShowMessage('blubb');
  end;
end;
Eigentlich mache ich nichts anderes als das Bit an der Postition welche von TestArray[ndx] bestimmt ist zu negieren.
Ist aber nicht die schönste aller möglichen Lösungen ;-)

pacman1986 13. Apr 2006 18:47

Re: Prüfen ob Integer in Array?
 
die wohl simpelste lösung ist das ganze zu addieren :P

Hawkeye219 13. Apr 2006 18:59

Re: Prüfen ob Integer in Array?
 
Zitat:

Zitat von pacman1986
die wohl simpelste lösung ist das ganze zu addieren

Ok, gegeben sei folgende Zahlenmenge: (1, 2, 3, 3, 4, 5, 9, 9, 9).

Frage 1: Ist jede Zahl von 1 bis 9 genau 1x enthalten?
Frage 2: Ist die Zahl 7 enthalten?

Was sagt Dein Algorithmus?

ste_ett 13. Apr 2006 19:02

Re: Prüfen ob Integer in Array?
 
Zitat:

Zitat von pacman1986
die wohl simpelste lösung ist das ganze zu addieren :P

1 + 2 + 3 ... = 45
1 + 1 + 4 ... = 45

Wenn du zu 100% sagen kannst, dass nur Zahlen von 1 bis9 drin sind und immer nur eine Zahl einmal, dann reicht eine einfaches Addieren.
Aber wenn du das sagen kannst, dann musst du nicht prüfen. :p

leddl 13. Apr 2006 19:03

Re: Prüfen ob Integer in Array?
 
Zitat:

Zitat von pacman1986
die wohl simpelste lösung ist das ganze zu addieren :P

OK, dann gehen wir mal davon aus, daß du recht hast ;)
Code:
1+2+3+4+5+6+7+8+9 => 45 //Alle Zahlen von 1 bis 9 genau einmal vorhanden, wie gewünscht
2+2+2+4+5+6+7+8+9 => 45
2+2+3+3+5+6+7+8+9 => 45
2+2+3+3+6+6+7+7+9 => 45
...
...
...
:zwinker: Ich denke, du siehst, worauf das rausläuft ===> simpel, aber grottenfalsch ;)

Thorben77 13. Apr 2006 19:04

Re: Prüfen ob Integer in Array?
 
Zitat:

Zitat von pacman1986
die wohl simpelste lösung ist das ganze zu addieren :P

Dann muss aber das Ergebnis nicht stimmen:
Code:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
Es geht aber auch so oder anders:
Code:
1 + 1 + 4 + 4 + 5 + 6 + 7 + 8 + 9 = 45
MfG

Edit: Hat der rote Kasten schon Oster-Urlaub :gruebel:

Edit 2: Die Addier-"Lösung" wär möglich, wenn jede Zahl nur einmal vorkommen kann und urbanbruhin prüfen wollte, ob schon alle Zahlen von 1 bis 9 im Array sind.

pacman1986 13. Apr 2006 19:06

Re: Prüfen ob Integer in Array?
 
tschuldigung :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Seite 1 von 3  1 23      

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