![]() |
arrays vergleichen
hallo
ich bastle da newbie-mässig ein lotto-programm zusammen und möchte arrys verwenden, der anfang sieht so aus :
Delphi-Quellcode:
- Dass ich die arr[i] vergleiche sieht ziemlich hässlich aus, gibt es da eine Alternative ?
program lotto;
{$APPTYPE CONSOLE} uses SysUtils; // Prozedru zum Check ob Text oder Zahl procedure readint(var x:integer); var str : string; //Eingabevariable inp,code : integer; // Umwandlungsvariable begin repeat readln(str); val(str,x,code); if (code <> 0) then Write(' Keine Zahl eingegeben - nochmals : ') until (code = 0); end; var arr:array[1..7 ] of integer; arrz:array[1..6 ] of integer; i,j:integer; begin // Zahlen ziehen randomize; repeat for i:=1 to 7 do arr[i]:=random(49)+1; until (arr[1] <> arr[2]) and (arr[1] <> arr[3]) and (arr[1] <> arr[4]) and (arr[1] <> arr[5]) and (arr[1] <> arr[6]) and (arr[2] <> arr[3]) and (arr[2] <> arr[4]) and (arr[2] <> arr[5]) and (arr[2] <> arr[6]) and (arr[3] <> arr[4]) and (arr[3] <> arr[5]) and (arr[3] <> arr[6]) and (arr[4] <> arr[5]) and (arr[4] <> arr[6]) and (arr[5] <> arr[6]) and (arr[1] <> arr[7]) and (arr[2] <> arr[7]) and (arr[3] <> arr[7]) and (arr[4] <> arr[7]) and (arr[5] <> arr[7]) and (arr[6] <> arr[7]); writeln; writeln(' Lottozahlen : ',arr[1],' ',arr[2],' ',arr[3],' ',arr[4],' ',arr[5],' ',arr[6]); writeln(' Zusatzzahl : ',arr[7]); readln; // Tippen begin for j := 1 to 6 do begin write(' Geben Sie die ' +IntToStr(j)+ '.Zahl ein : '); readint(arrz[j]); //Eingabe des i-Wertes in Array end; // Ausgabe Tips writeln(arrz[1],' ',arrz[2],' ',arrz[3],' ',arrz[4],' ',arrz[5],' ',arrz[6]); end; readln; end. - Und wie kann ich beim arrz[j] verhindern, dass 2x das gleiche eingegeben wird ? Grüsse dinu_ch [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: arrays vergleichen
Statt die einzelnen Indizes zu vergleichen kannst du auch den gesamten Speicherbereich, den das Array einnimmt, vergleichen:
Delphi-Quellcode:
CompareMem(@Array1, Array2, Array-Length)
|
Re: arrays vergleichen
Hallo,
es gab schonmal ein Thema indem es u.a. um Lotto-Algorithmen ging. Denn einfach immer eine Zufallszahl aus 49 auswählen entspricht nicht der wahren Wahrscheinlichkeit des Lotto-Spiels, da hier die Wahrscheinlichkeit für eine Kugel mit jedem Durchgang größer wird, also zuerst 1/49, dann 1/48, ... [Beim Ziehen der Lotto-Zahlen werden die Kugeln ja nicht zurückgelegt] Am besten liest du dir mal den Thread durch, dort sind auch sehr sehr interessante Lösungsalgorithmen zu finden: ![]() |
Re: arrays vergleichen
Hallo dinu_ch!
am besten ist es, beim Ziehen der Lottozahlen gleich zu testen, ob die selbe Zahl schon gezogen worden ist
Delphi-Quellcode:
Die Eingabe kann ebenfalls so gestaltet werden:
Procedure ziehe;
Var Test:Boolean; i,j,Zahl:integer; arr:array[1..7 ] of integer; Begin randomize; For i:=1 to 7 Do Begin Test:=True; Repeat zahl:=random(49)+1; For j:=1 To 7 Do if arr[j] = zahl Then Test:=False; {Schon mal gezogen} Until Test=True; arr[i]:=Zahl; end; writeln; writeln(' Lottozahlen : ',arr[1],' ',arr[2],' ',arr[3],' ',arr[4],' ',arr[5],' ',arr[6]); writeln(' Zusatzzahl : ',arr[7]); readln; end;
Delphi-Quellcode:
Gruss
For i:=1 to 6 Do
Begin Test:=True; Repeat Readln(Zahl); For j:=1 To 7 Do if arrz[j] = zahl Then Test:=False; {Schon mal gezogen} Until Test=True; arrz[i]:=Zahl; end; BrunoT [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: arrays vergleichen
@BrunoT, lese dir den Link von Trialfreak mal genauer durch und du wirst sehen das dein Vorschlag nicht korrekt ist.
![]() @dinu_ch, wenn dir ein schon fertiger Algo. nichts ausmacht dann findest du mehrere Source unter obigen Link. Hagen |
Re: arrays vergleichen
besten dank für eure tips, der fertige code macht mir nichts aus, im gegenteil. so sehe ich als anfänger
gerade die zusammenhänge. |
Re: arrays vergleichen
:? immer diese cross poster:
![]() Bei dem speziellen problem sind mengen IMHO viel geeigneter :wink: |
Re: arrays vergleichen
Hallöchen Ihr!
das mit dem Set of .. ist ja wirklich genial, manchmal sieht man den Wald vor Bäumen nicht. Aber wie ist das mit dem Laufzeitverhalten, wenn es mehr als 5 Zahlen sind? :gruebel: mfg Holger übrigens war mein Code nur ein Denkanstoss. |
Re: arrays vergleichen
hmm... was soll denn mit dem Laufzeitverhalten von sets sein? ...es geht doch immer um laufzeit (ausser bei compos)! Jeder wert in einem set ist genau ein bit gross, dh. bei 49 (?) möglichen lotto zahlen haben wir nur 49 bits (wegen alignment etc vermutlich 64) :wink: also tausendmal kleiner als ein array of integer.
cu, maximov. |
Re: arrays vergleichen
Zitat:
Zudem lest euch den von mir angegebenen Link genauer durch, denn Sets können das Lotto Problem als solches nicht lösen. Einfach mal ein par Zahlen per Zufall aus 49 Set Elementen zu ziehen ist schlicht weg falsch und simuliert nicht die Lotto Realität. Der von mir dort aufgezeigte Algorithmus ist 1. universell, 2. korrekt und 3. am effizientesten. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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 by Thomas Breitkreuz