Autor Beitrag
Seyzza
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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}

{ TForm1 }

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 user profile iconNarses: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.05.11 01:04 
Moin und :welcome: im Forum!

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
ü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. :idea: ;)
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. :zustimm:

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? :zwinker:

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. :P

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Seyzza Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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 :D

Skytale

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.05.11 15:14 
Moin!

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
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: ;)
ausblenden 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.

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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). :idea: 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. :zustimm:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Seyzza Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.05.11 17:04 
Moin!

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
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. :idea:

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
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)? :gruebel: Wenn du was nicht verstanden hast, was genau? :nixweiss:

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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.05.11 21:52 
Moin!

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
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. ;)

user profile iconSeyzza hat folgendes geschrieben Zum zitierten Posting springen:
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. :zustimm:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.