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)}
|