Delphi-PRAXiS
Seite 2 von 2     12   

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)

DeddyH 7. Apr 2009 19:06

Re: Fehlersuche
 
Nein, case-Labels müssen Konstanten sein.

gangs-taas 7. Apr 2009 19:08

Re: Fehlersuche
 
hm...
müssen if abfragen auch konstant sein ?

kann ich das ganze mit if machen ?

DeddyH 7. Apr 2009 19:11

Re: Fehlersuche
 
If geht, wird aber schnell unübersichtlich.

gangs-taas 7. Apr 2009 19:39

Re: Fehlersuche
 
okay
danke

Panthrax 7. Apr 2009 20:30

Re: Fehlersuche
 
Liste der Anhänge anzeigen (Anzahl: 1)
:shock: Irgendwie konnte ich das da oben nicht stehen lassen...

gangs-taas 7. Apr 2009 21:38

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

Panthrax 7. Apr 2009 22:14

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... :?

gangs-taas 8. Apr 2009 09:46

Re: Fehlersuche
 
hey,
tut mir leid ^^
hast natürlich recht ...

war wohl gestern einfach zu spät

*sorry*

gangs-taas 8. Apr 2009 20:51

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

gangs-taas 9. Apr 2009 08:20

Re: Fehlersuche
 
weiß keiner wodrann das liegen könnte ?

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.

gangs-taas 9. Apr 2009 16:59

Re: Fehlersuche
 
schreibtischtest ?

gangs-taas 9. Apr 2009 17:03

Re: Fehlersuche
 
außerdem weiß ich ja WO es hackt nur nicht WIESO

BullsEye 9. Apr 2009 17:16

Re: Fehlersuche
 
[OT]
Du kannst deinen letzten Beitrag auch editieren und musst nicht immer einen neuen verfassen.
[/OT]

DeddyH 9. Apr 2009 17:20

Re: Fehlersuche
 
Schreibtischtest

Jens Hartmann 9. Apr 2009 17:23

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:
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;
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.

Gruß Jens

gangs-taas 9. Apr 2009 17:26

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 ?

DeddyH 9. Apr 2009 17:30

Re: Fehlersuche
 
Du musst die Variablen in der Zeile nach der Zuweisung untersuchen.

[edit] Buchstabendreher [/edit]

Jens Hartmann 9. Apr 2009 17:33

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:

Zitat von gangs-taas
okay jens ich macht das ...
aber ich glaub das hat nichts mit meinem problem zu tun

Das ist schon klar, aber man kann dir besser helfen, weil wir es dann besser lesen können.

Gruß Jens

gangs-taas 9. Apr 2009 18:16

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

Panthrax 9. Apr 2009 18:48

Re: Fehlersuche
 
Zitat:

Zitat von gangs-taas
Ich werde das jetzt erst einmal schön übersichtlich machen und dabei hoffen, dass sich der Fehler wieder von selbst behebt.

:balloon:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
Seite 2 von 2     12   

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