Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Werte vergleichen (https://www.delphipraxis.net/81924-werte-vergleichen.html)

Sierra 5. Dez 2006 12:56


Werte vergleichen
 
Hi!
Ich versuche zwei Strings zu vergleichen und zwar Buchstabe um Buchstabe.
Das heißt, wenn ich zum Beispiel "Test" mit "Key" vergleichen will, soll erst "T" mit "K" verglichen werden und so weiter.
Ich habe da auch schonmal etwas programmiert, aber es funktioniert nicht, so wie ich es gerne hätte.

Delphi-Quellcode:
for i:=1 to ord(length(zPlaintext[i])) do
    begin
      j:=i mod ord(length(zSchluessel[i]));
      ...
    end;
Vielen Dank.

gmc616 5. Dez 2006 13:05

Re: Werte vergleichen
 
Zitat:

Zitat von Sierra
Ich habe da auch schonmal etwas programmiert, aber es funkttioniert nicht, so wie ich es gerne hätte.

Das kann ich mir vorstellen.

Was soll das?
Delphi-Quellcode:
for i:=1 to ord(length(zPlaintext[i])) do
korrekter Weise.
Delphi-Quellcode:
for i:=1 to length(zPlaintext) do
Was soll die Schleife überhaupt bewirken ?? *verwirrtichbin*

mkinzler 5. Dez 2006 13:11

Re: Werte vergleichen
 
Delphi-Quellcode:
for i = 1to length( <kleiner String>) do
    if zPlaintext[i] = zSchluessel[i] then ...

Sierra 5. Dez 2006 13:15

Re: Werte vergleichen
 
Ich weiß schon, dass es eigentlich

Delphi-Quellcode:
for i:=1 to length(zPlaintext) do
heißen müsste.
Jedoch möchte ich gerne die ASCII-Werte der beiden Buchstaben vergleichen.
Das heißt, dass ich auch nicht einfach die beiden Werte gleichsetzen kann, oder?

mkinzler 5. Dez 2006 13:19

Re: Werte vergleichen
 
Ob du die chars oder die Ascii-Werte vergleichst ist doch egal oder?

Sierra 5. Dez 2006 13:23

Re: Werte vergleichen
 
Nein, leider nicht, denn ich programmiere den Vigenère Algorithmus.
Nur an dieser Stelle gibt es noch ein Problem.

Delphi-Quellcode:
procedure TVigenere.Verschluesseln(pPlaintext, pSchluessel: String);
var i, j, k: integer;
    lBuchstabe: char;
begin
  zPlaintext:=pPlaintext;
  zSchluessel:=pSchluessel;
  zCiphertext:='';
  for i:=1 to ord(length(zPlaintext[i])) do
    begin
      j:=i mod ord(length(zSchluessel[i]));
      k:=(i+j) mod 26;
      lBuchstabe:=(Chr(97+k));
      zCiphertext:=zCiphertext+lBuchstabe;
    end;
end;

gmc616 5. Dez 2006 13:32

Re: Werte vergleichen
 
Okay, vom Vigenère Algorithmus verstehe ich nix.

Trotzdem kommt mir die Zeile
Delphi-Quellcode:
for i:=1 to ord(length(zPlaintext[i])) do
eigenartig vor.

Du lässt dir den Ordinalwert von der Länge eines Zeichens wieder geben. Das ist i.a.R. = 1!
Das heißt, deine Schleife wird nur einmal durchlaufen. Soll das so sein? Wozu dann die Schleife ?? :gruebel:

Sierra 5. Dez 2006 13:36

Re: Werte vergleichen
 
Du hast Recht.
Danke.
Aber wie mache ich das denn jetzt?
Wie gesagt, jeder Durchlauf muss einzeln jeden Buchstaben von "zPlaintext", mit "zSchluessel" vergleichen.
Um nun den verschlüsselten Wert zu erhalten, brauche ich nunmal den Ordinalwert, den ich plus 97 (ASCII für "a") rechnen muss.

Sierra 5. Dez 2006 13:38

Re: Werte vergleichen
 
Man muss ja bedenken, dass man

Delphi-Quellcode:
k:=(i+j) mod 26;
rechnet.
Ein Beispiel:

Ich verschlüssele "t" mit "k".
Also (19+10) mod 26=3.
Danach rechnet man diesen Wert plus 97.
97+3=100.

Und 100 ist nun gleich "d" (ASCII).
Soweit so gut, nur komme ich durch i und j eben nicht auf (in diesem Fall) 19 und 10.

Klaus01 5. Dez 2006 13:41

Re: Werte vergleichen
 
Delphi-Quellcode:
procedure TVigenere.Verschluesseln(pPlaintext, pSchluessel: String);
var i, j, k: integer;
    lBuchstabe: char;
begin
  zPlaintext:=pPlaintext;
  zSchluessel:=pSchluessel;
  zCiphertext:='';
  for i:=1 to length(zPlaintext) do
    begin
      j:=i mod ord(zSchluessel[i]); // ausgebessert
      k:=(i+j) mod 26;
      lBuchstabe:=(Chr(97+k));
      zCiphertext:=zCiphertext+lBuchstabe;
    end;
end;
Sollte doch so, gehen oder?
Du solltest dann nur sicherstellen, daß der Schlüssel die gleiche
Länge wie der Klartext hat.


edit: ausgebessert

edit2: Ist bei Dir A = 0 B = 1 ... und a = 0 und b = 1 ...?
Dann mußt Du von allen ord-Werten den Ordinalwert von A abziehen, dann solltest Du auf Deine
Werte kommen.

edit3: ord(t) != 19 und ord(k) != 10, ord gibt Dir den Ascii Wert eines Zeichens zurück.
19= ord(t) - ord(a);


Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr.
Seite 1 von 2  1 2      

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