Zähler einbauen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

So tipyo,

ich habe "dein Problem" mal ein wenig durchdacht. Und siehe da nach Verbrennung von etwas Gehirnschmalz können wir auf Millionen-Berechnungen verzichten.

Warum? Nun die 2699 Ziehungen sind doch bereits die erfolgreichsten 7er Zahlenreihen, denn alle sie haben mindestens schon einmal einen 6er mit Zz gebracht. Das heißt um die erfolgreichste 7er Zahlenreihe zu finden brauchen wir nur jede dieser 2699 Reihen mit seinen 2698 Kompanjongs vergleichen, wer davon nun noch die meisten 6er, 5er+, 5er, 4er+, 4er, 3er+, 3er hatte ist der "Sieger".

Auf diesem sehr simplen Weg finden wir mit einem entsprechenden Quellcode in 1-2 Minuten (Schätzung) Laufzeit die bisher beste 7er Reihe. Alle anderen 89 Millionen (oder weis der Geier wie viele) Reihen vergessen wir einfach, denn sie haben ja noch nie den 6er + Zz gezeigt und können demnach nicht besser sein. Das nenne ich eine geniale Verkürzung/Optimierung der Berechnung.

Nun hau mal rein, denn das schaffst du auch noch bevor du in die Kiste steigst. :mrgreen:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Falo

stimmt... manchmal muss man einfach nur nen schritt zurücktreten, um den fall im richtigen licht zu sehen... :mrgreen:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Kaeru Gaman hat geschrieben:@Falo

stimmt... manchmal muss man einfach nur nen schritt zurücktreten, um den fall im richtigen licht zu sehen... :mrgreen:
Jep, oder mal ne längere Sitzung halten, da kann ich neben Zeitung lesen auch gut nachdenken. :mrgreen:
Übrigens gestern war die 2700 Ziehung. Wer coden will, bei mir gibts stets die aktuellen Ziehungsdaten für Samstag und Mittwoch als eingezippte Datenbank im Textformat. Automatische Aktualisierung erfolgt immer Dienstags und Freitags 16:00 Uhr.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Hallo Ihr Tipper,

nur mal einige kurze Fragen:

Haben diese 2700 Kombinationen (tatsächlich waren es wohl 4557 Ziehungen) eine erhöhte Wahrscheinlichkeit, beim nächsten Mal gezogen zu werden?

Ist diese Wahrscheinlichkeit nicht vielmehr genau so hoch bzw genau so niedrig, wie bei jeder anderen Kombination?

Wäre es anders, dann müssten doch mindestens einige der 2700 Kombinationen mehrfach vorgekommen sein! Ist das denn der Fall?

Möglicherweise sind einzelne Zahlen etwas gehäuft aufgetreten, andere möglicherweise seltener.

Das ist wohl die einzige Weisheit, die man durch Auswertung der 2700 Kombinationen herausfinden kann!

Da es mich selbst interessierte, hier ein schnell zusammengekloppter Kode, in dem ich nachträglich kleine Fehler bereinigt habe:

Code: Alles auswählen

;/ jear 2007 - Statistik Zahlenlotto
Define.s in
Define.l ix, ix1, mix, tlz
Define.q sum

#maxlz = 5000

Structure lz
  zdatum.s
  lzs.s
  lze.b[6]
  zz.b
EndStructure

