| Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 13.05.05 18:29
Hallo, ich hab mich jetzt nach dem thread kürzlich mal dazu entschlossen einen "richtigen" namegenerator zu schreiben, so einen, wie ich mal hatte, jetzt habe ich aber das Problem, dass der 2. Buchstabe manchmal der gleiche wie der erste und zudem auch noch großgeschrieben ist, woran kann das liegen ?
Ich hab auch schon überall lowercase eingefügt bei der Abfrage, aber sie schlägt fehl ?
(fängt der string jetzt doch bei 0 an ?)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108:
| procedure TForm1.Button1Click(Sender: TObject); const vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u'); konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'); var Buchstabe, str: string; laenge, i, j, k, l, m, n, b, c: integer; begin randomize; str := ''; laenge := strtoint(edit2.Text); for i := 1 to laenge do begin b := random(10) + 1;
if length(str) > 0 then begin if (b < 5) then for j := 1 to high(konsonanten) do if lowercase(str[i - 1]) = konsonanten[j] then begin b := random(5) + 6; break; end;
if (b > 5) then for j := 1 to high(vokale) do if lowercase(str[i - 1]) = vokale[j] then begin b := random(5) + 1; break; end; end;
if length(str) <= 0 then begin if (b > 5) then Buchstabe := uppercase(vokale[random(5) + 1]); if (b < 5) then Buchstabe := uppercase(konsonanten[random(21) + 1]); end;
if length(str) > 0 then begin if (b > 5) then Buchstabe := vokale[random(5) + 1]; if (b < 5) then Buchstabe := konsonanten[random(21) + 1]; end;
if length(str) > 0 then begin if lowercase(str[i - 1]) = 'x' then for k := 1 to high(konsonanten) do if Buchstabe = konsonanten[k] then begin Buchstabe := vokale[random(5) + 1]; break; end; if lowercase(str[i - 1]) = 'q' then Buchstabe := 'u';
if lowercase(str[i - 1]) = Buchstabe then begin for l := 1 to high(vokale) do if lowercase(str[i - 1]) = vokale[l] then repeat Buchstabe := vokale[random(5) + 1]; until lowercase(str[i - 1]) <> Buchstabe; for m := 1 to high(konsonanten) do if lowercase(str[i - 1]) = vokale[m] then begin c := random(3) + 1; if c < 3 then repeat Buchstabe := konsonanten[random(5) + 1]; until lowercase(str[i - 1]) <> Buchstabe; end;
end;
if (lowercase(str[i - 1]) = 'u') and (lowercase(str[i - 2]) = 'q') then for n := 1 to high(konsonanten) do if lowercase(str[i - 1]) = konsonanten[n] then Buchstabe := vokale[random(5) + 1]; end; str := str + Buchstabe; end; edit1.text:= str; end;
end. |
|
|
feivel3333
      
Beiträge: 190
W7
Delphi XE prof
|
Verfasst: Fr 13.05.05 20:00
Könntest du, bevor ich das debugge, mal sagen, wofür dieser NameGenerator gut ist? Was macht der? Ich habe auf die Schnelle den Thread nicht gefunden. Aber eine kurze Erklärung hilft sicher weiter.
Danke, Gruß, AS
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 14.05.05 12:57
der name generator erzeugt zufalls namen, in dem anderen thread ging es darum, namen aus mehreren Teilen, die man vorher festlegt, durch zufall zu generieren.
Da aber dort die Auswahl begrenzt und die Länge nicht Auswählbar war, wollte ich einen Namengenerator schreiben der Namen nach bestimmten Kriterien erstellt, sodass sie einigermaßen gut zu lesen sind. (ich hatte mal so ein programm) 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 14.05.05 13:08
Ich würde den ersten Buchstaben ausserhalb der schleife erstellen lassen, so dass er mit Sicherheit der einzige große Buchstabe ist. Alternativ könnte man (ich weis, ist unfein) per stringreplace nochmal am ende nach dem ersten Buchstaben mal 2 suchen, und ihn durch den ersten buchstaben mal 1 ersetzen. Edit1.Text:=StringReplace(Edit1.Text,Edit1.Text[1]+Edit1.Text[1], Edit1.Text[1],[]);
Ich weis, ist eine unfeine Methode, aber naja.
Ich finde die sache echt goil  Macht spass, sich immer einen Namen generieren zu lassen und ihn dann laut vorzulesen, weil die klingen echt total witzig  Haben was lateinisches manchmal
| Generator hat folgendes geschrieben: |
Erec
Axete
Bunegovu
Ukdeyepikeac
Ianakob
Bolozemeguw
Aqeouosueudd
Zefahuz
|
edit:Oha mist! hab meine StringReplace eingefügt, dabei kam dann DER name hier raus (einer von 40 Namen, die alle normal waren oO)
EEErusefger
... o .... kkkk??????
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 14.05.05 13:14
danke, ich werds außerhalb der schleife machen 
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 14.05.05 13:16
der fehler besteht immer noch und manchmal kommt jetzt garnischt raus
Wie kann das denn angehen ?
und hast du wirklick diesen namen erhalten:
weil eigentlich ist es nicht möglich, dass nach einem q ein anderer Buchstabe als ein u kommt
so hab ich das mit dem großbuchstaben behoben:
Delphi-Quelltext 1: 2: 3: 4:
| if length(str) > 0 then Buchstabe := lowercase(Buchstabe); str := str + Buchstabe; |
Aber es folgen immer noch 2 Vokale aufeinander, obwohl verboten, hm ma schauen,
ok es darf ja mal zb ein doppel A auftauchen, aber ich hab die wahrscheinlichkeit dafür etwas niedriger gemacht, jetzt scheint alles zu funzen (bissl an den wahrscheinlichkeiten drehen und die ergebnisse fallen anders aus)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112:
| procedure TForm1.Button1Click(Sender: TObject); const vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u'); konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'); var Buchstabe, str: string; laenge, i, j, k, l, m, n, b, c: integer; begin randomize; str := ''; laenge := strtoint(edit2.Text); for i := 1 to laenge do begin b := random(10) + 1;
if length(str) > 0 then begin if (b < 5) then for j := 1 to high(konsonanten) do if lowercase(str[i - 1]) = konsonanten[j] then begin b := random(5) + 6; break; end;
if (b > 5) then for j := 1 to high(vokale) do if lowercase(str[i - 1]) = vokale[j] then begin b := random(5) + 1; break; end; end;
if length(str) <= 0 then begin if (b > 5) then Buchstabe := uppercase(vokale[random(5) + 1]); if (b < 5) then Buchstabe := uppercase(konsonanten[random(21) + 1]); end;
if length(str) > 0 then begin if (b > 5) then Buchstabe := vokale[random(5) + 1]; if (b < 5) then Buchstabe := konsonanten[random(21) + 1]; end;
if length(str) > 0 then begin if lowercase(str[i - 1]) = 'x' then for k := 1 to high(konsonanten) do if Buchstabe = konsonanten[k] then begin Buchstabe := vokale[random(5) + 1]; break; end; if lowercase(str[i - 1]) = 'q' then Buchstabe := 'u';
if lowercase(str[i - 1]) = Buchstabe then begin for l := 1 to high(vokale) do if lowercase(str[i - 1]) = vokale[l] then begin c := random(4) + 1; if c < 3 then repeat Buchstabe := vokale[random(5) + 1]; until lowercase(str[i - 1]) <> Buchstabe; end; for m := 1 to high(konsonanten) do if lowercase(str[i - 1]) = vokale[m] then begin c := random(4) + 1; if c < 3 then repeat Buchstabe := konsonanten[random(5) + 1]; until lowercase(str[i - 1]) <> Buchstabe; end;
end;
if (lowercase(str[i - 1]) = 'u') and (lowercase(str[i - 2]) = 'q') then for n := 1 to high(konsonanten) do if lowercase(str[i - 1]) = konsonanten[n] then Buchstabe := vokale[random(5) + 1]; end; if length(str) > 0 then Buchstabe := lowercase(Buchstabe); str := str + Buchstabe; end; edit1.text:= str; end; |
jetzt kann es aber passieren, dass der Anfangsbuchstabe klein ist, ich glaube die Fehler resultieren daraus, dass length ein falsches Ergebnis zurück liefert
erneut verbessert:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112:
| procedure TForm1.Button1Click(Sender: TObject); const vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u'); konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'); var Buchstabe, str: string; laenge, i, j, k, l, m, n, b, c, z: integer; begin randomize; listbox1.clear; for z := 1 to strtoint(edit3.text) do begin str := ''; laenge := strtoint(edit2.Text); for i := 1 to laenge do begin b := random(10) + 1;
if length(str) > 0 then begin if (b < 5) then for j := 1 to high(konsonanten) do if lowercase(str[i - 1]) = konsonanten[j] then begin b := random(5) + 6; break; end;
if (b > 5) then for j := 1 to high(vokale) do if lowercase(str[i - 1]) = vokale[j] then begin b := random(5) + 1; break; end; end;
if (b = 5) then repeat b := random(10) + 1; until (b <> 5); if (b > 5) then Buchstabe := vokale[random(5) + 1]; if (b < 5) then Buchstabe := konsonanten[random(21) + 1];
if length(str) > 0 then begin if lowercase(str[i - 1]) = 'x' then for k := 1 to high(konsonanten) do if Buchstabe = konsonanten[k] then begin Buchstabe := vokale[random(5) + 1]; break; end; if lowercase(str[i - 1]) = 'q' then Buchstabe := 'u';
if lowercase(str[i - 1]) = Buchstabe then begin for l := 1 to high(vokale) do if lowercase(str[i - 1]) = vokale[l] then begin c := random(6) + 1; if c < 5 then repeat Buchstabe := vokale[random(5) + 1]; until lowercase(str[i - 1]) <> Buchstabe; end; for m := 1 to high(konsonanten) do if lowercase(str[i - 1]) = vokale[m] then begin c := random(6) + 1; if c < 5 then repeat Buchstabe := konsonanten[random(5) + 1]; until lowercase(str[i - 1]) <> Buchstabe; end;
end;
if (lowercase(str[i - 1]) = 'u') and (lowercase(str[i - 2]) = 'q') then for n := 1 to high(konsonanten) do if lowercase(str[i - 1]) = konsonanten[n] then Buchstabe := vokale[random(5) + 1]; end; if length(str) >= 1 then Buchstabe := lowercase(Buchstabe); if length(str) < 1 then Buchstabe := uppercase(Buchstabe); str := str + Buchstabe; end; listbox1.items.add(str); end; memo1.lines := listbox1.Items; end; |
ergebnis bei der einstellung 6 lang und anzahl 50:
| Zitat: |
Abujud
Ahagez
Ahawaf
Ahawel
Aluyai
Atouyo
Avabez
Avedog
Damape
Dofere
Dujuig
Ebosiw
Edesim
Ejekow
Emalel
Eneyak
Eowole
Ezeyip
Fecimi
Fifuti
Fokaet
Gidube
Gigxok
Gocaje
Ijiyoy
Ileube
Irapec
Itixob
Ituvij
Iwufor
Mefitu
Naofaf
Nedama
Ogemim
Onoxir
Pamuso
Temawi
Tuviyu
Tzimef
Uaraeb
Ubivat
Uovuil
Uxesuk
Wogpue
Xeroso
Yeniqu
Yeyuka
Yezove
Zafoba
Zuruja
|
Passables Ergebnis, ist da noch n Fehler drin, wenn nich, kann ich ja zumachen 
|
|
|