zufall mit Ausnahme
Übersicht

![]() |
maboxBetreff: zufall mit Ausnahme |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, Ich will mehrmals zufällige Zahlen erstellen. wenn einmal eine Zahl erstellt ist soll genau diese beim nächsten (und den folgenden malen) mal nicht erstellt werden. Wie mache ich das? | ||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
meinst du so?
Code: [AUSKLAPPEN] .sprung
zahl = Rand(0,10) While zahl = 5 zahl = Rand(0,10) Wend Print zahl If zahl = 5 Then End If KeyDown(1) = 0 Then Goto sprung End edit: code editiert |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
- Zuletzt bearbeitet von Blitzprogger am Mo, Jul 07, 2008 17:38, insgesamt 2-mal bearbeitet
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weis nicht gerade schön doch es funktioniert ohne grosser aufwand ![]() Code: [AUSKLAPPEN] SeedRnd Millisecs() while not keyhit(1) if not erstesmalblub =1 and blub zahl = Rnd (1,10) oldzahl=zahl erstesmalblub=1 if erstesmalblub =1 and blub zahl = Rnd (1,10) if zahl = oldzahl repeat zahl = Rnd (1,10) until zahl<> oldzahl endif endif Fragen zum Code ? mfg ozzi789 @Blitzprogger Ist richtig bis auf das du einfach 5 nimmst , woher wilst du wissen das beim ersten mal 5 rauskommt ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
?
Die While-Schleife wird nur ausgeführt wenn die zahl = 5 ist, und dann solange bis sie nicht mehr 5 ist. Man kann statt 5 auch andere zahlen nehmen. mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab jetzt wohl umsonst mir die Mühe gemacht. Jedoch kann man hier den Sperrpuffer um beliebiege Stellen sperren lassen. Also je nachdem wie man es braucht. Für nur eine Zahl sperren ist mein Code sicherlich vielzu aufgebläht.
Code: [AUSKLAPPEN] Graphics 400,600,0,2
SetBuffer FrontBuffer() Const SPEICHER=3 ;Wert ist ##+1, also ##-1 angeben Dim Puffer(SPEICHER) For Q=1 To 40 Print Zahl(0,6) Next Print "Taste drücken" WaitKey End Function Zahl(FnZahl1#=0, FnZahl2#=7) If Abs(Abs(FnZahl1)-Abs(FnZahl2))<=SPEICHER Then RuntimeError "Wertenereich führt zu einer Endlosscheife" End If Local InLoop% Local InWert% Local InBack% Repeat InBack=0 InWert=Floor(Rnd(FnZahl1,FnZahl2+1)) For InLoop=0 To SPEICHER If Puffer(InLoop)=InWert Then InBack=1 Next Until InBack=0 For InLoop=1 To SPEICHER Puffer(InLoop-1)=Puffer(InLoop) Next Puffer(SPEICHER)=InWert Return InWert End Function |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Blitzprogger hat Folgendes geschrieben: ?
Die While-Schleife wird nur ausgeführt wenn die zahl = 5 ist, und dann solange bis sie nicht mehr 5 ist. Man kann statt 5 auch andere zahlen nehmen. mfg Und genau im meinem COde wird die zuerst "ausgewählte" Zahl auch im späteren RND verfahren nicht mehr berücksichtigt ![]() Tell me if im Wrong ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] SeedRnd MilliSecs() ;Los gehts mit dem Zufallsgenerator
Global maxrnd%=10 ;Größte per Zufall generierbare Zahl (z.B. 10) Dim used(maxrnd) ;Erstellt ein Array, das sich merken wird, welche Zahlen bereits generiert worden sind While i<maxrnd newrnd=Rand(0,maxrnd) ;eine neue Zahl wird generiert While used(newrnd) ;solange in dem array an der Stelle der neuen Zahl eine 1 steht,... newrnd=Rand(0,maxrnd) ;...generiere eine neue Zahl Wend ;sollte die Zahl noch nicht generiert worden sein, so used(newrnd)=1 ;belege das Array in der Zelle mit dem Wert 1 Print newrnd ;gib die Zahl zum Test aus i=i+1 Wend Flip;damit wir was sehen WaitKey() ;warte gefälligst! EDIT: zu spät -.-' |
||
- Zuletzt bearbeitet von ChaosCoder am Mo, Jul 07, 2008 17:53, insgesamt 2-mal bearbeitet
chi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hilft dir das weiter?
Code: [AUSKLAPPEN] SeedRnd(MilliSecs()) count=15 Dim array$(count) For i=1 To count Select Len(i) Case 1 nr$="0"+i Default nr=i End Select array(i)="text nr."+nr Next .loop For i=1 To count r=Rand(i,count) temp$=array(i) array(i)=array(r) array(r)=temp$ Locate 10,12*i Print array(i) Next Locate 150,50 Print "mousebutton to recalculate" WaitMouse Cls Goto loop |
||
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
soviel bekomme ich auch selber hin, aber die frage ist: wie mache ich es das sich eine Zahl nie wiederholt.
Dasheißt, dass es bei 10 Zahlen auch nur 10 Mölichkeiten gibt. Klar könnte ich die Zahlen in Arrays speichern und jedes mal abfragen ob sie nicht mit der neuen Zufallszahl übereinstimmen, aber diese Methode sehr schlecht. Denn wenn 9 zahlen schon vorkamen und nur noch eine fehlt wird diese ja nicht automatisch vom Zufall als nächstes gewählt, deshalb braucht diese Methode unnötig viele Rechenvorgänge. meine zweite Frage ist: wie kann ich das so machen, dass es keine unnötigen Rechenvorgänge macht? EDIT Dieser Beitrag wurde geschrieben nachdem ich diesenZitat: ?
gelesen habe. Die anderen waren schneller. Die hab ich nicht gemeint
Die While-Schleife wird nur ausgeführt wenn die zahl = 5 ist, und dann solange bis sie nicht mehr 5 ist. Man kann statt 5 auch andere zahlen nehmen. mfg |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
- Zuletzt bearbeitet von mabox am Mo, Jul 07, 2008 18:12, insgesamt einmal bearbeitet
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich dachte mein und Chaos Coders beispiel können das ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
sry ihr ward schneller | ||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne unnötige Rechenvorgänge macht kein Code das. Zumndest dann nicht, wenn mehrere ''letzte'' Zahlen als Sperrzahlen gelten. Auch kann man nicht auf ein Zwischenspeicher verzichten.
Das ganze gilt nicht, wenn man sich eine Formel ausdenkt, die Pseudozufallszahlen erstellt. Als Beispiel: Mod mit +3 für eine 10ner Konstelation. 0, 3, 6, 9, 2, 5, 8, 1, 4, 7, 0... Sowas kann man weiter ausbauen, was aber nie wirkliche Zufallszahlen sein werden. Wer es aber ganz schnell haben möchte, der erstellt sich ein Array und speichert da vorberechnete Zahlen ein. Bei Abruf wird dann ab ein bestimmten Offset einfach ausgelesen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
japp hätte hectics gerade vorgeschlagen, einfach ne liste (in Blitz3D müssteste wohl ein Array nehmen), da alle möglichen Zahlen reinspeichern, das Array mischen, und einfach jedes mal nachdem ne Zahl aus dem Array am offset xy ausgelesen wurde, das offset um 1 erhöhen. | ||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sind Zufallszahlen ohne Doupletten gemeint? dazu hab ich ein Codeschnipsel älteren Datums...Code: [AUSKLAPPEN] anzahl = 24 ; höchste Zahl
Dim POSITION(anzahl) SeedRnd MilliSecs() For i = 1 To anzahl Repeat present = False gg = Rand(1,anzahl) For z = 1 To anzahl If gg = POSITION(z) present = True Exit EndIf Next Until present = False POSITION(i) = gg Next |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group