Gepostet: |
Würfel-Chiffrierung | ||||||||||
Habe da folgende Aufgabe: Vertraulichkeit von Nachrichten versucht man schon seit der Antike durch geeignete Verschlüsselung der Nachrichten sicherzustellen. Eine einfach zu berechnende (und auch einfach zu brechende!) Methode ist eine als Würfel-Chiffrierung bekannte Verschlüusselungstechnik. Bei der Würfel-Chiffrierung wird eine Zeilenlänge k > 1 als Kennzahl vereinbart. Die Chiffrierung einer Nachricht geschieht dann in folgender Weise. Die zu codierende Nachricht wird zunächst in Zeilen der Länge k aufgeschrieben, wobei die letzte Zeile ggf. unvollständig bleibt. Die codierte Nachricht erhält man dann durch spaltenweises Auslesen der Zeilen. Folgendes Beispiel illustriert das Vorgehen. Die Nachricht algorithmenunddatenstrukturen liefert bei Kennzahl 7 über den Zwischenschritt algorit hmenund datenst rukture n die Codierung ahdrnlmaugetkonetrunuinsrtdte. Schreiben Sie zwei HASKELL-Funktionen codeCube :: String -> Int -> String und decodeCube :: String -> Int -> String zur Codierung bzw. Dekodierung von Zeichenketten nach der Würfelmethode. Für die Funktion codeCube gibt das ganzzahlige Argument die für die Chiffrierung zu verwendende Kennzahl an, für die Funktion decodeCube die Kennzahl, die bei der Chiffrierung verwendet worden ist. Hinweis: Für die Lösung dieser Aufgabe kann der Operator !! hilfreich sein, mit dem man direkt auf ein Listenelement zugreifen kann. Die Nummerierung beginnt dabei mit 0. Z.B.: "daten"!!0 => ’d’, oder [5,4,3,2]!!3 => 2. Könnt ihr mir helfen, habe nicht so viel Ahnung von Haskell dashalb wären Hilfestellungen oder Ansätze gut. schon mal danke im voraus |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
einstring ="algorithmenunddatenstrukturen"
use: c:\zerlege einstring 7 [] [] ["algorit","hmenund","datenst","rukture","n"] c:\ ich programmier morgen früh weiter ...:-) gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
so hier ist die CodeCube-Funktion:
verwendung: c:\codeCube einstring 7 "ahdrnlmaugetkonetrunuinsrtdte" falls du dich mit list comprehension noch nicht so auskennst ich werde in den nächsten tagen vllt auch heute noch ein kapitel im haskell tutorial dazu schreiben so morgen programmier ich dann die decode funktion.. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Vielen dank Jacke. Hat mir echt weitergeholfen. Wollte nur noch wissen was [] die klammern und das acc bedeuten. zerlege [] zahl [] accliste=accliste zerlege [] zahl acc accliste=accliste++[acc] |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
zerlege funktion: also [] ist eine leere liste...bei rekursion ist es so, dass man einen rekursionsanker angibt...der anker ist in diesem fall die leere liste man nimmt ja immer ein element mehr aus der liste raus bis eben kein element mehr drin ist.. acc ist der accumulator...an sich einfach nur ne normale variable, in die ich zwischenergebnisse reinspeicher...in der zerlege-funktion hab ich in acc immer das listenstückchen drin, welches ich gerade abtrennen will... und ich packe in acc solange elemente rein bis zahl-stück drin sind... zahl gibt dabei die größe der teillisten an... in accliste ist dann die finale liste drin...in der alle kleinen teilisten enthalten sind... zerlege [] zahl [] accliste=accliste hier wird die accliste zurrückgeben wenn die kleine teiliste also der accumulator leer ist zerlege [] zahl acc accliste=accliste++[acc] sollte noch etwas in acc drin sein dann gebe ich die vereinigung der beiden listen zurrück |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
so und nun die decodefunktion ist vllt etwas umständlich, aber es geht :D:
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Nochmals danke Jacke. Die Erläuterungen sind ziemlich gut. Habe es jetzt auch verstanden. | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
edit ich hab nochmal was am quelltext für die decode-funktion abgeändert... jetzt geht er wenigstens gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||