Global Dim lz.lz(#maxlz)

;/ Zahlen einlesen
If ReadFile(1, "Mittwoch.txt")
  While Not Eof(1)
    in = Trim(ReadString(1))
    If in
      lz(ix)\zdatum = Left(in, 10)
      lz(ix)\lzs = Right(in, 22)
      For ix1 = 0 To 5
        lz(ix)\lze[ix1] = Val(Mid(in, 13 + ix1*3, 2))
      Next
      lz(ix)\zz = Val(Right(in, 2))
      ix + 1
    Else
      Break
    EndIf
  Wend
  CloseFile(1)
EndIf

If ReadFile(1, "Samstag.txt")
  While Not Eof(1)
    in = Trim(ReadString(1))
    If in
      lz(ix)\zdatum = Left(in, 10)
      lz(ix)\lzs = Right(in, 22)
      For ix1 = 0 To 5
        lz(ix)\lze[ix1] = Val(Mid(in, 13 + ix1*3, 2))
      Next
      lz(ix)\zz = Val(Right(in, 2))
      ix + 1
    Else
      Break
    EndIf
  Wend
  CloseFile(1)
EndIf

Debug "Anzahl der Ziehungen : " + Str(ix)
mix = ix - 1

;/ Mehrfach vorkommende Kombinationen?
Dim Test.s(mix)                                   ; Array zum sortieren
For ix = 0 To mix : Test(ix) = lz(ix)\lzs : Next  ; umspeichern
SortArray(Test(),2)                               ; Test() aufsteigend sortieren
in = Test(0) : ix1 = 0 ; Debug in
For ix = 1 To mix
  If Test(ix) = in : ix1 + 1 : Debug "Doppel : " + Test(ix) : EndIf
  in = Test(ix)
Next
Debug "Anzahl der mehrfach gezogenen Kombinationen : " + Str(ix1)
Redim Test.s(0)

;/ Häufigkeiten der einzelnen Lottozahlen
Structure hlz
  lze.b
  hlze.l
EndStructure

Dim hlz.hlz(49) : For ix = 0 To 49 : hlz(ix)\lze = ix : Next

For ix = 0 To mix
  hlz(lz(ix)\zz)\hlze + 1                         ; Zusatzzahl
  For ix1 = 0 To 5
    hlz(lz(ix)\lze[ix1])\hlze + 1                 ; gezogene Zahlen 
  Next
Next

SortStructuredArray(hlz(), 1, OffsetOf(hlz\hlze), #PB_Sort_Long)

Debug "Häufigkeiten der einzelnen Lottozahlen :"
ix1 = hlz(0)                                      ; 1955 gab es noch keine Zusatzzahl
For ix = 0 To 49 
  If hlz(ix)\lze > 0
    tlz = hlz(ix)\hlze
    sum + tlz
    Debug "Zahl : " + RSet(Str(hlz(ix)\lze), 2, "0") + " = " + RSet(Str(tlz), 4, " ")
  EndIf

Next

Debug "Kontrolle der Ziehungszahl : " + Str(sum / 7)

End
Zuletzt geändert von jear am 08.07.2007 14:25, insgesamt 2-mal geändert.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Haben diese 2700 Kombinationen (tatsächlich waren es wohl 4557 Ziehungen) eine erhöhte Wahrscheinlichkeit, beim nächsten Mal gezogen zu werden?

rechnerisch nicht.

> Ist diese Wahrscheinlichkeit nicht vielmehr genau so hoch bzw genau so niedrig, wie bei jeder anderen Kombination?

yap

> Wäre es anders, dann müssten doch mindestens einige der 2700 Kombinationen mehrfach vorgekommen sein! Ist das denn der Fall?

möglich, täte aber auch nix zur sache.


rein rechnerisch hat jede kombination dieselbe wahrscheinlichkeit.

nehmen wir mal an, ich würfle mit einem würfeln mit sechzehn seiten.
dann können 16 versch. ergebnisse mit rechnerisch der selben wahrscheinlichkeit dabei herauskommen.

wenn ich jetzt sieben mal würfle, können unmöglich alle 16 zahlen aufgetaucht sein,
und es kann durchaus vorkommen, dass eine zahl 2x vorkommt.

daraus aber den schluss zu ziehen,
dass diese doppelt vorgekommene zahl irgendwie "vom schicksal bevorzugt" sei,
ist hanebüchener humbug.

tatsächlich muss ich ein vielfaches von 16 mal werfen,
um statistisch die gleichmäßige verteilung nachzuweisen.


ebenso ist das mit den lotto-reihen.
wenn wir nur die 6 normalen zahlen nehmen, (6 aus 49, math. 49 über 6),
haben wir 13.983.816 verschiedene möglichkeiten.

wenn wir nun 2700 oder auch 4557 "würfe" davon betrachten,
ist es durchaus im rahmen der wahrscheinlichkeit,
dass ein paar kombinationen mehrfach vorkommen,
und die meisten kommen garnicht vor.

aber wie beim würfel macht dies überhaupt keine aussage.
wir müssten ein vielfaches von 13 millionen ziehungen betrachten,
um die gleichmäßige verteilung der zahlenreihen nachzuweisen.

jegliche schlußfolgerung von 2700 bzw. 4557 stichproben
auf das verhalten einer menge von 13.983.816 kombinationen
ist einfach nur kaffeesatzgelese und sonst nix.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

...das kann ich nur bestätigen
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Der "schnelle Kod" enthält aber Fehler, die Häufigkeiten der Zahlen ist viel zu niedrig. Vergleiche mit den Statistiken der einzelnen Lottoseiten der Bundesländer oder mit denen von meinem TippGenerator. :mrgreen:

4557 Ziehungen deshalb, weil Samstag und Mittwoch komplett. Ich berechne getrennt.

Bild
:::: WIN 10 :: PB 5.73 :: (x64) ::::
tipyo
Beiträge: 20
Registriert: 07.07.2007 09:50

Beitrag von tipyo »

Hallo,

vielen dank für die zahlreichen Info´s.

Ich hätte noch folgende Frage:

Wo kann ich vielleicht eine Liste einsehen über die Befehlsunterschiede
von VB und PureBasic

Beispiel:
VB6 PureBasic
APPEND FileSeek

usw.

mfg

tipyo
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

tipyo hat geschrieben:Wo kann ich vielleicht eine Liste einsehen über die Befehlsunterschiede
von VB und PureBasic
gar nicht. für so eine liste gibt es keine veranlassung.

die beiliegende befehlsreferenz ist absolut ausreichend und ziemlich gut.
lies die einfach mal komplett durch, so viel ist das garnicht.

wie ich zuvor schon sagte:
das wichtigste beim umstieg auf eine andere programmiersprache ist immer,
sich erst einmal die befehlsreferenz anzuschaun und sich einen eindruck zu verschaffen.

es wird dir nichts, aber auch gar nichts bringen, wenn du VB programmierst,
indem du PB-Befehle und einen PB-Compiler benutzt.
programme wort-für-wort übersetzen zu wollen ist fast genauso fruchtlos,
wie das selbe mit einem Roman zu versuchen.

lerne lieber richtig PB, da hast du mehr davon.
Beispiel:
VB6 PureBasic
APPEND FileSeek
ist zum beispiel falsch.
APPEND kann nur am ende der datei hinzuschreiben.
FileSeek findet dir jede beliebige stelle in der datei.
ein danach ausgeführtes schreiben überschreibt auch datensätze in der mitte.
Zuletzt geändert von Kaeru Gaman am 08.07.2007 14:18, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Dann hätten die PB Hersteller ja ordentlich was zu tun. Ne, sowas gibts nicht, wäre ja auch in gewisser Hinsicht lächerlich :lol:

Suche lieber nach nem ähnlich arbeitendem Befehl, oder baue den Befehl einfach nach. Sollte in (Pure)Basic wirklich garnicht schwierig sein. Wenn du wirklich "Programmieren" kannst, und nicht nur "Drag-n-drop-Objekte hin und herschieben", dann solltest du diese minimale Hürde relativ schnell meistern können. Hab keine Angst vor der Hilfe, die ist AFAIK ziemlich gut, und sollte dir für so gut wie jeden Befehl genug Informationen ausspucken.

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Antworten