AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

arrays vergleichen

Ein Thema von dinu_ch · begonnen am 20. Okt 2003 · letzter Beitrag vom 23. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
dinu_ch

Registriert seit: 3. Sep 2003
17 Beiträge
 
#1

arrays vergleichen

  Alt 20. Okt 2003, 21:26
hallo

ich bastle da newbie-mässig ein lotto-programm zusammen und möchte arrys verwenden, der anfang sieht so aus :

Delphi-Quellcode:
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.
- Dass ich die arr[i] vergleiche sieht ziemlich hässlich aus, gibt es da eine Alternative ?
- 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]
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: arrays vergleichen

  Alt 20. Okt 2003, 21:46
Statt die einzelnen Indizes zu vergleichen kannst du auch den gesamten Speicherbereich, den das Array einnimmt, vergleichen:

CompareMem(@Array1, Array2, Array-Length)
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
trialfreak

Registriert seit: 19. Okt 2003
24 Beiträge
 
Delphi 6 Professional
 
#3

Re: arrays vergleichen

  Alt 20. Okt 2003, 21:49
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:

http://www.delphipraxis.net/internal...to+algorithmus
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#4

Re: arrays vergleichen

  Alt 20. Okt 2003, 22:00
Hallo dinu_ch!

am besten ist es, beim Ziehen der Lottozahlen gleich zu testen, ob die selbe Zahl

schon gezogen worden ist

Delphi-Quellcode:
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;
Die Eingabe kann ebenfalls so gestaltet werden:



Delphi-Quellcode:
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;
Gruss

BrunoT

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: arrays vergleichen

  Alt 20. Okt 2003, 23:30
@BrunoT, lese dir den Link von Trialfreak mal genauer durch und du wirst sehen das dein Vorschlag nicht korrekt ist.

http://www.delphipraxis.net/internal...ct.php?t=10946

@dinu_ch, wenn dir ein schon fertiger Algo. nichts ausmacht dann findest du mehrere Source unter obigen Link.

Hagen
  Mit Zitat antworten Zitat
dinu_ch

Registriert seit: 3. Sep 2003
17 Beiträge
 
#6

Re: arrays vergleichen

  Alt 21. Okt 2003, 11:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#7

Re: arrays vergleichen

  Alt 21. Okt 2003, 16:47
immer diese cross poster: http://www.delphi-forum.de/viewtopic...=103479#103479

Bei dem speziellen problem sind mengen IMHO viel geeigneter
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#8

Re: arrays vergleichen

  Alt 21. Okt 2003, 19:02
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?

mfg

Holger

übrigens war mein Code nur ein Denkanstoss.
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#9

Re: arrays vergleichen

  Alt 22. Okt 2003, 14:42
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) also tausendmal kleiner als ein array of integer.

cu, maximov.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: arrays vergleichen

  Alt 23. Okt 2003, 01:38
Zitat:
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) also tausendmal kleiner als ein array of integer.
Falsch, wenn wir 5 aus 8 Milliarden ziehen wollen so benötigen wir nur 5 Integer mit Sets aber 1 Mb. Selbst das ermitteln der schon gezogenen Zahlen wäre mit Sets um vielfaches langsammer als mit 5 Integern.

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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