![]() |
Problem mit Funktion
hallo,
ich hab ein problem mit der funktion equal. Bei der Zeile
Code:
meckert der compiler:
Result := equal(pop(S1), pop(S2));
Code:
Kann mir vllt jemand sagen warum?
[Fehler] stackar.pas(90): Inkompatible Typen: 'STACK' und 'procedure, untyped pointer or untyped parameter'
danke sehr.
Delphi-Quellcode:
function equal(S1, S2: STACK): Boolean;
begin if isempty(S1) and isempty(S2) then begin Result := True; end else if isempty(S1) and not isempty(S2) then begin Result := False; end else if not isempty(S1) and isempty(S2) then begin Result := False; end else begin if (top(S1).val = top(S2).val) then begin Result := equal(pop(S1), pop(S2)); end else begin Result := False; end; end; end;
Delphi-Quellcode:
unit stackar;
interface uses elemr; const maxs = 5; type STACK = record elts : array [1..maxs] of ELEMENT; ptr : integer; end; procedure empty(var s : STACK); procedure pop(var s : STACK); function top(s : STACK) : ELEMENT; procedure push(var s : STACK; e : ELEMENT); function equal(S1, S2: STACK): Boolean; implementation function isempty(s : STACK) : boolean; begin isempty := (s.ptr = 0) end; procedure mkErrorst(var s : STACK); begin s.ptr := maxs+1 end; function iserror(s : STACK) : boolean; begin iserror := (s.ptr > maxs) end; procedure empty(var s : STACK); begin s.ptr := 0 end; function top(s : STACK) : ELEMENT; begin if isempty(s) then begin top := errorel; writeln('Top: Stack Empty') end else if iserror(s) then begin top := errorel; writeln('Top: Stack broken') end else top := s.elts[s.ptr] end; procedure pop(var s : STACK); begin if isempty(s) then begin writeln('Pop: Tried to pop from empty stack. Bang.'); mkErrorst(s) end else if iserror(s) then writeln('Pop: Stack Empty') {do nothing} else s.ptr := pred(s.ptr) end; procedure push(var s : STACK; e : ELEMENT); begin if iserrel(e) then writeln('Push: Bad element') {do nothing} else if iserror(s) then writeln('Push: Stack broken') {do nothing} else if s.ptr = maxs then begin writeln('Push: Stack overflow. Bang.'); {stack full} mkErrorst(s) end else begin s.ptr := succ(s.ptr); s.elts[s.ptr] := e end end; end.
Delphi-Quellcode:
unit elemr;
interface type ELEMENT = record case elstate : (good,bad) of good : (val : integer) end; function errorel : ELEMENT; function iserrel(e : ELEMENT) : boolean; function mkel(v : integer) : ELEMENT; function elval(e : ELEMENT) : integer; implementation function errorel : ELEMENT; begin errorel.elstate := bad end; function iserrel(e : ELEMENT) : boolean; begin iserrel := e.elstate = bad end; function mkel(v : integer) : ELEMENT; begin mkel.elstate := good; mkel.val := v end; function elval(e : ELEMENT) : integer; begin if e.elstate = good then elval := e.val else begin writeln('Elval: Error element!'); elval := -99 end end; begin writeln('** Unit Elem: Integer Elements'); end.
Delphi-Quellcode:
program stackm(input, output);
{$APPTYPE CONSOLE} uses elem, stackar; var s : STACK; begin writeln('** Main: Stack Demo'); empty(s); push(s,1); push(s,2); writeln('1. Top: ',top(s)); pop(s); writeln('2. Top: ',top(s)); empty(s); pop(s); push(s,1); writeln('3. Top: ',top(s)); empty(s); push(s,-99); writeln('4. Top: ',top(s)); end. |
Re: Problem mit Funktion
Wie soll das funktionieren, wenn Pop() keinen Rückgabewert besitzt?
PS: Benennst du deine Records immer in Uppercase :gruebel: ? |
Re: Problem mit Funktion
wenn pop keinen rückgabewert besitzt, köntte es natürlich daran liegen. :oops:
das ist nicht mein code. das hat mein programmiertechnik prof geschrieben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz