blikk info infothek forum galerie sitemap

Bruchaddition

anfang zurueck weiter ende nach oben

Struktogramme:

Programmcode:

(* Schule : Gewerbeoberschule "Max Valier" Bozen
   Klasse : 3Ia
   Author : E.P. und P.S.(Gruppe4)
   Lizenz : GPL                                    *)

PROGRAM bruch_sum;
USESCrt;

CONST
(* Tabellenmaximum *)
  tabmax = 3;

TYPE
  t_bruch = RECORD
  (* Zaehler des Bruches *)
    zaehler: INTEGER;
  (* Nenner des Bruches *)
    nenner: INTEGER;
  END;
  bruchtab= ARRAY [1..tabmax] OF t_bruch;


(*--------genaueres zu ggT-Funktion----------*)
FUNCTION ggt(zaehler : INTEGER;
             nenner : INTEGER) : INTEGER;
VAR
  rest: INTEGER;
BEGIN
  rest := 1;
  WHILE rest <> 0 DO BEGIN
    rest := zaehler MOD nenner;
    zaehler:= nenner;
    nenner:= rest;
  END;
  ggt:= zaehler;
END;


(*-----------genaueres zu kgV-Funktion------------*)
FUNCTION kgv(nenner1 : INTEGER;
             nenner2: INTEGER) : INTEGER;
BEGIN
  kgv:= nenner1 * nenner2 DIV ggt(nenner1, nenner2);
END;


(*------Prozedurzum Kuerzen des Bruches-------*)
PROCEDURE kuerzen(VAR bruch3 : t_bruch);
VAR
  hilf: INTEGER;
BEGIN
  hilf := bruch3.zaehler;
  bruch3.zaehler:= bruch3.zaehler DIV ggt(hilf,bruch3.nenner);
  bruch3.nenner:= bruch3.nenner DIV ggt(hilf,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;


(*------------Additionsprozedur-------------- *)
PROCEDURE BrAdd(VAR ergebnis : t_bruch;
                    operand1 : t_bruch;
                    operand2 : t_bruch);
BEGIN
  IF operand1.nenner <> operand2.nenner THEN BEGIN
    ERWEITERN(operand1.zaehler,operand1.nenner, operand2.zaehler, operand2.nenner);
  END;     
  ergebnis.zaehler := operand1.zaehler + operand2.zaehler;
  ergebnis.nenner:= operand1.nenner;
  KUERZEN(ergebnis);
END;


(*=========Beginn des Hauptprogramms==========*)
VAR
  bruch: bruchtab;
BEGIN
  Writeln;
  Writeln(' Geben Sie bitte Ihre Brueche ein:');
  Writeln;
  (* Der Zaehler des 1. Bruches *)
  Write (' Zaehler1: ');
  Readln (bruch[1].zaehler);
  Writeln(' -----');
  (* Der Nenner des 1. Bruches *)
  Write (' Nenner1.: ');
  Readln (bruch[1].nenner);
  Kuerzen(bruch[1]);
  Writeln;Writeln;Writeln;
  (* Der Zaehler des 1. Bruches *)
  Write (' Zaehler2: ');
  Readln (bruch[2].zaehler);
  Writeln(' -----');
  (* Der Nenner des 1. Bruches *)
  Write (' Nenner2.: ');
  Readln (bruch[2].nenner);
  Kuerzen(bruch[2]);
  Writeln;Writeln;
  (* Aufruf der Additionsprozedur *)
  BrAdd(bruch[3],bruch[1], bruch[2]);
  (* Ausgabe des Ergebnisses *)
  Writeln(' Das Ergebnis lautet: ');
  Writeln;
  Writeln(' ', bruch[3].zaehler);
  Writeln(' --------------- ');
  Writeln;
  Writeln(' ',bruch[3].nenner);
  Readln;
END.


 

Zurück zur Theorieseite

Zur Anwendung mit Primfaktorenzerlegung

Weiter zu Bruchoperationen


 

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

 


 

nach oben