Program written in C!!! Create a structure called Fraction to store fractions ha
ID: 3714602 • Letter: P
Question
Program written in C!!!
Create a structure called Fraction to store fractions having numerator and denominator (both of them are integers). Given a command and a pair of fractions, execute the command using the following functions that you have to implement.
(a) Fraction addition(Fraction a, Fraction b)
(b) Fraction subtraction(Fraction a, Fraction b)
(c) Fraction multiplication(Fraction a, Fraction b)
(d) Fraction division(Fraction a, Fraction b)
Your code should contain a main() function where you will take inputs from a file named “input.txt” and write outputs to a file named “output.txt”. All your inputs will be valid fractions, so no need to check for divide by zero error.
Input Format The first line contains a single integer T, denoting the number of test cases. (1Explanation / Answer
/* Source code for the problem*/
/* Please read each comment to understand clearly*/
/* Execute it, you will have an output file named output.txt*/
#include <stdio.h>
#include <stdlib.h>
//Structure declaration for Fraction
struct Fraction
{
int numerator;
int denominator;
}F;
//To handle the common value of Fraction
int GCD(int a,int b)
{
if(b==0) return a;
return GCD(b,a%b);
}
//Function to handle addition of Fraction
struct Fraction addition(struct Fraction a, struct Fraction b)
{
struct Fraction result;
result.numerator = (a.numerator*b.denominator) + (b.numerator*a.denominator);
result.denominator = (b.denominator*a.denominator);
int gcd = GCD(result.numerator,result.denominator);
result.numerator /= gcd;
result.denominator/=gcd;
return result;
}
//Function to handle subtraction of Fraction
struct Fraction subtraction(struct Fraction a, struct Fraction b)
{
struct Fraction result;
result.numerator = (a.numerator*b.denominator) - (b.numerator*a.denominator);
result.denominator = (b.denominator*a.denominator);
int gcd = GCD(result.numerator,result.denominator);
result.numerator /= gcd;
result.denominator/=gcd;
return result;
}
//Function to handle multiplicatioin of Fraction
struct Fraction multiply(struct Fraction a, struct Fraction b)
{
struct Fraction result;
result.numerator = (a.numerator*b.numerator);
result.denominator = (b.denominator*a.denominator);
int gcd = GCD(result.numerator,result.denominator);
result.numerator /= gcd;
result.denominator/=gcd;
return result;
}
//Function to handle for two fraction's Divisioin
struct Fraction division(struct Fraction a, struct Fraction b)
{
struct Fraction result;
result.numerator = (a.numerator*b.denominator);
result.denominator = (a.denominator*b.numerator);
int gcd = GCD(result.numerator,result.denominator);
result.numerator /= gcd;
result.denominator/=gcd;
return result;
}
int main()
{
FILE * fp; //File Pointer to read the input file
FILE * fpWrite; //File Pointer to write output in output.txt file
char line[128]; // To read line of file at once
//Open file in read mode
fp = fopen("input.txt", "r");
//Create a file and open to write output
fpWrite = fopen("output.txt","w");
//Check input file is avail or note
if (fp == NULL) exit(EXIT_FAILURE);
char operation; //To store the operation type
int num1,num2,num3,num4; //To store the fraction values
//To read the test case
int count=0;
struct Fraction a,b,Result;
while ( fgets ( line, 128,fp ) != NULL ) /* read a line */
{ count=1;
if(count==1)
{
fscanf (fp, "%c %d %d %d %d", &operation,&num1,&num2,&num3,&num4);
a.numerator=num1;
a.denominator=num2;
b.numerator=num3;
b.denominator=num4;
switch(operation)
{
case 'a': Result=addition(a,b); break;
case 's': Result=subtraction(a,b); break;
case 'm': Result=multiply(a,b); break;
case 'd': Result=division(a,b); break;
}
fprintf(fpWrite,"%d %d ",Result.numerator,Result.denominator);
}
else fprintf(fpWrite," ");
}
fclose(fp); //Close input file reading
fclose(fpWrite); //close output file stream to write
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.