Seite 1 von 2
Random()/Zufallsgenerator für Buchstaben
Verfasst: 20.05.2007 19:14
von Dark Skillu
Hi ich würde gerne einen Zufallsgenerator für Namen programmieren aber
kann man ja nur für Zahlen benutzen , gibt es eine andere Möglichkeit, also einen Zufallsgenerator für Buchstaben (a-z)?Eigentlich könnte man ja Random(25) benutzen und jeder Zahl der die Random ausspuckt einen Buchstaben zu ordnen? 1=a; 2=b etc.?
MfG DarkSkillu
Verfasst: 20.05.2007 19:18
von ts-soft
Hier mal Großbuchstaben, aber kannste Dir ja anpassen
Verfasst: 20.05.2007 19:25
von Dark Skillu
was macht chr()? Mit einem der Chrs kann man jedenfalls in einem MessageRequester Absätze machen?Ich habe in der Hilfe nachggeschaut und ASCI so verstanden, dass jedem ASCI Wert ein jeweiliges Zeichen zugeordnet ist, also gibt Random eine Zahl aus und +65 da ab dem asci wert 65 die Großbuchstaben anfangen? Ist nur ne Vermutung kann auch falsch sein.
MfG
Verfasst: 20.05.2007 19:30
von AND51
Wenn du
Chr() kennst, kommst du von allein auf diese Lösung:
Code: Alles auswählen
klein=97+Random(25)
Debug "Kleinbuchstabe: "+Chr(klein)
gross=65+Random(25)
Debug "Kleinbuchstabe: "+Chr(gross)
kleinOderGross=65+Random(1)*32+Random(25)
Debug "Zufälliger Buchstabe: "+Chr(kleinOderGross)
Zugegeben, die 3. Formel ist zwar auf den ersten Blick schwer, aber auf den zweiten Blick doch recht simpel.
// Edit:
Wieso bin ich im Posteb heut so langsam?
@ Dark Sillu:
Deine vermutung ist korrekt. Du musst wissen, dass
Chr() eine Zahl in einen Buchstaben umwandelt (ASCII Codes).
Verfasst: 20.05.2007 19:34
von Dark Skillu
ich kenne kein chr()

stimmt denn was ich geschrieben habe, ich bin Anfänger ...
Verfasst: 20.05.2007 19:36
von D@nte
Haste genau richtig verstanden, allerdings würd ich sagen das jedem ASCII-Wert ein Zeichen zugeordnet ist
Chr() gibt das dem ASCII-Wert zugeordneten Wert zurück
Code: Alles auswählen
Debug Asc("H")
Debug Asc("a")
Debug Asc("l")
Debug Asc("l")
Debug Asc("o")
Debug "-----"
Debug Chr(72)
Debug Chr(97)
Debug Chr(108)
Debug Chr(108)
Debug Chr(111)
Und auch deine Vermutung über die "65" ist richtig dem ASCII-Werte 65 ist das Zeichen "A" zugewiesen
Verfasst: 20.05.2007 19:40
von Dark Skillu
Danke , dass wollte ich wissen ich arbeite dann mal weiter ... ich melde mich falls ich wieder Fragen habe.
Verfasst: 20.05.2007 19:46
von a14xerus
Für Namen ist das ganze ja ei wenig komplexer.
Vor längerer Zeit war mal ein Bsp hier im Forum:
Code: Alles auswählen
Procedure.s CreateFantasyName(CFN_Length.b)
Repeat
A$ = Chr(Random(25)+65)
Until A$<> "X" And A$ <>"Q" And A$<> "J" And A$<> "Y"
If A$ = "A" Or A$ = "E" Or A$ = "I" Or A$ = "O" Or A$ = "U"
flip=1
Else
flip=0
EndIf
length=CFN_Length-1 ;
For a = 1 To length
If flip
Repeat
forbid=0
Repeat
B$ = Chr(Random(25)+97)
Until B$ <> "a" And B$ <> "e" And B$ <> "i" And B$ <> "o" And B$ <> "u" And B$ <> "y" And B$ <> "j"
Select B$
Case "h"
If a= length
forbid=1
EndIf
Case "c"
If a= length
forbid=1
Else
Select Random(2)
Case 0
B$+"h"
flip =Random( 1)
Case 1
B$+"k"
Case 2
B$+"t"
EndSelect
length-1
EndIf
Case "k"
forbid=1
Case "q"
If a >= length -1
forbid=1
Else
B$+"u"
length-1
EndIf
Case "r"
If Random(1) And a <> length
B$+"r"
length-1
EndIf
Case "s"
If Random(1) And a <> length
B$+"s"
length-1
EndIf
Case "t"
If Random(1) And a <> length
B$+"t"
length-1
EndIf
Case "f"
If Random(1) And a <> length
B$+"f"
length-1
EndIf
Case "m"
If Random(1) And a <> length
B$+"m"
length-1
EndIf
Case "x"
If FindString(A$,"x",1)
forbid=1
EndIf
EndSelect
Until forbid=0
A$+B$
Else
Repeat
forbid=0
Select Random(4)
Case 1
A$+"a"
Case 2
A$+"e"
Case 3
A$+"i"
Case 4
A$+"o"
Case 0
If B$ <> "qu"
A$+"u"
Else
forbid=1
EndIf
EndSelect
Until forbid=0
EndIf
flip ! 1
Next a
ProcedureReturn A$
EndProcedure
For a = 0 To 100
Debug CreateFantasyName(6)
Next a
Ich weiß leider grade net, wer das gecodet hat
Verfasst: 20.05.2007 19:53
von Dark Skillu
Habe jetzt nen Generator, das problem ist aber, dass da keine sonderlich sinnvollen Namen rauskommen

