Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Cäsar Verschlüsselung Programmieren in der Schule OMG


Shadowlucker - Fr 12.03.10 19:44
Titel: Cäsar Verschlüsselung Programmieren in der Schule OMG
reset


Marc. - Fr 12.03.10 20:05

Hi und :welcome: im Forum!

user profile iconShadowlucker hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es evtl billige Lehrbücher, wo ich etwas mehr "lernen" kann?

Jup. Schau Dir mal user profile iconChristians Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.html] an. :zustimm:


uall@ogc - Fr 12.03.10 20:19

also zuerst solltest du von deinem Code die globalen Variablen entfernen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  text2 : string;
  b: integer;
  text: string;
  zaehler: integer;
begin

label2.Caption:= '';

for zaehler:=1 to Length(edit1.Text) do
  begin
  text:= edit1.Text;
  text2:= text;
  text2 := text2+ char(ord(text[zaehler])+6)

  end;
Label2.Caption := text2;
end;


dann brauchst du nich immer edit1.text auszulesen sondern sollte zugriff auf die GUI entfernen (dann kannst du den code später in eine funktion auslagern)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  text2 : string;
  b: integer;
  text: string;
  zaehler: integer;
begin
  // aus edit auslesen
  text := edit1.Text;

  // deine Cäsar Funktion
  text2 := '';
  for zaehler:=1 to Length(text) do
  begin
    text2 := text2 + char(ord(text[zaehler])+6);
  end;

  // auf label ausgeben
  Label2.Caption := text2;
end;


so und um nur Buchstaben anzuzeigen spaltest das ganze nochmal auf (ist für dich leichter)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.Button1Click(Sender: TObject);
var
  text2 : string;
  b: integer;
  text: string;
  zaehler: integer;
  asciiwert: Byte;
begin
  // aus edit auslesen
  text := edit1.Text;

  // deine Cäsar Funktion
  text2 := '';
  for zaehler:=1 to Length(text) do
  begin
    asciiwert := ord(text[zaehler]);

    // ggf. abfragen wie: wenn asciiwert > xyz dann
    asciiwert := asciiwert + 6;
    // ggf. abfragen wie: wenn asciiwert > xyz dann
    
    text2 := text2 + char(asciiwert);
  end;

  // auf label ausgeben
  Label2.Caption := text2;
end;


hier die Tabelle:
http://www.torsten-horn.de/techdocs/ascii.htm


Shadowlucker - Fr 12.03.10 20:36

reset


uall@ogc - Fr 12.03.10 20:39

Ja den Code dazu hab ich dir auch net gegeben. Ein wenig musst schon selbst machen :)
Die Stellen wo dein Code reinkommt (z.B. mit if-Abfragen) hab ich aber im letzten Post angegeben.


Shadowlucker - Fr 12.03.10 20:41

reset


Jakob_Ullmann - Fr 12.03.10 20:59

user profile iconShadowlucker hat folgendes geschrieben Zum zitierten Posting springen:
mhh ich habe mal den code mir mal angeschaut und getetet scheint alles zu funktionieren, soll ich jetzt einfach mit If Fragen machen?
ach ja noch etwas > asciiwert: Byte; was bedeutet dieser befehl? bringt mir nichts, wenn ich nur Copy Paste mache...

Moderiert von user profile iconChristian S.: Vollständiges Zitat des vorhergehenden Beitrags entfernt


asciiwert ist einfach der Name der Variablen. Sie ist eine Ganzzahl. Dabei heißt Byte, dass dafür 1 Byte, also 8 Bit, Arbeitsspeicher reserviert werden, es kann also die Werte 0 bis 255 annehmen.

Integer hat glaube ich seinen Bereich mehrmals geändert, und ich kann dir jetzt nicht sagen, wie viel Byte ein Integer hat. Dürfte aber herauszufinden sein. Jedenfalls ist Integer größer als Byte.

Nebenbei gibt es noch WORD (2 Bytes) und DWORD (double word, 4 Bytes). Weitere Integer-Typen (u. a. Cardinal) findest du in der Delphi-Hilfe, wenn du einfach mal "Integer" als Suchbegriff eingibst.

Auf jeden Fall ist die 1-Byte-Begrenzung von daher sinnvoll, weil ein ASCII-Code auch nur von 0 bis 255 gehen kann. Was ASCII ist, weißt du ja sicher.

user profile iconShadowlucker: Programmieren ist reine Übungssache. Nach einiger Zeit bekommt man dann ein Gefühl für die Sprache und die Programme schreiben sich fast von selbst.


Shadowlucker - Sa 13.03.10 18:08

reset


elundril - Sa 13.03.10 18:13

user profile iconShadowlucker hat folgendes geschrieben Zum zitierten Posting springen:
naja programmieren ist nicht und wird nie mein Ding sein ;D


warum tust du es dann?

lg elundril


Shadowlucker - Sa 13.03.10 20:21

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconShadowlucker hat folgendes geschrieben Zum zitierten Posting springen:
naja programmieren ist nicht und wird nie mein Ding sein ;D


warum tust du es dann?

lg elundril


ich wusste nicht, dass es so schwer sein wird....
Puck war viel einfacher. Damals wo ich einen anderen Lehrer hatte, gab er uns den Quellcode vor also in "Sätze" und nicht sowas wie erstelle ein Proogramm, dass die Verschlüsselung hat. Ich finde, dass es so viel schwerer ist. Naja als LK schon iwie eine Fehlwahl...


elundril - Sa 13.03.10 20:23

aso. naja, vielleicht freundest du dich noch mit Informatik an. Wenn nicht, kannst du ja schon mal ne Studienrichtung für dich persönlich ausschließen. :D


Shadowlucker - Sa 13.03.10 20:37

reset


F34r0fTh3D4rk - Mi 17.03.10 12:37

Ich mache mir etwas Sorgen bei diesen beiden Zeilen (ich denke der zweite Kommentar impliziert genau was ich meine):

Delphi-Quelltext
1:
2:
3:
4:
5:
    // ggf. abfragen wie: wenn asciiwert > xyz dann
    asciiwert := asciiwert + 6;
    // ggf. abfragen wie: wenn asciiwert > xyz dann
    
    text2 := text2 + char(asciiwert);

Werden Werte, die größer sind als 255 von char() korrekt behandelt? (*)

Ich gehe mal davon aus, dass die komplette ASCII-Tabelle als Alphabet für die Verschlüsselung verwendet werden soll.
Sollen es nur Buchstaben und/oder Zahlen sein, wird das Ganze etwas komplizierter.

Falls (*) mit einem "ja" zu beantworten ist, sollte man folgendes tun:

Delphi-Quelltext
1:
asciiwert := (asciiwert + 6mod 256;                    

Siehe auch: Suche in Wikipedia MODULO

Dies sorgt dafür, dass asciiwert im Bereich 0..255 bleibt. Die ersten 32 Zeichen werden vermutlich eh nicht sinnvoll dargestellt, da es sich hierbei um Suche in Wikipedia STEUERZEICHEN handelt.