Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zufallszahlen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ecoue



Anmeldungsdatum: 09.09.2008
Beiträge: 9

BeitragVerfasst am: 30.09.2008, 15:38    Titel: Zufallszahlen Antworten mit Zitat

Hallo, ich habe ein Problem beim Generieren von Zufallswerten.

Was ich brauche ist eine Funktion, welche mir einen der Werte -1 , 0 , 1 ausgibt wenn sie aufgerufen wird.

Bisher habe ich das Problem so angegangen, dass ich zuerst mit fix(rnd*3) Zahlen generiert habe und diese dann per case einer anderen Variblen die Werte -1 , 0 , 1 zugewiesen habe je nachdem welchen Wert fix(rnd*3) ausgibt.

Nun habe ich 2 Probleme:

Ersten mal finde ich diese Methode nicht sehr schön, viel zu viel Code für so ein bischen an Funktion... wollte halt mal wissen, ob es dafür nicht irgendeine andere Möglichkeit gibt!

Und 2. sollte es keine andere Möglichkeit geben gibt es ein weiteres Problem, undzwar das immer die selben Zahlen generiert werden... aus die Kommatstelle genau .... Arbeite noch nicht so lange mit Basic und frage mich nun ob Basic garkeine "Zufälligen" Zahlenreihen ausgeben kann


mfg ecoue
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 30.09.2008, 15:58    Titel: Antworten mit Zitat

Code:
randomize timer

function funktion() as integer
return rnd * 2 - 1
end function

? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion
? funktion



ergibt:
Code:
-1
 0
 1
 0
 1
-1
 1
 0
 0
 0
 0
 1
-1

_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ecoue



Anmeldungsdatum: 09.09.2008
Beiträge: 9

BeitragVerfasst am: 30.09.2008, 16:19    Titel: Antworten mit Zitat

Erstma vielen Dank für die schnelle Hilfe lächeln
Noch eine Frage, was genau bewirkt der Befehl "randomize timer" in der Befehlsreferenz steht etwas von Zeit, welche seit dem Systemstart vergangen ist...

Aber was hat das denn bitte damit zutun? happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.09.2008, 16:54    Titel: Antworten mit Zitat

Zitat:
Syntax: RANDOMIZE Zahl AS INTEGER
Typ: Anweisung
Kategorie: Verschiedenes

Setzt die Startzahl für den Zufallsgenerator. Abhängig von dieser Startzahl werden verschiedene Zufallszahlen von RND ausgegeben.

Durch RANDOMIZE wird der Zufallsgenerator zurückgesetzt. Wird er zweimal hintereinander mit derselben Startzahl initiiert, ist auch die Folge der Zufallszahlen dieselbe.

Eine variable Startzahl erzeugt schwerer vorhersehbare Zufallszahlen als eine Feste. Daher hat es sich als gute Möglichkeit herausgestellt, TIMER als Startwert zu verwenden; TIMER gibt die Zahl der verstrichenen Sekunden seit Systemstart zurück, und ist bei jeder Programmausführung ein anderer Wert.

_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 30.09.2008, 16:59    Titel: Antworten mit Zitat

Hi Grillmeister,
deine Zufallsfunktion bevorzugt die 0, wie du schon an deinem Ergebnis sehen kannst.
D.h. mit "Rnd * 2 - 1" wird die 0 doppelt so oft wie die 1 oder -1 gezogen.
Besser:
Code:
Randomize Timer

Function zufall() As Integer
  Return fix(Rnd * 3) - 1
End Function

Dim x(-1 To 1) As Integer
For i As Integer =1 To 10000
  x(zufall) += 1
Next
Print x(-1),x(0),x(1)
sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 30.09.2008, 18:38    Titel: Antworten mit Zitat

Ich bevorzuge immer noch INT statt FIX, weil da immer "in dieselbe Richtung gerundet" wird (nämlich abwärts); in diesem Fall bleibt sich das aber gleich.

TIMER wird deshalb verwendet, weil es (wie zitiert) ziemlich sicher bei jeder Ausführung einen anderen Wert besitzt. Würdest du z. B.
Code:
RANDOMIZE 42

verwenden, dann hättest du wieder bei jedem Start dieselbe Zahlenfolge.

Hintergrund ist, dass die Zahlenfolge tatsächlich nicht zufällig ist, sondern der Folgewert aus dem letzten berechnet wird. Ein guter "Zufalls"generator ist so konzipiert, dass die Zahlenfolge möglichst zufällig erscheint.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz