Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem Caesar


Polka16 - Do 17.04.08 10:55
Titel: Problem Caesar
wir haben heute ein fast vollständiges Programm bekommen , nun müssen wir mittels eines buttons oder einer function das verschlüsselte entschlüsseln



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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Klartext: TMemo;
    Vtext: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
  var
  ver, ent :char ;
  i, zahl, laenge :integer;
  klar, Versch :string;

begin 
    ver:='a';
    ent:= Ansilowercase(edit1.text)[1];
    zahl := ord(ent)-ord(ver);
    klar:=Ansilowercase(Klartext.text);
    laenge:=length(klar);
    for i:=1 to laenge do begin
    case Klar[i] of
      'ä': Versch:= Versch+'ae';
      'ö': Versch:= Versch+'oe';
      'ü': Versch:= Versch+'ue';
      'ß': Versch:= Versch+'ss';
      ' ': Versch:= Versch

      else Versch:=Versch+Klar[i];
      end;
      end;
      klar:=Versch    ;
      Versch:=' ';
      laenge:=length(Klar);
      for i:=1 to laenge do begin

      if ord(Klar[i])> 122-zahl then
      Versch:=Versch+chr(ord(Klar[i])-26+Zahl)
        else
         Versch:=Versch+chr(ord(Klar[i])+Zahl);
         end;
         Vtext.Lines.Add(Versch);
   end;

end.

----
danke im Voraus

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Gausi - Do 17.04.08 11:17

user profile iconPolka16 hat folgendes geschrieben:
wir haben heute ein fast vollständiges Programm bekommen , nun müssen wir mittels eines buttons oder einer function das verschlüsselte entschlüsseln
Fein. Und was sollen wir jetzt tun? Was ist dein bisheriger Ansatz, deine Ideen, wo geht es nicht weiter?


Zorro - Do 17.04.08 11:20
Titel: Re: Problem Caesar

Delphi-Quelltext
1:
2:
3:
4:
  if ord(Klar[i])> 122-zahl then
    Versch:=Versch+chr(ord(Klar[i])-26+Zahl)
  else
    Versch:=Versch+chr(ord(Klar[i])+Zahl);


Also gehts doch (primär) nur darum, den in den hier zitierten Zeilen stattfindenden Vorgang umzukehren. Fertig.
Danach kannst du dir Gedanken machen, ob es eine (wasserdichte) Möglichkeit gibt, zu erkennen, ob "ae","ss" usw. tatsächlich als "ae","ss" zu behandelen sind (und damit stehen bleiben müssen) oder ob sie in Umlaute zurückverwandelt werden müssen (und DIESE Entscheidung ist wesentlich schwieriger als die Cäsar-Verschiebung rückgängig zu machen).

Greetz
Zorro

Editiert: Tippfehler beseitigt.