| Autor |
Beitrag |
Peter56
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 27.11.06 19:17
Hallo Delphi Forum,
ich habe eine sehr großes Problem mit Delphi wo ihr mit Sicherheit nur drüber lachen könnt. Ich habe seit 4 Monaten Delphi und habe mich nur leider nie für Informatik interessiert. Jetzt muss ich aber ein Projekt machen, wobei meine Teilaufgabe mich schon total überfordert.
Meine Aufgabe lautet: "Entwickeln sie eine Prozedur, welche aus dem edit 1 eingetragenen ( und bereits vereinfacht)-->[diese Prozedur ist schon geschrieben] Schlüsselwort einen Schlüssel erzeugt und diesen in der Spalte "Geheimtext" einträgt."
Der Quelltext den wir dazu bekommen haben ist im Anhang.
Würde mich freuen wenn ihr das lösen könntet oder es jedenfalls mir so erklärt das ich es dann selber schreiben kann, aber das erste wer mir lieber.
Danke schon mal im Vorraus.
Einloggen, um Attachments anzusehen!
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: Mo 27.11.06 19:35
Hallo!
Erstmal vorweg, für eine monoalphabetische Vreschlüsselung brauchst du kein ganzen Schlüsselwort, sondern nur EINE Zahl/Buchstabe. Dieser gibt dann an um viele Buchstaben das Klartextalphabet verschoben werden muss um das Geheimschriftalphabet zubilden.
Bsp.:
Der Vektor(Codewort, was auch immer) ist +2.
Damit wir
A --> C
B --> D
C --> E
usw.
bis
X --> Z
Y --> A
Z --> B
Wenn man das jetzt nach Delphi umsetzen will muss man ganz einfach eine Prozedur schreiben die folgendes macht.
1.Den einzelnden Buchstaben in ACSII umwandeln
2.Den ACSII Wert + Vektor rechnen.
3.Überprüfen ob ein Umbruch statt findet
z. B. Wenn ich Z + 2 Rechne und dass dann wieder umwandeln in einen Buchstaben steht da nicht B sondern \
Also muss ich überprüfen ob der verschlüsselte Buchstabe im Bereich 65(A) und 90(Z) liegt.
4. Die Buchstaben wieder zum Text zusammen fügen.
Zu 1) Also EINEN Buchstaben wandelst du mit ord(BUCHSTABE) um wenn du von ASCII nach Buchstabe willst musst du chr(ASCIICODE) eintippen. Damit du einen einzelnen Buchstaben aus einem String bekommst, machst du einfach hinten einen String [X], X wäre dann die Position im String
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); var help :string; begin help := 'DAS IST EIN TEST'; ShowMessage(help[1] + ' ' + inttostr(ord(help[1]))); end; |
Zu 2 und 3) Sollte klar sein oder?
Zu 4) Da gibt es verschiedene Möglichkeiten, eine ist die umgewandelten Buchstaben einfach an einen neuen String dran zu packen. Wohl auch die einfachste.
Hoffe ich kommte helfen.
Dragonclaw
|
|
Peter56 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 27.11.06 21:10
Bei uns ist es pflicht ein wort ein zu geben.
Und dieses Wort wird dann Buchstabe für Buchstabe in die Tabelle eingefügt und wenn das Wort im Edit-Feld aufgebraucht ist, werden die restlichen Buchstaben die im Alphabet vorkommen, auf die Tabelle aufgeteilt.
|
|
eruhenon
      
Beiträge: 53
|
Verfasst: Mo 27.11.06 21:29
Moinsen!
versteh ich dich falsch oder soll die Verschlüsselung folgendermassen aussehen:
abcdefghijklmnopqrstuvwxyz :orginal Alphabet
schluewortabdfgijkmnpqvxyz :schlüssel
schluewort ergibt sich ja aus schluesselwort wenn ichs nicht falsch verstanden hab
jetzt müsstest du doch nur noch das edit auslesen und in den string geheimtext schreiben.
beim auffüllen musst du dann ncoh über eine schleife kontrollieren ob der buchstabe schon verhanden ist
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| wortlaenge:=length(geheimtext);
for j:=1 to 26 do x:=false; for i:=1 to wortlaenge do Begin if chr(j+60)=geheimtext[i] then x:=true; end;
if x=false then geheimtext:=geheimtext+chr(i+60); end; |
ps ich bitte das zu entschuldigen dass es nicht so schön nach quellcode aussieht aber ich hab kein plan wie das geht^^
Moderiert von Christian S.: Delphi-Tags hinzugefügt
Zuletzt bearbeitet von eruhenon am Di 28.11.06 13:36, insgesamt 1-mal bearbeitet
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 28.11.06 00:31
hallo peter,
versuch es doch mal hier: MONOALPHABETISCHE VERSCHLÜSSELLUNG<HTH>
Moderiert von Christian S.: Suchlink repariert
|
|
Daxxlhorde
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 28.11.06 09:13
wenn ich mich nicht irre mussten wir das letztens auch machen ...das heißt wir haben einen klarbuchstaben eingegebn und haben überprüft wie weit der vom alphabet anfang entfernt is und haben einen geheimbuchstaben ausgegeben der vom ende des alphabets genau so weit entfernt war, ist das so was in der richtung??
Und dass, das man das mit nen wort macht, haben wir mit einer schleife gemacht, deren länge vom wort abhängt.
wenn das so in der richtung is was du brauchst dann kann ich dir gerne wenn ich daheim bin den quelltext mal reinstellen.
grüße
|
|
Peter56 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 28.11.06 16:38
danke für diesen Link den du mir gegeben hast nur leider treff ich dann immer wieder nur auf diese Seite wär nett von die wenn du mir den nohc mal schicken könntest
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: Di 28.11.06 16:47
Der Link ist schon richtig. Nur sucht die Suchmaschine hier im Board, und nicht bei Google, und da anscheinend beide Worte nur in deinem Thread drin vorkommen kommst du wieder immer hier hin.
MONOALPHABETISCHE VERSCHLÜSSELLUNG
|
|
Peter56 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 28.11.06 17:04
Danke für den Link
nur leider versteh ich noch nicht mal mehr was euer Kollege dort oben für ein Quelltext geschrieben hat und ich verstehe auch nicht wie dieser Befehl das in meine Tabelle einfügen soll. Könnte das jemand vielleicht noch ein bischen verständlicher machen.
danke schon einmal im vorraus
|
|
eruhenon
      
Beiträge: 53
|
Verfasst: Di 28.11.06 20:30
Ich lag doch ansonsten mit meiner Vermutung richtig oder?
Also dass du ein Schluesselaplphabet nehmen sollst das aus dem Schluesselwort besteht und dann den restlichen Buchstaben des Alphabeths...
zu meinem Geschreibsel
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| wortlaenge:=length(geheimtext); for j:=1 to 26 do x:=false; for i:=1 to wortlaenge do Begin if chr(j+65)=geheimtext[i] then x:=true; end;
if x=false then geheimtext:=geheimtext+chr(i+65); end; |
allerdings musste noch sagen ob du Groß oder Kleinbuchstaben haben möchtest. Bei 65 sind es Großbuchstaben also muss alles Großbuchstaben sein bei dieser Schleife (erreichste mit geheimwort:=uppercase(geheimwort); ) oder Kleinbuchstabe. Hier musst du allerdings bei 97 anfangen und anstelle von uppercase lowercase verwenden
ich wette es geht noch schöner als was ich grad geschieben hab aber es ist halt auch ne naive Lösung
cya
Jan
|
|
Peter56 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 28.11.06 20:50
Ok danke für diese Erklärung aber trotzdem habe ich noch zwei fragen
1.muss x noch deklariert werden
2.und wie kommen die buchstaben in die tabelle, weil ich im moment noch keinen befehl finde der das sagt (sorry) kann auch sein das ich mich ein bsichen blöd anstelle.
danke schon im voraus
|
|
eruhenon
      
