Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
664to668
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schleifen-Problem

Schleifen-Problem
13.09.2005 10:03:46
Barbara
hallo
ich habe folgendes Problem:
es sollen in einem array 6 verschiedene zufällig bestimmte Lottozahlen zwischen 1 und 49 abgelegt werden.
das geht mit einer Schleife
lotto (i)=rnd*49+1
'und jetzt folgt der vergleich mit den schon gefundenen lottozahlen.
wobei i als integer definiert ist.
wenn die i-te lottozahl generiert wird, soll sie mit allen bisherigen auf gleichheit verglichen werden, und falls eine solche besteht, soll sie neu bestimmt werden.
und das soll mit schleifen gehen. OHNE Sprungmarken.
ich würde es mit einer go-while-schleife oder go-until-schleife machen, komm aber zu keiner lösung.
Hat wer vielleicht eine idee?
lg barbara

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleifen-Problem
13.09.2005 10:14:33
ingoG
Hallo barbara,
es sollte so funzen:
dim schonda as boolean, jj as integer, ii as integer, lotto(6) as integer
For ii=1 to 6
do
schonda=false
lotto (ii)=rnd*49+1
for jj=1 to ii-1
if lotto(ii)=lotto(jj) then schonda = true
next jj
loop until schonda=false
next ii
Gruß Ingo
PS eine Rückmeldung wäre nett...
AW: Schleifen-Problem
Barbara
Lieber Ingo
Danke für Deine Antwort.
Lieber Holger, danke auch für Deine Antwort (inkl. Sortieren)
Lieber Andi, danke für Deine -fantasievolle- Lösung.
Ich würde da noch was verbessern:
Wenn eine schon gezogenen Zahl gefunden wurde, kann der Vergleich abgebrochen werden, bei Ingo würde das so aussehen:
If lotto(ii) = lotto(jj) Then
schonda = True
Exit For
End If
Das spart Zeit, allerdings bei 6 Zahlen hält sich das in Grenzen.
Ich wollte nur zeigen, dass ich mir Eure Lösungen genau angesehen habe.
Danke.
LG, Barbara
Anzeige
AW: Schleifen-Problem
15.09.2005 11:46:20
ANdreas
Hallo Barbara,
wie gesagt diese Lösung ist sehr unsauber. Die Anzahl der Durchläufe ist rein zufällig zwischen 6 und unendlich. In dem Fall, dass zufällig immer wieder eine Zahl gezogen wird, die schon gezogen wurde, hast Du eine Endlosschleife.
In der Praxis spielt das in dem Fall sicherlich keine Rolle, weil die Wahrscheinlichkeit verschwindend gering ist, dass die Prozedur mehr als 100 mal durchlaufen wird. Die Verarbeitungsgeschwindigkeit ist so hoch, dass es nicht auffallen würde.
Aber stell Dir mal so eine Lottoziehung in real vor. Das würde bedeuten, dass eine zufällig gezogene Kugel einfach in der Lostrommel bleibt. Wird sie noch mal zufällig gezogen, tut man sie ungesehen zurück und zieht nochmal. Wenn das ganze 10 oder 20 mal so passiert, dauert die Lottosendung statt 5 Minuten dann doppelt solange. Im Extremfall würde die Sendung nie enden :)
Meine Lösung läuft genau 6 mal durch, da die gezogenen auch wirklich aus dem Ziehungsraum herausgenommen werden.
Gruß
Andreas
Anzeige
Danke für dir Rückmeldung oT
16.09.2005 18:27:14
ingoG
.
AW: Schleifen-Problem
Barbara
Lieber Ingo
Danke für Deine Antwort.
Lieber Holger, danke auch für Deine Antwort (inkl. Sortieren)
Lieber Andi, danke für Deine -fantasievolle- Lösung.
Ich würde da noch was verbessern:
Wenn eine schon gezogenen Zahl gefunden wurde, kann der Vergleich abgebrochen werden, bei Ingo würde das so aussehen:
If lotto(ii) = lotto(jj) Then
schonda = True
Exit For
End If
Das spart Zeit, allerdings bei 6 Zahlen hält sich das in Grenzen.
Ich wollte nur zeigen, dass ich mir Eure Lösungen genau angesehen habe.
Danke.
LG, Barbara
Anzeige
AW: Schleifen-Problem
Barbara
Lieber Ingo
Danke für Deine Antwort.
Lieber Holger, danke auch für Deine Antwort (inkl. Sortieren)
Lieber Andi, danke für Deine -fantasievolle- Lösung.
Ich würde da noch was verbessern:
Wenn eine schon gezogenen Zahl gefunden wurde, kann der Vergleich abgebrochen werden, bei Ingo würde das so aussehen:
If lotto(ii) = lotto(jj) Then
schonda = True
Exit For
End If
Das spart Zeit, allerdings bei 6 Zahlen hält sich das in Grenzen.
Ich wollte nur zeigen, dass ich mir Eure Lösungen genau angesehen habe.
Danke.
LG, Barbara
Anzeige
AW: Schleifen-Problem
Barbara
Lieber Ingo
Danke für Deine Antwort.
Lieber Holger, danke auch für Deine Antwort (inkl. Sortieren)
Lieber Andi, danke für Deine -fantasievolle- Lösung.
Ich würde da noch was verbessern:
Wenn eine schon gezogenen Zahl gefunden wurde, kann der Vergleich abgebrochen werden, bei Ingo würde das so aussehen:
If lotto(ii) = lotto(jj) Then
schonda = True
Exit For
End If
Das spart Zeit, allerdings bei 6 Zahlen hält sich das in Grenzen.
Ich wollte nur zeigen, dass ich mir Eure Lösungen genau angesehen habe.
Danke.
LG, Barbara
Anzeige
AW: Schleifen-Problem
13.09.2005 10:18:57
Holger
Hallo Barbara,
hier die gesamte Prozedur (ausdenken, sortieren, ausgeben)
Public

