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

Code: Alles auswählen

Random()
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 :wink:

Code: Alles auswählen

For I = 1 To 50
 Debug Chr(Random(25) + 65)
Next

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? :cry:
@ 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 :lol: , 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 :lol: , 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