Autor |
Beitrag |
Seyzza
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 03.05.11 22:25
Hallo
ich muss in der Schule ein Referat in Informatik halten über die Skytale-Verschlüsselung.
Nun habe ich das Problem, dass ich dies auch anhand Delphi zeigen muss und im Moment nicht mehr weiterkomm.
Ich habe vom Lehrer schon einen ungefähren Ansatz bekommen, weiß aber noch nicht wie ich das mach, dass es dann wieder von vorne beginnt zu zählen (also dann mit dem 2. Buchstaben anfängt usw) und wie ich das vollständige Ergebnis dann in das Editfenster unten bekomme.
Außerdem würde ich danach auch noch etwas brauchen, um diesen Satz wiederrum zu entschlüsseln.
Hier mal ein ungefährer Ansatz:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| var Form1: TForm1; ste, sta:string; i,j,k,n,l:integer;
implementation
{$R *.lfm}
procedure TForm1.RolleClick(Sender: TObject); begin ste:=Edit1.Text; n:=StrToInt(Edit3.Text); l:=length(ste); sta:=ste;
i:=l; for k:=1 to n do begin j:=k; while j<l+1 do begin
for i:=1 to 1 do sta[i]:=ste[j];
i:=i+1; j:=j+n;
end; end; end; |
Das heißt als n kann ich die Zahl eingeben, sozusagen als "Dicke" der Skytale-Rolle (oder in diesem Fall der wievielte Buchstabe immer genommen wird  ).
Ich hoff jemand kann mir helfen
Grüße.
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.05.11 01:04
Moin und  im Forum!
Seyzza hat folgendes geschrieben : | über die Skytale-Verschlüsselung.
Nun habe ich das Problem, dass ich dies auch anhand Delphi zeigen muss und im Moment nicht mehr weiterkomm. |
Immer dann, wenn man nicht mehr weiter kommt, weil man den Faden verloren hat, sollte man einen Schritt zurück gehen (in deinem Fall den Computer und Delphi "weglegen") und sich erstmal klar machen, was genau man denn eigentlich tun will.
Auf dein konkretes Problem bezogen: beschreib doch mal mit Worten (und nicht gleich in Delphi-Code), wie denn dieses Verschlüsselungsverfahren "funktioniert". Am Besten machst du das mal an einem kleinen Beispiel:
Klartext: "Das ist ein Test."
Rollendicke: 3 Zeichen
Beschreib doch mal umgangssprachlich, nicht gleich als Programm, was jetzt genau zu tun ist. Du kannst dir ja vorstellen, du solltest das Verfahren jemandem erklären, der noch nie davon gehört hat, also auch nicht weiß, worauf das hinauslaufen soll.
Wenn du das fertig hast - optimal hier in deinem nächsten Posting - dann schauen wir uns an, wie man das programmiert.
Wenn ich mir so den Code ansehe, dann fürchte ich nämlich, dass du nicht die leiseste Ahnung hast, was da eigentlich passiert, oder?
Und noch der Standard-Satz: wir helfen dir hier gerne das Problem zu verstehen und zu lösen, aber genau so klar ist auch, dass es für Hausaufgaben keine komplett fertigen Quelltexte gibt.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Seyzza 
Hält's aus hier
Beiträge: 4
|
Verfasst: Mi 04.05.11 13:31
Hallo  ,
also Syktale ist ja im Allgemeinen ein Verschlüsselungsverfahren, bei dem z.B. ein Streifen Papier über eine Rolle gebunden wird und dann quer ein Wort darauf geschrieben wird, wenn man diesen Streifen jetzt abnimmt hat man je nach Dicke der Rolle eine bestimmte Reihenfolge von Buchstaben.
Als Beispiel:
DasIstEinTest
Die Dicke (in dem Quelltext als n beschrieben) ist in diesem Fall z.B. 4, also n=4 (wird dann im EditFenster eingegeben)
Dann würde man jede 4. Buchstaben nehmen, das heißt man fängt mit dem ersten an (das D), dann +4 = den 5. Buchstaben (s) und im Quelltext steht ja auch, dass das aber nur solange geht wie auch der string lang ist, deswegen j>l+1 (damit der letzte buchstabe auch noch sicher drauf ist)
Dann sollte das Programm beim 2. Buchstaben von vorne anfangen, das heißt mit dem a und dann wieder 4 Buchstaben noch weiter (t) usw bis alle Buchstaben abgelaufen sind.
Der Satz würde dann so heißen:
DsntatTsEeIis
Das wäre die Verschlüsselung für den Satz
Grüße.
edit: zum besseren Verständnis hab ich noch ein paint-Bild gemacht, damit man sich das ungefähr vorstellen kann
Moderiert von Narses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.05.11 15:14
Moin!
Seyzza hat folgendes geschrieben : | Dann würde man jede 4. Buchstaben nehmen, das heißt man fängt mit dem ersten an (das D), dann +4 = den 5. Buchstaben (s) und im Quelltext steht ja auch, dass das aber nur solange geht wie auch der string lang ist, deswegen j>l+1 (damit der letzte buchstabe auch noch sicher drauf ist) |
Gut, ordnen wir das mal ein bischen in Form von Pseudocode:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| n := RollendurchmesserVomBenutzerLesen(); Eingabe := LeseTextVomBenutzerUndBereiteIhnAuf(); Ausgabe := nichts;
i := 1; Wiederhole solange ( i <= Länge(Eingabe) ) anfang Ausgabe := Ausgabe +Eingabe(i); i := i +n; ende-wiederhole; ZeigeAn(Ausgabe); | So, damit kriegen wir einen Durchlauf mit Abstand n hin.
Seyzza hat folgendes geschrieben : | Dann sollte das Programm beim 2. Buchstaben von vorne anfangen, das heißt mit dem a und dann wieder 4 Buchstaben noch weiter (t) usw bis alle Buchstaben abgelaufen sind. |
"Wieder vorne anfangen" geht ja nicht wirklich, sowas machen wir beim Comupter mit einer Schleife, das solltest du ja schon kennen. Also, wieder etwas Pseudocode:
Quelltext 1: 2: 3:
| Für j setze der Reihen nach ein ( 1 bis n ) anfang // hier muss jetzt der Code von oben rein, das soll ja wiederholt werden ende-Für; | Achtung, es gibt da noch eine kleine Stolperfalle: Die Ausgabe des verschlüsselten Textes muss natürlich noch an das Ende der 2. Schleife verschoben werden, sonst kriegst du auch die Zwischenergebnisse angezeigt (was zunächst mal ja nicht schlecht ist).  Weiterhin: in der ersten Schleife fängst du immer fest bei 1 an, das muss beim Einsetzen in die zweite, äußere Schleife natürlich noch angepasst werden.
Dann probier mal, ob du das hinkriegst. Entweder in Pseudocode oder wenn du kannst, auch gleich in Delphi-Code. Danach sehen wir weiter.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Seyzza 
Hält's aus hier
Beiträge: 4
|
Verfasst: Mi 04.05.11 15:33
Hallo,
was für einen Befehl brauch ich denn da um dann das letztendliche Ergebnis auszugeben?
Und wie mach ich dann das mit dem wiederholen der Schleife nur immer ein Buchstabe weiter?
i+1 *n irgendwie?
Grüße.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.05.11 17:04
Moin!
Seyzza hat folgendes geschrieben : | was für einen Befehl brauch ich denn da um dann das letztendliche Ergebnis auszugeben? |
OK, direkt Delphi-Code ist definitiv zu schwer für dich, also erstmal Pseudocode.
Ich hatte mir das so vorgestellt: du fügst die beiden Teile Pseudocode oben zu einem zusammen und dann schauen wir mal, ob das funktioniert, was da rausgekommen ist. Dann übersetzen wir den Pseudocode in Delphi.
Seyzza hat folgendes geschrieben : | Und wie mach ich dann das mit dem wiederholen der Schleife nur immer ein Buchstabe weiter?
i+1 *n irgendwie? |
Du bist sicher, du hast meinen letzen Beitrag gelesen (und verstanden)?  Wenn du was nicht verstanden hast, was genau?
Ich will keine falschen Erwartungen wecken: du wirst von mir keinen fertigen Quelltext, ja nicht mal Teile kriegen. Wir entwickeln das zusammen, so dass du auch verstanden hast, was du da tust. Eine Alternative dazu sehe ich nicht. Falls du dir eher vorgestellt hast, du fragst mal kurz nach, ob dir das einer schnell fertig macht und du greifst das ab, dann solltest du besser in einem anderen Forum nochmal eine Anfrage starten.  (ist nicht persönlich gemeint  )
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Seyzza 
Hält's aus hier
Beiträge: 4
|
Verfasst: Mi 04.05.11 17:31
Hey,
verstanden habe ich das ganze schon, auch den Quelltext der oben steht. Ich weiß nur eben nicht wie ich den Rest in nen Delphi-Code kriege.
Klar, in dem unteren Edit.Fenster muss nachher die Reihenfolge der Buchstaben stehn nach der Skytale-Verschlüsselung. Das heißt ich muss irgendeinen Befehl eingeben der dann Edit2.Text:= irgendwas heißt, das wäre ja dann das Ergbenis nachdem das Pogramm durchgelaufen ist mit all den Befehlen.
Dass man da nicht von vorne anfängt ist mir auch klar  ich meinte mit wiederholen eher die Schleifen einbauen, ich weiß nur nicht genau wie ich das mach, dass die Schleife nach jedem Durchgang einen Buchstaben weiter hinten anfängt. Das passiert ja solange bis die Zahl n dann erreicht ist, in diesem Fall würde es ja 4 Durchläufe durch den Satz geben.
Und dann eben wie oben gesagt wie ich dann eben genau diese Buchstaben in das Edit2 Fenster unten reinbringe.
Grüße.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.05.11 21:52
Moin!
Seyzza hat folgendes geschrieben : | verstanden habe ich das ganze schon, auch den Quelltext der oben steht. |
Fein, dann sollte es ja eine ganz einfache Sache sein, die beiden Pseudo-Code-Stücke aus meinem Beitrag oben zu einem zusammenzufassen. Mach das doch mal eben bitte.
Seyzza hat folgendes geschrieben : | Ich weiß nur eben nicht wie ich den Rest in nen Delphi-Code kriege. |
Wenn du den Pseudo-Code fertig hast, übersetzen wir es nach Delphi.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
|