AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Funktion

Ein Thema von fwsp · begonnen am 4. Jan 2007 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
fwsp
(Gast)

n/a Beiträge
 
#1

Problem mit Funktion

  Alt 4. Jan 2007, 18:10
hallo,

ich hab ein problem mit der funktion equal. Bei der Zeile
Code:
Result := equal(pop(S1), pop(S2));
meckert der compiler:
Code:
[Fehler] stackar.pas(90): Inkompatible Typen: 'STACK' und 'procedure, untyped pointer or untyped parameter'
Kann mir vllt jemand sagen warum?

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.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Problem mit Funktion

  Alt 4. Jan 2007, 18:16
Wie soll das funktionieren, wenn Pop() keinen Rückgabewert besitzt?

PS: Benennst du deine Records immer in Uppercase ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#3

Re: Problem mit Funktion

  Alt 4. Jan 2007, 18:18
wenn pop keinen rückgabewert besitzt, köntte es natürlich daran liegen.
das ist nicht mein code. das hat mein programmiertechnik prof geschrieben.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
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