Random()/Zufallsgenerator für Buchstaben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Random()/Zufallsgenerator für Buchstaben

Beitrag 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
Ich benutze PureBasic 4.0.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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
Ich benutze PureBasic 4.0.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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).
Zuletzt geändert von AND51 am 20.05.2007 19:35, insgesamt 1-mal geändert.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

ich kenne kein chr() :( stimmt denn was ich geschrieben habe, ich bin Anfänger ...
Ich benutze PureBasic 4.0.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Danke , dass wollte ich wissen ich arbeite dann mal weiter ... ich melde mich falls ich wieder Fragen habe.
Ich benutze PureBasic 4.0.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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
Ich benutze PureBasic 4.0.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Antworten