AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem bei Verschlüsselungsprogramm

Ein Thema von Firefly · begonnen am 17. Mär 2010 · letzter Beitrag vom 23. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2   
Firefly

Registriert seit: 17. Mär 2010
4 Beiträge
 
#1

Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 19:21
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:= 'ato 'zdo 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.
  Mit Zitat antworten Zitat
wincompi5

Registriert seit: 14. Mär 2010
Ort: Schweiz
62 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 19:31
Ich bin nicht Delphi Profi aber vielleicht könnte es sein das hier unten an then ein begin fehlt?
Delphi-Quellcode:
if isInAlphabet = false then
       codiert:=codiert+orig[orig_index];
ich hoffe konnte dir helfen
  Mit Zitat antworten Zitat
Firefly

Registriert seit: 17. Mär 2010
4 Beiträge
 
#3

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 19:48
Bei nur einer Anweisungszeile brauche ich doch kein begin, oder?
Das war jedenfalls auch nicht der Fehler - trotzdem danke!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 20:00
Hallo Firefly,

"Allerdings funktioniert das Ganze nicht!"



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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#5

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 20:03
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...
never change a running system...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 20:10
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:
function TCaesar.SchiebeZeichen(c:Char; distanz:integer):Char;
begin
  // ??? dein Job
end;
Wenn z.B. der Buchstabe 'f' vorliegt und die distanz gleich 3 beträgt, dann muss 'i' zurückkommen.
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.
Andreas
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#7

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 20:15
Naja so ungefähr hatte ich mir das vorgestellt:

Delphi-Quellcode:
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;
Vielleicht bringts dir was.

lg fishly
never change a running system...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 20:18
Zitat von fishly:
Vielleicht bringts dir was.

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...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Firefly

Registriert seit: 17. Mär 2010
4 Beiträge
 
#9

Re: Problem bei Verschlüsselungsprogramm

  Alt 17. Mär 2010, 22:36
Zitat von fishly:
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...
Nein, keine Fehlermeldungen, bloß gibt er mit im Edit für die Ausgabe einfach das aus, was ich in das Edit für die Eingabe eingegeben habe.
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! (:
  Mit Zitat antworten Zitat
Firefly

Registriert seit: 17. Mär 2010
4 Beiträge
 
#10

Re: Problem bei Verschlüsselungsprogramm

  Alt 22. Mär 2010, 16:55
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:
constructor TCaesar.Create;
var i:Char;
begin
  Alph:=' ';
  for i:= 'ato 'zdo begin
    Alph:=Alph+i;
    Alph:=Alph+Alph;
  end;
  inherited Create;
end;
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!
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! (:
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz