Hi,
ich bin gerade dabei für eine Hausarbeit die Funktion für eine Caesar-Verschlüsselung zu schreiben. Die Caesar-Verschlüsselung funktioniert fogendermaßen: Man hat eine Tabelle mit dem Alphabet (in diesem Fall Groß-und Kleinschreibung und Sonderzeichen). Nun wird ein Text genommen und jeder Buchstabe dieses Textes wird um einen festgelegten Betrag nach rechts verschoben. (Z.B. aus "Test" mit einr Verschiebung von 3 wird : "Whvw")
D.h. ich soll eine Funktion der Form
encrypt <- function(text, verschiebung) {
...
}
erstellen (wobei text der Eingegebene Text ist und verschiebung die Zahl, um die verschoben werden soll), die den Text verschlüsselt und ausgibt.
soweit bin ich im Moment:
encrypt <- function(text, verschiebung) {
vtext <- text
for (i in 1:length(vtext))
{
substr(vtext,i,i) <- vtabelle[i %% 57 + verschiebung]
}
return(vtext)
}
Wenn ich nun encrypt(c("Test"), 3) eingebe, erhalte ich als Ausgabe allerdings: "Dest".
Weiß jemand was mein Fehler ist, bzw. wie ich es korrigieren kann?
Vielen Dank,
Patrick
Caesar-Verschlüsselung
Re: Caesar-Verschlüsselung
Such mal nach den Funktionen length und nchar -- dann wird der Fehler recht schnell sichtbar.
LG,
Bernhard
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Caesar-Verschlüsselung
Vielen Dank für deine Antwort, das hat sehr geholfen.
Ich musste allerdings noch mehr verändern, dass es funktioniert, deshalb schreibe ich die Vollständige Funktion für den nächsten Fragenden nochmal hier rein:
VG,
Patrick
Ich musste allerdings noch mehr verändern, dass es funktioniert, deshalb schreibe ich die Vollständige Funktion für den nächsten Fragenden nochmal hier rein:
Code: Alles auswählen
encrypt <- function(text, verschiebung) {
vtext <- text
for (i in 1:nchar(vtext))
{
buchstabe <- grep(substr(vtext, i, i), vtabelle)
substr(vtext, i, i) <- vtabelle[buchstabe %% 57 + verschiebung]
}
return(vtext)
}
Patrick
Re: Caesar-Verschlüsselung
Hallo Patrick,
bitte lies: viewtopic.php?f=20&t=29
(wie man Codestücke formatiert)
Wie hübsch das anschließend aussieht, habe ich Dir schon mal vorgeführt, indem ich Deine Nachricht editiert habe.
Gruß, Jörg
bitte lies: viewtopic.php?f=20&t=29
(wie man Codestücke formatiert)
Wie hübsch das anschließend aussieht, habe ich Dir schon mal vorgeführt, indem ich Deine Nachricht editiert habe.
Gruß, Jörg
Re: Caesar-Verschlüsselung
Danke für den Hinweis.
Jetzt ist noch ein Fehler bei meinem Code aufgekommen.
Wenn in meinem Text Sonderzeichen vorkommen funktioniert es nicht.
Ich habe es danach Schritt-für-Schritt versucht, um den Fehler zu finden und offenbar muss es ein Fehler bei der for-Schleife sein.
Wenn ich nämlich jeden Schritt der Schleife selber mache, funktioniert es.
Also
liefert als Ergebnis NA.
Wenn ich aber die einzelnen Schritte mache, kommt z.B. bei
das: "Textverschluesselung!fuer Teilaufgabe b!" als Ergebnis raus.
VG,
Patrick
Jetzt ist noch ein Fehler bei meinem Code aufgekommen.
Wenn in meinem Text Sonderzeichen vorkommen funktioniert es nicht.
Ich habe es danach Schritt-für-Schritt versucht, um den Fehler zu finden und offenbar muss es ein Fehler bei der for-Schleife sein.
Wenn ich nämlich jeden Schritt der Schleife selber mache, funktioniert es.
Also
Code: Alles auswählen
t <- c("Textverschluesselung fuer Teilaufgabe b!")
for (i in 1:nchar(t){
substr(t, i, i) <- vtabelle[grep(substr(t, i, i), vtabelle) %% 57 +3]
}
t
Wenn ich aber die einzelnen Schritte mache, kommt z.B. bei
Code: Alles auswählen
substr(t, 21, 21) <- vtabelle[grep(substr(t, 21, 21), vtabelle) %% 57 +3]
VG,
Patrick