Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zuordnung von einzelnen Zeichen ins Arrays (https://www.delphipraxis.net/86489-zuordnung-von-einzelnen-zeichen-ins-arrays.html)

Waldbärchen 14. Feb 2007 21:27


Zuordnung von einzelnen Zeichen ins Arrays
 
Hallo zusammen!

Wie ordne ich einzelne Zeichen einer ordinalen Folge zu und rufe sie stellvertretend wieder auf?
Klassischer Fall in der Kryptologie:
Ich habe die 26 unverschlüsselten Buchstaben A - Z.
Wie generiere ich jetzt zu einem beliebigen Schlüsselwort einen entsprechenden Code?

Beispiel:
Schlüsselwort/satz:
DELPHI IST PRIMA
Das Programm müßte erstmal alle mehrfach vorkommenden Buchstaben wegnehmen:
D E L P H I S T R M A
anschließend der (alphabetischen!) Reihenfolge nach prüfen, welche Buchstaben noch nicht da sind und die dann hinten dranhängen:
D E L P H I S T R M A B C F G J K N O Q U V W X Y Z
zuletzt zum Kodieren und zum Dekodieren jeweils eine Zuordnung zum Klartextalphabet herstellen.
Hat jemand von Euch Ideen, wie man das automatisiert, sodaß man für jedes Paßwort die richtige Zuordnung generieren kann?

Weitere Schwierigkeit: Verschiedene Codes benützen nur 25 Buchstaben (I=J), wie z.B. der Playfair-Code. Die sind dort in einer Matrize zu 5x5 Feldern angeordnet, die aber zeilenweise ausgefüllt werden muß, nachdem man das Schlüsselwort wie oben beschrieben eingesetzt hat. Ich bräuchte hierfür also das Alphabet ohne J und müßte dann ein eindimensionales in ein zweidimensionales Array umwandeln, damit ich die Buchstaben nach dem Ausfüllen der Matrix mit ihren Koordinaten aufrufen kann.

Hat dazu auch einer von Euch einen Tip?

Euer Waldbärchen

TonyR 14. Feb 2007 23:45

Re: Zuordnung von einzelnen Zeichen ins Arrays
 
Zitat:

Zitat von Waldbärchen
Wie generiere ich jetzt zu einem beliebigen Schlüsselwort einen entsprechenden Code?
Hat jemand von Euch Ideen, wie man das automatisiert, sodaß man für jedes Paßwort die richtige Zuordnung generieren kann?
Hat dazu auch einer von Euch einen Tip?

OMG... zu viel Fragen auf einmal...
Und bei der ersten Frage: Willst du da etwa, dass wir dir eine ganze Funktion schreiben? Hast du es etwa noch gar nicht probiert? Wenn doch, was gibts dabei für ein Problem?
2. Frage: genau dasselbe...

Also Waldbärchen: Ich glaub es wäre besser, wenn du deine Ideen vortragen würdest und uns deine Fortschritte mitteilen würdest und inwiefern du Probleme* beim Programmieren hast!

* und zum Lösen solcher sind wir dann für dich da [aber nicht um dir etwas im Ganzen zu programmieren]

IngoD7 14. Feb 2007 23:53

Re: Zuordnung von einzelnen Zeichen ins Arrays
 
Zitat:

Zitat von TonyR
[...] und uns deine Fortschritte mitteilen würdest und inwiefern du Probleme* beim Programmieren hast!

Jepp. Daran sehen wir dann auch, wie weit du in Delphi bist und in welche Richtung bzw. zu welchen Lösungsansätzen du tendierst.

Für deine Probleme gibt es nämlich 1001 Ansätze. ;-)

Waldbärchen 15. Feb 2007 08:44

Re: Zuordnung von einzelnen Zeichen ins Arrays
 
Hallo Ihr Zwei!

Es verhält sich so: Ich habe bis jetzt noch nichts richtig mit Arrays etc. gemacht, mir aber den Abschnitt über selbstdefinierte ordinale Datentypen, Strings, Records, Mengen und eben Arrays in meinem Anleitungsbuch schon durchgelesen. Jetzt dachte ich, daß die Sache mit den Zuweisungen bei der Kryptographie eigentlich ein gutes Beispiel wäre, mich dort praktisch einzuarbeiten und habe das gestern nochmals durchgesehen. Dabei bin ich eben auf das Problem gestoßen, entweder für jeden Schlüssel manuell einen neuen Aufzählungsdatentyp definieren zu müssen oder irgend einen Automatismus zu haben, der die geordnete Reihenfolge des Alphabets nach einem vorgegebenen System durcheinanderbringt - und wieder zuordnet. Mit den Mengen und set off könnte man vielleicht prüfen, welche Zeichen man bereits da hat, dann hat man aber wieder nicht die Reihenfolge.
Ich habe also schon Ahnung (meine jedenfalls) , welche Werkzeuge ich dafür verwenden müßte, habe sie aber noch nie benutzt und wollte sie in dem Zusammenhang erst ausprobieren.
Wenn Ihr aber meint, es wäre geschickter, mit was anderem anzufangen, dann könnt ihr mir ja auch was anderes vorschlagen, dann verschiebe ich das Problem mit den Codes erstmal auf später.

Euer Waldbärchen

TonyR 15. Feb 2007 09:23

Re: Zuordnung von einzelnen Zeichen ins Arrays
 
Da ich gar nicht richtig kapiere, wie das mit deinen komischen Verschlüsslungs-Verfahren gehen soll, würde ich dir vorschlagen (wenn du wirklich keinen Plan hast, so wie es auch scheint), dass du mit was leichterem anfängst, wie z.B. einem Höher-Tiefer-Kartenspiel!
Dort kannst du auch Arrays benutzen (um den Kartenstapel darzustellen)....

Waldbärchen 15. Feb 2007 09:40

Re: Zuordnung von einzelnen Zeichen ins Arrays
 
Danke für den Tip!
Übrigens nur zur Information von wegen "komischem Verschlüsselungsverfahren"
Kennt Ihr den Playfair-Code nicht?
Schaut mal nach bei Playfair-Code

Euer Waldbärchen

IngoD7 15. Feb 2007 09:54

Re: Zuordnung von einzelnen Zeichen ins Arrays
 
Nimm für den Anfang Strings. Ein String ist übrigens ein Array (ein Array of char), ähnlich zu händeln, aber eben auch mit den üblichen String-Befehlen (pos, copy, length ,etc.) zu verarbeiten.

Zitat:

Zitat von Waldbärchen
Schlüsselwort/satz:
DELPHI IST PRIMA

Das schreibst du in ein String Schluessel_brutto.

Zitat:

Zitat von Waldbärchen
Das Programm müßte erstmal alle mehrfach vorkommenden Buchstaben wegnehmen:

Dazu gehst du in einer Schleife Schluessel_brutto Zeichen für Zeichen durch und guckst, ob das gerade untersuchte Zeichen im String Schluessel_netto schon vorkommt. Wenn nein, dann das jeweilige Zeichen an Schluessel_netto anhängen. Wenn ja, dann nichts tun. Denke dabei daran, gefundene Leerzeichen in Schluessel_brutto ebenfalls zu überspringen, damit die nicht in Schluessel_netto mit reinrutschen.
So gewinnst du deinen String Schluessel_netto --> DELPHISTRMA

Zitat:

Zitat von Waldbärchen
anschließend der (alphabetischen!) Reihenfolge nach prüfen, welche Buchstaben noch nicht da sind und die dann hinten dranhängen:

Zum deinem besseren Verständins gestalten wir diese Aufgabe mal etwas umständlich. :wink:
Erzeuge dir einen String Zeichenvorrat mit allen Buchstaben --> ABCDE...usw...XYZ
Jetzt gehst du (wieder in einer Schleife) den String Zeichenvorrat Zeichen für Zeichen durch und guckst, ob das gerade untersuchte Zeichen im String Schluessel_netto schon vorkommt. Wenn nein, dann das jeweilige Zeichen an Schluessel_netto anhängen. Wenn ja, dann nichts tun.
So stellst du deinen Schlüssel fertig --> DELPHISTRMABCFGJKNOQUVWXYZ

Zitat:

Zitat von Waldbärchen
zuletzt zum Kodieren und zum Dekodieren jeweils eine Zuordnung zum Klartextalphabet herstellen.

Welche Art Zuordnung soll denn das werden? Beschreibe das mal in deinen Worten.

Zitat:

Zitat von Waldbärchen
Weitere Schwierigkeit: Verschiedene Codes benützen nur 25 Buchstaben (I=J), wie z.B. der Playfair-Code.

Vergiss Playfair erstmal, das wäre für dich heute noch zu weit. Grundsätzlich kannst du zu jeder Zeit schauen, ob du gerade ein "J" behandelst und es zu einem "I" machen. Aber sowas kommt dann später.

Zitat:

Zitat von Waldbärchen
Die sind dort in einer Matrize zu 5x5 Feldern angeordnet, die aber zeilenweise ausgefüllt werden muß, nachdem man das Schlüsselwort wie oben beschrieben eingesetzt hat. [...] und müßte dann ein eindimensionales in ein zweidimensionales Array umwandeln, damit ich die Buchstaben nach dem Ausfüllen der Matrix mit ihren Koordinaten aufrufen kann.

Um Playfair quasi 1:1 im Programm abzubilden mit der 5x5-Matrix, ja. Unbedingt so tun muss man das aber nicht. Auch ein String kann die Matrix darstellen. Man muss dann halt berechnen, an welcher Stelle im String sich z.B. das vierte Zeichen der dritten Zeile der Playfair-Matrix befindet. Aber auch das käme erst später.
:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.

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