Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   SIMPEL Verschlüsselungs-Array-Problem mit Matritzen (https://www.delphipraxis.net/172069-simpel-verschluesselungs-array-problem-mit-matritzen.html)

Spytrycer 11. Dez 2012 20:07

SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
Hey Leute,

Ich habe seit kurzer Zeit ein kleines Problem.
Ich habe in der Schule Informatik Diff. Kurs, und arbeite dort mit Delphi,
Mein wissen ist noch sehr begrenzt, also habt bitte nachsicht mit mir.

Also Mein Problem:

Ich muss ein Programm schreiben bei dem der Benutzer in ein Edit Feld einen erstmal
auf 10 Zeichen begrentzten Text eingibt, und dann in 4 andere Edit-Felder 4 Positive oder
Negative Zahlen.
Hier Hake ICH:

Das Programm dürfen wir in 2 Variationen schreiben.
1. ist nicht ganz so gut, aber einfach, denn man muss keine arrays verwenden ist aber viel Schreibarbeit
2.: Die möchte ihc nun (hab 1 schon) machen. Hier muss ich aber Den im Edit feld eingegebenen Text als
Ascii Wert in die Boxen eines Arrays eingeben, da aber das Programm erweiterbar sein muss möchte ich nicht
alles einzeln schreiben.
Ich muss hierfür also eine For-Schlife nehmen, aber wie mache ich das??

Spytrycer 11. Dez 2012 20:22

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
Eine Frage, ich schreib mal kurz das was bei mir bis jetzt Klappt:

type
TForm1 = class(TForm)
EdEingabe: TEdit;
EdMatrixK1: TEdit;
EdMatrixK2: TEdit;
EdMatrixK3: TEdit;
EdMatrixK4: TEdit;
EdAusgabe: TEdit;
BtVersch: TButton;
procedure BtVerschClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;


var
Form1: TForm1;
MatrixV : Integer;
MatrixK1, MatrixK2, MatrixK3, MatrixK4: Integer;
MatrixN: Integer;


implementation

{$R *.dfm}



procedure TForm1.BtVerschClick(Sender: TObject);
const Max = 10;
var i: Integer;
f: Integer;
Asc: Array[1..Max] of Integer;
Zw : Array[1..Max] of String;
begin
for i := 1 to Length(EdEingabe.Text) do
Asc[i] := ord(EdEingabe.text[i]);
MatrixK1 := StrToInt (EdMatrixK1.text);
MatrixK2 := StrToInt (EdMatrixK2.text);
MatrixK3 := StrToInt (EdMatrixK3.text);
MatrixK4 := StrToInt (EdMatrixK4.Text);
EdAusgabe.Text := IntToStr (Asc[1]);
end;




Würde das Klappen?

Bjoerk 11. Dez 2012 21:08

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
Hallo Dave,

und herzlich willkommen hier. :dp:

Ich hab' leider nicht gerafft, was das Programm machen soll.

Sowas?

Oder poste mal Variante 1.

Den Code so reinstellen (ohne die *):

[*Delphi]
[*/Delphi]

Sir Rufo 11. Dez 2012 23:32

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
Bitte lies dir deinen Beitrag nochmal durch und versuche dich dabei in unsere Lage zu versetzen.
Dann ändere den Beitrag so, dass auch ein jeder hier verstehen kann, was du eigentlich möchtest.

Die Qualität der Rechtschreibung meine ich dabei nicht, obwohl es dann auch noch hübscher aussehen würde.

Kleiner Tipp:

Nach dem Absenden sich nochmal entspannt zurücklehnen und den Beitrag lesen.
Unter dem Beitrag ist dann ein Button um diesen nochmals zu bearbeiten ;)

Blup 14. Dez 2012 14:22

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
Zuerst wird man sich darüber klar, was man eigentlich machen will z.B.:

http://www.lands.de/mathe/verschl.htm

Dann bestimmt man welche Parameter nötig sind, welche Rückgabewerte man erwartet und trennt die Funktion von der Oberfläche:
Delphi-Quellcode:
procedure TForm1.BtVerschClick(Sender: TObject);
begin
  EdAusgabe.Text := FunktionsNameDerBeschreibtWasGetanWird(
    EdEingabe.Text,
    StrToInt(EdMatrixK1.Text),
    StrToInt(EdMatrixK2.Text),
    StrToInt(EdMatrixK3.Text),
    StrToInt(EdMatrixK4.Text));
end;

function FunktionsNameDerBeschreibtWasGetanWird(AValue: string; MatrixK1, MatrixK2, MatrixK3, MatrixK4: Integer): string;
var
  MSource: array of array[0..1] of Integer; // 2 Zeilen, beliebige Anzahl Spalten
  n, nMax, x, y: Integer;
begin
  {Anzahl Spalten der Ausgangsmatrix bestimmen}
  nMax := Length(AValue);
  SetLength(MSource, (nMax + 1) div 2);

  {Ausgangsmatrix füllen}
  n := 1;
  for x := 0 to High(MSource) do
  begin
    for y := 0 to 1 do
    begin
      if n <= nMax then
        MSource[x,y] := Ord(AValue[n])
      else
        MSource[x,y] := 30;
      Inc(n);
    end;
  end;
           
  {...}

end;

Spytrycer 16. Dez 2012 11:22

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
@ Sir Rufo

Danke, das programm soll so in etwa das leisten. Also die
Ascii werte eines Zeichens mit einer Verschlüsselungsmatrix Verschlüsseln etwa so:

MatrixK1 MatrixK2 Nachricht(Asciiwerte) div2 Versch werte
* =
MatrixK3 MatrixK4 Nachricht(Asciiwerte) div2 Versch werte

KLARTEXT:

