Library file for Egyptian fraction
1
					/************************************************************************
2
					*	Program: Converting Egyptian Fractions to Fraction		*
3
					*									*
4
					*	File: Egy_lib.c	==> Library File for Egyptian Fraction		*	
5
					*									*
6
					*									*
7
					*************************************************************************/
8
#include"Egy_head.h"		//User-defined header file
9
10
11
void EgyFrac (egy_frac EGY, char *output_file)			/*  Calculation of Egyptian fractions */
12
{	
13
	res_frac Res_EGY;
14
	int prod_den=1,sum_den=0,gcd_prod_sum_den;
15
	int i,j;
16
	int *p_units;
17
	FILE *ofp;
18
	
19
20
		ofp=fopen (output_file,"a+");
21
		if (ofp == NULL)
22
		{
23
			perror("Output file\n");
24
			exit(2);
25
		}
26
27
		for (i=0; i < EGY.no_units_fractions; i++)
28
		{
29
			prod_den = prod_den * EGY.p_den[i]; 	
30
		}
31
		
32
		p_units = (int *)malloc(sizeof(int) * EGY.no_units_fractions);
33
		if (p_units == NULL)
34
		{
35
			printf("Error in Data_units\n");
36
			exit(3);
37
		}
38
39
		for (i=0; i < EGY.no_units_fractions; i++)
40
		{
41
			p_units[i] = prod_den / EGY.p_den[i];
42
		}
43
44
		for (i=0; i < EGY.no_units_fractions; i++)
45
			sum_den = sum_den + p_units[i];
46
47
48
                gcd_prod_sum_den = Gcd (sum_den,prod_den);		//calling the gcd function
49
50
                Res_EGY.num = sum_den / gcd_prod_sum_den;
51
		Res_EGY.den = prod_den / gcd_prod_sum_den;
52
53
54
		for (i=0; i < EGY.no_units_fractions; i++)
55
		{
56
			fprintf(ofp,"1/%d+",EGY.p_den[i]);
57
		}
58
		fprintf(ofp,"\b=%d/%d\n", Res_EGY.num,Res_EGY.den);
59
		fclose(ofp);
60
61
		prod_den = 1;
62
		sum_den = 0;
63
		free(p_units);
64
}
65
66
67
int Gcd (int x, int y)		// GCD function
68
{
69
	int i;
70
	for ( i = x; i >= 1; i--)
71
	{
72
		if( x % i == 0 && y % i == 0)
73
			break;
74
	}
75
	return i;
76
77
}
Loading...