![]() |
Problem bei Verschlüsselungsprogramm
Hallo!
Ich habe ein Problem und zwar habe ich versucht eine function für die Verschlüsselung von Strings mit dem Cäsar Code zu schreiben. Allerdings funktioniert das ganze nicht! Irgendwo im Quelltext muss ein Fehler sein, aber ich finde ihn nicht. Es wäre toll, wenn man mir da irgendwie helfen könnte. Hier der Quelltext:
Delphi-Quellcode:
unit mCaesar;
interface type TCaesar = class(TObject) private Alph: String; { Private-Deklarationen } public constructor Create; function DeCode(orig: String; bewegen: Byte): String; { Public-Deklarationen } end; implementation constructor TCaesar.Create; var i:Char; begin Alph:=' '; for i:= 'a' to 'z' do begin Alph:=Alph+i; Alph:=Alph+Alph; end; inherited Create; end; function TCaesar.DeCode(orig: String; bewegen: Byte): String; var orig_index, alphabet_index: Integer; codiert:String; isInAlphabet:Boolean; begin codiert:=''; for orig_index:= 1 to length(orig) do begin IsInAlphabet:=false; for alphabet_index:= 1 to (length(Alph) div 2) do if orig[orig_index]=Alph[alphabet_Index]then begin codiert:=codiert+Alph[alphabet_index + bewegen mod(Length(Alph)div 2)]; //eckige Klammer: spricht jedes Zeichen einzeln an isInAlphabet:=true; end else if orig[orig_index]=upcase(Alph[alphabet_index]) then begin codiert:= codiert+UpCase(Alph[alphabet_index+bewegen mod(Length(Alph) div 2)]); IsInAlphabet:=true; end; if isInAlphabet = false then codiert:=codiert+orig[orig_index]; end; result:=codiert; end; end. |
Re: Problem bei Verschlüsselungsprogramm
Ich bin nicht Delphi Profi aber vielleicht könnte es sein das hier unten an then ein begin fehlt?
Delphi-Quellcode:
ich hoffe konnte dir helfen
if isInAlphabet = false then
codiert:=codiert+orig[orig_index]; |
Re: Problem bei Verschlüsselungsprogramm
Bei nur einer Anweisungszeile brauche ich doch kein begin, oder?
Das war jedenfalls auch nicht der Fehler - trotzdem danke! |
Re: Problem bei Verschlüsselungsprogramm
Hallo Firefly,
"Allerdings funktioniert das Ganze nicht!" :glaskugel: Was funktioniert nicht? Das geht doch auch eine Winzigkeit genauer, oder? Ansonsten nehme ich an, dass die Wäsche nicht weich wird -> nimm halt Weichspüler, dann funktionierts :mrgreen: |
Re: Problem bei Verschlüsselungsprogramm
Gibts Debugger-Meldungen oder hat der Ablauf nen Fehler?
Ehrlich gesagt versteh ich nicht warum du dir das so kompliziert machst Caesar ist jetzt wirklich nicht so schwer und das kann man auch in ein paar viele Zeilen weniger fassen... |
Re: Problem bei Verschlüsselungsprogramm
Immer wenn man ein Problem hat, sollte man es in kleinere Teilprobleme zerlegen.
(sehr wichtige Regel für Programmierer, bitte dauerhaft im Gehirn abspeichern) Ein Teilproblem beim Caesarchiffre ist die Verschiebung eines einzigen Zeichens. Dazu würde ich eine eigene Methode schreiben:
Delphi-Quellcode:
Wenn z.B. der Buchstabe 'f' vorliegt und die distanz gleich 3 beträgt, dann muss 'i' zurückkommen.
function TCaesar.SchiebeZeichen(c:Char; distanz:integer):Char;
begin // ??? dein Job end; Dabei muss man speziell beim Überlauf etwas aufpassen. Überlege Dir, ob du nicht zwei Funktionen schreibst wegen der Verschiebung in verschiedene Richtungen. Wenn du dieses Teilproblem gelöst hast, ist der Rest ganz easy. |
Re: Problem bei Verschlüsselungsprogramm
Naja so ungefähr hatte ich mir das vorgestellt:
Delphi-Quellcode:
Vielleicht bringts dir was.
function TCaesar.EnCode(Text: string; Schl: byte): string;
VAR i: integer; klartext, geheimtext : string; code: integer; CONST alphabet = ['a'..'z']; BEGIN geheimtext := ''; klartext := AnsiLowerCase(Text); //Umwandlung in Kleinbuchstaben for i := 1 to length(klartext) do //Jedes Zeichen durchgehen begin code := ord(klartext[i]); //ASCII-Code ermitteln if klartext[i] in alphabet then //nur verschieben, wenn Buchstabe begin inc(code,Schl); //Verschiebung while code > 122 do dec(code,26); //damit im Buchstabenbereich end; geheimtext := geheimtext + chr(code); end; Result := geheimtext; END; lg fishly |
Re: Problem bei Verschlüsselungsprogramm
Zitat:
Du möchtest doch etwas wissen, aber du sagst nicht, WAS nicht funktioniert. WO hakt es. WIE macht sich der Fehler bemerkbar? UNS bringt das generell nichts, nur dir kann geholfen werden, wenn... |
Re: Problem bei Verschlüsselungsprogramm
Zitat:
Also im Quelltext sind scheinbar keine Fehler, er codiert nur nicht. Finde ich irgendwie merkwürdig... :/ Aber ich werde jetzt mal das von fishly probieren - danke schön! (: |
Re: Problem bei Verschlüsselungsprogramm
Aaalso das ganze funktionier mittlerweile ganz gut,
bloß geht das "if klartext[i] in alphabet then" nicht. gibts da eine alternative? vielleicht eine, die meine variable alphabet von oben beeinhaltet? die hier:
Delphi-Quellcode:
Die variable besteht ja quasi zweimal aus dem alphabet, aber ich krieg es nicht hin, dass die encode funktion irgendwie überprüft, ob der buchstabe der reingeht auch in dieser variable vorkommt!
constructor TCaesar.Create;
var i:Char; begin Alph:=' '; for i:= 'a' to 'z' do begin Alph:=Alph+i; Alph:=Alph+Alph; end; inherited Create; end; ich hatte schon überlegt das ganze in einer schleife laufen zu lassen und dann halt jeden buchstaben einzeln über den index anszusprechen und zu vergleichen. aber das geht irgendwie nicht, weil ich wollte das mit "if klartext[i] = alphabet[i]" machen, aber dann guckt der ja nicht alle buchstaben durch. Ich hab das auch schon mit "if klartext[i] = alphabet[1] or alphabet [2].... or alphabet[26]" probiert, aber das geht scheinbar auch nicht, also syntaktisch. fällt euch da was ein? und "AnsiLowerCase" geht auch nicht, hab' jetzt UpCase genommen. muss ich dann in Encode noch was ändern? danke schonmal für eure ganze hilfe! (: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz