Proc47. Используя функцию NOD2 из задания Proc46, описать процедуру Frac1($$a$$, $$b$$, $$p$$, $$q$$), преобразующую дробь $$a/b$$ к несократимому виду $$p/q$$ (все параметры процедуры — целого типа, $$a$$ и $$b$$ — входные, $$p$$ и $$q$$ — выходные). Знак результирующей дроби $$p/q$$ приписывается числителю (то есть $$q > 0$$). С помощью Frac1 найти несократимые дроби, равные $$a/b + c/d, a/b + e/f, a/b + g/h$$ (числа $$a, b, c, d, e, f, g, h$$ даны).
Формулы:
$$\frac{a}{b}+\frac{c}{d}=\frac{a*d}{b*d}+\frac{c*b}{d*b}=\frac{a*d+c*b}{b*d}$$
$$\frac{a}{b}+\frac{e}{f}=\frac{a*f}{b*f}+\frac{e*b}{f*b}=\frac{a*f+e*b}{b*f}$$
$$\frac{a}{b}+\frac{g}{h}=\frac{a*h}{b*h}+\frac{g*b}{h*b}=\frac{a*h+g*b}{b*h}$$
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <stdio.h> int nod2(int a ,int b){ while ((a!=0)&&(b!=0)){ if (a>b) a%= b; else b%=a; } return a+b; } void frac1(int a,int b, int *p, int *q){ *p=a/nod2(a,b); *q=b/nod2(a,b); } int main(void) { int a,b,c,d,e,f,g,h,rez1,rez2; printf("A:"); scanf("%i", &a); printf("B:"); scanf("%i", &b); printf("C:"); scanf("%i", &c); printf("D:"); scanf("%i", &d); printf("E:"); scanf("%i", &e); printf("F:"); scanf("%i", &f); printf("G:"); scanf("%i", &g); printf("H:"); scanf("%i", &h); frac1(a*d+c*b,b*d,&rez1,&rez2); printf("%i/%i\n",rez1,rez2); frac1(a*f+e*b,b*f,&rez1,&rez2); printf("%i/%i\n",rez1,rez2); frac1(a*h+g*b,b*h,&rez1,&rez2); printf("%i/%i\n",rez1,rez2); return 0; } |
Другие задачи из раздела Proc можно посмотреть здесь.
Комментарии: