collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 68
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14038
  • stats Beiträge insgesamt: 67221
  • stats Themen insgesamt: 9067
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Häufikeit der Ziehungen 6 aus 49  (Gelesen 642 mal)

Offline Liene

  • Newbie
  • Beiträge: 12
Häufikeit der Ziehungen 6 aus 49
« am: März 25, 2018, 23:36:16 »
Hallo ,
ich simuliere verschieden Ziehungen (z.B. n=1.000, 10.000 usw.)  für 6 aus 49.
Die Ergebnisse der einzelnen Ziehungen speichere ich in tblDaten. Hieraus kann ich dann mit einer Abfrage die Häufigkeiten der einzelnen Zahlen ermitteln.

Da das für verschiedene n umständlich ist, wollte ich eine Funktion hierzu schreiben.

Public Function Häufigkeiten()
' Häufigkeiten bei 6 aus 49 und verschiedener Anzahl von Ziehungen
Dim db As Database, rs As Recordset, qdf As QueryDef
Dim strSQL As String, Anz As Long, N As Long, a As Long, k As Long

Dim zahl1, zahl2, zahl3, zahl4, zahl5, zahl6 As Long
Dim zz As Long


'Abfrage gestalten ---------------------------------------------------------------------------------------------------------------------------
strSQL = "SELECT tblDaten.Zahl1, tblDaten.Zahl2, tblDaten.Zahl3, tblDaten.Zahl4, tblDaten.Zahl5, tblDaten.Zahl6"
strSQL = strSQL & " FROM tblDaten"
strSQL = strSQL & " WHERE(((tblDaten.zahl1) = 13)) Or (((tblDaten.zahl2) = 13)) Or (((tblDaten.zahl3) = 13)) Or (((tblDaten.zahl4) = 13)) Or (((tblDaten.zahl5) = 13)) Or (((tblDaten.zahl6) = 13))"

Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
 
Set qdf = db.CreateQueryDef("qryHäufigkeit", strSQL)
'set rs.OpenRecordset("qryHäufigkeit")

Anz = DCount("*", "qryHäufigkeit")

End Function


Der Code zeigt die Berechnung der Häufigkeit für die Zahl 13 und funktioniert so auch.
Ich möchte nun eine Schleife realisieren, dass ich alle Zahlen berechnet werden, d. h. in dem Code soll für 13 eine Variable stehen.

Ich scheitere immer, im Code
WHERE(((tblDaten_49.zahl1) = 13)) Or (((tblDaten_49.zahl2) = 13)) Or (((tblDaten_49.zahl3) = 13))...


die 13 mit einer Variablen ZZ auszudrücken.
Für ein Lösungsvorschlag wäre ich sehr dankbar

Gruß

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7375
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #1 am: März 25, 2018, 23:51:44 »
Hallo,
vergiss es, das ist viel zu umständlich und viel zu langsam. Die gezogenen Zahlen gehören als je ein Datensatz in eine extra Tabelle mit einem Fremdschlüssel zur Ziehung. Bei 10000 Ziehungen sind dann in der Tabelle 60000 DS mit einer Spalte. Die Datenmenge ist die Gleiche.
Dann genügt eine einfache gruppierte Abfrage zur Ermittlungen der Häufigkeiten.
SELECT GezZahl, Count(GezZahl) AS Haeufigkeit FROM GezZahlen GROUP BY GezZahlDie Abfrage braucht für 115.000 Zahlen ein Augenzwinkern.
Deine eigene Funktion kannst Du ersatzlos eindampfen.
Mit korrektem (normalisiertem) Aufbau kannst Du dann mit anderen einfachen Abragen weitere Auswertungen machen. Z.B. Kleinste, Höchste usw.
Du kannst dann auch ganz einfach rauskriegen welche Zahl noch nicht gezogen wurde, welche Zahl zuletzt usw. usw. alles aber nur mit dem richtigen Aufbau.
Und alles ohne VBA, keinen Buchstaben.
« Letzte Änderung: März 26, 2018, 09:57:31 von MzKlMu »
Gruß
Klaus
 

