Autor Beitrag
praesident118
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 29.02.08 18:11 
Hallo,

in der Schule haben wir bis vor kurzem noch in Pascal gearbeitet. Unser letztes Thema waren dabei Listen.

Damit müssen wir nun in Delphi weiterarbeiten.
Allerdings bekomme ich immer Fehler wenn ich Zeilen in folgender Form verwende:

ausblenden Delphi-Quelltext
1:
zhilf:=zhilf^.next;					

oder
ausblenden Delphi-Quelltext
1:
zhilf^.next=NIL;					


zur Überprüfung, ob der Zeiger auf Nil zeigt.

Der Fehler wird allerdings erst angezeigt, wenn ich einen Wert eingebe und dieser in die Liste geschrieben werden soll.

Ich komme einfach nicht weiter.

Vielen Dank für eure Hilfe
mfg

de präsi
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 29.02.08 18:14 
Kannst Du bitte deinen Code kurz im Kontext posten, da einzelne Fragmente in dieser Form nicht sehr aussagekräftig sind. Gerade dein zweites Code-Beispiel wäre in dieser Form nicht compilierbar.

Auch hilft oftmals die Angabe der Fehlermeldung ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
praesident118 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 29.02.08 18:22 
user profile iconBenBE hat folgendes geschrieben:
Kannst Du bitte deinen Code kurz im Kontext posten, da einzelne Fragmente in dieser Form nicht sehr aussagekräftig sind. Gerade dein zweites Code-Beispiel wäre in dieser Form nicht compilierbar.

Auch hilft oftmals die Angabe der Fehlermeldung ;-)


ok, es geht um folgendes Programmstück:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  init(zkopf);
  laeng:=length(edit1.Text);
  FOR i:=1 TO laeng DO
   BEGIN
    push(zkopf,edit1.text[i],i);
   END;


wir sollten eine 2. unit mit verschiedenen Funktionen schreiben, push ist ein Bestandteil dieser unit
hier die Procedur:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char;i:byte);
VAR zhilf,zneu:tzeiger;

BEGIN
 zhilf:=zkopf;

IF NOT(i=1) THEN
 BEGIN
 REPEAT
  zhilf:=zhilf^.next;
 UNTIL  zhilf^.next=NIL;
 END;
  new(zneu);
  zneu^.inhalt:=inhalt;
  zhilf^.next:=zneu;
  zneu^.next:=NIL;
END;


Ich hab schon versucht ein paar Veränderungen vorzunehmen, aber nichts hat geklappt. Die Variable "i" zu übernehmen war in Pascal auch nicht nötig. Dort hatte ich einfach überprüft, ob das Kopfelement der Liste auf NIL zeigt.

Hier noch schnell die Deklaration:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
TYPE ;
     tinhalt=char;
     tzeiger=^tknoten;
     tknoten= RECORD
               inhalt: tinhalt;
               next:tzeiger;
               END;

VAR zliste,zkopf :tzeiger;
    wahl:char;


danke für eure Hilfe
Einloggen, um Attachments anzusehen!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.02.08 18:29 
häng doch mal dein projekt (.pas, .dpr, .dfm) dran. dann kann man mal sehen wo er meckert...

... oder du schaust mal, wo er meckert... ;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 29.02.08 18:29 
Im Programm-Ablauf der Routine Push prüfst Du nie, ob zhilf einen Wert ungleich nil hat. Das ist aber nötig, damit Du überhaupt erfolgreich zhilf dereferenzieren kannst (also zhilf^ einen Wert enthält.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
praesident118 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 29.02.08 18:33 
user profile iconBenBE hat folgendes geschrieben:
Im Programm-Ablauf der Routine Push prüfst Du nie, ob zhilf einen Wert ungleich nil hat. Das ist aber nötig, damit Du überhaupt erfolgreich zhilf dereferenzieren kannst (also zhilf^ einen Wert enthält.


Könntest du mir viellt. mal die genaue Programmzeile aufschreiben, die du meinst?
In Pascal war das nicht nötig, da ist die selbe Prozedur in einem anderen Programm super gelaufen.
Daher weiß ich nicht was du genau meinst.

dankeee
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 29.02.08 18:55 
Beispiel 1, Zeile 10. Dort erfolgt der erste Zugriff auf zhilf, aber keine Prüfung wie if zhilf = nil then DosomethingToInitZHilf;

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
praesident118 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 29.02.08 19:20 
user profile iconBenBE hat folgendes geschrieben:
Beispiel 1, Zeile 10. Dort erfolgt der erste Zugriff auf zhilf, aber keine Prüfung wie if zhilf = nil then DosomethingToInitZHilf;


tut mir echt leid, aber ich versteh das nicht

kannst du mir viellt. mal einfach nur die 2 zeilen, die dafür nötig sind aufschreiben?

pascal brauchte ich sowas keineswegs und ich weiß jetzt wirklich nicht, wo wie was rein muss...

vor allem, wie soll ich die variable zhilf initialisieren?


danke, auch wenn ich mich wohl ein bisschen dämlich anstelle