Autor Beitrag
IronBull
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 05.11.09 13:22 
Hallo Leute, ich habe ein Programm geschrieben in dem nach dem Caesarverfahren verschlüsselt wird.

Leider ist ein Fehler drin, der immer eine Zugriffsverletzung hervorruft. Mit meinen beschränkten Delphikenntnissen bin ich daher am Ende. Meine Vermutung nach auskommentieren von Code ist ein Fehler in der Funktion ccrypt.

ausblenden volle Höhe 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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
unit caesar;

interface

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

type
  TDatei = File of char;
  TForm1 = class(TForm)
    Button1: TButton;
    Edit2: TEdit;
    Memo1: TMemo;
    Button2: TButton;
    Memo2: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  klartext:string;
  Form1: TForm1;
  quelle:TDatei;
  ziel:TDatei;

implementation

{$R *.dfm}

function ccrypt(input:string; cinput:char):string;
var i, stellen:integer;
output:string;
begin
stellen:=ord(cinput)-65;
output:='';

 for i:=1 to length(input) do
  begin
   if ((ord(input[i])>64and (ord(input[i])<91)) then
    output[i]:=char(((ord(output[i])-65+stellen)mod 26)+65);

   if ((ord(input[i])>96and (ord(input[i])<123)) then
    output[i]:=char(((ord(output[i])-97+stellen)mod 26)+97);

  end;
result:=output;
end;

procedure TForm1.Button1Click(Sender: TObject);
var dummy:string;
var cinput:char;
begin
cinput:=Edit2.Text[1];
dummy:=ccrypt(klartext,cinput);
Memo2.Lines.Add(dummy);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
assignfile(quelle, 'msg.txt');
assignfile(ziel, 'cryptedmsg.txt');
rewrite(ziel);
end;

procedure TForm1.Button2Click(Sender: TObject);
var ch:char;
begin
reset(quelle);
 klartext:='';
  while not(EOF(quelle)) do
   begin
    read(quelle, ch);
    klartext:=klartext+ch;
   end;
   closefile(quelle);
   Memo1.Lines.Add(klartext);
end;

end.


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Do 05.11.09 14:02 
Es fehlt sowas wie setlength(output, length(input)). Da aber in der Schleife noch die Bugs sind, daß output[i] benutzt wird, ohne vorher belegt zu sein, ist es wohl besser statt output:=''; einfach output:=input; zu setzen.