www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

blizz

Gepostet:
27.05.2006 18:35

bräuchte wieder Hilfe  
Komm mit den Aufgaben irgendwie nicht zurecht:

a) Implementieren Sie eine Funktion substitute :: String -> (Char,Char) -> String, die alle Vorkommen eines Zeichens
durch eine anderes Zeichen ersetzt.

b) Schreiben Sie eine Funktion substituteAll :: String -> [(Char,Char)] -> String, die eine Liste von Substitutionen
auf einen Text anwenden.

c) Schon Julius Cäsar soll angeblich bei der Kommunikation auf Feldzügen Verschlüsselung eingesetzt haben. Seine
Methode war die folgende: Aus dem Text wurden alle Leerstellen und Satzzeichen entfernt und alle Buchstaben
des Textes in Groÿbuchstaben umgewandelt. Danach wurde im Alphabet {A, . . . ,Z} jedes Zeichen zyklisch um
einen festen Wert verschoben, also zum Beispiel A auf B, B auf C ... und Z auf A. Alle Zeichen der Textes wurden
auf diese Weise substituiert.

Implementieren Sie eine Funktion caesar :: Int -> [(Char,Char)], die eine Substitutionsliste für einen Cäsarcode
erstellt, welche die Funktion substituteAll verwenden kann, um Texte über dem Alphabet {A, . . . ,Z} (ohne
Umlaute!) zu verschlüsseln.

Wäre schon wenn mir jemand helfen könnte!

blizz
Zum Seitenanfang    
 
Siracusa

Gepostet:
27.05.2006 20:16

   
Hi!

zu a) "substitute wort (a, b)" müßte so arbeiten: Sie trennt von wort das erste Zeichen ab und vergleicht es mit a. Sind die beiden Buchstaben gleich, dann wird b an diese Stelle gesetzt, wenn nicht dann wieder der abgetrennte Buchstabe. Alle anderen Buchstaben im Wort überprüfst du rekursiv nach dem gleichen Prinzip.

zu b) Funktioniert wie bei a), nur hast du diesmal eine Liste von Umwandlungsbuchstaben. Du kannst also erst den ersten Buchstaben in der Liste ersetzen (mittels substitute), dann den zweiten Buchstaben, usw. bis die Liste der zu ersetzenden Buchstaben leer ist.

Poste doch mal was du bisher schon geschrieben hast, damit man sieht, wo genau die Probleme liegen.

Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Jacke

Gepostet:
27.05.2006 20:49

   

substitute::String->(Char,Char)->String
substitute [] (a,b)=""
substitute (w:wort) (a,b)
|(w==a) =++substitute wort (a,b)
|otherwise =[w]++substitute wort (a,b)

substituteAll::String->[(Char,Char)]->String
substituteAll wort []=""
substituteAll wort ((a,b):liste) = (substitute wort (a,b))++substituteAll wort liste

caesar::Int->[(Char,Char)]
caesar zahl= ('A',toEnum((fromEnum 'A')+zahl)::Char):('B',toEnum((fromEnum 'B')+zahl)::Char):[]



so das wars :-)

falls du fragen hast einfach fragen

gruß jacke
Zum Seitenanfang    
 
blizz

Gepostet:
28.05.2006 18:25

   
DAnke,Danke,Danke!

aber bei mir läuft das prog nich!

der meckert an der zeile 5
			 |otherwise =[w]++substitute wort (a,b)


an was liegt das??
Zum Seitenanfang    
 
Siracusa

Gepostet:
28.05.2006 18:47

   
Der Fehler ist in der Zeile davor:
|(w==a) =++substitute wort (a,b)

durch
|(w==a) = [ b ] ++substitute wort (a,b)

ersetzen!
Zum Seitenanfang    
 
Jacke

Gepostet:
28.05.2006 19:52

   
das ist ne macke von dem forum b in eckigen klammern macht er dick ^^...egal man kann ja noch etwas selber denken

substitute::String->(Char,Char)->String
substitute [] (a,b)=""
substitute (w:wort) (a,b)
|(w==a) = [ b ] ++substitute wort (a,b)
|otherwise =[w]++substitute wort (a,b)

substituteAll::String->[(Char,Char)]->String
substituteAll wort []=""
substituteAll wort ((a,b):liste) = (substitute wort (a,b))++substituteAll wort liste

caesar::Int->[(Char,Char)]
caesar zahl= ('A',toEnum((fromEnum 'A')+zahl)::Char):('B',toEnum((fromEnum 'B')+zahl)::Char):[]


so ist es richtig
Zum Seitenanfang