| Programmcode:
 {Schule : Gewerbeoberschule "Max Valier" BozenKlasse : 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);
 BEGINbruch1z:= 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)}
 |