Als erstes ich denke mal mir hierbei zu helfen könnte schwer werden und lange dauern bis man überhaupt erstmal durchblickt :S (nur so kleiner Tipp). Bitte sagt mir nicht, dass ich ein paar Sachen hätte einfacher machen können, das sagen so viele zu mir
So da das Testprogramm lief habe ich die prozedur jetzt mit in meinen Cäsar-Coder eingebaut. Für die die es nicht wissen der Cäsar Code ist eine Möglichkeit Nachrichten zu verschlüsseln, indem man den Buchstaben neue Werte zuweist. Beispiel:
A bekommt den neuen Wert B zugewiesen -> verschiebung um 1 -> C wird um 1 verschoben, also wird C dann zu D.
Eine Nachricht wird immer einheitlich Verschoben ... nicht ein Buchstabe um 2 der andere um 15.
Ja jedenfalls habe ich 2 Memos zum, das eine zum Eintragen der Nachricht das andere zum Ausgeben der decodierten / codierten Variante.
Bei der Prozedur, in der PC selbst alle Verschiebungsmöglichkeiten durchgeht und sie alle ausgibt und man die Richtige raussuchen kann funktioniert nur nicht. Er gibt die Decodierte Variante des Textes aus aber nur mit der Verschiebung um 1, die Anderen Varianten zB mit der Verschiebung um 5 werden nicht angezeigt. Dann erscheint eine Fehlermeldung Acces Violation.
keine Ahnung wo der Fehler liegt hier der Quellcode der Prozedur die eigentlich alle decodierten Möglichkeiten des eingegebenen Textes ausgeben soll, wenn die Verschiebung nicht bekannt ist.
Delphi-Quellcode:
var
Form5: TForm5;
memText1: Array of String;
temp1,temp2: String;
i,j,Zahl1,Zahl2,lauf: Integer;
buchstabe: char;
procedure TForm5.Button1Click(Sender: TObject);
begin
for lauf:=1 to 51 do
begin
setlength(memText1,(memo1.lines.count));
for i:=0 to memo1.lines.Count do
begin
memText1[i]:=memo1.Lines[i];
temp1:=memText1[i];
temp2:='';
for j := 0 to length(temp1) do
begin
buchstabe:=temp1[j];
Zahl1:=Ord(buchstabe);
if (Zahl1<65) or (Zahl1>122) or ((Zahl1>90)and(Zahl1<97)) then
temp2:=temp2+temp1[j]
else
begin
Zahl2:=Zahl1-lauf;
if (Zahl2<65) then
Zahl2:=Zahl2+58;
if (Zahl2>90) and (Zahl2<97) then
Zahl2:=Zahl2-6;
temp2:=temp2+Chr(Zahl2);
end;
end;
temp2[1]:=' ';
memo2.lines.add(temp2);
end;
end;
memo2.lines.add('++++++++++++++++++++++++++');
memo2.lines.add('Verschiebung um ' + inttostr(lauf) + ' beendet');
memo2.lines.add('++++++++++++++++++++++++++');
end;
Bemerkung zum Verschieben Wandel ich die Buchstaben in
Ascii-codes um Rechne + die Verschiebung und wandle sie zurück, dabei fange ich Sonderzeichen und alles andere was keine Buchstaben ab (funktioniert auch), sodass aus einem z kein , wird.
Hier das komplette Projekt für den der es haben will / sich ansehen will.
Vorsicht es ist mit Lazarus geschrieben
Der unterste Button im Hauptmenü (wenn ihr das Programm startet) führt euch zur Form mit den Problemen^^ ... Na gut bei den anderen Formen taucht auch der Acces Violation Fehler auf, ich hab halt nur die unterste genommen als Beispiel^^.
Danke schonmal an die geduldigen, hilfsbereiten Leute die sich mit dem nicht leicht zu lösenden Problem von mir befassen.