Anwendung:
polybios in die uses mit aufnehmen.
Der eigentliche Clou der Codierung, nämlich der wirkliche Key, ohne den das Ganze wohl überhaupt keinen echten Sinn machen dürfte, bleibt hier völlig außen vor. Oder habe ich da etwas übersehen ?
Im übrigen ist so etwas wie
Delphi-Quellcode:
result := '';
for i:= 1 to length(uncipheredText) do
begin
result := result + IntToStr(FKey.getIndex(uncipheredText[i]));
end;
sehr ineffizienter und schlechter Programmierstil, weil innerhalb der Schleife der ständig wachsende String (result) pausenlos im Arbeitsspeicher komplett umkopiert werden muss.
Um das zu vermeiden, sollte man so etwas besser machen wie z.B.:
Delphi-Quellcode:
// Variable für aktuelle Position in uncipheredText
j:=0;
// Länge von Result fixieren
// Länge des codierten Strings ist doppelt so groß wie der Klartext
setlength(result, length(uncipheredText)*2);
for i:= 1 to length(uncipheredText)*2 do
begin
if odd(i) then
begin
inc(j);
// temp ist ein lokaler Shortstring, also ebenfalls mit fixierter Länge
temp:=IntToStr(FKey.getIndex(uncipheredText[j]));
result[i] :=temp[1] ;
end
else result[i] := temp[2];
end;
Und das Wichtigste zuletzt:
Der Algorithmus in der Unit polybios ist falsch.
Beispiel: Codiere "Delphi". das gibt (fälschlich mit der
Unit polybios)
D e l p h i
mit Unit polybios:
14
20 31
40 23 24
richtig aber ist:
14
15 31
35 23 24
Also gibt es schon mit diesem kurzen Klartext von nur 6 Buchstaben im codierten Zustand 2 fehlerhafte Ausgaben.
Der Grund dürfte in den vielfachen DIV- und MOD-Operationen zu suchen sein, deren Logik eher mühsam einsichtig ist.
Ohnehin ginge das alles wesentlich übersichtlicher, einfacher und weniger fehleranfällig - wie bereits vorgeschlagen - mit Hilfe einer Matrix zu machen.
Eine abschließende Bemerkung:
wie sinnvoll ist es eigentlich, zur Hilfesuche für eine offensichtliche/vermutliche Hausaufgabe gleich eine komplette (wenn auch hier ernstlich fehlerhafte) Lösung zu posten. Da ja erkennbar erhebliche Defizite in den Grundlagen vorhanden sind (Zitat: "Aber wenn man eine Matrix benutzen würde, wie implementiert man diese?") wäre es vielleicht hilfreicher gewesen, allein einen entsprechenden Ansatz zu geben, wie man die Lösung angehen könnte, also wie man eine Matrix implementiert und wie man mit ihr umgeht.