, ich denke ihr wisst was ich meine , kannman irgendwie einbauen , dass nach jedem zwieten Buchstaben nen Vokal kommen muss, bzw. nicht 5 die gleichen hintereinander etc.?
Code: Alles auswählen
Global a.s
;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Comic Sans MS", 9)
Global FontID2
FontID2 = LoadFont(2, "Comic Sans MS", 9, #PB_Font_Bold)
Global FontID3
FontID3 = LoadFont(3, "Comic Sans MS", 10)
Global FontID4
FontID4 = LoadFont(4, "Comic Sans MS", 10, #PB_Font_Bold)
Global FontID5
FontID5 = LoadFont(5, "Comic Sans MS", 12)
Global FontID6
FontID6 = LoadFont(6, "Comic Sans MS", 18, #PB_Font_Bold)
Global FontID7
FontID7 = LoadFont(7, "Comic Sans MS", 8, #PB_Font_Bold)
If OpenWindow(0, 309, 397, 364, 193, "Nickname-Generator", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) And CreateGadgetList(WindowID(0))
ButtonGadget(1, 30, 45, 285, 60, "Generate")
SetGadgetFont(1, FontID6)
StringGadget(2, 30, 120, 285, 30, "", #PB_String_ReadOnly | #PB_Text_Center)
SetGadgetFont(3, FontID7)
Frame3DGadget(3, 15, 15, 315, 150, "Nickname-Generator")
SetGadgetFont(3, FontID7)
TextGadget(4, 30, 165, 300, 30, "Copyright (c) 2007 by DarkSkillu", #PB_Text_Center)
SetGadgetFont(4, FontID2)
EndIf
Repeat
If WindowEvent()=#PB_Event_CloseWindow
quit=1
EndIf
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
For I = 1 To 5
string$ = Chr(Random(25) + 97)
Next
SetGadgetText(2, string$)
EndSelect
EndSelect
Until quit=1
Verfasst: 20.05.2007 20:03
von a14xerus
Dark Skillu hat geschrieben:Habe jetzt nen Generator, das problem ist aber, dass da keine sonderlich sinnvollen Namen rauskommen

, ich denke ihr wisst was ich meine , kannman irgendwie einbauen , dass nach jedem zwieten Buchstaben nen Vokal kommen muss, bzw. nicht 5 die gleichen hintereinander etc.?
Siehe mein Post vor deinem
Du musst dir eben eine Technik aussuchen, mit der du das Überprüfst