AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Werte vergleichen

Ein Thema von Sierra · begonnen am 5. Dez 2006 · letzter Beitrag vom 6. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sierra

Registriert seit: 3. Sep 2005
99 Beiträge
 
#1

Werte vergleichen

  Alt 5. Dez 2006, 12:56
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.
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:05
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? for i:=1 to ord(length(zPlaintext[i])) do korrekter Weise.for i:=1 to length(zPlaintext) do Was soll die Schleife überhaupt bewirken ?? *verwirrtichbin*
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:11
Delphi-Quellcode:
for i = 1to length( <kleiner String>) do
    if zPlaintext[i] = zSchluessel[i] then ...
Markus Kinzler
  Mit Zitat antworten Zitat
Sierra

Registriert seit: 3. Sep 2005
99 Beiträge
 
#4

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:15
Ich weiß schon, dass es eigentlich

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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:19
Ob du die chars oder die Ascii-Werte vergleichst ist doch egal oder?
Markus Kinzler
  Mit Zitat antworten Zitat
Sierra

Registriert seit: 3. Sep 2005
99 Beiträge
 
#6

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:23
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;
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:32
Okay, vom Vigenère Algorithmus verstehe ich nix.

Trotzdem kommt mir die Zeilefor 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 ??
  Mit Zitat antworten Zitat
Sierra

Registriert seit: 3. Sep 2005
99 Beiträge
 
#8

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:36
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.
  Mit Zitat antworten Zitat
Sierra

Registriert seit: 3. Sep 2005
99 Beiträge
 
#9

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:38
Man muss ja bedenken, dass man

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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Werte vergleichen

  Alt 5. Dez 2006, 13:41
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
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:02 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