| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Caesar-Chiffre (3050 mal gelesen)
|
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 10. Jun. 2012 18:57 <-- editieren / zitieren --> Unities abgeben:
Hey Leute, ich habe leider ein Problem mit folgender Aufgabe, die ich in Emacs-LISP programmieren soll: Die Caesar-Verschlüsselung ist eine einfach Verschiebechffire. Alle Buchstaben eines Eingabetextes werden dabei eindeutig auf einen Geheimbuchstaben abgebildet. Das Geheimalphabet ensteht durch die zyklische Verschiebung der geordneten Buchstaben des Eingabealphabetes um eine feste Anzahl an Stellen. Diese Anzahl der Verschiebungen stellt somit den Schlüssel zum kodieren und dekodieren von Eingaben dar. Schreiben Sie in eine Datei caesar.el eine Emacs Lisp-Funktion, welche die Caesar Chiffrierung durchführt. Dabei soll zu einer gegebenen Liste von Zahlen li, anstelle von Buchstaben, und einer gegebenen Ganzzahl d die Liste li' = li + d zurückgegeben werden. Dass heißt, das zu jedem Element der Liste d hinzuaddiert werden soll. Testen Sie ihr Programm an mindestens einem Beispiel. Ich hoffe, es kann mir jemand helfen, denn ich brauch dringend eine Lösung für das Problem. Bitte helft mir!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 10. Jun. 2012 19:17 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
|
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 10. Jun. 2012 19:25 <-- editieren / zitieren --> Unities abgeben:
Das Problem ist, dass ich von LISP eigentlich keine Ahnung habe und nicht so wirklich durchsteige. Ich hab sonst immer mit JAVA programmiert. Dementsprechend kann ich auch mit deinem Hinweis leider nicht viel anfangen . Aber trotzdem danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 10. Jun. 2012 19:50 <-- editieren / zitieren --> Unities abgeben:
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 10. Jun. 2012 20:21 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
Tja, was soll man da jetzt machen. Ich nehm mal an, die Aufgabe ist fürs Studium. Wenn du von Lisp aber keine Ahnung hast - ist die Aufgabenstellung verfehlt, oder dein bisheriger Arbeitseinsatz. Bis morgen lernst du kein Lisp mehr, verstehst vielleicht nicht mal eine Lösung die du irgendwo abschreibst. Was möchtest du denn - fertigen Lisp Code? Möchte ich eigentlich nicht unterstützen. Trotzdem hier mal einen Link http://www.dreamincode.net/forums/topic/135837-lisp-and-caesars-cipher/Trifft die Aufgabe in Etwa - aber nicht genau. Eine nette und unterhaltsame deutschsprachige Lektüre zum Lernen von Lisp ist http://www.autolisp-tutorial.mapcar.net/ Auf wenn es sich dabei nicht um common Lisp sondern um Autolisp handelt. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de [Diese Nachricht wurde von CAD-Huebner am 10. Jun. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 10. Jun. 2012 20:33 <-- editieren / zitieren --> Unities abgeben:
Mhhh naja doch. Im Prinzip möchte ich den Code und Erklärungen dazu, wie und warum das so funktioniert, wie es funktioniert. Ich glaube in dem Link, den Du mir geschickt hast, wird mein Problem leider nicht so wirklich erfasst, wenn ich den Code dort schon richtig lesen kann. Außerdem scheint er mir nicht in ELisp geschrieben zu sein oder?? Vielen Dank für Deine Hilfe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 10. Jun. 2012 20:42 <-- editieren / zitieren --> Unities abgeben:
Ich hab eben erst den ersten Teil Deiner Antwort nicht lesen können. Aber ja du hast recht. Ich hab mal eine andere Frage. Und zwar habe ich hier eine Funktion, die zwei Mengen vereinigt, aber in Zeile 7 und 8 gibt mir der Compiler einen Fehler aus, den ich nicht verstehe: reference to free variable 'liste1' bzw. liste2. Was muss ich denn ändern?? (cons 'liste1 '(amk hj 34)) (cons 'liste2 '(78 mkkii 21)) (defun differenz (liste1 liste2) "Bildet die Differenz zweier Mengen" (let (difflist'()) (while liste2 (cons 'difflist (remq (car liste2) liste1)) (cons 'liste1 difflist) (cons 'liste2 (cdr liste2))) difflist)) (cons 'difflist(differenz liste1 liste2)) Danke für die Hilfe schonmal im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 10. Jun. 2012 20:51 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
|
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 10. Jun. 2012 21:07 <-- editieren / zitieren --> Unities abgeben:
Ja ich hab schon gemerkt, dass eigentlich alle cons set sein müssen mit dem ' zur Wertzuweisung. Das Programm ist jetzt so, dass zumindest der Compiler keinen Fehler mehr ausspuckt, aber das Programm dennoch nicht funktioniert und des steht dann: wrong-type-argument listp liste2. Was heißt das? und warum? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 10. Jun. 2012 23:35 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
|
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 11. Jun. 2012 07:53 <-- editieren / zitieren --> Unities abgeben:
Mhhh leider klapptes immernoch nicht. Ich lass hier nochmal den QC da, weil ich den Fehler nicht finde: (set 'liste1 '(amk hj 34 io)) (set 'liste2 '(78 mkkii 21)) (defun differenz (liste1 liste2) "Bildet die Differenz zweier Mengen" (let (difflist'()) (while liste2 (set 'difflist (remq (car liste2) liste1)) (set 'liste1 difflist) (set 'liste2 (cdr liste2))) difflist)) (set 'difflist(differenz 'liste1 'liste2)) Wo liegt der Fehler? Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 11. Jun. 2012 10:18 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
hello, ich versteh zwar nicht das komplette Syntax deines verwendeten Lisps nicht, wie zb. (remq ...) aber versteh ich die aufgabenStellung. Nun, laut aufgabenstellung sollte die liste1 ein Sammlung von Strings sein, wobei da wohl einzelne Buchstaben drinnen stehn sollten, welche aus dem EingabeTexts erzeugt wird? Zb.: "Das ist meine Eingabe" -> '("D" "a" "s" " " "i" "s" "t" " " "m" "e" "i" "n" "e" " " "E" "i" "n" "g" "a" "b" "e") Und die liste2, sollte doch hier ein Liste von Integeres darstellen, welche zum verschieben benutzt werden, sprich zb.: '(1 3 -5 7 23 2) oder was auch immer... In deinem Beispiel, vermischt du dinge ziemlich heftig. Außerdem, kommt dein Quellcode nicht mal in die Richtung deiner Aufgabenstellung, da die Liste2 nicht mal zyklisch abgearbeitet wird, sonder in der while-schleife ständig verkürzt und neu erzeugt wird. Eine While-schleife ist hier rehct sinnfrei, wobei nicht zwingend unmöglich. (foreach ...) würd ich vorschlagen. Um zu verschieben, würde ich zuerste den Buhstaben mit (ascii "a") in einen Integer umwandeln, dann mit dem VerschiebeWert addieren bzw. subtrahieren (hier liegt der Unterschied zwischen chiffrieren und dechiffrieren) und dann mit (chr newIntegerValue) wieder einen Buchstaben erzeugen, um den dann in eine neue Liste zu schreiben. hm, hab das grad als Code gebaut, weils echt nicht viel aufwand ist, nur ist der Lernfaktor für dich, wenn ich dir den einfach so gebe, natürlich tot. Was nun was nun? CAD-Huebner? Lg reltro [Diese Nachricht wurde von reltro am 11. Jun. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WiMa11 Mitglied
Beiträge: 9 Registriert: 10.06.2012
|
erstellt am: 11. Jun. 2012 11:21 <-- editieren / zitieren --> Unities abgeben:
|
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 11. Jun. 2012 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
Mal einen Teil davon: schreibt die Variable >EingabeText< welcher als String vorliegt, ZeichenWeise in eine Liste Code:
( (lambda (inputSTR / OutListe i) (set 'i 1) (repeat (strlen InputStr) (set 'OutListe (cons (substr InputStr i 1) OutListe)) (set 'i (+ i 1)) ) (reverse OutListe) ) EingabeText )
lg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 11. Jun. 2012 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
Du quotest die Variablen liste1 und liste2 bei der Übergabe an die Funktion. Ergebniss ist, dass die Variablen nicht evaluiert werden, sondern nur die Symbole übergeben werden. Die Funktion benötigt aber Listen, und generiert daher einen Fehler. Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 11. Jun. 2012 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für WiMa11
uups, hab mich gar nicht darum gekümmert, dass der obrige Code von WiMa11 auf ganz was anderes abzielt. Schien mir schon ein wenig diffus, das ganze um damit zeichen zu verschieben. Aber wozu willst du den Code verwenden? (bei der Aufgabenstellung) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |