#include<stdio.h> struct frac { int up; int down; } ; void FracPrint(struct frac a) { if(a.down == 1) printf("%d",a.up); else printf("%d / %d",a.up,a.down); } /* reduce fraction */ struct frac FracReduce(struct frac a) { struct frac res; int i,tmp; res.up=a.up; res.down=a.down; if(a.up > a.down) tmp=a.down; else tmp=a.up; for(i=2;i<=tmp;i++) if( (res.up % i == 0) && (res.down % i ==0) ) { res.up = res.up/i; res.down=res.down/i; i--; } return res; } /* add two fractions */ struct frac FracAdd(struct frac a, struct frac b) { struct frac res; if((a.up)==0) return b; if((b.up)==0) return a; res.up = a.up*b.down + b.up*a.down; res.down=a.down*b.down; res = FracReduce(res); return res; } /* multiply two fractions */ struct frac FracMult(struct frac a, struct frac b) { struct frac res; res.up = a.up*b.up; res.down=a.down*b.down; res = FracReduce(res); return res; } /* read fraction from terminal */ struct frac FracRead(void) { struct frac a; printf("chislitel = "); scanf("%d",&a.up); printf("znamenatel = "); scanf("%d",&a.down); return a; } int main(void) { struct frac x; struct frac a; struct frac y; FILE* F; char fname[]="polynom.txt"; int i=0; printf("Vvedite x:\n"); x=FracRead(); printf("Vy vveli x = ");FracPrint(x); x=FracReduce(x); printf(" ( Posle sokrasheniya x = ");FracPrint(x);printf(" )\n"); printf("Polynom zadan v fajle %s koefficientami:\n",fname); F=fopen(fname,"r"); y.up=0;y.down=0; while(!feof(F)) { fscanf(F,"%d",&a.up); fscanf(F,"%d",&a.down); if(!feof(F)) { printf("a_n-%d = ",i++);FracPrint(a);printf("\n"); y = FracAdd(a,FracMult(x,y)); } } printf("Znachenie polynoma v tochke x = ");FracPrint(x); printf(" : y(x) = ");FracPrint(y);printf("\n"); fclose(F); return 0; } |