Sub zahlengenerator()
Dim zahl(6)
'initialisieren
Randomize
anzahl = 6
For z = 1 To 6
zahl(z) = 0
Next
'Zahlen "ausdenken"
For z = 1 To 6
Do
test = Int(Rnd * 49) + 1
drin = False
For i = 1 To 6
If test = zahl(i) Then drin = True
Next
Loop Until drin = False
zahl(z) = test
Next
'Zahlen sortieren
For i = 1 To 5
For j = 1 To 6
If zahl(j) < zahl(j - 1) Then
TMP = zahl(j)
zahl(j) = zahl(j - 1)
zahl(j - 1) = TMP
End If
Next j
Next i
'Zahlen ausgeben
For i = 1 To 6
Sheets(1).Cells(1, i) = zahl(i)
Next
End Sub

Holger
Anzeige
AW: Schleifen-Problem
13.09.2005 10:27:02
ANdreas
Hallo Barbara,
Dein Lösungsansatz ist etwas ungünstig, weil so ein Vorgehen im Extremfall nie terminiert. Wenn zufällig immer eine schon gezogene Zahl gezogen würde, kommt die Prozedur nie zum Ende.
Hier mein Vorschlag:

Sub LottoZahlen()
Dim lotto(5) As Integer
Dim ZiehungsTopf(48) As Integer
Dim i%, intZufall%, strAusgabe$
Randomize
' Ziehungstopf auffüllen :)
For i = 0 To 48
ZiehungsTopf(i) = i + 1
Next i
' 6 Ziehungen
For i = 0 To 5
' zufällige Zahl aus Topf
intZufall = Int(Rnd * (49 - i))
' merken
lotto(i) = ZiehungsTopf(intZufall)
' gezogene Zahl entfernen
ZiehungsTopf(intZufall) = ZiehungsTopf(48 - i)
Next i
' Ausgabe
For i = 0 To 5
strAusgabe = strAusgabe & i & ". Zahl: " & lotto(i) & vbCrLf
Next i
MsgBox strAusgabe, vbInformation, "Lottoziehung"
End Sub

Gruß
Andi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige