Caesar-Verschlüsselung

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Patrick Haucke

Caesar-Verschlüsselung

Beitrag von Patrick Haucke »

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
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Caesar-Verschlüsselung

Beitrag von bigben »

Such mal nach den Funktionen length und nchar -- dann wird der Fehler recht schnell sichtbar.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Patrick Haucke

Re: Caesar-Verschlüsselung

Beitrag von Patrick Haucke »

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:

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)
}
VG,
Patrick
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Caesar-Verschlüsselung

Beitrag von jogo »

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
Patrick Haucke

Re: Caesar-Verschlüsselung

Beitrag von Patrick Haucke »

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

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
liefert als Ergebnis NA.
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]
das: "Textverschluesselung!fuer Teilaufgabe b!" als Ergebnis raus.

VG,
Patrick
Antworten