Einzelnen Beitrag anzeigen

grenzgaenger
(Gast)

n/a Beiträge
 
#12

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:44
hab dir mal zwei fehler im constructor und destructor korrigiert:

Delphi-Quellcode:
UNIT mBruch;

INTERFACE

USES Math;

TYPE
  TBruch = CLASS
  strict private
    zZaehler: integer;
    zNenner: integer;

  protected

  public
    CONSTRUCTOR init;
    PROCEDURE setzeZaehler(pZaehler: integer);
    PROCEDURE setzeNenner(pNenner: integer);
    FUNCTION gibZaehler: integer;
    FUNCTION gibNenner: integer;
    FUNCTION gibDezimalzahl: extended;
    FUNCTION ggt(zZaehler, zNenner: integer): integer;
    PROCEDURE ErweitereUm(pFaktor: integer);
    PROCEDURE KuerzeUm(pFaktor: integer);
    PROCEDURE KuerzeVoll;
    //procedure KehreUm ;
    DESTRUCTOR gibFrei;
  published

  END;

IMPLEMENTATION

{Bruch}

CONSTRUCTOR TBruch.init;
BEGIN
  inherited create; //nicht vergessen
  zZaehler := 0;
  zNenner := 1;
END;

PROCEDURE TBruch.setzeZaehler(pZaehler: integer);
BEGIN
  IF zNenner <> 0 THEN
  BEGIN
    zZaehler := pZaehler;
  END;
END;

PROCEDURE TBruch.setzeNenner(pNenner: integer);
BEGIN
  IF zZaehler <> 0 THEN
  BEGIN
    zNenner := pNenner;
  END;
END;

FUNCTION TBruch.gibZaehler;
BEGIN
  Result := zZaehler;
END;

FUNCTION TBruch.gibNenner;
BEGIN
  Result := zNenner;
END;

FUNCTION TBruch.GibDezimalzahl;
BEGIN
  Result := zZaehler / zNenner;
END;

PROCEDURE TBruch.ErweitereUm(pFaktor: integer);
BEGIN
  IF pFaktor <> 0 THEN
  BEGIN
    zZaehler := zZaehler * pFaktor;
    zNenner := zNenner * pFaktor;
  END;
END;

PROCEDURE TBruch.KuerzeUm(pFaktor: integer);
BEGIN
  IF (zZaehler mod pFaktor = 0) and (zNenner mod pFaktor = 0) THEN
    zZaehler := zZaehler div pFaktor;
  zNenner := zNenner div pFaktor;
END;

FUNCTION TBruch.ggt(zZaehler, zNenner: integer): integer;
BEGIN
  IF zZaehler = zNenner THEN
    Result := zZaehler
  ELSE
    Result := ggt(min(zNenner, zZaehler), abs(zZaehler - zNenner));
END;

PROCEDURE TBruch.KuerzeVoll;
BEGIN
  self.KuerzeUm(ggT(zZaehler, zNenner));
END;

DESTRUCTOR TBruch.gibFrei;
BEGIN
  free; //nicht vergessen
END;


END.
du solltest nicht vergessen die gerbten methoden für die initalisierung und freigabe aufzurufen, sonst wirst noch experte mit dem debugger . rekursionen habt ihr ja schon integriert.

ausserdem, sollten klassen resp. typen mit "T" beginnen, damit man weiss was man anfasst.
  Mit Zitat antworten Zitat