![]() |
Re: Prüfen ob Integer in Array?
Ist es ein sortiertes Array? Wenn ja, könnte man eine binäre Suche machen.
|
Re: Prüfen ob Integer in Array?
Zitat:
Delphi-Quellcode:
Da braucht man gar nicht viel suchen ;)
Result := true;
For i := 0 To 8 Do Result := Result AND (a[i] = i+1) |
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. |
Re: Prüfen ob Integer in Array?
Zitat:
|
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 |
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. |
Re: Prüfen ob Integer in Array?
Zitat:
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:
und so habe ich die function dann getestet:
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;
Delphi-Quellcode:
bei den ersten zwei showmessages steht true drin, stimmt ja auch so. beim dritten sollte false stehen, kommt aber true raus :gruebel:
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; das vierte stimmt wieder, da kommt false raus... weiss jemand was das problem ist? |
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; |
Re: Prüfen ob Integer in Array?
Zitat:
Delphi-Quellcode:
Die Abfrage kannst Du vereinfachen. Statt
var s : set of 1..9;
begin result := false; s := []; // <<----- hier Include(s, i1);
Delphi-Quellcode:
schreibst Du es so:
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;
Delphi-Quellcode:
Zumindest beim Test auf Gleichheit kannst Du Sets wie "normale" Variablen benutzen. Die Abfrage mit "in" hast Du ja offenbar schon verstanden. :)
if (s = [1..9]) then result := True;
Gruß Hawkeye |
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 09:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz