Einzelnen Beitrag anzeigen

jawo3

Registriert seit: 15. Sep 2009
Ort: Niedersachsen
41 Beiträge
 
#1

Einfacher Verschlüsselungs-Algorythmus // Fehler

  Alt 15. Sep 2009, 21:13
Hi,
ich habe mich hier neu angemeldet, also erstmal ein bisschen was zur Vorgeschichte. Ich bin jetzt in Klasse 12 der gymnasialen Oberstufe und wir beschäftigen uns mit Delphi. Da ich vergangenes Jahr im Ausland war, habe ich quasi das erste Jahr Informatik verpasst und damit auch den Einstieg in die Programmiersprache Delphi. Also habe ich mich innerhalb der letzen Tage einigermaßen ausführlich mit Delphi beschäftigt und mir wie ich finde einige Grundlagen angeeignet. Man muss dazu sagen, dass ich vorher schon wenig Programmiererfahrung mit C++ hatte.

Das Derzeitige Unterrichtsthema ist die Delphi-Programmierung eines einfachen Verschlüsselungsalgorythmus. Wie das von statten gehen soll habe ich als Kommentar am Anfang des Quelltexts aufgeführt. Ich bin theoretisch mit dem Programm fertig, allerdings wird noch eine mir unerklärliche Fehlermeldung ausgegeben.

Es wäre wirklich super, wenn sich jemand mal bitte mein Programm angucken könnte, um mir ein bisschen mit der Problemlösung zu helfen. Ursprünglich sollte das Programm den Inhalt des ersten von zwei Eingabefeldern in ein zweidimensionales Array schreiben, welches dann gespiegelt in ein neues Array geschrieben werden sollte. Das sollte dann als String im zweiten Edit-Feld ausgegeben werden. Das habe ich allerdings nicht hinbekommen, weil ich nicht wusste wie man einen String zeichenweise in ein zweidimensionales Array reinbekommt (vielleicht kann mir ja sogar jemand sagen, wie das geht?), also habe ich das etwas umgeschrieben und quasi den Ursprungs-Charakter-Positionen nach gleichem Schema neue Positionen zugeordnet. Hier wird aber glaube ich der Fehler generiert, bei der Zuordnung der Werte aus StringEingabe zu StringAusgabe. Hier habe ich ein bisschen mit Zeigern rumgespielt und strcopy benutzt, weil ich das irgendwo mal gelesen habe, aber wie gesagt, es funktioniert einfach nicht.

Hier also der Quelltext:

Delphi-Quellcode:
(*
ZUWEISUNG DER EINGABE ELEMENTE ZU DEN AUSGABE ELEMENTEN / VERSCHLÜSSELUNGSALGORYTHMUS:
->Die Ihalte von EditEingabe und EditAusgabe werden in der Theorie als zwei Zweidimensionale-Arrays
  angesehen. EditAusgabe entsteht aus EditEingabe durch Spiegelung des Arrays.

EditEingabe                      EditAusgabe
1  2  3  4  5        >        5 10 15 20 25
6  7  8  9 10          >      4  9 14 19 24
11 12 13 14 15  ---------->    3  8 13 18 23
16 17 18 19 20          >      2  7 12 17 22
21 22 23 24 25        >        1  6 11 16 21

*)


unit Chaos;

interface

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

type
  TForm1 = class(TForm)
    EditEingabe: TEdit;
    EditAusgabe: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    ButtonStart: TButton;
    ButtonEnd: TButton;
    Label3: TLabel;
    EditVerwZeichen: TEdit;
    procedure ButtonEndClick(Sender: TObject);
    procedure ButtonStartClick(Sender: TObject);
    procedure EditEingabeChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  StringEingabe: string; // Zum speichern des Eingabe Satzes.
  StringAusgabe: string; // Zum speichern des Ausgabe Satzes.
  ZeigEin: Pchar; // Zeiger auf Eingabe-Chars
  ZeigAus: Pchar; // Zeiger auf Ausgabe-Chars
  ArrayAusgabe: array [1..25] of integer = (5,10,15,20,25,4,9,14,19,24,3,8,13,18,23,2,7,12,17,22,1,6,11,16,21);
                          //ArrayAusgabe speichert die definierte Zuordnung der neuen Charakterpositionen gemäß des gewählten Verschlüsselungsstandards

implementation
{$R *.dfm}

procedure TForm1.EditEingabeChange(Sender: TObject);
begin
  Form1.EditVerwZeichen.Text:=IntToStr(Length(Form1.EditEingabe.Text)); //Anzeige der verwendeten Zeichen
end;

procedure TForm1.ButtonStartClick(Sender: TObject); //Button zum Starten der Verschlüsselung

var i: integer; // für for-Schleife

begin

if length(EditEingabe.Text)=0 then showmessage('Bitte Text eingeben'); //Keine Zeichen eingegeben?
if length(EditEingabe.Text)>25 then showmessage('Bitte maximal 25 Zeichen eingeben'); // Zu viele Zeichen eingegeben?

StringEingabe := EditEingabe.Text; //Inhalt aus Eingabe Textfeld wird als String gespeichert

for i:=1 to 25 do //einzelne Zeichen des Strings werden nacheinander mit neuen Positionen als neuer String gespeichert
  begin
    ZeigEin:=Addr(StringEingabe[i]); //Zeiger auf Eingabe-Char zum Kopieren des Werts
    ZeigAus:=Addr(StringAusgabe[ArrayAusgabe[i]]); //Zeiger auf Ausgabe-Char zum Kopieren des Werts
    strcopy(ZeigAus,ZeigEin); //Zuweisung
  end;
EditAusgabe.Text:=StringAusgabe; //Anzeige im Ausgabe Textfeld
end;

procedure TForm1.ButtonEndClick(Sender: TObject); // Button zum Beenden des Programms
begin
  close;
end;

end.
Ich habe mich bemüht den Quelltext ausreichend zu kommentieren. Falls noch Fragen auftauchen, werde ich sofort weiterhelfen.
Von der grafischen Aufmachung sieht das Programm so aus:
http://img156.imageshack.us/img156/7818/progl.png


Vielen Dank im Voraus
Jan
Jan
  Mit Zitat antworten Zitat