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.