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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 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