| Autor |
Beitrag |
-delphin-
      
Beiträge: 200
|
Verfasst: Mo 16.05.05 14:57
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.bStartClick(Sender: TObject); const buchstaben: array [1..26] of string = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); var laenge,i: integer; begin randomize; i := 0; i := i+1; ELaenge.Text:=IntToStr(laenge); for i:=0 to laenge do begin MAusgabe.Lines.Add(random(IntToStr(buchstaben))); end; end;
end. |
Also ich würde gerne ein prog machen, ähnlich den NameGen, das mir in einem Memofeld Buchstaben des Alphabets zufällig aneinander reiht. Vll könnte mal jemand über den Quelltext schauen. Ich bräuchte nämlich einen Befehl, den ich in die Klammer beim Memofeld eintragen kann, der dafür sorgt, dass der PC sich Zufallszahlen von 1-26 raussucht, die nach dem Array in Buchstaben umwandelt und so ein "Wort" in das Memofeld schreibt.
Danke (; Moderiert von Christian S.: Topic aus Multimedia / Spiele / Grafik verschoben am Mo 16.05.2005 um 15:11
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 16.05.05 15:02
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.bStartClick(Sender: TObject); const buchstaben: array [1..26] of string = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); var laenge, i: integer; Buchstabe, str: string; begin randomize; str := ''; laenge := strtoint(ELaenge.text); for i := 1 to laenge do begin Buchstabe := buchstaben[random(26) + 1]; str := str + Buchstabe; end; MAusgabe.Lines.Add(str); end; |
Zuletzt bearbeitet von F34r0fTh3D4rk am Mo 16.05.05 15:21, insgesamt 3-mal bearbeitet
|
|
DarkHunter
      
Beiträge: 477
Win XP
D3 Prof, D2005 PE
|
Verfasst: Mo 16.05.05 15:07
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.bStartClick(Sender: TObject); const buchstaben: array [1..26] of string = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); var laenge,i: integer; begin randomize; i := 0; |
Soweit Gut, aber jetzt wird es merkwürdig.
Delphi-Quelltext
welchen Sinn hat das bitte?
Delphi-Quelltext 1:
| ELaenge.Text:=IntToStr(laenge); |
Was machst du da? Willst du die Länge aus dem Editfeld abfragen? Dann musst du das Umdrehen
Der Rest muss dann so aussehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| for i:=0 to laenge do begin MAusgabe.Lines.Add(buchstaben[random(buchstaben.count)+1]); end; end;
end. |
Edit: Mist F34r war schneller 
Zuletzt bearbeitet von DarkHunter am Mo 16.05.05 15:10, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 16.05.05 15:08
oder man guckt sich meine variante an, die funktioniert und leicht verständlich ist 
|
|
DarkHunter
      
Beiträge: 477
Win XP
D3 Prof, D2005 PE
|
Verfasst: Mo 16.05.05 15:12
F34r0fTh3D4rk hat folgendes geschrieben: | oder man guckt sich meine variante an, die eigentlich funktionieren müsste und leicht verständlich ist  |
stimmt, ich habe mir nur seinen Quellcode angeschaut, deine ist wirklich besser. nur ich wollte seinen Code so gut es geht übernehmen, wobei mir gerade aufgefallen ist das
MAusgabe.Lines.Add() sinnlos ist, da es sonst jeder Buchstabe untereinader und nicht hintereinander gepackt wird.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 16.05.05 15:15
Die Funktion chr ist Euch aber schon bekannt, oder? 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 16.05.05 15:16
ja aber geht ja auch ohne 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 16.05.05 15:19
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 16.05.05 15:20
ich bekomme mit chr nach einiger zeit immer son paar problemchen, weshalb ich denn immer ganz gerne strings als chars "tarne" 
|
|
-delphin- 
      
Beiträge: 200
|
Verfasst: Mo 16.05.05 15:56
hm welchen namen hat denn der zweite buchstabe in meinem wort? also der erste heißt ja immer buchstabe als variable, aber wenn ich ihm z.b. sagen will, dass nach einem q ein u kommen muss, dann sieht das so aus:
Delphi-Quelltext 1: 2: 3: 4:
| If Buchstabe = IntToStr(17) then ; MAusgabe.Lines.Add(str); |
|
|
DarkHunter
      
Beiträge: 477
Win XP
D3 Prof, D2005 PE
|
Verfasst: Mo 16.05.05 16:11
| Zitat: | hm welchen namen hat denn der zweite buchstabe in meinem wort? also der erste heißt ja immer buchstabe als variable, aber wenn ich ihm z.b. sagen will, dass nach einem q ein u kommen muss, dann sieht das so aus:
Delphi-Quelltext 1: 2: 3: 4:
| If Buchstabe = IntToStr(17) then ; MAusgabe.Lines.Add(str); | |
Das ist vom Quelltext erstmal nciht richtig
IntToStr(17) würde als Ergebniss "17" zurückliefern.
Die abfrage müsste lauten
Delphi-Quelltext 1: 2: 3: 4:
| if buchstabe = 'q' then begin str := str + 'u'; end; |
so müsste das gehen
oder du nimmst statt 'q'->'qu' in deiner list auf 
Zuletzt bearbeitet von DarkHunter am Mo 16.05.05 18:07, insgesamt 1-mal bearbeitet
|
|
-delphin- 
      
Beiträge: 200
|
Verfasst: Mo 16.05.05 16:30
des funktioniert aufgrund der " nicht^^ beim u gehts auch mit ' oben nicht
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 16.05.05 18:31
Delphi-Quelltext 1: 2:
| if str[i - 1] = 'q' then Buchstabe := 'u'; |
|
|
-delphin- 
      
Beiträge: 200
|
Verfasst: Mo 16.05.05 18:36
geht nich ich hab folgendes wort erhalten:
wuxcgqkcsnk
qk 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 16.05.05 19:05
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.bStartClick(Sender: TObject); const buchstaben: array [1..26] of string = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); var laenge, i: integer; Buchstabe, str: string; begin randomize; str := ''; laenge := strtoint(ELaenge.text); for i := 1 to laenge do begin Buchstabe := buchstaben[random(26) + 1]; if str[i - 1] = 'q' then Buchstabe := 'u'; str := str + Buchstabe; end; MAusgabe.Lines.Add(str); end; |
Hast du das auch so gemacht ?
|
|
-delphin- 
      
Beiträge: 200
|
Verfasst: Mo 16.05.05 19:16
ich hab die reihenfolge etwas geändert, aber wenn ich deinen quelltext exakt so in mein prog kopiere startet er es zwar, sobald ich aber auf bstart klicke, kommt ein fehler und ich darf die sache zurücksetzen
|
|
Micho
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 16.05.05 20:30
Hallö,
Mal ne Frage, soll das nur so Buchstabenwürfellei werden wie "CNBSHZAU", oder eher aussprechbare Wörter wie "Monagar"?
Man kann relativ leicht eine semantische Textanalyse und -synthese machen. Das hört sich wild an, ist aber eigentlich ganz einfach.
Hier ist mal ein synthetischer Zufallstext in deutsch:
"Am nähern folgt haberen an Champions nich«, sie Ei weist, dasser?«, sagte ihren Fran."
und in englisch:
"She sat too us faile, verythis be stable of they seculminese with name some, when its are of that litemaried togerisions"
(Vorlage für die Analyse waren Harry Potter in deutsch bzw. englisch.)
Wenn du sowas willst, kann ich den Code (in hübsch) mal posten ...
Grüße,
Micho
_________________
www.michael-kreil.de
|
|
-delphin- 
      
Beiträge: 200
|
Verfasst: Mo 16.05.05 20:58
zuerst nur buchstabenwürfel, die wollte ich dann mit if then befehlen aussprechbar werden lassen..
kannst aber deins mal posten, alleine weil ich das mit dem satz nich verstehe oO
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 17.05.05 14:57
dann würde ich meherere arrays machen, eins mit vokalen und ein mit konsonanten und vielleicht noch eins mit "ß" , "ä" , "ö" , "ü"
|
|
Micho
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 17.05.05 16:52
Hallö,
Also das mit Zufalls-Buchstaben-Kombinationen, die man mit if-Abfragen auf Aussprechbarkeit testet, würde ich lassen. Das werden nachher Unmengen (50+) an if-Abfragen, wo dann keiner mehr durchschaut.
Alternativ kann ich einen kleinen Crashkurs über semantische Textanalyse und -synthese anbieten:
Als erstes braucht man einen Vorlagentext, der typische Wörter enthält. Als Beispiel habe ich eine Liste mit Vornamen genommen. Diesen Text analysiert man und zählt einfach nur aus, welche Buchstabenkombinationen darin vorkommen.
Dazu brauch man einige globale Variablen
Delphi-Quelltext 1: 2:
| const AChar:string='#abcdefghijklmnopqrstuvwxyzäöüß'; ACharN=31; |
In AChar werden die Buchstaben definiert, die man berücksichtigen möchte. Die Raute "#" braucht man als Marker ...
Außerdem benötigt man:
Delphi-Quelltext 1: 2:
| var Matrix:array[1..ACharN,1..ACharN,1..ACharN,1..ACharN] of longword; map:array[char] of byte; |
Im 4-dimensionalen Feld Matrix soll gleich gezählt werden, welche Buchstaben-Vierer-Kombinationen wie oft auftreten.
map benötigt man, um zu einem Zeichen vom Typ Char den Index in AChar zu ermitteln.
Nun folgt die Analyse-Prozedur:
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:
| procedure Analyse(Filename:string); var f:textfile; s:string; i,sum,z1,z2,z3,z4:longword; begin FillChar(map,SizeOf(Map),0); FillChar(Matrix,SizeOf(Matrix),0); for i:=1 to ACharN do begin map[AChar[i]]:=i; s:=UpperCase(AChar[i]); map[s[1]]:=i; end;
AssignFile(f,Filename); Reset(f);
while not eof(f) do begin readln(f,s); s:=trim(s)+'#'; z1:=map['#']; z2:=map['#']; z3:=map['#']; for i:=1 to length(s) do if map[s[i]]>0 then begin z4:=map[s[i]]; if z1>0 then inc(Matrix[z1,z2,z3,z4]); z1:=z2; z2:=z3; z3:=z4; end; end; CloseFile(f);
for z1:=1 to ACharN do begin for z2:=1 to ACharN do begin for z3:=1 to ACharN do begin sum:=0; for z4:=1 to ACharN do begin sum:=sum+Matrix[z1,z2,z3,z4]; Matrix[z1,z2,z3,z4]:=sum; end; end; end; end; end; |
Matrix enthält nun die Daten über die Buchstabenkombinationen und ist außerdem schon vorbereitet für die Textsynthese:
Delphi-Quelltext 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:
| function Synthese(Startwert:LongInt):string; var s:string; j,sum,z1,z2,z3,z4:longword; begin RandSeed:=StartWert; z1:=map['#']; z2:=map['#']; z3:=map['#']; repeat sum:=random(Matrix[z1,z2,z3,ACharN]); z4:=1; for j:=ACharN downto 1 do if Matrix[z1,z2,z3,j]>sum then z4:=j; s:=s+AChar[z4]; z1:=z2; z2:=z3; z3:=z4; until AChar[z4]='#'; Synthese:=LeftStr(s,Length(s)-1); end; |
Das ganze benutzt man dann z.B. so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.BtnStartClick(Sender: TObject); var i:integer; begin Analyse('liste.txt');
Randomize;
for i:=1 to 20 do begin Memo1.Lines.Add(Synthese(random($1000000))); end; end; |
Da kommen dann so schöne Namen raus, wie:
leonik
hel
ele
klemen
doriana
antonika
jörn
hildegaret
danita
sieglinderied
anie
reinzenz
hulda
doria
olaniela
Noch einige Hinweise:
Um so mehr Namen in der Vorlage sind, um so "phantasievollere" Namen kommen raus. Es sollten daher mindestens 1000 Namen in der Liste sein.
Falls es einen sehr lange Namen stören, oder dass oftmals auch Namen generiert werden, die in der Vorlagenliste sind, kann man die durch Überprüfen wieder rausfiltern.
Grüße,
Micho
Moderiert von Christian S.: Werbelink entfernt
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Micho am Di 17.05.05 17:55, insgesamt 1-mal bearbeitet
|
|
|