Offline Liene

  • Newbie
  • Beiträge: 12
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #2 am: März 26, 2018, 11:01:18 »
Hallo,
die Anfängerschwierigkeit liegt immer in der exakten Beschreibung des Problems.
Könnte man dieses, wäre man der Lösung schon nahe.

Ich ziehe 1000 Zahlungen und speichere diese in eine Tabelle tblDaten. Für jede Ziehung ein Datensatz:

Ziehung; Zahl1;Zahl2;Zahl3;Zahl4, Zahl5m Zahl6

1:  3, 34, 44, 8, 17, 41
2:  9, 12, 38, 27, 33, 17
3: 44, 18, 2, 5, 38, 39
...
1000: 41, 28, 12, 25, 18, 39

mit einer einfachen Abfrage bekomme ich dann die Häufigkeit einer Zahl:
SELECT tblDaten.Zahl1, tblDaten.Zahl2, tblDaten.Zahl3, tblDaten.Zahl4, tblDaten.Zahl5, tblDaten.Zahl6
FROM tblDaten
WHERE (((tblDaten.Zahl1)=13)) OR (((tblDaten.Zahl2)=13)) OR (((tblDaten.Zahl3)=13)) OR (((tblDaten.Zahl4)=13)) OR (((tblDaten.Zahl5)=13)) OR (((tblDaten.Zahl6)=13));

Im Beispiel die Häufigkeit für die Zahl 13. Dieses müsste ich 49 mal durchführen und das für eine  verschieden Anzahl von Ziehungen.

Deshalb mein Versuch, die Abfrage in VBA zu realisieren:
Die Bearbeitungszeit und ein normalisierter Aufbau spielen keine Rolle, es handelt sich lediglich um ein kleines Zahlenexperiment (Will Lotto-Millionär werden :-) )

Gruß Liene
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7375
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #3 am: März 26, 2018, 11:20:37 »
Hallo,
die Anfängerschwierigkeit liegt immer in der exakten Beschreibung des Problems.Das Problem habe ich exakt verstanden, nur Du die Lösung nicht. Der  ist auch als Experiment völlig untauglich. Was hindert Dich daran die Zahlenreihe in einer Spalte zu erzeugen, statt in 6 Spalten ?
Die Tabelle sieht dann einfach so aus:
Ziehung GezZahl
 1        3
 1        34
 1        44
 1        8
 1        17
 1        41
 2        9
 2        12
 2        38
 2        27
 2        33
 2        17
usw.
Strukturiere das um, mache 2 Tabellen und Du hast keine Probleme mehr.
Mit Deiner Lösung kann man auch nichts lernen, das würde man in einer Datenbank niemals machen.

3: 44, 18, 2, 5, 38, 39
Gruß
Klaus
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 912
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #4 am: März 26, 2018, 11:26:37 »
Zitat
Die Bearbeitungszeit und ein normalisierter Aufbau spielen keine Rolle
Dann akzeptiere einfach, dass die Entwicklung einer Lösung etwas umständlicher ist und auch ihre Zeit benötigt. Wer es umständlich mag, sollte auch darin konsequent sein.

In Deinem (unsäglichen) Beispiel würde man die hardcodierte 13 durch einen Parameter ersetzen, der dann per Handeingabe oder Schleife variiert wird.
WHERE Zahl1 = paramZahl OR Zahl2 = paramZahl ...
Mit freundlichem Glück Auf!