wenn mann KK eingibt und als MatrixK werte 1,2,3,4 sieht das 1 Dimensional so aus

1 * 75(K) + 2 * 75(K) = Versch1
3 * 75(K2) + 4 * 75(K2) = versch2

VerschString := IntToStr (Versch1)+(Versch2) // das ganze nur halt wenn versch ein array ist, und so mit nur einem versch
// und als for-Variabel

for i := Length(EdEingabe.text) do
Verschwert := (Verschwert) + (Versch[i]);
;

Klar?





habs jetzt geschafft zum glück auch noch anders zu lösen, hier die lösung:


Delphi-Quellcode:
procedure TForm1.BtVerschClick(Sender: TObject);
const Max = 10;

var i: Integer;
     f: Integer;
     ff: Integer;
     gg: Integer;
     h: Integer;
     Asc: Array[1..Max] of Integer;
     Zw : array[1..Max] of String;
     MatrixV : array[1..Max] of Integer;
     g : integer;
       MatrixK1, MatrixK2, MatrixK3, MatrixK4: Integer;
  MatrixN: Integer;
  Ausgabe: String;

     begin
try
Ausgabe := '';



MatrixK1 := StrToInt (EdMatrixK1.text);
if MatrixK1 = 0 then
showmessage ('MatrixK1 darf nicht 0 sein!');

MatrixK2 := StrToInt (EdMatrixK2.text);
if MatrixK2 = 0 then
showmessage ('MatrixK2 darf nicht 0 sein!');

MatrixK3 := StrToInt (EdMatrixK3.text);
if MatrixK3 = 0 then
showmessage ('MatrixK3 darf nicht 0 sein!');

MatrixK4 := StrToInt (EdMatrixK4.Text);
if MatrixK4 = 0 then
showmessage ('MatrixK4 darf nicht 0 sein!');


for i := 1 to Length(EdEingabe.Text) do
Asc[i] := ord(EdEingabe.text[i]);
;
for f := 1 to Length(EdEingabe.Text) div 2 do
MatrixV[f] := (MatrixK1 * Asc[f]) + (MatrixK2 * Asc[f]);
;
for g := 1 to length(EdEingabe.text) div 2 do
Zw[g] := IntToStr(MatrixV[g]);
;
for ff := Length(EdEingabe.text) div 2 to Length(EdEingabe.Text) do
MatrixV[ff] := (MatrixK4 * Asc[ff]) + (MatrixK4 * Asc[ff]);
;
for gg := Length(EdEingabe.text) div 2 to Length(EdEingabe.Text) do
Zw[gg] := IntToStr(MatrixV[gg])
;
for h := 1 to length(EdEingabe.text) do
Ausgabe := (Ausgabe) + (Zw[h]) + (' ');
;
if MatrixK1 = 0 then
EdVersch.Text := ''
else
if MatrixK2 = 0 then
EdVersch.Text := ''
else
if MatrixK3 = 0 then
EdVersch.Text := ''
else
if MatrixK4 = 0 then
EdVersch.Text := ''
else
EdVersch.Text := (Ausgabe);



except
showmessage ('Fehler bitte nur Buchstaben eingeben');
end;
end;




Jetzt habe ich nurnoch das Problem, das ich nun das was herauskommt z.B.

|17812 324 241242 212 |
Jetzt entschlüsseln will.

Dazu muss ich jetzt die Zahl bis einschließlich dem Leerzeichens in ein array zuweisen.
Aber wie ich das mache weiß ich nicht.
So viel hab ich schon:

Delphi-Quellcode:
procedure TForm1.BtEntClick(Sender: TObject);
const max = 10;
var Zw: Array[1..max] of String;
    Zw2: Array[1..max] of String;
    Asc2: Array[1..max] of Integer;
    Asc: Array[1..max] of Integer;
    i,g,h,ii: Integer;
    Ausgabe: String;
begin

for i := 1 to length(EdVersch.Text) do
Zw[i] := (EdVErsch.Text[i]);            //hier der String hier muss das so reingeschrieben werden.
;



EdEnt.text := (Zw[1]);  //Probe
end;

Bjoerk 16. Dez 2012 19:13

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
Das mit der Matrix hat euer Lehrer wohl etwas anders gemeint, du verwendest ja gar keine? :wink:

Delphi-Quellcode:
type
  TChiffreMatrix = array [1..2, 1..2] of double; // falls Array bei 1 beginnen soll
  TTextMatrix = array [1..2, 1..5] of double; // für max. 10 Zeichen

 ...

var
  Chiffre, InversChiffre: TChiffreMatrix;
  Text, Decrypt, Encrypt: TTextMatrix;
  S1, S2: string;
Und dann eben die Matritzenmultiplikationen durchführen:

Delphi-Quellcode:
  S1 := 'Test';

  // Chiffre setzen
  Chiffre := ...

  // Text in Matrix umwandeln
  Text := TextToMatrix(S1);

  // Verschlüsseln
  Encrypt := MultAB(Chiffre, Text);

  // Entschlüsseln
  InversChiffre := MatrixInversion(Chiffre);
  Decrypt := MultAB(InversChiffre, Encrypt);

  // Matrix in Text umwandeln
  S2 := MatrixToText(Decrypt);

  // Kontrolle
  S1 = S2 ?
  Text = Decrypt ?

Spytrycer 16. Dez 2012 20:16

AW: SIMPEL Verschlüsselungs-Array-Problem mit Matritzen
 
WOW ähm.

Das ist ein wenig zu kompliziert, und die verschlüssekung klappt bei mir.
Wass mir fehlt ist das ich halt jetzt aus der Edit komponente nur die Zahl bis einschließlich zum leerzeichen
in ein arrayfeld packe, und das leerzeichen rauslösche.


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