Delphi-PRAXiS
Seite 6 von 7   « Erste     456 7      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehlersuche (https://www.delphipraxis.net/132179-fehlersuche.html)

p80286 9. Apr 2009 09:03

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:
repeat
begin
  sTemp1:= Copy(String2, 1, y);
  .......
End;
until (schalter = 1) ;
bezweckst?

Ich versteh das nicht.


Ach ja was macht inc(y) ?

Gruß
K-H

quendolineDD 9. Apr 2009 09:21

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;

gangs-taas 9. Apr 2009 09:44

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;

gangs-taas 9. Apr 2009 09:54

Re: Fehlersuche
 
hehe es ist jetzt noch unübersichtlicher aber ich weiß nicht wie ich das ändern kann...

ToFaceTeKilla 9. Apr 2009 10:12

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:
sTemp1:= Copy(String2, 1, y);
Stell dir vor, deine Schleife befindet sich im 2. (3.,4.,...) Durchlauf. Fällt dir was auf?

gangs-taas 9. Apr 2009 14:26

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;

gangs-taas 9. Apr 2009 16:32

Re: Fehlersuche
 
wisst ihr woran das liegen könnte ?

Panthrax 9. Apr 2009 16:41

Re: Fehlersuche
 
Zitat:

Zitat von p80286
(...)

Ich wette, es gibt mehr als ein Dutzend Leute hier, die wissen wo es klemmt.
Hast Du einmal selbst versucht, herauszubekommen, 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.

(...)


gangs-taas 9. Apr 2009 16:51

Re: Fehlersuche
 
oh man ich weiß nicht wie ich den nachvollziehbarer gestallten soll.
und was er machen soll hab ich doch schon erklärt ?!

DeddyH 9. Apr 2009 16:53

Re: Fehlersuche
 
Mach doch mal einen Schreibtischtest, dann siehst Du, wo es hakt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 6 von 7   « Erste     456 7      

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