Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufallsnamen erzeugen... (https://www.delphipraxis.net/3021-zufallsnamen-erzeugen.html)

NeoDeluxe 18. Feb 2003 17:30


Zufallsnamen erzeugen...
 
moin.
Ja, ich wollte wiessen wie das geht? Wenn man z.B. auf einen Butteon klickt und dann werden in den Editfeldern Zufällige Namen erzeug! Hilfe... :?:

Mirilin 18. Feb 2003 17:39

meinst Du sowas?

Delphi-Quellcode:
function RandName(Length : Integer):String;
var
  i : Byte;
begin
  randomize();
  result := '';
  SetLength(Result,Length);
  for i := 0 to Length do
  begin
    Result[i] := Char(Random(25)+65);
  end;
end;

phlux 18. Feb 2003 17:42

Hi!
Eine weitere überlegegung wäre einfach 3 Arrays zu definieren in denen du dann 3-Silbige Namen speicherst (also 1 Array für 1te Silbe, usw.). Dann rufst du einfach dreimal hintereinander Random auf liest mit der zahl dann die Silbe aus dem Array raus und hast so deinen zusammengefummelten Namen. :mrgreen:

NeoDeluxe 18. Feb 2003 17:43

Zitat:

Zitat von phlux
Hi!
Eine weitere überlegegung wäre einfach 3 Arrays zu definieren in denen du dann 3-Silbige Namen speicherst (also 1 Array für 1te Silbe, usw.). Dann rufst du einfach dreimal hintereinander Random auf liest mit der zahl dann die Silbe aus dem Array raus und hast so deinen zusammengefummelten Namen. :mrgreen:

kannst du vielleicht etwas ausführlicher schreiben? :wink:

NeoDeluxe 18. Feb 2003 17:51

Zitat:

Zitat von Mirilin
meinst Du sowas?

Ja, aber wie soll ich die funktion aufrufen, wenn man eine Button klickt?

Mirilin 18. Feb 2003 17:55

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   Label1.Caption := RandName(8);
end;

NeoDeluxe 18. Feb 2003 18:00

Jain. Also das ist schon in der Richtung, aber ich will Richtigen Namen haben. Also die Vorschlag von phlux ist schon in die Richtung, ich weiss bloss nicht wie ich es machen soll! :oops:

phlux 18. Feb 2003 18:01

Hi!
Also mal ein grobes Code Beispiel:
Delphi-Quellcode:
//Global definierst du dir 3 Arrays, diese müssen global deklariert sein weil man sie sonst vorher nicht initialisieren kann
var
  Silbe_Anfang: Array[0..2] of String = ('am','zum','ent');
  Silbe_Mitte: Array[0..2] of String = ('put','bei','fern');
  Silbe_Ende: Array[0..2] of String = ('ieren','spiel','en');

//Dann irgendwo im Form.OnCreate event einmal Randomize ausführen
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

//Schließlich auf Knopfdruck Zufallswörter generieren

procedure TForm1.Button1Click(Sender: TObject);
var i, j, k: Integer;

begin
  //Label leeren
  Label1.Caption := '';
  //Zufallszahl erzeugen
  i := Random(2);
  //Mit Zflszahl Silbe aus dem Array auslesen und Label.Caption hinzufügen
  Label1.Caption := Label1.Caption + Silbe_Anfang[i];
  j := Random(2);
  Label1.Caption := Label1.Caption + Silbe_Mitte[j];
  k := Random(2);
  Label1.Caption := Label1.Caption + Silbe_Ende[k];
end;

Mirilin 18. Feb 2003 18:02

Delphi-Quellcode:
function RandName2:String;
var
  S1  : array [0..4] of String;
  S2  : array [0..4] of String;
  S3  : array [0..4] of String;
begin
  S1[0] := 'gen';S1[1] := 'sen';S1[2] := 'fen';S1[3] := 'ten';S1[4] := 'pen';
  S2[0] := 'gan';S2[1] := 'san';S2[2] := 'fan';S2[3] := 'tan';S2[4] := 'pan';
  S3[0] := 'gon';S3[1] := 'son';S3[2] := 'fon';S3[3] := 'ton';S3[4] := 'pon';
  randomize();
  result := S1[Random(4)]+S2[Random(4)]+S3[Random(4)];
end;
hier so etwa der Vorschlag von Phlux, müsstes halt die Silben entsprechen ändern... ?

Mirilin 18. Feb 2003 18:03

Phlux war schneller...

phlux 18. Feb 2003 18:08

Jepp, und ich würd Randomize nur einmal ausführen und nicht jedesmal in der Function :wink:

Mirilin 18. Feb 2003 18:11

Ist mir schon klar, aber da ich nur die Funktion gepostet habe, ist es, meiner Meinung nach, besser dieses dort hineinzuschreiben, damit es nicht vergessen geht.

Verstanden! :evil:

Achnein, nicht böse gemeint, aber Du verstehst schon was ich meine, oder? :D

phlux 18. Feb 2003 18:16

kaykay, ich wollte damit auch nicht haarspalterisch erscheinen :wink:
ist halt nur als hinweis gedacht das es so falsch ist.
aber solange es so funzt zum teufel mit den regeln *G :mrgreen:

NeoDeluxe 18. Feb 2003 18:17

Danke Jungs :D , Aber wie kann ich richtige Namen erzeugen z.B.: Alex, Mike, Christian, Wolfgang, Fridolin...usw.?

Mirilin 18. Feb 2003 18:20

Vieleicht indem Du ein Array mit ca hundert solchen Namen erstellst, und dann von diesem einen ausliest...
oder wie stellst Du dir vor sonst richtige Namen zu erzeugen???

NeoDeluxe 18. Feb 2003 18:23

Wenn es sein muss :lol: . aber ich habe versucht statt silben richtige Namen zu schreiben. aber es wernden nur zwei der ersten namen erzeigt.warum eigentlich? Und wie geht das mit ca. 100 Namen aufschreiben?

phlux 18. Feb 2003 18:29

Falls dir diese Kunstnamen nicht reichen bzw. missfallen kannst du das ganze auch mit nur einem Array machen, die prozedur wird dann halt entsprechend gekürzt. Ich weiß ja nicht wieviele Namen du in den Array schreiben willst, aber vllt macht es Sinn die Namen in eine Textdatei auszulagern und dann ggf. in den Array zu laden.

nailor 18. Feb 2003 18:31

Delphi-Quellcode:
namen: array[0..99] of string = ({so, deine namen, als string mit Kommas (100 Stück)});

//in der Procedure:

Label1.Caption := namen[random(99)];

//und noch bei starten (also im Project-Source oder onCreate ein Randomize...
Ergebnis: Auf Label 1 kommt zufällig einer deiner hundert Namen. Vielleicht willst du sie aber auch aus einer Datei auslesen, hätte ein paar Vorteile...

---
hey phlux, wir könnten unsere Gehirne zusammenpacken, dann müsste man so was nicht doppelt denken... :freak:

NeoDeluxe 18. Feb 2003 18:36

Ja, wäre auch nicht schlecht. Und welche Vorteile hätte es? Ich meine die Namen kann der Benutzer jederzeit ändern! :?:

phlux 18. Feb 2003 18:45

Stichwort Strings in resourcen packen *G
Zitat:

Zitat von Nailor
hey phlux, wir könnten unsere Gehirne zusammenpacken, dann müsste man so was nicht doppelt denken... :freak:

G* jo aber was machen wir dann mit dem einen leblosen körper? Organmafia? *G* aber eigentlich häng ich an meinem körper :mrgreen:

NeoDeluxe 18. Feb 2003 18:48

und die namen aus ressourece laden?

phlux 18. Feb 2003 19:01

Genau mit dem Delphi-Resourceneditor ne Resource erstellen, in der dann die Strings abspeichern (durchnummeriert von 1..unendlich) und dann wieder auslesen.

NeoDeluxe 18. Feb 2003 19:03

ja ressource hab ich schon erstellt, wie kann ich die in mein Progamm importieren?

Touchdown 18. Feb 2003 19:15

Füll dir eine Stringlist mit echten Namen (von Hand) und lass dir eine Zufallszahl berechnern. Als Ausgabe dann Stringlist[Zufallszahl] ...

Warum einfach wenns auch kompliziert geht :lol:

CalganX 18. Feb 2003 19:15

Delphi-Quellcode:
{$R ressource.res}
zugreifen kann ich dir nur eine Möglichkeit ohne die VCL geben.

Chris

NeoDeluxe 18. Feb 2003 19:19

herdamit! :lol:

phlux 18. Feb 2003 19:44

Hellas!
Delphi-Quellcode:
function GetResString(Nr: Integer): String;
var
  p: PChar;

begin
  p := StrAlloc(256);
  LoadString(hInstance, Nr, p, 255);
  Result := p;
  StrDispose(p);
end;
Ohne Funktionsgewähr, aus dem Delphikochbuch abgetippt und modifiziert :mrgreen:

Nr, ist die Nummer deines Strings in der Resource!!

NeoDeluxe 18. Feb 2003 19:47

Ist nicht wahr. ich habe das Buch auch aber diese Funktion hab ich nicht gefunden? Was für eins ist es? Ich kann doch nicht sooo blöd :freak: :nerd: sein,oder? trotzem danke sehr!

phlux 18. Feb 2003 19:55

Im Delphi Kochbuch 5 auf seite 1037 (ausm kopf jetz)
R368 Ressourcen einbinden (nicht ausm Kopf)

nailor 18. Feb 2003 20:11

ähm warum denn eine Resource? Entweder in den SourceCode (wenn mans nicht ändern soll) oder in eine txt/ini, wenn jeder seine eigenen Namen machen darf. Ist meine Meinung!

BrainCode 18. Feb 2003 20:18

Ja genau, soll denn der User den Sourcecode bearbeiten können, oder habe ich dich falsch verstanden, NeoDeluxe???

phlux 18. Feb 2003 20:22

Das Problem ist ja das der Array irgendwann sollte er 100 Namen oder so drin haben ganz schön ungemütlich im Quelltext wird ;) ich finde sowas sollte man auslagern.

nailor 18. Feb 2003 20:41

Zitat:

Zitat von phlux
Das Problem ist ja das der Array irgendwann sollte er 100 Namen oder so drin haben ganz schön ungemütlich im Quelltext wird ;) ich finde sowas sollte man auslagern.

... in eine Text-Datei...

phlux 18. Feb 2003 20:42

Wenn er es aber nicht editierbar lassen will???

nailor 18. Feb 2003 20:45

heul doch :tongue:
dann kann er es von mir aus in eine Resource packen...
ich gebe mich ja schon geschlagen!

BrainCode 18. Feb 2003 20:48

Am einfachsten realisierbar wäre doch eine Textdatei mit Cäsar-Verschlüsselung. Ich habe so etwas schon mal gemacht und könnte mal meinen Code posten. (@Nailor: Unser Satzgenerator, aber ohne die wesentlichen Programmteile ;-) )

phlux 18. Feb 2003 20:53

Hülf! Die Hesse komme!!

Egal ist eure Cäsar Verschlüsselung ne einfache XOR Verschlüsselung?? Oder was habt ihr da gebastelt?
Ach ja, die Strings sind immer noch mit einem Resourcen-Hacker (ResHack, zb.) editierbar, in der compilierten(!) .exe!

nailor 18. Feb 2003 20:59

Du kennst keine Cäsar-Verschlüsselung? a=b b=c... Das ist sehr schwer. Ich poste mal meinen Satzgenerator, bevor Braincode seinen postet.

PS: Du kannst auch eine 3DES-Verschlüsselung auf die Strings hetzen. Aber es gilt doch wohl der Grundsatz der Verhältnismäßigkeit.

PPS: Aprops Cäsar. Ich hab mal eine mit variabler Verschiebung. Und mit variabler Verschiebungs-Verschiebung gemacht....

phlux 18. Feb 2003 21:03

Als unter dem Schema sagt mir das was also einfache XOR Verschlüsselung (vom Prinzip her zumindest) zeig mal ein bisschen Code :wink:

nailor 18. Feb 2003 22:26

Liste der Anhänge anzeigen (Anzahl: 1)
Hab ich mal gemacht, als mir langweilg war:
Delphi-Quellcode:
unit NailCrypt;

interface

type
    TKeyArray = Array of String; //Klasse mit dem Ergebnis
    TNailCrypt = Class           //Die Crypt-Klasse mit Funktionen
        public
            function OpenKeyFile(Filename: String): TKeyArray;
            function Encrypt(Plain_Text:  String; KeyToUse: TKeyArray; Offset: integer): String;
            function Decrypt(Crypted_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
    end;


implementation

function TNailCrypt.Encrypt(Plain_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
var
    i,j:        integer;  //Schleifenvariablen
    lpt,lks,lka: integer;  //Längenangaben: PlainText, KeyStrings und KeyArray
begin
lka := length(keytouse);   //Anzahl der Schlüsselzeilen
lks := Length(KeyToUse[0]); //Länge der Schlüssezeilen
lpt := Length(Plain_Text); //Länge des zu verschlüsselnden Textes
SetLength(Result,lpt);     //Länge des Ergebnisses

for i := 1 to lpt do                        //Den kompletten String lang
 for j := 1 to lks do                       //Die komplette Schlüssel-Zeile
  if Plain_Text[i] = KeyToUse[lka-1,j] then //vergleichen
   begin
    Result[i] := KeyToUse[(i-1+offset) mod (lka-1),j]; //und den entsprechenden Eintrag
    Break;                                  //wählen und abbrechen
   end
  else
   if j = lks then                          //Wenn nicht gleich und alle durch
     Result[i] := Plain_Text[i];            //alten nehmen
end;


function TNailCrypt.Decrypt(Crypted_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
var
    i,j:        integer;   //Schleifenvariablen
    lct,lks,lka: integer;   //Längenvariablen
begin
lka := Length(KeyToUse);    //Anzahl der Schlüsselzeilen
lks := Length(KeyToUse[0]); //Länge der Schlüssezeilen
lct := Length(Crypted_Text); //Länge der zu entschlüsselnden Textes
SetLength(Result,lct);      //Länge des Ergebnisses

for i := 1 to lct do              //Den kompletten String lang
 for j := 1 to lks do             //Die komplette Schlüssel-Zeile
  if KeyToUse[(i-1+offset) mod (lka-1),j] = Crypted_Text[i] then //vergleichen
   begin
    Result[i] := KeyToUse[lka-1,j]; //und den entsprechenden Eintrag
    Break;                          //wählen und abbrechen
   end
  else
   if j = lks then                  //Wenn nicht gleich und alle durch
     Result[i] := Crypted_Text[i];  //gleich lassen
end;

function TNailCrypt.OpenKeyfile(FileName: String): TKeyArray;
var SomeFile: TextFile;
    Buffer:  String;
begin
AssignFile(SomeFile,FileName); //File Assign
Reset(SomeFile);               //und Reset
SetLength(Result,0);           //Schlüssellänge einstellen
while not eof(SomeFile) do                    //Die komplette File lang
    begin
        SetLength(Result, Length(Result) + 1); //Schlüssellänge erhöhen,
        Readln(SomeFile,Buffer);              //Zeile einlesen
        Result[High(Result)] := Buffer;       //und speichern
    end;
closefile(SomeFile);                          //File Close
end;

end.
schon länger her, aus meiner Anfangszeit. Ich hab ihn jetzt 1:1 gepostet. Also keine pingeligen Anmerkungen, ich weiß (vieles) mittlerweile selbst besser. Prinzipielle Anregungen natürlich gerne. Ich nutze den Code nicht mehr, ich nehme: www.cityinthesky.co.uk - Code. Ist echt top!!!

PS: Anwendungsbeispiele:
Delphi-Quellcode:
for Count := 1 to Listbox1.Items.Count do
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,0);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,(Count - 1) mod 10 + 1);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,(Count - 1) mod 10);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,Count);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,Count - 1);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,1);
//einen davon
verschlüsselungen und entschlüsselungen (der gleichen art) kann man addieren, wenns 0 gibt, ist der Text wieder "plain".

Die Schlüsseldatei ist eine Textdatei mit allen erlaubten Zeichen. ("durchgeschüttelt"). Je mehr Zahlen, desto sicherer (obwohl das ganze nie wirklich sicher wird...).

PS: ich häng mal eine an:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz