| Autor |
Beitrag |
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Mo 29.09.08 22:17
OK Ich habs geschafft^^ ich hätte nur die prozedur zerstueckeln festlegen und ein "(Sender: TObject)" dahintersetzen müssen ^^ geht jetzt soweit...
Jetzt hab ich zwar immer einen stackoverflow, weil er scheinbar meine if-schleife ignoriert, aber egal xD
wie mach ich das denn mit den delphi tags?
|
|
Die Muhkuh
      
Beiträge: 33
|
Verfasst: Mo 29.09.08 22:19
Es gibt keine If-Schleife!!! :zwinker:
Die Tags
[delphi]procedure Blubb;
begin
end;[/delphi]
Einfach ein [delphi][/delphi] um Deinen Code drum rum.
|
|
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Mo 29.09.08 22:22
xDXD ok ja ich habs nicht so mit begrifflichkeiten, außerdem steht auf nem flipchart in unserem computerraum ganz groß "Die If-Schleife in Delphi"
^^
ja das mit dem Stack Overflow isn bisschen blöd...ich schreib mal kurz die prozeduren, die damit zusammenhängen rein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.EingabeBtnClick(Sender: TObject); begin if Eingabe.text<>'' then Baum.einfuegen(Baum, Eingabe.text); Eingabe.clear; ActiveControl:=Eingabe; end;
procedure TForm1.zerstueckeln(Sender: TObject); var i:integer; begin if i+2<length(form1.memo1.Text) then form1.eingabe.text:=copy(form1.Memo1.text,i,i+2); i:=i+1; EingabeBtnClick(sender); zerstueckeln(sender) end;
procedure TForm1.Button1Click(Sender: TObject); begin if memo1.text<>'' then zerstueckeln(sender); end; |
|
|
Die Muhkuh
      
Beiträge: 33
|
Verfasst: Mo 29.09.08 22:26
Das Problem liegt an zerstückeln, das ins unendliche laufen wird.
Du deklarierst eine lokale Variable "i" und greifst direkt danach drauf zu, ohne sie zu initialisieren (der Compiler sollte das sowieso melden). Das kann nicht funktionieren.
Entweder Du initialisiert die Variable mit *etwas und darfst sie aber nicht lokal deklarieren oder Du machst aus dem ganzen eine For-Schleife (oder auch While-Schleife) und zerstückelst damit. Letzteren Weg würde ich bevorzugen.
|
|
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Mo 29.09.08 22:28
Dann sieht das so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.zerstueckeln(Sender: TObject); var i:integer; begin while i+2<length(form1.memo1.Text) do form1.eingabe.text:=copy(form1.Memo1.text,i,i+2); i:=i+1; EingabeBtnClick(sender); zerstueckeln(sender); end; |
Hab aber immernoch nen Stackoverflow
EDIT:
Ich glaub, der Fehler ist, dass i ja nicht festgelegt wird am anfang...wenn ich das aber rekursiv mache, kann ich ja nicht sagen
Delphi-Quelltext
und dann den anderen kram, weil er die dann ja immer wieder auf 1 macht....
Zuletzt bearbeitet von DaVinciFF7 am Mo 29.09.08 22:32, insgesamt 1-mal bearbeitet
|
|
Die Muhkuh
      
Beiträge: 33
|
Verfasst: Mo 29.09.08 22:32
Ich wiederhole mich nur ungerne
Die Muhkuh hat folgendes geschrieben: | Du deklarierst eine lokale Variable "i" und greifst direkt danach drauf zu, ohne sie zu initialisieren (der Compiler sollte das sowieso melden). Das kann nicht funktionieren.
|
Ich würde Dir noch empfehlen, das eine oder andere Grundlagentutorial zu lesen, bevor Du "wie wild" drauf los legst
Da Du übrigens eine Methode draus gemacht hast, kannst Du innerhalb der Methode auf das "form1." verzichten.
|
|
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Mo 29.09.08 22:34
Die Muhkuh hat folgendes geschrieben: | Ich wiederhole mich nur ungerne
Die Muhkuh hat folgendes geschrieben: | Du deklarierst eine lokale Variable "i" und greifst direkt danach drauf zu, ohne sie zu initialisieren (der Compiler sollte das sowieso melden). Das kann nicht funktionieren.
|
Ich würde Dir noch empfehlen, das eine oder andere Grundlagentutorial zu lesen, bevor Du "wie wild" drauf los legst
Da Du übrigens eine Methode draus gemacht hast, kannst Du innerhalb der Methode auf das "form1." verzichten. |
xD
Ja das mit dem Grundlagentutorial ist so ne sache^^
Ich leg ja nicht wie wild drauf los, prinzipiell hab ich ja einigermaßen Ahnung und das ist ja ne Hausaufgabe für den ganzen Kurs.
Ich müsste ja i einfach nur am Anfang auf 1 setzen, aber das ist ja dann blöd mit der Rekursion in der Prozedur.
Vorschläge?^^
EDIT:
Und nein ich kann nicht drauf verzichten^^ wenn ich das tue, kommt immer die Fehlermeldung "undeclared identifier"
EDIT2:
oh kann ich doch xD
Zuletzt bearbeitet von DaVinciFF7 am Mo 29.09.08 22:37, insgesamt 2-mal bearbeitet
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Mo 29.09.08 22:35
DaVinciFF7 hat folgendes geschrieben: | | xDXD ok ja ich habs nicht so mit begrifflichkeiten, außerdem steht auf nem flipchart in unserem computerraum ganz groß "Die If-Schleife in Delphi" |
Durchstreichen. Sofort. 
|
|
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Mo 29.09.08 22:42
Habs jetzt mal nicht-rekursiv probiert, dann läuft das programm aber einfach und hört auch nciht mehr auf. sieht so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.zerstueckeln(Sender: TObject); var i:integer; begin i:=1; while i+2<length(memo1.Text) do eingabe.text:=copy(Memo1.text,i,i+2); i:=i+1; EingabeBtnClick(sender); end; |
|
|
LexXis
      
Beiträge: 170
Erhaltene Danke: 3
|
Verfasst: Mo 29.09.08 23:23
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.zerstueckeln(Sender: TObject); var i:integer; begin i:=1; while i+2<length(memo1.Text) do begin eingabe.text:=copy(Memo1.text,i,i+2); i:=i+1; EingabeBtnClick(sender); end; end; |

|
|
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Di 30.09.08 09:59
Ok dankeschön, es geht jetzt
problem solved würd ich sagen 
|
|