blikk info infothek forum galerie sitemap

Rechnen mit Brüchen in Pascal

anfang zurueck weiter ende nach oben

Programmcode:

{Schule : Gewerbeoberschule "Max Valier" Bozen
 Klasse : 3 Ia
 Autor  : P.S. / E.P. (Gruppe 4)
 Lizenz : GPL                                     }

PROGRAM Bruchrechnen;
USES CRT;
CONST tabmax = 3;
TYPE
    t_bruch = RECORD
      zahler: INTEGER;
      nenner: INTEGER;
  END;
  bruchtab= ARRAY [1..tabmax] OF t_bruch;

(*---------------ggT-Funktion---------------------*)
FUNCTION ggt(wert1 : INTEGER;
             wert2 : INTEGER) : INTEGER;
VAR
  rest: INTEGER;
BEGIN
  WHILE rest <> 0 DO BEGIN
    rest := wert1 MOD wert2;
    wert1:= wert2;

          wert2:= rest;
  END;
  ggt:= wert1;
END;


(*----------------kgV-Funktion------------------*)

FUNCTION kgv(wert01 : INTEGER;
            wert02: INTEGER) : INTEGER;
BEGIN

   kgv:= wert01 * wert02 DIV ggt(wert01, wert02);
END;

(*---------Prozedur zum Kuerzen der Brueche------*)
PROCEDURE kuerzen(VAR bruch3 : t_bruch);
VAR

    h : INTEGER; (* Hilfsvariable *)
BEGIN
  h := bruch3.zahler;
  bruch3.zahler:= bruch3.zahler DIV ggt(h, bruch3.nenner);

   bruch3.nenner:= bruch3.nenner DIV ggt(bruch3.nenner);
END;

(*-------Prozedur zum Erweitern der Brueche-------*)
PROCEDURE erweitern(VAR bruch1z : INTEGER;
                    VAR bruch1n : INTEGER;

                                                  VAR bruch2z : INTEGER;
                    VAR bruch2n : INTEGER);

BEGIN
  bruch1z:= kgv(bruch1n, bruch2n) DIV bruch1n *   bruch1z;
  bruch1n := kgv(bruch1n, bruch2n);

   bruch2z:= kgv(bruch1n, bruch2n) DIV bruch2n *   bruch2z;
   bruch2n:= kgv(bruch1n, bruch2n);
END;

(*-------Prozedur zum Addieren der Brueche--------*)
PROCEDURE bradd(VAR erg   : t_bruch;

                                         oper1  : t_bruch;
                    oper2 : t_bruch);
BEGIN
  IF oper1.nenner <> oper2.nenner THEN BEGIN
  (* gemeinsamer Nenner muss sein*)
    ERWEITERN(oper1.zahler,oper1.nenner, oper2.zahler, oper2.nenner);
  END;
  erg.zahler:= oper1.zahler + oper2.zahler;
  (*Zaehler werden summiert *)
  erg.nenner:= oper1.nenner;
  KUERZEN(erg);
END;

(*------Prozedur zum Subtrahieren der Brueche-----*)
PROCEDURE brsub(VAR erg : t_bruch;
                  oper1 : t_bruch;
                  oper2 : t_bruch);
BEGIN
  ERWEITERN(oper1.zahler, oper1.nenner, oper2.zahler, oper2.nenner);
  erg.zahler:= oper1.zahler - oper2.zahler;
  (*Zaehler werden subtrahiert*)
  erg.nenner:= oper1.nenner;
  KUERZEN(erg);
END;

(*----Prozedur zum Multiplizieren zweier Brueche---*)
PROCEDUREbrmul(VAR erg   : t_bruch;
                   oper1 : t_bruch;
                   oper2 : t_bruch);
BEGIN
  erg.zahler:= oper1.zahler * oper2.zahler;
  (* Zaehler und Nenner werden multipliziert *)
  erg.nenner:= oper1.nenner * oper2.nenner;       
  KUERZEN(erg);
END;

(*-----Prozedur zum Dividieren zweier Brueche-----*)
PROCEDURE brdiv(VAR erg : t_bruch;
                  oper1 : t_bruch;
                  oper2 : t_bruch);
BEGIN
  erg.zahler:= oper1.zahler DIV oper2.zahler;
  (*Zaehler und Nenner werden dividiert*)
  erg.nenner:= oper1.nenner DIV oper2.nenner;  
  KUERZEN(erg);
END;


(*============Beginn des Hauptprogramms===========*)
VAR
  operant: CHAR; (* Operatorwahl *)
  bruch : bruchtab; (* Bruch *)
BEGIN
CLRSCR;
  (*Einlesen*)
  WRITELN;
  WRITELN;
  WRITELN(' Geben Sie bitte Ihre Brueche ein:');
  WRITELN;
  WRITE (' Zaehler1: ');
  READLN (bruch[1].zahler);
  WRITELN(' ---');
  WRITE (' Nenner1.: ');
  READLN (bruch[1].nenner);
  KUERZEN(bruch[1]);
  WRITELN;
  WRITELN;
  WRITELN;
  WRITE (' Zaehler2: ');
  READLN (bruch[2].zahler);
  WRITELN(' ---');
  WRITE (' Nenner2.: ');
  READLN (bruch[2].nenner);
  KUERZEN(bruch[2]);
  WRITELN;
  WRITELN;
  WRITELN;
  WRITELN;
  WRITELN;
  WRITELN(' Operanten:');
  WRITELN(' (+) ');
  WRITELN(' (-) ');
  WRITELN(' (*) ');
  WRITELN(' (/) ');
  REPEAT
    WRITE (' Ihre Wahl?.. ');
    READLN (operant);
  UNTIL (operant='+') OR (operant='-') O (operant='*') OR (operant='/');
  (*Rechnung wird durchgefuehrt*)
  CASEoperant OF
    '+':BEGIN
          BRADD(bruch[3],bruch[1], bruch[2]);
        END;
    '-':BEGIN
          BRSUB(bruch[3],bruch[1], bruch[2]);  
        END;
    '*':BEGIN
          BRMUL(bruch[3],bruch[1], bruch[2]);  
        END;
    '/':BEGIN
          BRDIV(bruch[3],bruch[1], bruch[2]);
         END;
  END;

  (*-------------Bruch wird ausgegeben------------*)
  WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;
  WRITELN(' Das Ergebnis lautet: ');
  WRITELN(' ',bruch[3].zahler);
  WRITELN(' ---');
  WRITELN(' ',bruch[3].nenner);
  READLN;
END.

{Autor:P.S./E.P.(Gruppe4)}

nach oben