Beiträge: 53
|
Verfasst: Di 28.11.06 20:58
also x muss deklariert werden
vor dem begin der prozedur:
var x:boolean;
i,j:word; //die zählervariablen
schreiben.
zu 2 muss ich mla nachhaken ob du das alles is nem einzelnem feld haben möchtest (nen screenshot von deinem form wäre interessant) oder ob das alles einfach in ein feld pusten möchstest.
bei einem feld einfach:
Delphi-Quelltext 1:
| StringGrid1.Cells[1,0]:=geheimtext; |
oder bei jedem ein einzelnes feld:
Delphi-Quelltext 1: 2: 3: 4:
| for i:=0 to 25 do Begin StringGrid1.Cells[1,i]:=geheimtext[i+1]; end; |
cya jan
edit: teil 2 beantwortet
Zuletzt bearbeitet von eruhenon am Di 28.11.06 21:18, insgesamt 2-mal bearbeitet
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Di 28.11.06 21:00
substitution is das stichwort =)
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: Di 28.11.06 22:06
Hallo.
Ich hab mir mal die Mühe gemacht, die eine Schlüssel erzeuguns Prozedur zuschreiben. Erst hatte ich daran gedacht die restlichen Buchstaben zufällig zu verteilen, bis mir dann einfiel, das man das ganze ja auch reproduzieren muss um das zu entschlüsseln, und das Ganze Alphabet ist zu mühsam immer wieder als codewort einzugeben.
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: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| ...
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; StringGrid1: TStringGrid; procedure Button1Click(Sender: TObject); procedure FormActivate(Sender: TObject); private Blocker : array[1..26] of boolean; Position : Integer; public end;
...
procedure TForm1.Button1Click(Sender: TObject); var i : integer; help :integer; begin StringGrid1.ColCount := 27; StringGrid1.RowCount := 2; StringGrid1.DefaultColWidth := 25; StringGrid1.DefaultRowHeight := 24; StringGrid1.Height := 50; StringGrid1.Width := 705; for i := 1 to 26 do blocker[i] := false; Position := 0; for i := 1 to 26 do StringGrid1.Cells[i,0] := chr(i+64); help := Edit1.text; for i := 1 to length(help) do help[i] := upcase(help[i]); Edit1.text := help; for i := 1 to length(Edit1.text) do begin if not blocker[ord(Edit1.text[i])-64] then begin Inc(Position); blocker[ord(Edit1.text[i])-64] := true; StringGrid1.Cells[Position,1] := Edit1.text[i]; end; end; for i := 1 to 26 do begin if not blocker[i] then begin Inc(Position); blocker[i] := true; STringGrid1.Cells[Position,1] := chr(i+64); end; end; end;
procedure TForm1.FormActivate(Sender: TObject); begin randomize; end; |
Hoffe du kannst damit was anfangen.
Noch was, wenn du das jetzt in das Programm von der Kopie übertragen willst.
Zeile 22-27,30 können gelöscht werden.
Dann in Zeile 49 einmal Enter drücken und folgendes eingeben(ich gehe davon aus das sch_Wort das Schlüsselwort sein soll):
Delphi-Quelltext 1:
| for i := 1 to 26 do sch_Wort := sch_Wort + StringGrid1.Cells[i,1]; |
Die OnClick-Prozedur von Button4 ist meiner Meinung nach vollkommen überflüßig, solange du keine Umlaute bei Edit1 eingibts, allerdings kommt dann auch schon vorher ein Fehler und das Geheimtextalphabet wird nicht richtig erzeugt
|
|
eruhenon
      
Beiträge: 53
|
Verfasst: Di 28.11.06 22:45
so jetzt wollte ich doch auch mal wissen ob das was ich runtergehackt hab funktioniert^^
ein paar kleinere fehler sind mir aufgefallen aber ansonsten funktionierts.
ahls als prozedur geschrieben der du das schluesselwort uebergibst.
kannst aber auch einfach das edit auslesen und in geheimtext pusten^^
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:
| procedure schluesselwort(geheimtext:string);
procedure TForm1.schluesselwort(geheimtext:string); var i,j,wortlaenge:word; x:boolean; Begin geheimtext:=lowercase(geheimtext); wortlaenge:=length(geheimtext); for j:=1 to 26 do Begin x:=false; for i:=1 to wortlaenge do Begin if chr(j+96)=geheimtext[i] then x:=true; end; if x=false then geheimtext:=geheimtext+chr(j+96); end; for i:=1 to 26 do Begin StringGrid1.Cells[i,0]:=chr(i+96); StringGrid1.Cells[i,1]:=geheimtext[i]; end; end; |
hab nurnoch kommentiert was neu war.
so zwei Lösunge haste nu^^ ich glaub die reichen auch...
edit:kleine änderung beim stringgrit füllen da du ja in den 0 werten schon was stehn hast
Zuletzt bearbeitet von eruhenon am Di 28.11.06 23:08, insgesamt 1-mal bearbeitet
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 28.11.06 22:59
|
|
Peter56 
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 30.11.06 14:26
Ich weiß selber das ich hier nicht viel selbstinitiative zeige, aber ich habe beide Programme ausprobiert und sie klappen nicht. Ich kann ja noch mal erklären was ich brauche und hoffe das es jemand schaft das zu programmieren.
Also ich brauche einen Befehl der mir ein Wort was schon fertig verschlüsselt ist d.h. alle buchstaben sind groß geschrieben und gleiche Buchstaben sind aussortiert einzelt Buchstabe für Buchstabe in eine Tabelle sortiert
Meine Aufgabe ist es jetzt dieses Fertigverschlüsselte Wort aus dem Edit1. in die Tabelle zu kopieren ( zweite Spalte) Buchstabe für Buchstabe. Die restlichen Buchstaben des Alphbets die nicht indem Wort vorkommen werden dann in die Tabelle aufgefüllt.
Danke schon einmal im voraus
|
|
Danny W.
      
Beiträge: 296
Windows XP, WIN 2000
Delphi 2005 PE
|
Verfasst: Do 30.11.06 14:31
wenn das ein Auftrag sein soll, dann frag doch in der Job Sparte nach, da wird sich bestimmt jemand finden der das macht 
_________________ "Ich find den Fehler nicht. Der Artist wird immer als "Syntax Error" gezeigt  "
"Ach verdammt, der Artist heißt wirklich "Syntax Error" xD"
|
|
Peter56 
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 30.11.06 14:37
Das soll eine Bitte sein kein Auftrag.
Nur ich versteh dieses Programm einfach nicht und suche Freiwillige die lust haben dieses Problem zu lösen.
MFG Peter56
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: Do 30.11.06 15:08
Naja, ich würde ja gerne helfen, nur verstehe ich jetzt nicht mehr wirklich was du willst
Peter56 hat folgendes geschrieben: |
Also ich brauche einen Befehl der mir ein Wort was schon fertig verschlüsselt ist d.h. alle buchstaben sind groß geschrieben und gleiche Buchstaben sind aussortiert einzelt Buchstabe für Buchstabe in eine Tabelle sortiert
Meine Aufgabe ist es jetzt dieses Fertigverschlüsselte Wort aus dem Edit1. in die Tabelle zu kopieren ( zweite Spalte) Buchstabe für Buchstabe. Die restlichen Buchstaben des Alphbets die nicht indem Wort vorkommen werden dann in die Tabelle aufgefüllt.
|
was bitte schön meinst du mit "Fertig Verschlüsselt"? Wenn du damit einfach irgendein Wort meinst.. dann müsste mein Code eigentlich klappen. Falls du ihn mal ausprobiert hast, sag doch bitte WAS nicht funktioniert.
|
|