# Rot13 Entschlüsselung



## babuschka (19. Sep 2012)

Hallo zusammen,

ich bin momentan gerade dabei mich auf die Informatikklausur vorzubereiten.
Die anfänglichen Themen wie der Umgang mit Int,double und strings ist mir.
Auch boolean Ausdrücke und die damit verbundenen Wahrheitstabellen verstehe
ich überwiegend ausnahmslos.
Nun zum Char, ich kann überhaupt nicht nachvollziehen was bei einem char passiert.
Worauf der Char zugreift, was genau der Hintergrund ist.
Es werden sicherlich noch mehrere Probleme auftauchen.
Mit der Erklärung wäre mir erstmal sicherlich geholfen.

Meiner Nachricht hänge ich ein einfaches Programm an,womit mir 
das ganze erklärt werden könnte:


```
import IOulm.*;

public class Rot13{
 public static void main (String[] args){

   int rotate=13;
   char c = ' ';
   
  while (Urc.readChar()){

   	c=Urc.getChar();

   int encrypted=0;

  if (Character.isLetter(c)){
  
	encrypted = c + rotate;
	
  	if (Character.isLowerCase(c) && encrypted > 'z'){
     		encrypted=c-rotate;
  	}
	if (Character.isUpperCase(c) && encrypted > 'Z'){
     		encrypted=c-rotate;
 
	}
	System.out.print((char) encrypted);	
 	
} else {
 	System.out.print(c);

	}
	} 

    }
}
```
Das Beispielprogramm entschlüsselt einen Text der buchstabenweise um 13 Stellen
im Alphabet verschoben wurde.

Was tut hier der char (c). Der char wird ausgegeben, aber was passiert im Hintergrund?
Was hat das mit dem Z auf sich? Der Fall falls nach dem Z wieder bei A begonnen wird?

Vielen Dank im Voraus!


----------



## nillehammer (19. Sep 2012)

> Was tut hier der char (c). Der char wird ausgegeben, aber was passiert im Hintergrund?


Im Hintergrund macht sich der Code zu Nutze, dass chars neben ihrer Bedeutung als Zeichen auch numerisch behandelt werden können. Kleiner-Größer-Vergleiche und Rechenoperationen sind also möglich. Ist es das, was Du meintest?


> Was hat das mit dem Z auf sich? Der Fall falls nach dem Z wieder bei A begonnen wird?


Genau das. Wenn durch die Rotation der Wertebereich des Alphabets verlassen wird, muss wieder von vorne (a/A) begonnen werden, damit die Werte innerhalb des Alphabets liegen.


----------



## Ark (19. Sep 2012)

Ein char ist einfach nur eine natürliche Zahl zwischen 0 und 65535 (inklusive). Auch char-Literale sind einfach nur andere Schreibweisen für Zahlen aus diesem Bereich. Statt 'A' könntest du also genausogut (char)65 schreiben.

Ark


----------



## babuschka (19. Sep 2012)

Ich kann das schon in etwa verstehen, aber so ganz klar wirds mir auch noch nicht.
Der Char liest die Buchstaben ein und gibt sie als neue unverschlüsselte aus?
A= 65...hat doch mit dem ASCII-Code zu tun, nicht war?

Für mich ist das alles was anderes und hängt nicht zusammen.
Später kommen ja noch Arrays hinzu?


Ich kann zum Beispiel garn icht verstehen, was das Programm mit is.digit meint?
Und weshalb die variable encrypted später eingeführt wird.
Encrypted bedeutet einfach verschlüsselt?

Wir ihr seht, bin total durcheinander 

Mir fehlt einfach das Verständnis hinter dem Programm.

Könnte mir nochmal jemand versuchen, das Programm Schritt für Schritt zu erklären?

Warum wird zum Bsp zwischen großen und kleinen Buchstaben unterschieden?

Gruß und Danke


----------



## SlaterB (19. Sep 2012)

> Ich kann zum Beispiel garn icht verstehen, was das Programm mit is.digit meint?
'digit' taucht im Code, in diesem Forumthread bisher nicht auf

