Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Vigenere macht Macken ;) (https://www.delphipraxis.net/147398-vigenere-macht-macken-%3B.html)

xv300 7. Feb 2010 17:09


Vigenere macht Macken ;)
 
Hallo Ihr, hab grade einen Vigenere Code geschrieben, doch der macht noch eine komische Macke,
der dritte Buchstabe wird nicht das was er sein soll, könnt Ihr vielleicht den Fehler finden,
ich such schon den ganzen Tag und finde GAR nix mehr....

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    BuQuadrat: TButton;
    SGQuadrat: TStringGrid;
    EdKlartext: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    EDKennwort: TEdit;
    Edpruef: TEdit;
    Buverschluesseln: TButton;
    Label4: TLabel;
    EdGeheim: TEdit;
    Bugeheim: TButton;
    procedure BuQuadratClick(Sender: TObject);
    procedure BuverschluesselnClick(Sender: TObject);
    procedure BugeheimClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  keynum: array[1..20]of integer;
  keyword:string;

implementation

{$R *.dfm}

procedure TForm1.BuQuadratClick(Sender: TObject);
Var C: char;
    i, j, Position, Nummer:integer;
begin
      for i := 0 to 25 do begin
        for j :=0 to 25 do begin
                           SGQuadrat.Cells[0,j] := IntToStr(j) ;
                           Position := 65 ;   // Buchstabe A = ASCII 65
                           Nummer := Position + i + j ; //  Verschiebung im Alphabet
                           if (Nummer > 90) then Nummer := Nummer-26 ; //falls zu groß, wieder auf Anfang
                           C := Chr(Nummer) ;
                           SGQuadrat.Cells[i+1,j] := c ;
                         end;
                        end;
            end;

procedure TForm1.BuverschluesselnClick(Sender: TObject);
Var keystr:string;
    c:char;
    i:integer;


begin
    keystr:='';
    for i:= 1 to 20 do keynum[i]:=0;

    keyword:= Edkennwort.Text;
    for i:= 1 to length(keyword) do begin
                                       c:=keyword[i];
                                       keynum[i]:=ord(c)-65;
                                       keystr:=keystr+IntToStr(keynum[i])+' ';
                                    end;
    Edpruef.text:= UpperCase(keystr);


end;



procedure TForm1.BugeheimClick(Sender: TObject);
Var klartext,code:string;
    i,laenge,keypos,nummer:integer;

begin
 klartext:= UpperCase(EdKlartext.text);
 laenge:=length(keyword);

 for i:= 1 to length(klartext) do begin
                                    keypos := i mod laenge;
                                    nummer := ord(klartext[i])+keynum[keypos];
                                    if nummer >90 then nummer:= nummer-26;
                                    code:= code + chr(nummer);
                                  end;
 Edgeheim.text:= UpperCase(code);


end;


end.

xv300 7. Feb 2010 18:02

Re: Vigenere macht Macken ;)
 
Hat denn niemand ne Lösung, bräuchte das für morgen...

fkerber 7. Feb 2010 18:10

Re: Vigenere macht Macken ;)
 
Hi!

Bitte unterlasse das Pushen innerhalb von 24h.


Grüße, Frederic

gammatester 7. Feb 2010 18:29

Re: Vigenere macht Macken ;)
 
Ein Anweisung
Delphi-Quellcode:
code := '';
in TForm1.BugeheimClick könnte nicht schaden.

xv300 7. Feb 2010 18:57

Re: Vigenere macht Macken ;)
 
Hilft leider auch ned!
Das größte Problem ist eigentlich, dass bei mir die Leerzeichen auch verschlüsselt werden und das will ich nicht.
Und das immer der letzte Buchstabe falsch verschlüsselt wird!

gammatester 7. Feb 2010 20:36

Re: Vigenere macht Macken ;)
 
In TForm1.BugeheimClick: keypos := i mod laenge wird 0, wenn i >= laenge. Die untere Grenze von keynum: array[1..20] of integer; ist 1. Wenn keypos=0 ist, gibt es (wenn Du mit Rangecheck arbeitest einen Fehler) oder Unsinn (wenn nicht). Auf jeden Fall ändern: Entweder untere Grenze = 0 oder keypos := 1 + i mod laenge

xv300 10. Feb 2010 09:20

Re: Vigenere macht Macken ;)
 
Dankeschön dafür!
Funktioniert jetzt größten Teils...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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