zufalls generator

Sliver

Erfahrenes Mitglied
Grüße,
wie kann ich nen zufalls generator mit namen bzw. wörtern machen?
mit zahlen ist das ja kein problem.


danke im vorraus


sers
sliver
 
ebenfalls mit zahlen. ein computer kennt nichts anderes als zahlen, selbst die buchstaben sind durch die ascii-codierung nichts anderes als zahlen.
eine quick-and-dirty-methode wäre, dass du einfach eine reihe von zufallszahlen zwischen 65 (A) und 90 (Z) oder zwischen 97 (a) und 122 (z) erzeugst. die kannst du dann mit der chr-funktion in buchstaben umwandeln und zu einem string verbinden.
das problem dabei ist einfach, dass ein computer an sich strunzdumm ist, und dabei mit ziemlicher wahrscheinlichkeit kein sinnvolles word rauskommen wird. also muss der computer erstmal wissen, was ein gültiges wort ist.

du musst also zuerst dem computer erklären, wie ein gültiges wort aussieht. das kannst du unter anderem über einen vorgegebenen wortbestand machen (ziemlich statisch) oder du programmierst einen algorithmus, der das muster eines gültigen wortes anhand von regulären ausdrücken festlegt (ziemlich viel arbeit, aber interessant -> künstliche intelligenz).
 
ähm sorry da hab ich mich wohl falsch ausgedrückt...

also ich meinte das so:

klick auf button -> eines von 10 wörtern wird aus gesucht und angezeigt

die 10 wörter habe ich irgendwo in den programm code ein gesetzt... ich wollte nicht das das programm "eigene" wörter erstellt.
 
na wenn das nur um 10 wörter geht, dann programmier das doch statisch im code ein. leg einfach ein array vom typ string an, in das du alle wörter reinschreibst. ein zufallswort kriegst du dann raus, indem du einen zufälligen index ein element aus dem array holst:

Code:
Private Sub Zufallswort(n As Integer)

Dim strWörter(1 To 10) As String
strWörter(1) = "blablub"
strWörter(2) = "Wort 2"
strWörter(3) = "und so weiter"
'und so weiter bis Wörter(10)

MsgBox Wörter(n)

End Sub

n ist dabei eine zufallszahl zwischen 1 und 10. dadurch wird ein zufälliges element aus der aufzählung der einzelnen wörter aus dem array gesucht.

edit: natürlich ist es absoluter schwachsinn, das array immer erst dann zu erzeugen, wenn ein wort daraus gesucht werden soll. das dient hier nur für das beispiel. das array deklarierst du dann global und füllst es beim Form_Load mit strings.
 
Sorry wo muss ich das einsetzen?
Also ich hab jetzt nen Button und wenn man auf den klickt soll in Label1 eines der wörter angezeigt werden...
 
Code:
Option Explicit
Private Wörter(1 To 10) As String

Private Sub Form_Load()
'Array mit Wörtern laden:
Wörter(1) = "blablub"
Wörter(2) = "..."
Wörter(3) = "und so weiter"
' ...
Wörter(10) = "letztes element"
End Sub

Private Sub Command1_Click()
'Zufallszahl berechnen halt ...
Label1.Caption = Wörter(n) 'n = berechnete zufallszahl
End Sub
 
also so siehts bei mir jetzt aus:

Code:
Option Explicit
Private Wörter(1 To 10) As String

Private Sub Command2_Click()
    End
End Sub

Private Sub Form_Load()
    'Array mit Wörtern laden:
    Wörter(1) = "wort 1"
    Wörter(2) = "wort 2"
    Wörter(3) = "wort 3"
    Wörter(4) = "wort 4"
    Wörter(5) = "wort 5"
    Wörter(6) = "wort 6"
    Wörter(7) = "wort 7"
    Wörter(8) = "wort 8"
    Wörter(9) = "wort 9"
    Wörter(10) = "wort 10"
End Sub

Private Sub Command1_Click()
    Label1.Caption = Wörter(n) 'n = berechnete zufallszahl
End Sub

aber es kommt immer beim klick auf den button zu folgender fehlermeldung:
"Fehler beim Kompilieren: Variable nicht definiert"
und das "n" bei "Label1.Caption = Wörter(n) 'n = berechnete zufallszahl" wird makiert.
sollte er nicht durch zufall dort eine zahl aussuchen?
 
:denken: ;) (c) by kapro 2002


das "option explicit" bedeutet, dass du alle variablen erst definieren musst, bevor du sie benutzen kannst, sonst meckert der compiler. damit verhindert man tippfehler.
und ausserdem musst du die zufallszahl erst noch selber erzeugen (mit Rnd()). zufallszahlen fallen nicht vom himmel... :rolleyes: ;)
 
Ist so richtig?

Code:
Option Explicit
Private Wörter(0 To 10) As String

Private Sub Command2_Click()
    End
End Sub

Private Sub Form_Load()
    Randomize
    'Array mit Wörtern laden:
    Wörter(0) = "wort 0"
    Wörter(1) = "wort 1"
    Wörter(2) = "wort 2"
    Wörter(3) = "wort 3"
    Wörter(4) = "wort 4"
    Wörter(5) = "wort 5"
    Wörter(6) = "wort 6"
    Wörter(7) = "wort 7"
    Wörter(8) = "wort 8"
    Wörter(9) = "wort 9"
    Wörter(10) = "wort 10"
End Sub

Private Sub Command1_Click()
    Label1.Caption = Wörter(Rnd * 10) 'n = berechnete zufallszahl
End Sub

Hatte zuvor nen paar Fehlermeldungen die sind aber nach dem einfügen von "Randomize" im Form_Load und von "Wörter 0..." verschwunden.
 
Zuletzt bearbeitet:
ich hab das mal so gelöst:

Code:
Option Explicit

Private Wörter(1 To 10) As String

Private Function Zufallswort(n As Integer) As String
If n < 1 Then
    n = 1
End If
If n > 10 Then
    n = 10
End If
Zufallswort = Wörter(n)
End Function

Private Sub Command1_Click()
Dim n As Integer
Randomize
n = Fix(Rnd(10) * 10)
Label1.Caption = Zufallswort(n)
End Sub

Private Sub Form_Load()
    'Array mit Wörtern laden:
    Wörter(1) = "wort 1"
    Wörter(2) = "wort 2"
    Wörter(3) = "wort 3"
    Wörter(4) = "wort 4"
    Wörter(5) = "wort 5"
    Wörter(6) = "wort 6"
    Wörter(7) = "wort 7"
    Wörter(8) = "wort 8"
    Wörter(9) = "wort 9"
    Wörter(10) = "wort 10"
End Sub

deins ist auf den ersten blick zwar nicht unbedingt falsch, aber teilweise etwas unsauber. die rnd()-funktion liefert einen wert vom typ single zurück. den musst du erst abfangen und als integer benutzen. der index in einem array ist immer eine ganzzahl.
ausserdem solltest du abfangen, ob evtl. werte ausserhalb des arrays zustandekommen (und das kommt dabei vor).
 

Neue Beiträge

Zurück