#include<stdio.h>
struct Fraction{
int Denominator, Numerator;
};
struct Fraction Fraction(int num, int den);
void print_Fraction(struct Fraction arg);
struct Fraction add_Fraction(struct Fraction lhs, struct Fraction rhs);
struct Fraction sub_Fraction(struct Fraction lhs, struct Fraction rhs);
struct Fraction mul_Fraction(struct Fraction lhs, struct Fraction rhs);
struct Fraction div_Fraction(struct Fraction lhs, struct Fraction rhs);
struct Fraction yakubun(struct Fraction arg);
int main(void){
struct Fraction x=Fraction(2, 3), y=Fraction(-1, 3), z;
printf("x="); print_Fraction(x);
printf("y="); print_Fraction(y);
z=add_Fraction(x, y);
printf("z=x+y="); print_Fraction(z);
z=sub_Fraction(x, y);
printf("z=x-y="); print_Fraction(z);
z=mul_Fraction(x, y);
printf("z=x*y="); print_Fraction(z);
z=div_Fraction(x, y);
printf("z=x/y="); print_Fraction(z);
return 0;
}
struct Fraction Fraction(int num, int den){
struct Fraction result;
result.Denominator=den;
result.Numerator=num;
/***result=yakubun(result);***/
return result;
}
void print_Fraction(struct Fraction arg){
printf("(%d)/(%d)\n", arg.Numerator, arg.Denominator);
return;
}
struct Fraction add_Fraction(struct Fraction lhs, struct Fraction rhs){
struct Fraction result;
result.Denominator=lhs.Denominator*rhs.Denominator;
result.Numerator=lhs.Denominator*rhs.Numerator+lhs.Numerator*rhs.Denominator;
/***
result=yakubun(result);
***/
return result;
}
struct Fraction sub_Fraction(struct Fraction lhs, struct Fraction rhs){
struct Fraction result;
result.Denominator=lhs.Denominator*rhs.Denominator;
result.Numerator=rhs.Denominator*lhs.Numerator-rhs.Numerator*lhs.Denominator;
/***
result=yakubun(result);
***/
return result;
}
struct Fraction mul_Fraction(struct Fraction lhs, struct Fraction rhs){
struct Fraction result;
result.Denominator=lhs.Denominator*rhs.Denominator;
result.Numerator=lhs.Numerator*rhs.Numerator;
/***
result=yakubun(result);
***/
return result;
}
struct Fraction div_Fraction(struct Fraction lhs, struct Fraction rhs){
struct Fraction result;
result.Denominator=lhs.Denominator*rhs.Numerator;
result.Numerator=lhs.Numerator*rhs.Denominator;
/***
result=yakubun(result);
***/
return result;
}
int min(int lhs, int rhs){
if(lhs<rhs)return lhs;
else return rhs;
}
struct Fraction yakubun(struct Fraction arg){
struct Fraction result;
int tmp_numerator=arg.Numerator;
int tmp_denominator=arg.Denominator;
int i;
for(i=2;i<=min(abs(tmp_numerator), abs(tmp_denominator));i++){
if(abs(tmp_numerator)%i==0 && abs(tmp_denominator)%i==0){
tmp_numerator/=i;
tmp_denominator/=i;
}
}
result.Numerator=tmp_numerator;
result.Denominator=tmp_denominator;
return result;
}
|