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:

Problem:Zufallszahlen in einem array

 
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
oldzorro



Anmeldungsdatum: 09.03.2018
Beiträge: 20
Wohnort: Erkelenz

BeitragVerfasst am: 20.03.2018, 14:25    Titel: Problem:Zufallszahlen in einem array Antworten mit Zitat

habe mit dem Code:
Code:
'5 Zufallzhlen in ein array speichern
Dim i as Integer
Dim a(1to 5)As integer
For i=1 To 5
a(i)=Int(Rnd*9)
Next
For i=1 To 5
Print a(i)    'Die 5 Zufallszahlen ausgeben
Next
Sleep


Zufallszahlen In ein array erzeugt.
Das Programm zeigt keine Fehler ,aber es werden bei jedem Aufruf immer
die gleichen Zahlen erzeugt.Ich glaube,daß es an der Eigenschaft von normalen arrays liegt.
Kann man mit rel. einfachen Einfügungen erreichen,daß bei jedem Aufruf neue Zufallszahlen in die arrays geschrieben werden?
Oder geht das garnicht mit statischen arras?
Danke im voraus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.03.2018, 15:15    Titel: Antworten mit Zitat

Das hat nichts mit dem Array zu tun, sondern daran, dass der Zufallsgenerator-Seed bei jedem Programmstart derselbe ist. Mit dem Schlüselwort RANDOMIZE lässt sich das ändern. Üblicherweise wird dazu beim Programmstart die Anweisung "RANDOMIZE TIMER" (Korrektur: Nur RANDOMIZE ist besser, siehe unten) verwendet, um die aktuelle Systemlaufzeit als Zufallsquelle zu nutzen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.


Zuletzt bearbeitet von Jojo am 20.03.2018, 16:35, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 20.03.2018, 16:02    Titel: Antworten mit Zitat

In FreeBASIC ist es sogar besser, RANDOMIZE ohne Initialwert zu verwenden. Dann wird der Initialwert ebenfalls auf Basis des TIMER berechnet, allerdings ist RANDOMIZE TIMER nur sekundengenau (warum auch immer), RANDOMIZE allein hat eine höhere zeitliche Auflösung.

Code:
'5 Zufallzhlen in ein array speichern
Randomize
Dim i as Integer
Dim a(1to 5)As integer
For i=1 To 5
  a(i)=Int(Rnd*9)
Next
For i=1 To 5
  Print a(i) 'Die 5 Zufallszahlen ausgeben
Next
Sleep

_________________
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
oldzorro



Anmeldungsdatum: 09.03.2018
Beiträge: 20
Wohnort: Erkelenz

BeitragVerfasst am: 20.03.2018, 18:18    Titel: Antworten mit Zitat

Danke Euch,.Randomize hatte ich wohl vergessen,in anderen Progrämmchen mit rnd atte ich es.In diesem code habe ich erstmals ein array benutzt und habe die Ursache im array gesehen.
Aloso: vor rnd immer den Generator mit randomize anschmeißen!!!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 20.03.2018, 23:39    Titel: Antworten mit Zitat

Von mir früher noch gerne gemacht: Zum Testen/Bugs beseitigen eines Codes zunächst das RANDOMIZE weggelassen (auskommentiert), damit man immer denselben Testfall hatte.

Sobald alles passt, dann RANDOMIZE hineinnehmen fürs produktiv erzeugte .EXE der Anwendung.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 21.03.2018, 00:29    Titel: Antworten mit Zitat

oldzorro hat Folgendes geschrieben:
Danke Euch,.Randomize hatte ich wohl vergessen,in anderen Progrämmchen mit rnd atte ich es.In diesem code habe ich erstmals ein array benutzt und habe die Ursache im array gesehen.
Aloso: vor rnd immer den Generator mit randomize anschmeißen!!!!!
Es reicht, wenn man RANDOMIZE oder RANDOMIZE TIMER ganz am Anfang vom Programm 1x aufruft! So mache ich es immer. Bei mir ist das nicht direkt vorm RND. Wenn man mit einer DO LOOP Schleife arbeitet oder arbeiten würde, würde man somit mehrmals das RANDOMIZE aufrufen.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 924
Wohnort: Austria

BeitragVerfasst am: 24.03.2018, 14:35    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
oldzorro hat Folgendes geschrieben:
Danke Euch,.Randomize hatte ich wohl vergessen,in anderen Progrämmchen mit rnd atte ich es.In diesem code habe ich erstmals ein array benutzt und habe die Ursache im array gesehen.
Aloso: vor rnd immer den Generator mit randomize anschmeißen!!!!!
Es reicht, wenn man RANDOMIZE oder RANDOMIZE TIMER ganz am Anfang vom Programm 1x aufruft! So mache ich es immer. Bei mir ist das nicht direkt vorm RND. Wenn man mit einer DO LOOP Schleife arbeitet oder arbeiten würde, würde man somit mehrmals das RANDOMIZE aufrufen.

Ich möchte nochmal hervorheben, wie ALWIM schon sagte, RANDOMIZE keinesfalls vor jedem RND Aufruf auszuführen, sondern am Besten einmalig beim Programmstart. Weiters bitte auch den Tipp von nemored beachten und RANDOMIZE ohne Parameter aufrufen, da der Parameter intern immer auf einen Ganzzahl gerundet wird, was zu einer weniger zufälligen Initialisierung führt. Einen Parameter für RANDOMIZE zu verwenden macht nur Sinn, wenn du reproduzierbare Ergebnisse haben willst (wofür dann allerdings TIMER unbrauchbar wäre).
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
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