Autor Beitrag
pHix
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 20.11.08 18:21 
Hallo miteinander...

ich habe folgendes Problem:

Wir sollen in unserem Informatikkurs ein Programm schreiben, welches einen eingegebenen Text
nach Caesars Verschlüsselungsmethode verschlüsselt. Bei dieser Art von Verschlüsselung
erhält jeder Buchstabe einfach einen andern Buchstaben immer verschoben, original
wurde also für C A geschrieben, für D B usw...

Jetzt aber zu meinem Problem:


Der Grundgedanke meinerseits war den eingegebenen Text einzulesen, jeden einzelnen Buchstaben
auszulesen und jedem eingegeben Buchstaben den sogenannten ASCII-Code zuzuweisen...
Diese Zahl,die es für etliche Zeichen gibt, wird um den eingegebenen Verschlüüselungswert vergrößert und wieder an eine Zeichenkette gehängt, um sie dann auszugeben.
ausblenden 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:
procedure TForm1.BVerschluesselnClick(Sender: TObject);
var Nachricht,Geheimnachricht:string;Verschiebungswert,Nachrichtlaenge,a,ASCII:integer;
begin
Verschiebungswert:=StrToInt(EVerschiebungswert.text);
Nachricht:=ENachricht.text;
Geheimnachricht:='';
Nachrichtlaenge:=StrToInt(Length(ENachricht.text));
a:=1;
for a:=1 to Nachrichtlaenge do
     ASCII:=ord(Nachricht[a]);
     ASCII:=ASCII+Verschiebungswert;
          If ASCII>=65 then
             if ASCII<=(90+Verschiebungswert) then
                if ASCII>90 then ASCII:=ASCII-26;
                end;
             end.
          if ASCII>=97 then
             if ASCII<=(122+Verschiebungswert) then
                if ASCII>122 then ASCII:=ASCII-26;
                end;
             end;
          end;
          a:=a+1;
          Geheimnachricht.AddStrings(chr(ASCII));
     end;
end.


Ich habe momentan den Fehler, dass die Deklaration der "Nachrichtenlaenge" fehlschlägt, weil ich Integer und String zusammen benutze, jedoch weiss ich nicht wie das in der Hilfe gemeint ist.

Also wo liegen meine Fehler - und was müsste ich machen?

Und wie muss ich genannte Befehle anwenden?
Die Delphi-Hilfe konnte mir auch nicht helfen.

Ich habe leider etliche Probleme, da wir die Befehle im Frontalunterricht zwar geklärt haben, jedoch
praktisch noch nie verwendet haben und die Lehrerin ehrlich gesagt nicht viel auf dem Kasten hat, in Bezug auf DELPHI,
konnte man mir meine Fragen auch nicht beantworten.

Hier ist noch die Erklärung bezüglich des ASCII-Codes:
de.wikipedia.org/wiki/Ascii#ASCII-Tabelle

Vielen Dank für jede Antwort und eure Mühen mir eine Antwort zu geben :)


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Do 20.11.2008 um 19:59
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Do 20.11.08 18:42 
user profile iconpHix hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
Nachrichtlaenge:=StrToInt(Length(ENachricht.text));					


Hier brauchst du kein StrToInt, weil die Länge des Strings bereits ein Integer ist.
pHix Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 20.11.08 20:47 
Leider funktioniert es immernoch nicht.
Ich denke es liegt daran, dass die Buchstaben nicht ausgelesen werden können oder dass diese nicht in den Code übersetzt werden können, denn ich erhalte keine Ausgabe...

Hier die aktuellste Version:
ausblenden 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:
procedure TForm1.BVerschluesselnClick(Sender: TObject);
var Nachricht,Geheimnachricht:string;Verschiebungswert,Nachrichtlaenge,a,ASCII:integer;
begin
Verschiebungswert:=StrToInt(EVerschiebungswert.text);
Nachricht:=ENachricht.text;
Geheimnachricht:='';
Nachrichtlaenge:=Length(ENachricht.text);
a:=1;
for a:=1 to Nachrichtlaenge do
     ASCII:=ord(Nachricht[a]);
     ASCII:=ASCII+Verschiebungswert;
          If ASCII>=65 then
             if ASCII<=(90+Verschiebungswert) then
                if ASCII>90 then ASCII:=ASCII-26;
                   Geheimnachricht:=Geheimnachricht+chr(ASCII);
                   a:=a+1;
                end;
             end.
          if ASCII>=97 then
             if ASCII<=(122+Verschiebungswert) then
                if ASCII>122 then ASCII:=ASCII-26;
                   Geheimnachricht:=Geheimnachricht+chr(ASCII);
                   a:=a+1;
                end;
             end;
          end;
          EGeheimnachricht:=Geheimnachricht;
     end;
end.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 20.11.08 21:29 
Ich frage mich, wo die ganzen "begins" zu den vielen "ends" eigentlich sind :gruebel:
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 20.11.08 21:32 
user profile iconpHix hat folgendes geschrieben Zum zitierten Posting springen:

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:
procedure TForm1.BVerschluesselnClick(Sender: TObject);
var Nachricht,Geheimnachricht:string;Verschiebungswert,Nachrichtlaenge,a,ASCII:integer;
begin
Verschiebungswert:=StrToInt(EVerschiebungswert.text);
Nachricht:=ENachricht.text;
Geheimnachricht:='';
Nachrichtlaenge:=Length(ENachricht.text);
a:=1;
for a:=1 to Nachrichtlaenge do
begin // <-- !!
     ASCII:=ord(Nachricht[a]);
     ASCII:=ASCII+Verschiebungswert;
          If ASCII>=65 then
          begin //<--!!
             if ASCII<=(90+Verschiebungswert) then
             begin //<--!!
                if ASCII>90 then 
                begin //<--
                   ASCII:=ASCII-26;
                   Geheimnachricht:=Geheimnachricht+chr(ASCII);
                   a:=a+1;
                end;
             end.
          if ASCII>=97 then
          begin // ...
             if ASCII<=(122+Verschiebungswert) then
                begin //..
                if ASCII>122 then
                begin
                   ASCII:=ASCII-26;
                   Geheimnachricht:=Geheimnachricht+chr(ASCII);
                   a:=a+1;
                end;
             end;
          end;
          EGeheimnachricht:=Geheimnachricht;
     end;
end.

Compilerfehlermeldung:
[Fehler] Unit1.pas(119): Anweisung für FOR-Schleifenvariablen 'a'


Ich würde behaupten dass die markierten Stellen diese Fehlermeldung werfen.
Wie DeddyH meinte, fehlen hinter den Thens zum teil Begins, zumindest lässt deine Einrückung darauf schließen. Ich hab mal welche hinzugefügt.

Deine Funktion hatte bisher einfach nur ASCII:=ord(Nachricht[a]); mit a=1 bis Länge durchgemacht und danach ein einziges mal den Code dahinter.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
pHix Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 20.11.08 23:05 
Vielen Dank - ich versuche es ab jetzt wahrscheinlich wieder auf eigene Faust!
Bin aber trotzdem über jeden weiteren Tipp froh :)
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Fr 21.11.08 14:27 
hi,
vielleicht hilft dir dieser Ansatz weiter:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
zeichen : char;
myint : Integer;

begin

zeichen := 'a'// Zeichen a..z

memo1.Lines.Add('eingabe: '+zeichen); //Ausgabe
myint := ord (zeichen);  //a = 97 ... z =  122
inc(myint);

if myint > 122 then
begin
  myint := myint-26;
end;

zeichen := chr(myint);
memo1.Lines.Add('ausgabe: '+zeichen);
end;