Autor |
Beitrag |
jenny87
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 11.01.07 16:33
Seid gegrüßt liebe Informatika,
ich soll aus dem angehängten (Delphie 4) Programm, welches eine monoalphabetische Codierung nach "Cäsar" darstellt, eine polyalphabetische Codierung erstellen.
Bis jetzt ist es ja so, dass der User mittels EINEM beliebig wählbaren Buchstaben einen beliebigen Text codieren kann.
Nun soll er aber mittels einem beliebig wählbaren CODEWORT den Text verschlüsseln... und daran scheitere ich!
Vielleicht könnt ihr mir ja da helfen, ich verzweifle langsam...
Vielen Dank und lieb(st)e Grüße, Jenny
Hier noch der 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: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type TfrmKodierung = class(TForm) gbxSatz: TGroupBox; gbxCode: TGroupBox; edtCodeBuchstabe: TEdit; lblCodeBuchstabe: TLabel; bbtnEnde: TBitBtn; bbtnNeu: TBitBtn; bbtnCode: TBitBtn; mmoSatz: TMemo; procedure FormCreate(Sender: TObject); procedure mmoSatzChange(Sender: TObject); procedure bbtnCodeClick(Sender: TObject); private public end;
var frmKodierung: TfrmKodierung;
implementation
{$R *.DFM}
VAR CodeRichtung : -1 .. 1;
procedure TfrmKodierung.FormCreate(Sender: TObject); begin gbxSatz.Caption := 'Geben Sie den zu verschlüsselnden Text ein:'; WITH mmoSatz DO BEGIN Text := ''; Enabled := true END; WITH edtCodeBuchstabe DO BEGIN Text := ''; Enabled := true END; bbtnCode.Enabled := false; CodeRichtung := 1 end;
procedure TfrmKodierung.mmoSatzChange(Sender: TObject); begin IF (mmoSatz.Text <> '') AND (edtCodeBuchstabe.Text <> '') THEN bbtnCode.Enabled := true ELSE bbtnCode.Enabled := false; end;
FUNCTION EinLesen(AnzeigeText : STRING) : STRING; var zwtext:string; zeichen:integer; BEGIN Zwtext:=''; For zeichen:=1 to length(anzeigetext) do case anzeigetext[zeichen] of 'a'..'z','A'..'Z':zwtext:=zwtext+uppercase(anzeigetext[zeichen]); 'ä','Ä' :zwtext:=zwtext+'AE'; 'ö','Ö' :zwtext:=zwtext+'OE'; 'ü','Ü' :zwtext:=zwtext+'UE'; 'ß' :zwtext:=zwtext+'SS'; 'â','á','à' :zwtext:=zwtext+'A'; 'ê','é','è' :zwtext:=zwtext+'E'; 'û','ú','ù' :zwtext:=zwtext+'U'; 'ô','ó','ò' :zwtext:=zwtext+'O'; 'î','í','ì' :zwtext:=zwtext+'I'; '°' :zwtext:=zwtext+'GRAD'; '@' :zwtext:=zwtext+'AT'; '_' :zwtext:=zwtext+'UNTERSTRICH'; '1' :zwtext:=zwtext+'EINS'; '2' :zwtext:=zwtext+'ZWEI'; '3' :zwtext:=zwtext+'DREI'; '4' :zwtext:=zwtext+'VIER'; '5' :zwtext:=zwtext+'FUENF'; '6' :zwtext:=zwtext+'SECHS'; '7' :zwtext:=zwtext+'SIEBEN'; '8' :zwtext:=zwtext+'ACHT'; '9' :zwtext:=zwtext+'NEUN'; '0' :zwtext:=zwtext+'NULL'; '"' :zwtext:=zwtext+'ANFUEHRUNGSZEICHEN'; '!' :zwtext:=zwtext+'AUSRUFEZEICHEN'; '?' :zwtext:=zwtext+'FRAGEZEICHEN'; '.' :zwtext:=zwtext+'PUNKT'; ',' :zwtext:=zwtext+'KOMMA'; ';' :zwtext:=zwtext+'SEMIKOLON'; ':' :zwtext:=zwtext+'DOPPELPUNKT'; '-' :zwtext:=zwtext+'MINUS'; '+' :zwtext:=zwtext+'PLUS'; '%' :zwtext:=zwtext+'PROZENT'; '&' :zwtext:=zwtext+'UND'; '(' :zwtext:=zwtext+'KLAMMERAUF'; ')' :zwtext:=zwtext+'KLAMMERZU'; '[' :zwtext:=zwtext+'ECKIGEKLAMMERAUF'; ']' :zwtext:=zwtext+'ECKIGEKLAMMERZU'; '=' :zwtext:=zwtext+'ISTGLEICH'; '²' :zwtext:=zwtext+'HOCHZWEI'; '³' :zwtext:=zwtext+'HOCHDREI'; '$' :zwtext:=zwtext+'DOLLAR'; '€' :zwtext:=zwtext+'EURO'; '*' :zwtext:=zwtext+'STERNCHEN'; '\' :zwtext:=zwtext+'BACKSLASH'; '/' :zwtext:=zwtext+'SLASH'; '#' :zwtext:=zwtext+'RAUTE';
end; Einlesen:=zwtext; END; PROCEDURE Code(VAR C_Text : STRING; C_Buchstabe : CHAR; C_Richtung : SHORTINT); VAR index:integer; Verschiebung:shortint; BEGIN Verschiebung:=C_Richtung*(ord(C_Buchstabe)-ord('A')); FOR index:=1 to length(C_Text) do C_Text[Index]:=chr((ord(C_Text[Index])-ord('A')+Verschiebung+26)MOD 26+ORD('A')); END;
FUNCTION BlockAusgabe(AusgabeText : STRING) : STRING; CONST Block = 5; VAR index:byte; zwtext:string; BEGIN for index:=1 to length(Ausgabetext) do begin ZwText:=Zwtext+Ausgabetext[index]; if Index MOD block = 0 then ZWText:=zwtext+' '; end; blockausgabe:=zwtext; END; procedure TfrmKodierung.bbtnCodeClick(Sender: TObject); VAR TextFeld : STRING; CodeBuchstabe : CHAR; begin TextFeld := EinLesen(mmoSatz.Text); CodeBuchstabe := edtCodeBuchstabe.Text[1]; Code(TextFeld, CodeBuchstabe, CodeRichtung); mmoSatz.Text := BlockAusgabe(TextFeld); IF CodeRichtung = 1 THEN BEGIN mmoSatz.Enabled := false; edtCodeBuchstabe.Enabled := false; bbtnCode.Caption := 'de&kodieren'; gbxSatz.Caption := 'kodierter Text:' END ELSE BEGIN mmoSatz.Enabled := true; edtCodeBuchstabe.Enabled := true; bbtnCode.Caption := '&kodieren'; gbxSatz.Caption := 'Geben Sie den zu verschlüsselnden Text ein:' END; CodeRichtung := -1 * Coderichtung; end;
end. |
PS: im Prinzip müssen doch nur eins, zwei Zeilen verändert werden.. bloß wie?!
Moderiert von raziel: Code- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
|
|
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: Do 11.01.07 16:39
Hallo!
Also polyalphabetisch..
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:
| procedure btnEncryptClick(Sender: TObject); var x,i,j,y,z: integer; letter, keyletter: char; begin input:=lowercase(memText.Text); key:=lowercase(edtKey.Text); j:=1; for i:=1 to length(input) do begin letter:=input[i]; if j>length(key) then begin j:=1; end; if letter in ['a'..'z'] then begin x:=alphabet.IndexOf(letter); keyletter:=key[j]; y:=alphabet.IndexOf(keyletter); z:=x+y; j:=j+1; begin if z>25 then begin z:=z-26; letter:=alphabet[z][1]; end else begin letter:=alphabet[z][1]; end; end; end; input[i]:=letter; end; memText.Text:=input; end; |
Noch auf deine Bedürfnisse anpassen und es sollte funktionieren
oder du benutzt die Forumsuche: VIGENERE
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
r2c2
Beiträge: 324
Erhaltene Danke: 2
Linux
|
Verfasst: Do 11.01.07 18:37
Da Jenny es nciht für nötig befunden hat Crossposts zu verlinken, mach ich mal die Arbeit anderer Leute:
forum.dsdt.info/viewtopic.php?t=32023
www.delphipraxis.net...c100613,0,asc,0.html
mfg
Christian
_________________ Kaum macht man's richtig, schon klappts!
|
|
jenny87
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 11.01.07 23:39
Ok sorry mittlerweile weiß ich dass Crosspostings nicht gerne gesehen sind und was überhaupt CPs sind ....
Ich danke dir Zeitgeist, melde mich wenn ich weitere Fragen habe und dickes sry fürs "crossposten"
|
|
mkinzler
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Do 11.01.07 23:50
Du kannst gerne die Frage in mehreren Foren stellen. Es wäre aber gut es bekannt zu geben.
_________________ Markus Kinzler.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 12.01.07 02:01
hallo jenny87,
schau doch mal unter:
www.delphi-forum.de/...r=asc&highlight=
PS: bei dieser art der verschlüsselung müssen die zeichen eindeutig sein, bei dir sind sie es leider nicht. versuche mal eine eindeutigkeit herzustellen, ... kannst auch gerne lurken im code von sirke oder von mir... beide funktionieren (von sirke nicht getestet), sind jedoch unterschiedlich aufgebaut...
<HTH>
|
|
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: Sa 13.01.07 21:23
So hier mal die Lösung des Ganzen:
Habs bissl durchkommentiert =)
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: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362:
|
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type TfrmKodierung = class(TForm) gbxCode: TGroupBox; edtCodeBuchstabe: TEdit; lblCodeBuchstabe: TLabel; bbtnEnde: TBitBtn; bbtnNeu: TBitBtn; bbtnCode: TBitBtn; gbxSatz: TGroupBox; mmoSatz: TMemo; OpenDia: TOpenDialog; SaveDia: TSaveDialog; btnopen: TButton; btnsave: TButton; procedure FormCreate(Sender: TObject); procedure mmoSatzChange(Sender: TObject); procedure bbtnCodeClick(Sender: TObject); procedure OpenDiaCanClose(Sender: TObject; var CanClose: Boolean); procedure btnopenClick(Sender: TObject); procedure btnsaveClick(Sender: TObject); private public end;
var frmKodierung: TfrmKodierung;
implementation
{$R *.DFM}
VAR CodeRichtung : -1 .. 1;
procedure TfrmKodierung.FormCreate(Sender: TObject); begin mmoSatz.lines.clear; gbxSatz.Caption := 'Geben Sie den zu verschlüsselnden Text ein:'; CodeRichtung := 1 end;
procedure TfrmKodierung.mmoSatzChange(Sender: TObject); var i: integer; begin IF (mmoSatz.Text <> '') AND (edtcodebuchstabe.text <> '') THEN bbtnCode.Enabled := true ELSE bbtnCode.Enabled := false;
end;
FUNCTION EinLesen(AnzeigeText : STRING) : STRING;
var zwtext:string; zeichen:integer; BEGIN Zwtext:=''; For zeichen:=1 to length(anzeigetext) do case anzeigetext[zeichen] of 'a'..'z','A'..'Z':zwtext:=zwtext+uppercase(anzeigetext[zeichen]); 'ä','Ä' :zwtext:=zwtext+'AE'; 'ö','Ö' :zwtext:=zwtext+'OE'; 'ü','Ü' :zwtext:=zwtext+'UE'; 'ß' :zwtext:=zwtext+'SS'; 'â','á','à' :zwtext:=zwtext+'A'; 'ê','é','è' :zwtext:=zwtext+'E'; 'û','ú','ù' :zwtext:=zwtext+'U'; 'ô','ó','ò' :zwtext:=zwtext+'O'; 'î','í','ì' :zwtext:=zwtext+'I'; '°' :zwtext:=zwtext+'GRAD'; '@' :zwtext:=zwtext+'AT'; '_' :zwtext:=zwtext+'UNTERSTRICH'; '1' :zwtext:=zwtext+'EINS'; '2' :zwtext:=zwtext+'ZWEI'; '3' :zwtext:=zwtext+'DREI'; '4' :zwtext:=zwtext+'VIER'; '5' :zwtext:=zwtext+'FUENF'; '6' :zwtext:=zwtext+'SECHS'; '7' :zwtext:=zwtext+'SIEBEN'; '8' :zwtext:=zwtext+'ACHT'; '9' :zwtext:=zwtext+'NEUN'; '0' :zwtext:=zwtext+'NULL'; '"' :zwtext:=zwtext+'ANFUEHRUNGSZEICHEN'; '!' :zwtext:=zwtext+'AUSRUFEZEICHEN'; '?' :zwtext:=zwtext+'FRAGEZEICHEN'; '.' :zwtext:=zwtext+'PUNKT'; ',' :zwtext:=zwtext+'KOMMA'; ';' :zwtext:=zwtext+'SEMIKOLON'; ':' :zwtext:=zwtext+'DOPPELPUNKT'; '-' :zwtext:=zwtext+'MINUS'; '+' :zwtext:=zwtext+'PLUS'; '%' :zwtext:=zwtext+'PROZENT'; '&' :zwtext:=zwtext+'UND'; '(' :zwtext:=zwtext+'KLAMMERAUF'; ')' :zwtext:=zwtext+'KLAMMERZU'; '[' :zwtext:=zwtext+'ECKIGEKLAMMERAUF'; ']' :zwtext:=zwtext+'ECKIGEKLAMMERZU'; '=' :zwtext:=zwtext+'ISTGLEICH'; '²' :zwtext:=zwtext+'HOCHZWEI'; '³' :zwtext:=zwtext+'HOCHDREI'; '$' :zwtext:=zwtext+'DOLLAR'; '€' :zwtext:=zwtext+'EURO'; '*' :zwtext:=zwtext+'STERNCHEN'; '\' :zwtext:=zwtext+'BACKSLASH'; '/' :zwtext:=zwtext+'SLASH'; '#' :zwtext:=zwtext+'RAUTE';
end; Einlesen:=zwtext; end;
PROCEDURE Code(VAR C_Text : STRING; C_Buchstabe : string; _Richtung : SHORTINT);
var index:integer; Verschiebung:shortint; counter: integer; BEGIN
counter:= 1;
FOR index:=1 to length(C_Text) do begin Verschiebung:=C_Richtung*(ord(c_buchstabe[counter])-ord('A')); inc(counter); if counter > length(c_Buchstabe) then counter:= 1; C_Text[Index]:=chr((ord(C_Text[Index])-ord('A')+Verschiebung+26)MOD 26+ORD('A')); end; end;
FUNCTION BlockAusgabe(AusgabeText : STRING) : STRING;
CONST Block = 5; VAR index: integer; zwtext:string; BEGIN
Blockausgabe:= '';
for index:=1 to length(Ausgabetext) do begin ZwText:=Zwtext+Ausgabetext[index]; if Index MOD block = 0 then ZWText:=zwtext+' '; end; blockausgabe:=zwtext; END;
procedure TfrmKodierung.bbtnCodeClick(Sender: TObject);
VAR TextFeld : STRING; CodeBuchstabe : string; begin
TextFeld := EinLesen(mmoSatz.Text); codeBuchstabe := einlesen(edtCodeBuchstabe.text); edtCodeBuchstabe.text:= codeBuchstabe; Code(TextFeld, CodeBuchstabe, CodeRichtung); mmoSatz.Text := BlockAusgabe(TextFeld);
CodeRichtung := -1 * Coderichtung; end;
procedure TfrmKodierung.OpenDiaCanClose(Sender: TObject; var CanClose: Boolean); begin end;
procedure TfrmKodierung.btnopenClick(Sender: TObject); begin if opendia.execute then mmoSatz.lines.loadfromfile(opendia.filename); end;
procedure TfrmKodierung.btnsaveClick(Sender: TObject); begin if savedia.execute then mmoSatz.lines.savetofile(savedia.filename); end;
end. |
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
|