![]() |
Matrix Verschlüsselung
Liste der Anhänge anzeigen (Anzahl: 1)
Huhu bin neu hier :D
Wir programmieren zur Zeit in der Schule ein Programm mit welchem man verschiedene Chiffren auf Texte anwenden kann. Grad bin ich dabei eine Matrix Verschlüsselung zu programmieren (Ein Text wird Zeilenweise in ein Array eingelesen und spaltenweise wieder ausgebeben).
Delphi-Quellcode:
Mein Problem liegt darin, dass beim Auslesen der Text nicht vollständig "umgewandelt" wird. Selbst mein Inf. Lehrer weiss nicht weiter. Ich hab schon das Programm schrittweise ausgeführt und dabei bemerkt, dass der Text in s2 vollständig ist jedoch nicht vollständig im Memo ausgegeben wird.
procedure matrix_ver;
const max=100; var s1,s2:string; i,k,j :integer; var Matrix : array[1..max,1..max]of char; begin s1:=Chiffre.Original_Text.Text; //Initialisieung der Variablen s2:=''; x:=trunc(sqrt(length(s1)))+1; k:=0; for j := 1 to 100 do for i := 1 to 100 do Matrix[i,j]:='#'; for j := 1 to x do // Einlesen des Textes ins Array for i := 1 to x do begin k:=k+1; Matrix[i,j]:=s1[k]; Chiffre.StringGrid1.Cells[i,j]:=s1[k]; // Test ob richtig Eingelesen end; for j := 1 to x do // Umgekehrtes Auslesen des Arrays for i := 1 to x do s2:=s2 + Matrix[j,i]; Chiffre.Verschluesselt_Text.Text:=s2; // Ausgabe in ein Memo end; Hoffe jemand kann mir helfen :?: Anbei ist noch Screenshot |
Re: Matrix Verschlüsselung
Du greifst auf Buchstaben hinter dem Stringende zu. Das kann nicht gut gehen ;)
Das erste Warnsignal sollten die Kästen in den Zellen des Stringgrids sein - das sind halt die Bytes die hinter dem String im Arbeitsspeicher stehen. Wenn du das ganze jetzt wieder ausliest, sind diese Zeichen nicht mehr am Ende sondern mittendrin. Und so wie das aussieht ist das 2. Zeichen der untersten Zeile ein Nullbyte, denn in der C++ Welt signalisieren Nullbytes das Ende eines Strings - und das Memo stellt nicht mehr Zeichen dar (da es ja denkt, der String ist zu Ende) |
Re: Matrix Verschlüsselung
das ist ja noch ein Problem ich hab ja vorher das Array initialisiert. Eigendlich sollten überall Rauten stehen bzw. eigendlich möchte ich da Leerzeichen drin haben. Und Stattdessen stehen halt da diese Nullbyte
|
Re: Matrix Verschlüsselung
Das Initialisieren kann gleich mit eingespart werden:
Delphi-Quellcode:
// Einlesen des Textes ins Array
k := 1; kmax := Length(s1); for j := 1 to x do begin for i := 1 to x do begin if k <= kmax then Matrix[i, j] := s1[k] else Matrix[i, j] := ' '; // oder '#' Chiffre.StringGrid1.Cells[i, j] := Matrix[i, j] // Test ob richtig Eingelesen k := k + 1; end; end; |
Re: Matrix Verschlüsselung
Liste der Anhänge anzeigen (Anzahl: 1)
danke für den Tip ;) Aber iwie hilft mir das noch nicht bei meinem Problem weiter
€: Hab den Code von Blub grob übernommen. Jedoch entstehen bei mir immer noch Nullbytes ...(siehe Anhang) |
Re: Matrix Verschlüsselung
:glaskugel: Mit "grob übernommen" kann zumindest ich nichts anfangen.
Bitte häng doch mal dein ganzes Projekt als Zip-Archiv an, den Teil zum Entschlüsseln haben wir noch gar nicht gesehen. Sollte eigentlich symmetrisch sein. Edit: Die Größe des Arrays wird falsch berechnet, wenn die Wurzel aus der Länge des Strings eine Ganzzahl ist.
Delphi-Quellcode:
Ein anderes Problem betrifft nicht das Verschlüsseln selbst, sonders das Speichern des Strings in einem Memo.
// falsch
// x:=trunc(sqrt(length(s1)))+1; // richtig if Length(s1) > 0 then x := Trunc(Sqrt(Length(s1) - 1)) + 1 else x := 0; Das Memo liefert als Text einen String mit Zeilenvorschüben die aus zwei nicht darstellbaren Zeichen CR + LF bestehen. Durch das Verschlüsseln werden diese Zeichen auseinander gerissen. Wird dieser Text dem Memo zugewiesen, verändert das Memo den Text, um diesen darstellen zu können. Also nicht den Text des Memos abfragen, um diesen zu dekodieren, sondern den kodierten Text in einer Variable zwischenspeichern. |
Re: Matrix Verschlüsselung
Liste der Anhänge anzeigen (Anzahl: 1)
Sry das ich jetzt erst wieder antworte aber hatte gestern keine Zeit mehr ;)
Hab jetzt mal das Projekt angehangen aber bitte nicht über meinen Stil meckern hab größtenteils noch nicht kommentiert außer den Part für die Matrix Verschlüsselung und n bisl von dem Rest. |
Re: Matrix Verschlüsselung
Liste der Anhänge anzeigen (Anzahl: 1)
Zu deinem Stil sollte ich besser nichts sagen...
Trotzdem kann ich mir grundsätzliche Hinweise nicht verkneifen. :warn: Funktionen haben Parameter und Rückgabewerte, alles darüber hinaus geht eine Funktion nichts an. Zugriffe auf globale Variablen in anderen Units sind unschön, Zugriffe auf Steuerelemente in fremden Formularen sind extrem ... Ich habe deshalb mal ein bischen drin rumgeändert, aber nicht gleich alle Units, die solltest du selbst überarbeiten. Ach ja, Matrix funktioniert jetzt natürlich. |
Re: Matrix Verschlüsselung
Danke für die Hinweise^^ Das Problem ist nur wir sind in der schule "nur" ein Grundkurs und haben es daher bisher nicht anders gelehrt bekommen. Deshalb versteh ich recht wenig davon, was du gecodet hast ^^
Aber werd es mir mal angucken und vll bleibt ja was hängen ;) |
Re: Matrix Verschlüsselung
Dann schick uns mal deinen Leerer vorbei, denn selbst in 'nem Grundgurs sollte man sowas gleich "richtig" lernen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz