Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Cäsar Verschlüsselung
toppaa - Sa 27.12.08 00:21
Titel: Cäsar Verschlüsselung
hi,
ich hoffe ,dass ich hier richtig bin.
Habe mich seit ein paar Monaten mit Delphi "ein wenig" beschäftigt (taschenrechner,Umrechnungen,einfache Funktionen...)
Nun wollte ich mal sowas machen mit Cäsar Verschlüsselung machen aber ich habe keine Ahnung wie das Funktioniert. Ich weis zwar wie Cäsar funktioniert,aber keine Ahnung wie ich das programmieren soll kann mir wer da helfen oder Tipps geben am besten wäre ein Quellcode mit erklärung einfaches Bsp.
Danke schonmal im vorraus
Mfg Toppaa
Xentar - Sa 27.12.08 00:28
Wie weit bist du denn schon, bzw. wo genau kommst du nicht weiter?
toppaa - Sa 27.12.08 00:35
emm ja das problem is ich weis gar nicht wo ich da anfangen soll denn ich weis ja nich wie ich das programmieren soll dass er z.b mache den buchstaben a zu d unsoweiter
jaenicke - Sa 27.12.08 00:54
Den Asciiwert eines Buchstabens bekommst du mit Ord, dann kannst du normal damit rechnen. Mit Chr wandelst du die Zahl wieder in einen Buchstaben um.
Delphi-Quelltext
1:
| Chr(Ord(Buchstabe) + 2) |
Auf die einzelnen Buchstaben eines Strings kannst du wie auf ein Array zugreifen:
Delphi-Quelltext
1: 2: 3:
| DeinString[1] DeinString[2] ... |
Tipp: Im Forum gibt es zu dem Thema bereits Beiträge, die auch entsprechenden Code enthalten.
toppaa - Sa 27.12.08 01:28
kannst du mir nicht einfach mal ein quellcode reinschreiben
bei der es ein edit feld und ein button gibt
einfacher code mit einer verschiebung von 1
danke schonmal im vorraus
ps: wenns geht noch kleine erklärung neben drannn
entschuldigt bitte meine "forderungston" aber ich muss das bald drauf haben sonst hab ich problem in der schule :D
mfg toppaa
Moderiert von
Narses: überflüssige Leerzeilen entfernt
Narses - Sa 27.12.08 01:34
Moin und :welcome: im Forum!
toppaa hat folgendes geschrieben : |
ich muss das bald drauf haben sonst hab ich problem in der schule :D |
Das "Problem" scheinst du schon zu haben (in Form einer Nachprüfung, schätze ich mal), sonst würdest du ja nicht hier aufgelaufen sein. :?
Hast du denn schonmal in die Suche geschaut?
CAESAR, VERSCHL?SSELUNG Da sollte sich schon was finden.
Ansonsten: zeig uns doch mal deine Code(-Versuche), auf "Schulprobleme" hin wird´s hier normalerweise (zu Recht!) schwer, Code abzugreifen... 8)
Damit kein Missverständnis aufkommt: wir helfen gerne, aber nicht ohne deinen Einsatz! :)
cu
Narses
BenBE - Sa 27.12.08 01:40
Theoretisch JA, praktisch liefert dieser Link leider keine Ergebnisse.
VERSCHL?SSLUNG oder
CAESAR scheint was leeres zu liefern.
SUBSTITUTION könnte aber ggf. als Suchbegriff helfen.
Narses - Sa 27.12.08 01:42
Moin!
BenBE hat folgendes geschrieben : |
Theoretisch JA, praktisch liefert dieser Link leider keine Ergebnisse. |
Stimmt allerdings... :gruebel: Wenn man manuell nach den Begriffen sucht, klappts. :nixweiss:
cu
Narses
jaenicke - Sa 27.12.08 01:47
toppaa hat folgendes geschrieben : |
kannst du mir nicht einfach mal ein quellcode reinschreiben |
Nein, davon lernst du nichts, und da es vermutlich um eine Note für eine Aufgabe aus der Schule geht wäre es Beihilfe zum Betrug, wenn ich das mache und du das dann als deine Arbeit abgibst. :nixweiss:
toppaa hat folgendes geschrieben : |
bei der es ein edit feld und ein button gibt
einfacher code mit einer verschiebung von 1 |
Ich habe schon alles geschrieben, was du dafür brauchst. Das musst du nur noch zusammensetzen und in einer for-Schleife alle Buchstaben durchgehen.
An der Stelle weise ich mal noch auf den Crashkurs hier hin, falls dir z.B. Schleifen nicht klar sind:
http://crashkurs.christian-stelzmann.de
toppaa hat folgendes geschrieben : |
aber ich muss das bald drauf haben sonst hab ich problem in der schule |
Wenn du nicht selbst etwas dafür tust, dann ist das ja auch gut so.
toppaa - Sa 27.12.08 01:52
also so sehen mal meine versuche aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit1.text) do; a:=ord(edit1.text[c]); a:=a+3; edit1.text:=chr(a) end;
end. |
a=der Text
c=glieder
es gibt 1 edit und 1 button
mfg toppaa
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Sa 27.12.08 02:01
Woran erinnert mich der Fehler mit der for-Schleife? :gruebel:
Ach ja:
http://www.delphi-forum.de/viewtopic.php?t=70517
Wenn du etwas weiter unten in dem Thread schaust, dann siehst du auch die Korrekturen.
Die beiden Fehler:
toppaa hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit1.text) do; a:=ord(edit1.text[c]); a:=a+3; edit1.text:=chr(a) | |
Die Schleife soll ja als Inhalt die nächsten Zeilen haben, da fehlt ein begin..end darum.
Delphi-Quelltext
1: 2: 3: 4:
| for c := 1 to length(edit1.text) do begin ... end; |
Zudem wird der ergebende Buchstabe jeweils als einziges in das Edit geschrieben. Der gehört aber wieder in
Edit1.Text[c], also an die Stelle des einzelnen Buchstabens, also
Edit1.Text[c] := ....
toppaa - Sa 27.12.08 12:17
ok danke erst mal ich hab jetzt zum laufen bekommen mit 2 edits halt sieht meiner meinung nach besser aus :D
aber ich habe ein problem wenn ich jetzt ganze wörter eingebe wird glaube ich immer nur der letze davon verschlüsselt
wo ist der fehler?
im moment sieht der quellcode so aus :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit1.text) do begin a:= ord(edit1.text[c]); a:= a+3; edit2.text:= chr(a); end;
end;
end. |
Danke nochmal für eure Hilfe
Mfg Toppaa
jaenicke - Sa 27.12.08 13:26
jaenicke hat folgendes geschrieben : |
Zudem wird der ergebende Buchstabe jeweils als einziges in das Edit geschrieben. |
;-)
Du überschreibst ja mit dem einen Buchstaben jeweils den gesamten Inhalt des Edits. Du musst aber den alten Inhalt auch wieder einfügen, sonst bleibt immer nur der letzte Buchstabe drin und die anderen werden wieder überschrieben.
Delphi-Quelltext
1:
| Edit2.Text := Edit2.Text + 'Neu'; |
toppaa - Sa 27.12.08 13:33
emmmmmmm ja ich verstehe was du sagst.
aber ich weis nicht wie ich das mit deinem bsp. verstehen soll
ich will ja dem programm sagen dass er jeden buchstaben im edit um 3 verschieben soll nur leider verstehe ich auch wirklich nicht dein bsp
vllt. bin auch bissjen doof oder so kannst mir vllt. noch ein einfacheres oder genauers bsp geben das mir auf die sprünge hilf ?
danke für dein engagement jaenicke in diesem thread
danke auch an die anderen
mfg toppaa
jaenicke - Sa 27.12.08 13:43
Du solltest dir mal überlegen was der Quelltext eigentlich macht, das Verschieben funktioniert ja schon richtig, nur dass nur der letzte Buchstabe im Edit2 steht am Ende.
Der Grund ist, dass du jedesmal sagst
edit2.text := chr(a);, Edit2.Text ist der gesamte Inhalt des Edits, und da legst du jetzt Chr(a) rein. Das ist der aktuelle Buchstabe.
Beispiel: In Edit1 wurde eingegeben "auto".
Beim ersten Schleifendurchlauf wird aus dem a ein d. Dieses d kommt jetzt in Edit2.Text hinein.
Beim zweiten Durchlauf wird aus dem u ein x. Jetzt soll aber dx in Edit2.Text, stattdessen legst du nur x hinein. Das d geht verloren.
Deshalb musst du den alten Inhalt auch wieder einfügen:
Delphi-Quelltext
1: 2:
| Edit2.Text := Edit2.Text + 'Neu'; d x |
Und so kommt dann d + x, also dx in Edit2.Text.
toppaa - Sa 27.12.08 17:25
dankeschön habs hinnbekommen.:):):)
hat mir sehr geholfen.
jaenicke - Sa 27.12.08 18:35
Per PN zu fragen ist nicht so gut, weil spätere Leser des Threads davon nicht profitieren können. Und es geht ja in einem Forum nicht nur darum aktuell Antworten zu bieten sondern auch darum, dass diese später von anderen gefunden werden können. ;-)
Und btw. hätte ich auch früher geantwortet, ich habe die Seite nicht neu geladen sondern nur die letzten 10, so dass ich die PN schlicht nicht gesehen habe. :D
toppaa (per PN) hat folgendes geschrieben: |
hi,
ich habe nun das programm soweit fertig gestellt mit einem button für verschlüsselung und einem für die entschlüsselung
nun wenn ich jetzt z.b a zum verschlüsseln eingebe bleibt das a im edit feld stehen und geht ja nicht weg umgekehrt genauso.
wenn ich jetzt aber den befehl noch einfüge mit edit1.text:=' ';
dann wird aufeinmal nicht mehr richtig entschlüsselt b.z.w verschlüsselt.
was ist falsch ???
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:
| procedure TForm1.Button1Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit1.text) do begin a:= ord(edit1.text[c]); a:=a+1; edit2.text:=edit2.Text+chr(a); edit1.text:=' '; end;
end;
procedure TForm1.Button2Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit2.text) do begin a:=ord(edit2.text[c]); a:=a-1; edit1.Text:=edit1.text+chr(a); edit2.Text:=' ' end;
end;
end. | |
Der Fehler ist, dass du das Löschen innerhalb der Schleife, also bereits nach dem ersten Buchstaben machst. Und deshalb ist der Rest des eingegebenen Textes dann bereits gelöscht.
Du musst die Zeile also nur hinter das darauf folgende end; schreiben. Übrigens musst du da auch kein Leerzeichen nehmen, du kannst auch das Editfeld ganz leeren:
Edit2.Text := '';
Eine richtige Einrückung hilft auch dabei zu erkennen was in einer Schleife steht und wie alles zusammenhängt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var a, c: Integer; begin for c := 1 to Length(Edit1.Text) do begin a := Ord(Edit1.Text[c]); a := a + 1; Edit2.Text := Edit2.Text + Chr(a); end; Edit1.Text := ''; end; |
toppaa - Sa 27.12.08 18:58
ok es funktioniert danke nochmals finde das hier ein sehr tolles forum
mfg toppaa
toppaa - Sa 27.12.08 19:01
neustes problem
wenn ich z.b auto jetzt eingebe dann kommen in dem solche kasten weiste was ich meine??
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:
| procedure TForm1.Button1Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit1.text) do begin a:= ord(edit1.text[c]); a:=a+1; edit2.text:=edit2.Text+chr(a); edit1.text:=' '; end; edit1.text:='';
end;
procedure TForm1.Button2Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit2.text) do begin a:=ord(edit2.text[c]); a:=a-1; edit1.Text:=edit1.text+chr(a);
end; edit2.Text:='';
end;
end. |
jaenicke - Sa 27.12.08 19:12
toppaa hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var a,c:integer; begin for c := 1 to length(edit1.text) do begin a:= ord(edit1.text[c]); a:=a+1; edit2.text:=edit2.Text+chr(a); edit1.text:=' '; end; edit1.text:='';
end; | |
Da löschst du noch innerhalb der Schleife. Die Schleife geht aber bis Length(Edit1.Text), und das war 4. Die Buchstaben existieren aber gar nicht mehr, und deshalb gibt es Probleme, wenn du auf etwas zugreifst was du gerade überschrieben hast. ;-)
Die Zeichencodes, die du dann bekommst, sind nämlich dann nicht unbedingt von Buchstaben sondern von nicht anzeigbaren Steuerzeichen u.ä.
toppaa - Sa 27.12.08 20:24
ok danke nochmals war einfach enn dummer denkfehler:D
mfg toppaa
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!