You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.2 KiB
88 lines
2.2 KiB
/*
|
|
* ex_07.c
|
|
*
|
|
* Created on: Jun 16, 2013
|
|
* Author: delmadord
|
|
*/
|
|
|
|
// Fuctions for working with fractions
|
|
|
|
#include <stdio.h>
|
|
|
|
struct fraction {
|
|
int numerator, denominator;
|
|
};
|
|
|
|
struct fraction reduce(struct fraction f);
|
|
struct fraction add(struct fraction f1, struct fraction f2);
|
|
struct fraction substract(struct fraction f1, struct fraction f2);
|
|
struct fraction multiply(struct fraction f1, struct fraction f2);
|
|
struct fraction divide(struct fraction f1, struct fraction f2);
|
|
|
|
|
|
int main() {
|
|
struct fraction f, f1, f2;
|
|
printf("fraction 1: ");
|
|
scanf("%d / %d", &f1.numerator, &f1.denominator);
|
|
printf("fraction 2: ");
|
|
scanf("%d / %d", &f2.numerator, &f2.denominator);
|
|
|
|
f = add(f1, f2);
|
|
printf("added: %d/%d\n", f.numerator, f.denominator);
|
|
f = substract(f1, f2);
|
|
printf("substracted: %d/%d\n", f.numerator, f.denominator);
|
|
f = multiply(f1, f2);
|
|
printf("multiplied: %d/%d\n", f.numerator, f.denominator);
|
|
f = divide(f1, f2);
|
|
printf("divided: %d/%d\n", f.numerator, f.denominator);
|
|
|
|
return 0;
|
|
}
|
|
|
|
struct fraction reduce(struct fraction f) {
|
|
int remainder;
|
|
struct fraction g = f;
|
|
|
|
while (g.denominator != 0) {
|
|
remainder = g.numerator % g.denominator;
|
|
g.numerator = g.denominator;
|
|
g.denominator = remainder;
|
|
}
|
|
// g.numerator is the GCD of both now
|
|
f.numerator /= g.numerator;
|
|
f.denominator /= g.numerator;
|
|
|
|
return f;
|
|
}
|
|
|
|
struct fraction add(struct fraction f1, struct fraction f2) {
|
|
struct fraction f;
|
|
f.numerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
|
|
f.denominator = f1.denominator * f2.denominator;
|
|
|
|
return reduce(f);
|
|
}
|
|
|
|
struct fraction substract(struct fraction f1, struct fraction f2) {
|
|
struct fraction f;
|
|
f.numerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
|
|
f.denominator = f1.denominator * f2.denominator;
|
|
|
|
return reduce(f);
|
|
}
|
|
|
|
struct fraction multiply(struct fraction f1, struct fraction f2) {
|
|
struct fraction f;
|
|
f.numerator = f1.numerator * f2.numerator;
|
|
f.denominator = f1.denominator * f2.denominator;
|
|
|
|
return reduce(f);
|
|
}
|
|
|
|
struct fraction divide(struct fraction f1, struct fraction f2) {
|
|
struct fraction f;
|
|
f.numerator = f1.numerator * f2.denominator;
|
|
f.denominator = f1.denominator * f2.numerator;
|
|
|
|
return reduce(f);
|
|
}
|
|
|