> Und weshalb die variable encrypted später eingeführt wird.
es wird die 13 aufaddiert, du wirst doch zumindest ein gewisses Grundverständnis haben, 
dass man mit jedem char irgendwas verschieben muss, also diese 13, 

und wenn man einen Wert errechnet, schreibt man ihn sich auf Papier oder legt ihn in irgendeiner Variable ab,
der Name der Variable muss genausowenig wie die Farbe des Papiert gleich eine mystische Bedeutung haben,

nicht zu viel interpretieren und erwarten sondern von einfachen sinnvollen Aktionen ausgehen,
einen erreichneten Wert ablegen - das ist nun eine der grundlegendesten Dinge, die du in praktisch jedem Programm findest

> Warum wird zum Bsp zwischen großen und kleinen Buchstaben unterschieden?

lasse doch diese beiden ifs erstmal weg, schau dir an was ansonsten passiert/ was sich ändert,
vereinfachen ist immer eine gute Idee, die Struktur selber erfassen!

recht einfach und hoffentlich verständlich ist das Programm nur mit [c]while (Urc.readChar()){ [/c]-Schleife und Ausgabe,
jeder Buchstabe wird als sich selber ausgegeben,
was passiert darüber hinaus?
jeder char wird einzeln für sich bearbeitet, wie genau? schau dir auch mit Ausgaben an, welcher char auf welchen abgebildet wird


----------



## babuschka (19. Sep 2012)

Nochmal ich:


Mein hauptsächliches Problem ist, dass ich nicht verstehe, was die Variable enctypted macht,
des weiteren finde ich keine Beschreibung (nur auf Englisch und die verstehe ich nicht) der
Ausdrücke.
Character.touppercase / lowercase/is digit/isLetter

Usw. Verstehe also gar nicht so recht, was das Programm in diesem
Moment abprüft.
Noch ne Verständnisfrage.
Ohne Text, der eingelesen wird, passiert in dem Programm gar nichts oder?


Liebe Grüße und Danke


----------



## SlaterB (19. Sep 2012)

die Variable speichert nur zwischen, wird z.B. später ausgegeben,
das ist schon alles, so wie


```
int ergebnis = 3 + 4;
System.out.println(ergebnis);
```
wäre dir hier 'ergebnis' auch unverständlich?

dass im Rot13-Programm vielleicht noch was mit der Variablen passiert ist nicht schlimm,
genauso könnte man auf 'ergebnis' noch eine weitere Zahl addieren usw.

-----

die ganze API mit tausenden Methoden zu übersetzen macht wohl keiner,
da bist du grundsätzlich in einer Sackgasse,
wobei dir hier allein die Methodennamen praktisch alles sagen,
'to' und 'is' kennst du hoffentlich, sonst nachschlagen, alle anderen Begriffe auch 
'case' alleine wird vielleicht nicht viel bringen, 'upper case' kann man wiederum aber auch nachschlagen usw.
dict.leo.org - Deutsch-Englisches Wrterbuch

und auch nochmal erinnert: im Programm anschauen, ausprobieren!, 
was passiert mit 5 Teststrings/ Zeichen, die dir einfachen, mit den jeweiligen Methoden


> Ohne Text, der eingelesen wird, passiert in dem Programm gar nichts oder?

richtig


----------



## Ark (19. Sep 2012)

vogte89 hat gesagt.:


> Mein hauptsächliches Problem ist, dass ich nicht verstehe, was die Variable enctypted macht,


Variablen "können" nichts, oder zumindest nichts anderes (in dem Sinne), als Werte zu speichern. Das unterscheidet sie gerade von Methoden: Methoden "können" etwas (also "machen" etwas), speichern aber nichts.



vogte89 hat gesagt.:


> des weiteren finde ich keine Beschreibung (nur auf Englisch und die verstehe ich nicht) der
> Ausdrücke.
> Character.touppercase / lowercase/is digit/isLetter


You're doomed!



vogte89 hat gesagt.:


> Noch ne Verständnisfrage.
> Ohne Text, der eingelesen wird, passiert in dem Programm gar nichts oder?


Korrekt. Wenn nichts eingelesen wird, macht das Programm auch nichts.

Ark


----------

