 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
otti

Anmeldungsdatum: 28.02.2005 Beiträge: 112 Wohnort: Wildberg
|
Verfasst am: 26.03.2005, 18:52 Titel: Zufall in QB?? Fehler??? |
|
|
hallo
als ich beim proggen mal folgendes ausprobiert habe:
--------------------------------------------------------------------------------------
REM Programm, das beweist,dass bei QB Zufall nicht gleich Zufall ist
REM 26.3.2005 (c) otti
CLS
i%=1 'Variable i% den Wert 1 zuweisen
FOR i%=1 TO 100 ' FOR ... NEXT -Schleife beginnen
RANDOMIZE TIMER 'Zufallsgenerator starten
w%=INT (RND *6)+1 'Variable w% wird zufälliger Wert aus 1-6
'zugewiesen
SELECT CASE w% ' w% analysieren
CASE 1 : e%=e%+1 'bei 1 ,2,3,..,6 der Variable
CASE 2 : z%=z%+1 'e%,z%,d%,...,s% 1 dazuaddieren
CASE 3 : d%=d%+1
CASE 4 : v%=v%+1
CASE 5 : f%= f%+1
CASE 6 : s%=s%+1
END SELECT 'Analyse beenden
NEXT i%
'
Print "1=";e% 'Ergebnisse auswerten
Print "2=";z%
Print "3=";d%
Print "4=";v%
Print "5=";f%
Print "6=",s%
SLEEP 5
END
--------------------------------------------------------------------------------------
Bei meinem PC kommen bei jedem neuem Durchlauf des Progs die gleichen Werte für jede Variable heraus.
Bei wem das nicht so ist,der sollte folgende Zeile ausbessern:
--------------------------------------------------------------------------------------
FOR i%= 1 TO 100
--------------------------------------------------------------------------------------
in:
--------------------------------------------------------------------------------------
FOR i%= 1 TO 1000
--------------------------------------------------------------------------------------
Das geht mit Werten bis zu 10 000 ,dann meldet QB Überlauf!
DAS ERGEBNIS DES GANZEN GESCHREIBSEL:
QB errechnet "Zufall" immer Gleich!!!
d.h. dass die Befehle RANDOMIZE TIMER und RND nicht zufällige Zahlen erstellen sondern berechnete....Von wegen Zufall!!
Ich habe schon an eine Lösung gedacht:
Den Zufall abhängig vom Datum (DATE$) und der Uhrzeit (TIME$) machen
??
Doch genau weiß ich auch noch nicht wie das funktionieren soll...
Auf jeden Fall ist das Datum mit der Zeit verbunden jede (Minitel)sekunde
unterschiedlich.Man müsste also aus allen Daten,die man zu Datum und Uhrzeit bekommt Zufallszahlen heraus-entschlüsseln.Und zwar aus jeder so dass es wirklich Zufall ist...
Ich zerbrech mir mal weiter den Kopf darüber..(aber nicht so:
Eigentlich ist das ja ne philosophische Frage:
>>Kann man Zufall berechnen??<<
Aber das geht jetzt zuweit...
greetz
otti _________________ Gute Musik
 |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 26.03.2005, 19:07 Titel: |
|
|
http://de.wikipedia.org/wiki/Gesetz_der_großen_Zahlen
Irgendwann bekommst du immer ähnlich hohe Zahlen heraus, je öfter du die Analyse-Prozedur wiederholst.
Bei mir spuckt das Programm bei jedem Durchlauf andere Zahlen aus..und ich hab den Endwert der Schleife auf 32766 gesetzt, der größte Wert den eine Integervariable aufnehmen kann  _________________
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.03.2005, 19:23 Titel: |
|
|
Vielleicht solltest du
nur vor der FOR-NEXT Schleife anwenden...
Weiß aber auch nicht so genau.
jb |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 26.03.2005, 21:48 Titel: |
|
|
Doch, das müsste schon helfen. Wenn du immer wieder RANDOMIZE TIMER aufrufst, geschieht das in fast gleichen Zeitabständen, weil ja der Programmdurchlauf ungefähr gleich lange dauert. So bekommt man keine schönen Zufallszahlen. Ganz deutlich wird es, wenn man immer aus zwei Werten ein Koordinatenpaar macht und damit Punkte auf dem Bildschirm zeichnet. Ist RANDOMIZE TIMER in der Schleife, bilden sich diagonale Linien, steh es davor, gibt es eine zufällige Verteilung.
Es gibt aber auch andere Möglichkeiten Zufallszahlen selbst zu erzeugen, indem man rekursive Gleichungen benutzt (z.B. das Feigenbaum-Szenario), die ins Chaos laufen, dabei aber unter eine bestimmten Grenze bleiben.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.03.2005, 22:24 Titel: |
|
|
QB generiert wie praktisch alle Programmiersprachen nur sog. Pseudo-Zufallszahlen, d.h. verwendet einen Algorithmus wie beschrieben.
Wirklich starke Zufallszahlen generieren ist übrigens noch recht rechenzeitaufwändig. Gebraucht wird dies typischerweise von SSH und SSL, um die Sitzungsschlüssel zu generieren.
Bei gewissen Anwendungen kann es auch Sinn machen, einen Hardware-Zufallsgenerator zu verwenden, d.h. irgend eine Schaltung, die ein Rosa-Rauschen generiert und dann am A/D-Wandler in eine Zahl umwandelt.
Übrigens liefert sonst das Pixelrauschen beim Scanner (unifarbiges Blatt als Vorlage) ganz gute Zufallszahlen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.03.2005, 14:44 Titel: |
|
|
lol, "um diesen zufallsgesteuerten Verschlüsselungsalgorythmus benutzen zu können schließen sie bitte einen Scanner an"
diese Pseudo-Zufallszahlen kann man sich auch zum verschlüsslen zunutze machen.. einfach randomize mit dem Passwort was in diesem fall eine zahl sein muss, dann einfach jedes Ascii-zeichen mit int(rnd*100) multiplizieren und in die Dateischreiben.
Zum entschlüsseln dann einfach wieder Randiomize mit der passwort-zahl und die eingelesen zeichen durch int(rnd*100) teilen und wieder in die Datei schreiben. Funktioniert wunderbar, mann muss halt immer das prog neu starten nach einer Verschlüsselung, was man aber sehr praktisch anwenden kann als QuickOption im Windows-Rechtsklick-Menü. hatt ich mal gemacht. nette sache.
Wem das zu simpel ist kann bei der 100 auch noch die Eingabe einer zweiten Passwort-Zahl bis 128 verlangen und diese dann bei dem int(rnd*100) statt der 100 benutzen... Also da hat man dann n paar möglichkeiten  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 27.03.2005, 14:49 Titel: |
|
|
Jaja, das ganze prinzip nennt sich Chew-Crypto. Übrigens musst du dein Programm nach jedem ver/entschlüsseln nicht neustarten:
a = RND(-1)
führt zu einem Reset des Zufallsgenerators.
Sehr praktisch *g*
Ansonsten solltest du dir einfach EPS's seite ansehen, da ist alles wunderbar beschrieben. (Viel neues wird für dich aber auch nicht mehr dastehen, wenn du schon das Grundprinzip begriffen hast *g*) _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
ah8982

Anmeldungsdatum: 11.09.2004 Beiträge: 62 Wohnort: Ba-Wü
|
Verfasst am: 01.04.2005, 12:22 Titel: Re: Zufall in QB?? Fehler??? |
|
|
Versuchs mal so:
Code: | REM Programm, das beweist, dass bei QB Zufall gleich Zufall ist
REM 01.04.2005 (c) ah8982
CLS
i% = 1 'Variable i% den Wert 1 zuweisen
RANDOMIZE TIMER 'Zufallsgenerator starten
FOR i% = 1 TO 100 ' FOR ... NEXT -Schleife beginnen
w% = INT(RND * 6) + 1 'Variable w% wird zufälliger Wert aus 1-6
'zugewiesen
SELECT CASE w% 'w% analysieren
CASE 1: e% = e% + 1 'bei 1 ,2,3,..,6 der Variable
CASE 2: z% = z% + 1 'e%,z%,d%,...,s% 1 dazuaddieren
CASE 3: d% = d% + 1
CASE 4: v% = v% + 1
CASE 5: f% = f% + 1
CASE 6: s% = s% + 1
END SELECT 'Analyse beenden
NEXT i%
'
PRINT "1 = "; e% 'Ergebnisse auswerten
PRINT "2 = "; z%
PRINT "3 = "; d%
PRINT "4 = "; v%
PRINT "5 = "; f%
PRINT "6 = "; s%
PRINT: PRINT "Beliebige Taste zum beenden drücken!"
DO: Key$ = INKEY$: LOOP WHILE Key$ = "" |
Gruß ah8982 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 01.04.2005, 15:21 Titel: |
|
|
Soll das ein Aprilscherz sein??
Also:
1. Der Titel stimmt nicht; wenn die Zufallszahlen in gleicher Anzahl vorkommen sollen,
muss das RANDOMIZE TIMER in die Schleife. Ist bei dir nicht der Fall, -> es kommen verschiedene Zahlen, -> falsche Überschrift.
2. Das i% = 1 kannste dir sparen, wird bei FOR i% = 1 TO 100
schon geregelt.
3. Das ist genau das gleiche Programm, wie es schon von mir und Anderen vorgeschlagen wurde. Das heißt, das
ah8982 hat Folgendes geschrieben: |
Code: |
REM 01.04.2005 (c) ah8982
|
|
ist eine Zumutung.
Na dann, April April!
jb |
|
Nach oben |
|
 |
Xolios aka Ray

Anmeldungsdatum: 07.12.2004 Beiträge: 589 Wohnort: Wildeshausen
|
Verfasst am: 01.04.2005, 16:17 Titel: |
|
|
das jb immer so fies schreiben muss  _________________ www.ray-earth.de
Anm.: Neue ICQ |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 01.04.2005, 17:22 Titel: |
|
|
OK, OK, ich nimm's zurück.
Hatte irgendwie schlechte Laune ...
EDIT: Wollte nämlich Star Wars Battlefront installieren, und es hat nicht geklappt.
Sch*** Windows XP
Ich glaube deshalb ist es etwas heftig ausgefallen.
Sorry nochmal.
jb |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 01.04.2005, 17:51 Titel: |
|
|
Naja, dafür ham wir doch unseren Spam-Thread *g*
Oder du machst einfach nen "Wut-Raus"-Thread auf, dann weiß jeder, dass er ned gemeint is *g*
Nur mal so als Vorschlag  _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|