Eberhard
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1294
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #5 am: März 26, 2018, 11:45:08 »
Du solltest, wie es Klaus bereits vorschlug, zu jeder Ziehung 6 Datensätze anlegen - dann kann SQL vernünftig und schnell die Daten auswerten. Wenn auch die Reihenfolge der Ziehung von Interesse ist, braucht man noch eine Spalte für die Position, wann welche Zahl gezogen wurde. Über Ziehungsnummer, Position und Zahl kannst Du einen eindeutigen Mehrfachindex legen bzw als Primärschlüssel auslegen. Bei einem eindeutigen Mehrfachindex sollten alle 3 Felder als Pflichtfelder ausgelegt sein (Eingabe erforderlich auf Ja stellen). Gültigkeitsregeln für die Position wäre Zwischen 1 Und 6 und für die Zahl Zwischen 1 Und 49. Als Feldgröße reicht sogar ein platzsparendes Byte aus.

Daten für Ziehung 1:
z_nrposzahl
113
1234
1344
148
1517
1641
Grüße von der (⌒▽⌒)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1863
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #6 am: März 26, 2018, 12:06:29 »
Hallo Liene,
I.Ü. lohnt es nicht sich damit zu beschäftigen. Bei 14Mio. Möglichkeiten
gibt es einfach noch nicht genügend Proben, können bis jetzt ja nur ein
paar Tausend Ziehungen sein, um irgendwelche Abweichungen in Richtung
Sigma 3 Grenze zu finden, nicht mal in 100 Jahren.
Datenbanktechnisch kann ich mich meinen Vorpostern nur anschliessen.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Liene

  • Newbie
  • Beiträge: 12
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #7 am: März 26, 2018, 13:05:16 »
Hallo,
@Beaker: über die "praktische Nutzlosigkeit" bin ich mir schon im klaren :)

Ansonsten ist meine Lösung:
strSQL = strSQL & " WHERE Zahl1=" & zz & "Or zahl2 = " & zz & " Or zahl3 = " & zz & " Or zahl4 = " & zz & " Or zahl5 = " & zz & " Or zahl6 = " & zz

eine Schleife  mit n (verschieden Anzahl der Ziehungen) und zz =1 bis 49 brachte schnell den gewünschten Erfolg und eine Abschätzung des Erwartungswertes der Häufigkeiten im Vergleich mit den Häufigkeiten bei realen Ziehungen konnte durchgeführt werden

Vielen Dank an alle, auch aus so kleine Zahlenspielereien kann man einiges Lernen

Gruß Liene

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7375
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #8 am: März 26, 2018, 13:22:05 »
Hallo,
Zitat
auch aus so kleine Zahlenspielereien kann man einiges Lernen
Du hast nicht wirklich was gelernt. Jedenfalls nichts, was man in einer Datenbank brauchen könnte.
Warum willst unbedingt bei Deiner Version bleiben ?
Gruß
Klaus
 

Offline Liene

  • Newbie
  • Beiträge: 12
Re: Häufikeit der Ziehungen 6 aus 49
« Antwort #9 am: März 26, 2018, 16:45:51 »
Hallo,

ich beharre gar nicht auf meine Version.
Aber gelernt habe ich etwas wichtiges was mir bestimmt noch mal helfen wird.
Ich denke, das Einsetzen  von Zeichenketten in einem SQL-Ausdruck ist schon wichtig.
Bei meinen Versuchen kam immer der Fehler "Datentypen in Kriterienausdruck unverträglich"
Bis ich mit der Forensuche dahinter bekommen bin:

  Where Nachname = '" & strNachname & "'"   für  Zeichen, oder
  WHERE Zahl=" & zz  für Zahlen und
  WHERE  DatumA = " & Format(DatumFeld, "\#yyyy-mm-dd\#")  für Datum

Für einen Anfänger ein ziemlicher Erkenntniszuwachs :-)

Zitat
Deine eigene Funktion kannst Du ersatzlos eindampfen.
Das tue ich sowieso, da das ganze für eine einmalige Diskussion zur Statistik über Erwartungswerte von Häufikeiten gemacht war

Nochmal Danke für dein Bemühen