Autor Beitrag
Krypt0
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 18.01.10 09:12 
Arbeite grade an einem Verschlüsselungsprogramm in der Schule. Das Programm funktioniert nicht richtig und ich habe keinen blassen schimmer, warum. Vor einiger Zeit hat noch alles geklappt, doch nachdem ich einige unrelevante Veränderungen daran vorgenommen habe, geht nichts mehr wie es gehen soll.
Ich habe das Projekt hier mal hochgeladen. Sorry wegen der Unübersichtlichkeit, aber es befindet sich zur Zeit halt noch im Aufbau...Bei Fragen einfach unten rein.

Hier der Link zur Datei:
ul.to/2h9vco

Edit:
Okay, ich werd nochmal kurz erklären, wie man vorgeht. Ins Memo1 kommt der zu verschlüssende Text. Ins Stringgrid1 sollen die Buchstaben, die für den Buchstaben links daneben ausgegeben werden sollen. Dann wird auf den Button "BOOM!" gedrückt und eigentlich sollte nun im Memo2 die Verschlüsselung erscheinen...
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 18.01.10 09:38 
Hallo,

"Geht nicht". Wer soll denn mit so einer Fehlerbeschreibung etwas anfangen können? :nixweiss:
Und du gönnst uns ganze 5 Zeilen Text(nach Edit 9)? Das klingt nun wirklich nach reiner Arbeitsersparnis für dich :zwinker:

Eine Entwicklungsumgebung liefert normalerweise Hinweise, was falsch ist. Wahrscheinlich kannst du diese nicht richtig deuten, woher auch :think: . Aber das ist mir doch noch etwas zu wenig Mühe, beschreibe bitte noch einmal genauer deine Änderungen, eventuelle Fehlermeldungen und, was genau passiert: Bekommst du keinen Text heraus, einen falsch verschlüsselten, usw?

Etwas dünn gesäht, die Informationslage hier..

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Mo 18.01.10 13:05, insgesamt 2-mal bearbeitet
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 18.01.10 10:00 
Na gut, stimmt. Ich seh ein, dass ich bei der Erklärung ein bisschen verkackt habe. Also hier erstmal der Teil von dem ich denke, das der Fehler hier irgendwo steckt.

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:
procedure TForm1.Button1Click(Sender: TObject);
var
lang, zahl : integer;
ch : string;

begin
zahl := 1;
lang := Length(Memo1.Text);
Edit1.text := inttostr(lang);
Memo2.text := '';

