Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

3_of_8 13. Apr 2006 19:34

Re: Prüfen ob Integer in Array?
 
Ist es ein sortiertes Array? Wenn ja, könnte man eine binäre Suche machen.

leddl 13. Apr 2006 19:59

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

Zitat von 3_of_8
Ist es ein sortiertes Array? Wenn ja, könnte man eine binäre Suche machen.

:lol: Also wenn das Array sortiert wäre, hätte er garantiert nicht gefragt :lol:
Delphi-Quellcode:
Result := true;
For i := 0 To 8 Do
  Result := Result AND (a[i] = i+1)
Da braucht man gar nicht viel suchen ;)

3_of_8 13. Apr 2006 20:17

Re: Prüfen ob Integer in Array?
 
Und wenn eine Zahl mehrmals vorkommt?

Aber ich glaube bei einem 10er Array ist es eh ziemlich egal, da wäre binäre Suche eigentlich Verschwendung.

leddl 13. Apr 2006 20:20

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

Zitat von 3_of_8
Und wenn eine Zahl mehrmals vorkommt?

Dann entspricht das Array nicht den geforderten Voraussetzungen und es wird false zurückgegeben :zwinker:

100nF 13. Apr 2006 21:02

Re: Prüfen ob Integer in Array?
 
hallo zusammen,

erstmal danke für eure antworten :bounce1:

ich werde morgen mal die vorschläge von Hawkeye219 und Sharky testen.
Ich denke das müsste so funktionieren.

ich dachte eben, mit arrays geht es so ähnlich wie "if x in Array"...

gruss
urbanbruhin

leddl 13. Apr 2006 21:08

Re: Prüfen ob Integer in Array?
 
"in" gibt es nur für Sets (Mengen).
Könntest aber auch einfach mal schauen, inwiefern sich dein Problem vielleicht auch mit Sets lösen lassen würde.

100nF 14. Apr 2006 08:31

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

Zitat von leddl
"in" gibt es nur für Sets (Mengen).
Könntest aber auch einfach mal schauen, inwiefern sich dein Problem vielleicht auch mit Sets lösen lassen würde.

was ist denn genau der unterschied von sets und arrays?
ich habe gestern zum ersten mal mit arrays gearbeitet, und sets habe ich noch nie verwendet :mrgreen:

aber mir ist es ja egal ob ich ein set oder ein array nehme, hauptsache es funktioniert.

EDIT: ich habs jetzt mal mit einem set probiert. hier die funktion, die überprüft ob jede zahl von 1 bis 9 einmal enthalten ist:
Delphi-Quellcode:
function TForm1.CorrectIntegers(i1, i2, i3, i4, i5, i6, i7, i8, i9: integer): boolean;
var s : set of 1..9;
begin
  result := false;
  Include(s, i1);
  Include(s, i2);
  Include(s, i3);
  Include(s, i4);
  Include(s, i5);
  Include(s, i6);
  Include(s, i7);
  Include(s, i8);
  Include(s, i9);
  if (1 in s) and (2 in s) and (3 in s) and (4 in s) and (5 in s) and
     (6 in s) and (7 in s) and (8 in s) and (9 in s) then result := true;
end;
und so habe ich die function dann getestet:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage(booltostr(correctintegers(5, 4, 6, 7, 2, 3, 8, 1, 9), true)); // das müsste true geben
  showmessage(booltostr(correctintegers(1, 9, 2, 8, 3, 7, 4, 6, 5), true)); // das auch true
  showmessage(booltostr(correctintegers(1, 2, 3, 4, 5, 6, 8, 8, 9), true)); // und das false
  showmessage(booltostr(correctintegers(1, 2, 3, 4, 5, 5, 7, 8, 9), true)); // und nochmals false
end;
bei den ersten zwei showmessages steht true drin, stimmt ja auch so. beim dritten sollte false stehen, kommt aber true raus :gruebel:
das vierte stimmt wieder, da kommt false raus...

weiss jemand was das problem ist?

emteg 14. Apr 2006 09:15

Re: Prüfen ob Integer in Array?
 
Ich hätte auch noch einen Vorschlag. Mein verfahren geht den array durch und speichert in einem vergleichs array, wie oft die gefundene zahl vorkommt. Dannach prüfe ich, ob die werte alle gleich 1 sind.

Delphi-Quellcode:
var MyArray: array [1..9] of Integer;
{...}

procedure TestMyArray;
var i, CurrInt: integer;
    TestArray: array [1..9] of integer;
    Valid: boolean;
begin
  //Erstmal alles im testarray auf 0 setzen.
  for i:=1 to 9 do
    TestArray[i]:=0;

  Valid:=true;      //fangen wir mal positiv an
  for i:=1 to 9 do
  begin
    CurrInt:=MyArray[i];       //die aktuelle zahl auslesen
    try
      TestArray[CurrInt]:=TestArray[CurrInt]+1;    //und im testarray eintragen
      if TestArray[CurrInt]<>1 then                //prüfen, ob die zahl schon
      begin
        Valid:=false;                              //mal vorgekommen ist
        break;
      end;
    except
      Valid:=false;                                //wenn was nicht stimmt
    end;
  end;

  if Valid=true then
    ShowMessage('Alles stimmt!')
  else
    ShowMessage('Nix is!');
end;

Hawkeye219 14. Apr 2006 09:28

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

Zitat von urbanbruhin
[weiss jemand was das problem ist?

Du mußt das Set zunächst initialisieren, sonst enthält es zufällige Werte: :wink:

Delphi-Quellcode:
var s : set of 1..9;
begin
  result := false;
  s := []; // <<----- hier
  Include(s, i1);
Die Abfrage kannst Du vereinfachen. Statt

Delphi-Quellcode:
if (1 in s) and (2 in s) and (3 in s) and (4 in s) and (5 in s) and
   (6 in s) and (7 in s) and (8 in s) and (9 in s) then result := true;
schreibst Du es so:
Delphi-Quellcode:
if (s = [1..9]) then result := True;
Zumindest beim Test auf Gleichheit kannst Du Sets wie "normale" Variablen benutzen. Die Abfrage mit "in" hast Du ja offenbar schon verstanden. :)


Gruß Hawkeye

100nF 14. Apr 2006 10:48

Re: Prüfen ob Integer in Array?
 
hallo Hawkeye219,

danke für deine antwort, es funktioniert wunderbar :bounce1:

gruss
urbanbruhin


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.
Seite 2 von 3     12 3      

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