Autor Beitrag
Peter56
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 196

Windows Vista
Delphi 7 Prof.
BeitragVerfasst: 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

ausblenden 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]))); //Es wird der erste Buchstabe des String angegeben(D) und sein ASCII CODE (68)
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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



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


ausblenden 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); //weiss jetzt grad nicht wo bei ascii das alphabet anfängt bei ansi ist das bei 95
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 user profile iconChristian 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



BeitragVerfasst: Di 28.11.06 00:31 
hallo peter,

versuch es doch mal hier: Suche in: Delphi-Forum MONOALPHABETISCHE VERSCHLÜSSELLUNG<HTH>

Moderiert von user profile iconChristian S.: Suchlink repariert
Daxxlhorde
Hält's aus hier
Beiträge: 4



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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 196

Windows Vista
Delphi 7 Prof.
BeitragVerfasst: 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.

Suche bei Google MONOALPHABETISCHE VERSCHLÜSSELLUNG
Peter56 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
wortlaenge:=length(geheimtext); //wir muessen bestimmen wie lang das Schluesselwort ist

for j:=1 to 26 do                       //erste Schleife die alle Buchstaben durchkaut die das alphabet hat (a-z = 1-26)
x:=false;                               //x ist ne boolean variable. kontrolle ob buchstabe vorhanden
   for i:=1 to wortlaenge do            //kontrollschleife ob der buchstabe schon vorhanden 
   Begin                                //muss nur das schluesselwort durchgehen da ansonsten ja alle buchstaben 
   if chr(j+65)=geheimtext[i] then      //hochgezaehlt werden
      x:=true;                          //falls buchstabe schon im schluesselwort setzte x auf true
   end;

   if x=false then                      //falls buchstabe nicht im schluesselwort dann fuege den buchstaben dem schluessel
      geheimtext:=geheimtext+chr(i+65); //wort hinzu. 
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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
StringGrid1.Cells[1,0]:=geheimtext;					


oder bei jedem ein einzelnes feld:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i:=0 to 25 do                   //0 da das stringgrid mit 0 anfaengt und 25 weil es 26 buchstaben gibt
Begin                                       //strings fangen mit !!!1!!! an daher i+1 ansonsten einfach auf jedes feld
   StringGrid1.Cells[1,i]:=geheimtext[i+1]; //einen buchstaben pusten 
end;


cya jan

edit: teil 2 beantwortet


Zuletzt bearbeitet von eruhenon am Di 28.11.06 21:18, insgesamt 2-mal bearbeitet
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 196

Windows Vista
Delphi 7 Prof.
BeitragVerfasst: 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.


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:
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
    { Public-Deklarationen }
  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;                                 //StringGrid wird eingestell. NICHT notwendig kann weggelassen werden
  for i := 1 to 26 do blocker[i] := false;
  Position := 0;                                            //Zurück setzen des Buchstabenblockers und der Position
  for i := 1 to 26 do StringGrid1.Cells[i,0] := chr(i+64);  //Das normale Alphabet wir ins StringGrid geschrieben
  help := Edit1.text;
  for i := 1 to length(help) do help[i] := upcase(help[i]); //Das Gesamte eingegebene Wort wird zu Großbuchstaben
  Edit1.text := help;
  for i := 1 to length(Edit1.text) do                       //Die Länge des Schlusseswortes wird ermittelt
    begin
      if not blocker[ord(Edit1.text[i])-64] then            //Es wird überprüft ob der Buchstabe schon im Schlüsselwort vorhanden ist
       begin
        Inc(Position);                                      //Wenn NICHT, wird Fertig erhöht, also die Position für den neuen Buchstaben
        blocker[ord(Edit1.text[i])-64] := true;             //Der Buchstabe wird geblockt, so das er nicht 2 mal vorkommen kann
        StringGrid1.Cells[Position,1] := Edit1.text[i];     // Der Buchstabe wird als Teil des Chiffrealphabet
      end;
    end;
  for i := 1 to 26 do
    begin
      if not blocker[i] then                                //Die Buchstaben des Alpahbets werden nach einander durch gegangen
      begin                                                 //Sollte ein Buchstabe noch nicht vorhanden sein, wir er ab jetzt geblockt
        Inc(Position);                                      //um am Ende des Geheimalpahbets eingefügt
        blocker[i] := true;
        STringGrid1.Cells[Position,1] := chr(i+64);
       end;
    end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin                                                       //Zufallsgenerator wird aktiviert
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):
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



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

ausblenden 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);             //diese uebergabe einfach loeschen dann kannst es normal nutzen


procedure TForm1.schluesselwort(geheimtext:string);      //muesste also lauten: TForm1.schluesselwort; 
var     i,j,wortlaenge:word;                             //variablen die du brauchst
        x:boolean;
Begin
        geheimtext:=lowercase(geheimtext);               //sichergehn das du nur kleinbuchstaben hast
        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);       //erste zeile des stringrids mit dem alphabet füllen 
                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



BeitragVerfasst: Di 28.11.06 22:59 
hallo peter56, jetzt sollte der link auch was anderes bringen:

Suche in der Entwickler-Ecke MONOALPHABETISCHE VERSCHLÜSSELUNG

PS: auch wäre etwas eigeninitiative angebracht. was du hier abziehst, zieht ja einen den letzten schuh aus... noch nicht mal 'n suchbegriff in die hilfe eingeben können... :evil: :evil: :evil:
Peter56 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 196

Windows Vista
Delphi 7 Prof.
BeitragVerfasst: Do 30.11.06 15:08 
Naja, ich würde ja gerne helfen, nur verstehe ich jetzt nicht mehr wirklich was du willst

user profile iconPeter56 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.