Repeat
ch := Memo1.text[zahl];
zahl := zahl + 1;
IF (ch = 'a'OR (ch = 'A'THEN ch := stringgrid1.Cells[0,0];
IF (ch = 'b'OR (ch = 'B'THEN ch := stringgrid1.Cells[1,0];
IF (ch = 'c'OR (ch = 'C'THEN ch := stringgrid1.Cells[2,0];
IF (ch = 'd'OR (ch = 'D'THEN ch := stringgrid1.Cells[3,0];
IF (ch = 'e'OR (ch = 'E'THEN ch := stringgrid1.Cells[4,0];
IF (ch = 'f'OR (ch = 'F'THEN ch := stringgrid1.Cells[5,0];
IF (ch = 'g'OR (ch = 'G'THEN ch := stringgrid1.Cells[6,0];
IF (ch = 'h'OR (ch = 'H'THEN ch := stringgrid1.Cells[7,0];
IF (ch = 'i'OR (ch = 'I'THEN ch := stringgrid1.Cells[8,0];
IF (ch = 'j'OR (ch = 'J'THEN ch := stringgrid1.Cells[9,0];
IF (ch = 'k'OR (ch = 'K'THEN ch := stringgrid1.Cells[10,0];
IF (ch = 'l'OR (ch = 'L'THEN ch := stringgrid1.Cells[11,0];
IF (ch = 'm'OR (ch = 'M'THEN ch := stringgrid1.Cells[12,0];
IF (ch = 'n'OR (ch = 'N'THEN ch := stringgrid1.Cells[13,0];
IF (ch = 'o'OR (ch = 'O'THEN ch := stringgrid1.Cells[14,0];
IF (ch = 'p'OR (ch = 'P'THEN ch := stringgrid1.Cells[15,0];
IF (ch = 'q'OR (ch = 'Q'THEN ch := stringgrid1.Cells[16,0];
IF (ch = 'r'OR (ch = 'R'THEN ch := stringgrid1.Cells[17,0];
IF (ch = 's'OR (ch = 'S'THEN ch := stringgrid1.Cells[18,0];
IF (ch = 't'OR (ch = 'T'THEN ch := stringgrid1.Cells[19,0];
IF (ch = 'u'OR (ch = 'U'THEN ch := stringgrid1.Cells[20,0];
IF (ch = 'v'OR (ch = 'V'THEN ch := stringgrid1.Cells[21,0];
IF (ch = 'w'OR (ch = 'W'THEN ch := stringgrid1.Cells[22,0];
IF (ch = 'x'OR (ch = 'X'THEN ch := stringgrid1.Cells[23,0];
IF (ch = 'y'OR (ch = 'Y'THEN ch := stringgrid1.Cells[24,0];
IF (ch = 'z'OR (ch = 'Z'THEN ch := stringgrid1.Cells[25,0];

Memo2.Text:= Memo2.text+ch;
Until
zahl = lang+1;




end;


Erstmal zu den Variablen:
'lang' ist eine Variable zum bestimmen der Länge des Textes, der übersetzt werden soll.
'ch' wird zum abspeichern, verändern und ausgeben der Buchstaben benutzt.
'zahl' ist eine integer-variable, die für ch benutzt wird. Nach jedem Buchstaben wird sie um 1 vergrößert, so dass 'ch' immer den nächsten Buchstaben annimmt.

Nun wird erstmal die Länge des Textes gemessen. Danach wird hintereinander jeder Buchstabe des Textes mithilfe von den Variablen 'zahl' und 'ch' gespeichert, verändert (je nachdem, was in der Tabelle steht), und ausgegeben.

Am Anfang hatte ich statt Memo-Feldern Edits benutzt...Doch daran dürfte der Fehler eigentlich nicht liegen, da ich mich daran erinnere, dass es auch mit Memos eine Zeit lang funktionierte. Ich glaube, der Fehler ist eingetreten, als ich eine zweite Stringgrid benutzt habe. Ich hatte vorher nur eine, habe dies aber geändert, weil ich eine Readonly-Grid haben wollte und eine andere, in die man was reinschreiben kann. Es bleibt mir aber ein Rätsel, wie das die gesammte Funktionalität des Programms verändert haben könnte.

Hoffem ihr könnt jetzt mehr damit anfangen. Entschuldige mich an dieser Stelle nochmal und werde mir in Zukunft mit Fragestellungen mehr Mühe geben... :)
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Mo 18.01.10 10:12 
Und wo genau bricht das Programm ab?
Gibts ne Exception? Was spricht der Debugger?
Was ist das eigentliche Problem? Du schreibst zwar, dass es nicht mehr funktioniert... aber unter "nicht funktionieren" kann vom Systemcrash bis zur Ausgabe falscher Daten alles drin sein.

_________________
Delphi: XE - OS: Windows 7 Professional x64
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 18.01.10 10:16 
Ups...stimmt natürlich :D

Also es wird entweder garnix ausgegeben oder einfach was falsches. Wenn was falsches ausgegeben wird, ist es nichts nachvollziehbares, irgendein Muster nachdem die Fehler auftreten oder so...
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Mo 18.01.10 10:51 
Der Fehler liegt an den vielen bedingten Anweisungen, welche immmer nacheinander durchlaufen werden! Anstatt einer Änderung können im Schlimmsten Fall 25 Änderungen in nur einem Durchlauf passieren.

Angenommen ch='A', dann wird in der ersten Anweisung ch verändert und sofern es nicht auf 'A' verändert wird, trifft bei den if-Anweisungen eine mindestens noch zu, sodass ch nochmals einen neuen Wert zugewiesen bekommt.

Lösung des Problems: Benutzung von case oder if ... then ... ELSE, sodass alle nachfolgenden Anweisungen immer in dem else-Zweig stehen und daher nicht ausgeführt werden. Alternativ kann auch eine zweite Variable für das Ausgabezeichen benutzt werden, sodass ch nicht verändert wird.
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 07.02.10 12:05 
Hey Leute,
tut mir Leid, wenn ich das alte Thema wieder raushole, aber ich hatte in letzter Zeit gar keine Zeit für das hier wegen Urlaub usw.. :)

Also ich habe die letzte Anweisung so gut ich konnte befolgt.

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:
zahl := 1;
Edit1.text := inttostr (Length(Memo1.Text));
Memo2.text := '';

Repeat
ch := Memo1.text[zahl];
zahl := zahl + 1;
IF (ch = 'a'OR (ch = 'A'THEN ch := stringgrid1.Cells[0,0]ELSE
IF (ch = 'b'OR (ch = 'B'THEN ch := stringgrid1.Cells[1,0]ELSE
IF (ch = 'c'OR (ch = 'C'THEN ch := stringgrid1.Cells[2,0]ELSE
IF (ch = 'd'OR (ch = 'D'THEN ch := stringgrid1.Cells[3,0]ELSE
IF (ch = 'e'OR (ch = 'E'THEN ch := stringgrid1.Cells[4,0]ELSE
IF (ch = 'f'OR (ch = 'F'THEN ch := stringgrid1.Cells[5,0]ELSE
IF (ch = 'g'OR (ch = 'G'THEN ch := stringgrid1.Cells[6,0]ELSE
IF (ch = 'h'OR (ch = 'H'THEN ch := stringgrid1.Cells[7,0]ELSE
IF (ch = 'i'OR (ch = 'I'THEN ch := stringgrid1.Cells[8,0]ELSE
IF (ch = 'j'OR (ch = 'J'THEN ch := stringgrid1.Cells[9,0]ELSE
IF (ch = 'k'OR (ch = 'K'THEN ch := stringgrid1.Cells[10,0]ELSE
IF (ch = 'l'OR (ch = 'L'THEN ch := stringgrid1.Cells[11,0]ELSE
IF (ch = 'm'OR (ch = 'M'THEN ch := stringgrid1.Cells[12,0]ELSE
IF (ch = 'n'OR (ch = 'N'THEN ch := stringgrid1.Cells[13,0]ELSE
IF (ch = 'o'OR (ch = 'O'THEN ch := stringgrid1.Cells[14,0]ELSE
IF (ch = 'p'OR (ch = 'P'THEN ch := stringgrid1.Cells[15,0]ELSE
IF (ch = 'q'OR (ch = 'Q'THEN ch := stringgrid1.Cells[16,0]ELSE
IF (ch = 'r'OR (ch = 'R'THEN ch := stringgrid1.Cells[17,0]ELSE
IF (ch = 's'OR (ch = 'S'THEN ch := stringgrid1.Cells[18,0]ELSE
IF (ch = 't'OR (ch = 'T'THEN ch := stringgrid1.Cells[19,0]ELSE
IF (ch = 'u'OR (ch = 'U'THEN ch := stringgrid1.Cells[20,0]ELSE
IF (ch = 'v'OR (ch = 'V'THEN ch := stringgrid1.Cells[21,0]ELSE
IF (ch = 'w'OR (ch = 'W'THEN ch := stringgrid1.Cells[22,0]ELSE
IF (ch = 'x'OR (ch = 'X'THEN ch := stringgrid1.Cells[23,0]ELSE
IF (ch = 'y'OR (ch = 'Y'THEN ch := stringgrid1.Cells[24,0]ELSE
IF (ch = 'z'OR (ch = 'Z'THEN ch := stringgrid1.Cells[25,0];
Memo2.Text:= Memo2.text+ch;
Until
(zahl = length(memo1.Text)-2);

end;


Er gibt jetzt den ersten Buchstaben des Textes richtig aus..Leider wars das auch schon :S
Das Programm macht danach nicht mehr weiter mit den anderen Buchstaben.
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mi 10.02.10 17:44 
sorry für den doppel-post...aber jemand da?
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 10.02.10 17:58 
- Mit welchem Text probierst du es?
- Was steht in Edit1.Text drin? (soll heißen, wie lang ist das Wort)
- Debugger benutzen.. Haltepunkt setzen -> Schritt für Schritt durchgehen. Warum lernt man sowas eigentlich nicht als erstes..

_________________
PROGRAMMER: A device for converting coffee into software.
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mi 10.02.10 20:16 
Die Abbruchbedingung für deine Schleife ist so nicht ganz korrekt.
Warum rechnest du denn da Length -2?

Im Moment werden die letzten 3 Zeichen von dem eingegebenen Text nicht bearbeitet
und bei Eingaben mit einer Länge von 0-3 Zeichen hast du eine Endlosschleife.
ausblenden Delphi-Quelltext
1:
2:
Until
  (zahl = length(memo1.Text)-2);

Gib mal nur ein einzelnes Zeichen in dein Memo ein:
- length(memo1.text) ist dann 1.
- Zahl ist nach dem ersten Durchlauf der Schleife aber schon 2.
Deine Schleife wird also nie abbrechen.


So sollte die Schleife richtig durchlaufen:
ausblenden Delphi-Quelltext
1:
2:
Until
(zahl > length(memo1.Text));
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Do 11.02.10 19:45 
Ich benutze den Text "ABC Test". Mit Leerzeichen also 8 Zeichen. Edit1 zeigt aber 10 (deshalb auch -2 bei der Abbruchbedingung...)

Lasse ich das -2 zwei weg, so erscheint bei mir im Memo2 "A[Leerzeichen,Absatz]", wenn ich mich nicht irre (und wenn ich das alphabet beibehalte)...

Sorry mit dem Schritt für Schritt durchgehen und dem Haltepunkt...hab mein ganzes Wissen aus der Schule und das haben wir nie wirklich behandelt. Könnte man das hier nochmal kurz erklären?
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 12.02.10 16:53 
user profile iconKrypt0 hat folgendes geschrieben Zum zitierten Posting springen:
Ich benutze den Text "ABC Test". Mit Leerzeichen also 8 Zeichen. Edit1 zeigt aber 10 (deshalb auch -2 bei der Abbruchbedingung...)

Die zwei zusätzlichen Zeichen resultieren vermutlich durch ein angehängtes Carriage Return und Line-Feed-Steuerzeichen am Ende des Textes. ;)
Die Funkion Trim() respektive TrimLeft() und TrimRight() entfernen diese jeweils am Ende eines Strings. :zwinker:
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 12.02.10 17:58 
Nebenbei: Du solltest dir unbedingt einmal die Funktionen LowerCase() sowie Chr() und Ord() ansehen. Dann sieht dein Code ein ganzes Stück sauberer aus, denn 26 Abfragealternativen sind absolut unsauber, unübersichtlich und unwartbar.

Zu Schritt für Schritt: Du klickst einfach am linken Rand auf eine Zeile, dann erscheint dort ein roter Punkt. Genauso geht der auch wieder weg. Wenn du dein Programm ausführst, bricht die Ausführung an dieser Zeile ab (bzw. an der Stelle im Programm, die dieser Zeile entspricht). Das ist praktisch, wenn du wissen willst, welche Variable zu welchem Zeitpunkt welchen Wert hat. Schau einfach mal hier (www.delphi-treff.de/delphi-ide/debugger/) und auf den folgenden Seiten zu Haltepunkten etc. nach bzw. lies sie dir schnell durch.