#include #include struct breuk { int teller; int noemer; }; breuk invoer(char *msg); void uitvoer(breuk b, char * msg); breuk bewerking(breuk b1, breuk b2); breuk som(breuk b1, breuk b2); breuk product(breuk b1, breuk b2); breuk verschil (breuk b1, breuk b2); breuk quotient(breuk b1, breuk b2); void vereenvoudig(breuk &b); int GGD(int a, int b); int kleinste(int a, int b); void main () { breuk br1, br2, prod, quot, bsom, versch; breuk (*fp)(breuk,breuk,&breuk); //pointer naar functie br1=invoer("breuk 1: "); br2=invoer("breuk 2: "); *fp = som fp(br1,br2) //output uitvoer(br1,""); uitvoer(br2,""); cout <> r.teller; cout << "noemer : "; cin >> r.noemer; return r; } void uitvoer(breuk b, char * msg) { cout << msg << b.teller << "/" << b.noemer << endl; } breuk som(breuk b1, breuk b2) { breuk r; b1.teller *=b2.noemer; b2.teller *= b1.noemer; r.teller = b1.teller + b2.teller; r.noemer = b1.noemer * b2.noemer; vereenvoudig(r); return r; } breuk product(breuk b1, breuk b2) { breuk r; r.teller = b1.teller * b2.teller; r.noemer = b1.noemer * b2.noemer; vereenvoudig(r); return r; } breuk verschil (breuk b1, breuk b2) { //verschil = -(som) breuk r; b2.teller = -(b2.teller); r = som(b1,b2); return r; } breuk quotient(breuk b1, breuk b2) {//quotiënt is product met omgekeerde breuk int dummy; breuk r; //omkeren dummy = b2.noemer; b2.noemer = b2.teller; b2.teller = dummy; //product r=product(b1,b2); return r; } void vereenvoudig(breuk &b) { int ggd = GGD(b.teller, b.noemer); b.teller /= ggd; b.noemer /= ggd; } int GGD(int a, int b) { int ggd=1; int max = kleinste(a,b); int ok = 0; for (int deler = max; deler>1 && ok == 0 ;deler--) { if(a % deler == 0 && b%deler ==0) { ggd = deler; ok = 1; cout << "ggd " << a << " " << b << " : " << ggd << endl; } } return ggd; } int kleinste (int a, int b) { if(abs(a)>abs(b)) { return b; } else { return a; } }