Re: Fehlersuche
Nein, case-Labels müssen Konstanten sein.
|
Re: Fehlersuche
hm...
müssen if abfragen auch konstant sein ? kann ich das ganze mit if machen ? |
Re: Fehlersuche
If geht, wird aber schnell unübersichtlich.
|
Re: Fehlersuche
okay
danke |
Re: Fehlersuche
Liste der Anhänge anzeigen (Anzahl: 1)
:shock: Irgendwie konnte ich das da oben nicht stehen lassen...
|
Re: Fehlersuche
hey,
2 sachen, 1) ich weiß nicht genau was dein code machen soll xD (ist wohl schon (wiedeR) zu spät für mich xD 2) egal was man nach dem starten eingibt (zahlen buchstaben egal) er schreibt nur " Codiert : Dekodeiert:" aber keine ergebnisse ... lg |
Re: Fehlersuche
Wieviel Sekunden hast Du Dir den Quelltext angesehen? He? :roll:
Die Konstante "Table" ist die "Übersetzungstabelle" zwischen den Zeichen und ihren Codes. Suche im Quelltext nach "Table", dann wirst Du feststellen, dass nur 'a' und 'b' einen Code zugeordnet bekommen haben. Gib in der Eingabe also nur kleine As und Bs ein, oder erweitere die Tabelle... :warn: Auweia... :? |
Re: Fehlersuche
hey,
tut mir leid ^^ hast natürlich recht ... war wohl gestern einfach zu spät *sorry* |
Re: Fehlersuche
hey, ich bin bei meinem nächsten Probelm angekommen und hoffe auch hier auf eure hilfe.
Mein Code habe ich jetzt noch ein wenig verändert und er seith nun so aus
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var String2 : string; y : integer; Schalter : integer; sTemp1 : string; sTemp : integer ; Va,Vb,Vc : integer; begin // Variablen Deklarieren // String2 := Copy(Edit2.Text,1, Length(Edit2.Text)); y:= StrToInt(Copy(Edit1.Text,1,1)); Schalter := 0; Edit3.Text := ''; Va := 1234; // erstmal zu testzwecken fest deffiniert später dann halt als richtige Variablen... Vb := 5678; vc := 9101; // String stückeln// repeat begin sTemp1:= Copy(String2, 1, y); sTemp := StrToInt(sTemp1); If (sTemp = Va) Then (Edit3.Text := Edit3.Text + 'a'); If (sTemp = Vb) Then (Edit3.Text := Edit3.Text + 'b'); If (sTemp = Vc) Then (Edit3.Text := Edit3.Text + 'c'); inc(y) ; String2 := Copy(Edit2.Text,y, Length(Edit2.Text)); If (y >= (Length(Edit2.Text))) Then Schalter := 1 ; End; until (schalter = 1) ; If (Schalter = 1) Then ShowMessage('Fertig'); end; so nun zu mienem Problem. Also wenn ich in dem Edit2 (also da wo mein 'verschlüßelter Text sein sollte' mehr als nur die Zahlen für 2 Buchstaben also z.b. 12345678 habe, dann spinnt das Programm. habe ich z.b. in Edit2 '123456789101' was ja eigendlich 'abc' entsprechen müsste, bekomme ich trotzdem nur 'ac'. er gibt mir bei mehr als 2 "Buchstaben" habe gibt das Programm mir nur den ersten und den letzten Buchstaben aus ... nicht alle 3 oder alle 4 ... lg |
Re: Fehlersuche
weiß keiner wodrann das liegen könnte ?
|
Re: Fehlersuche
Hallo gangs-taas,
ich wette es gibt mehr als ein Dutzend Leute hier, die wissen wo es klemmt. hast Du einmal selbst versucht, heraus zu bekommen, was Dein Code macht? Vielleicht solltest Du erst einmal versuchen Deinen Code sinnvoll zu formatieren, dann fällt Dir vielleicht das eine oder andere auf. Und die Vergabe von sinnvollen Namen für Variablen hilft da ungemein weiter. Wenn Du eine Integer-Variable als Index einsetzt, dann wäre ein Verweis darauf im Namen ganz gut, weil Du dann innerhalb Deines Codes ganz gut nachvollziehen kannst was Du erreichen willst. Vielleicht könntest Du mir erklären was Du mit dem Konstrukt
Delphi-Quellcode:
bezweckst?
repeat
begin sTemp1:= Copy(String2, 1, y); ....... End; until (schalter = 1) ; Ich versteh das nicht. Ach ja was macht inc(y) ? Gruß K-H |
Re: Fehlersuche
inc steht für increment, was zu Deutsch erhöhen heißt und inkrementiert die Variable y um jeweils 1 bei jedem Aufruf. Ist ein dependant zu dem in C verwendeten y++.
Edit: gleiche Syntax wäre y := y+1; |
Re: Fehlersuche
okay ich erkläre am code okay ?
also zu aller est, es ist ein Entschlüsselungs programm wobei jedem Buchstaben im Verschlüsselten Zustand 'y' Zalhen zu geordnet sind.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var String2 : string; // der Text den ich Endschöüsseln möchte y : integer; // die Anzahl der Zahlen, die später einen Bustaben bilden Schalter : integer; sTemp1 : string; // die ersten 'y' Zahlen vom ganzen Textfeld sTemp : integer ; // benötigt für die If abfrage Va,Vb,Vc : integer; // Variablen, die beinhalten, welche Zahlenkombination welchem Bustaben entspricht begin // Variablen Deklarieren // String2 := Copy(Edit2.Text,1, Length(Edit2.Text)); // Erstmal den ganzen 'verschlüsselten' Text kopieren y:= StrToInt(Copy(Edit1.Text,1,1)); // die Anzahl der Zahlen, die einen Bustaben bilden, ist in dem Edit1 Feld die erst Zahl Schalter := 0; // gebraucht für die repeat schleife Edit3.Text := ''; // das ausgeabe Textfeld leeren Va := 1234; // \ Vb := 5678; // Welche Zahlenkombi entspricht 'a' , 'b' , 'c' erstmal zu testzwecken fest deffiniert später dann halt als richtige Variablen... vc := 9101; // / // String stückeln// repeat begin sTemp1:= Copy(String2, 1, y); // Die ersten 'y' Zeichen von dem 'verschlüsselten Text' Abtrennen sTemp := StrToInt(sTemp1); // musste sein weil er sonst bei der if abfrage gesponnen hat If (sTemp = Va) Then (Edit3.Text := Edit3.Text + 'a'); // prüfen ob die ersten 'y' Zahlen einem Bustaben entsprechen If (sTemp = Vb) Then (Edit3.Text := Edit3.Text + 'b'); If (sTemp = Vc) Then (Edit3.Text := Edit3.Text + 'c'); inc(y) ; // für den nachfolgenden Schritt gebraucht String2 := Copy(Edit2.Text,y, Length(Edit2.Text)); // kopiere vom Vollständingen verschlüsselten Text nur die Zeichen von einem Zeichen NACH 'y' (dafür hier auch der voreherige schritt) bis zum ende If (y >= (Length(Edit2.Text))) Then // Wenn y größer oder gleich ist wie der ganze verschlüsselte text, soll die repeat-schleife aufhören Schalter := 1 ; End; until (schalter = 1) ; If (Schalter = 1) Then ShowMessage('Fertig'); end; |
Re: Fehlersuche
hehe es ist jetzt noch unübersichtlicher aber ich weiß nicht wie ich das ändern kann...
|
Re: Fehlersuche
1.Also was mir so spontan mal auffällt ist, dass die Inkrementierung von Y nicht ganz zweckmäßig ist.
Soll heißen: Deine verschlüsselten Buchstaben bestehen aus einer Zahl der Länge Y. Im ersten Durchlauf stimmt das auch noch. Dann wird aber Y um eins erhöht, wodurch er im zweiten Durchlauf Y+1 Zahlen einliest und versucht diese zu erkennen. So wird das nix. 2.
Delphi-Quellcode:
Stell dir vor, deine Schleife befindet sich im 2. (3.,4.,...) Durchlauf. Fällt dir was auf?
sTemp1:= Copy(String2, 1, y);
|
Re: Fehlersuche
okay
stimmt. hab das nun so umgeändert. nun funktioniert das, dass ich hitnher her z.b. abc angezeigt bekomme nur kriegt ich nun - wieder- die fehlermeldung '' ist kein gültiger integer-wert. durch breakpoints weiß ich dass er in der zeile ist, die ich auch verändert habe.. ich weiß nur nicht wieso ...
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var String2 : string; y : integer; Schalter : integer; sTemp1 : string; sTemp : integer ; x: integer; // später stat 'y' begin // Variablen Deklarieren // String2 := Copy(Edit2.Text,1, Length(Edit2.Text)); y:= StrToInt(Copy(Edit1.Text,1,1)); Schalter := 0; Edit3.Text := ''; Va := 1234; Vb := 5678; vc := 9101; x := y ; // hier ist mein fehler drin ... wobei 'y' ja eigendlich integer ist und x dann ja auch sein müsste oder ? // String stückeln// repeat begin sTemp1:= Copy(String2, 1, y); sTemp := StrToInt(sTemp1); If (sTemp = Va) Then (Edit3.Text := Edit3.Text + 'a'); If (sTemp = Vb) Then (Edit3.Text := Edit3.Text + 'b'); If (sTemp = Vc) Then (Edit3.Text := Edit3.Text + 'c'); inc(x) ; String2 := Copy(Edit2.Text,x, Length(Edit2.Text)); If (y >= (Length(Edit2.Text))) Then Schalter := 1 ; End; until (schalter = 1) ; If (Schalter = 1) Then ShowMessage('Fertig'); end; |
Re: Fehlersuche
wisst ihr woran das liegen könnte ?
|
Re: Fehlersuche
Zitat:
|
Re: Fehlersuche
oh man ich weiß nicht wie ich den nachvollziehbarer gestallten soll.
und was er machen soll hab ich doch schon erklärt ?! |
Re: Fehlersuche
Mach doch mal einen Schreibtischtest, dann siehst Du, wo es hakt.
|
Re: Fehlersuche
schreibtischtest ?
|
Re: Fehlersuche
außerdem weiß ich ja WO es hackt nur nicht WIESO
|
Re: Fehlersuche
[OT]
Du kannst deinen letzten Beitrag auch editieren und musst nicht immer einen neuen verfassen. [/OT] |
Re: Fehlersuche
|
Re: Fehlersuche
Hallo,
um das ganze mit dem übersichtlich machen mal zu erklären, du könntest deinen Quellcode z.B. so aufbauen.
Delphi-Quellcode:
Dieser Code hat jetzt mit deinem Code nichts zu tun, er sollte dir nur mal zeigen, wie man einen Code vernünftig aufbauen kann. Wichtig wäre es, wenn Du als erstes deinen Var. mal aussagekräftige Namen gibst. Dann weiß man nämlich schon was die machen sollen. Und wenn du dann noch den Code passend setzen tust, ist dieser auch übersichtlicher und man kann besser helfen.
procedure TForm1.Button2Click(Sender: TObject);
var Start : string; Schlüssel : integer; Schalter: integer; Temp1 : string; Temp2 : integer ; begin Start := Copy(StartEdit.Text,1, Length(EndEdit.Text)); Schlüssel:= StrToInt(Copy(StartEdit.Text,1,1)); Schalter := 0; NochEinEdit.Text := ''; if Schlüssel = Schalter then begin ShowMessage('Das ist mein Code'); end else begin ShowMessage('Das ist ein andere Text'); end; end; Gruß Jens |
Re: Fehlersuche
okay jens ich macht das ...
aber ich glaub das hat nichts mit meinem problem zu tun das mit dem schreibtischtest hab ich ja schon versucht xD weißt du denn wo der fehler ist ? mein problem ist halt, dass ich geschrieben habe x := y durch einen Breakpoint weiß ich, dass er y mit 4 deffiniert. nun gibt er x aber den wert 0. und das verstehe ich nicht. warum ist x denn nicht auch 4 ? |
Re: Fehlersuche
Du musst die Variablen in der Zeile nach der Zuweisung untersuchen.
[edit] Buchstabendreher [/edit] |
Re: Fehlersuche
Wenn du den Breakpoint in der Zeile hast wo die Var. zugewiesen wird, geht das nicht. Taste dann mal mit F7 durch und schau mal eine Zeile später nach dem Wert der Var.
Zitat:
Gruß Jens |
Re: Fehlersuche
okay
also ein fehler hat sich erledigt nachdem ich das noc hnen bischen verändert habe, dafür ist nun ein anderer fehler da. ich werde das jetzt erst einmal schön übersichtlich machen und dabei hoffent, dass sich der fehler wieder von selbst behebt :-D :-D |
Re: Fehlersuche
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz