Исходник программы - определение точек пересечения прямой с коружностью на Си(C++)
Класс рациональных несократимых дробей m/n, где m - целое число, а n - положительное целое число. Конструктор строит рациональное число по паре целых чисел m и n. По умолчанию n=1. Перегрузить операции сложения, вычитания, унарного минуса, умножения и деления рациональных дробей. Определить операцию вывода в десятичной форме.
Код на C++ #include <iostream.h> #include <math.h> #include <conio.h> #include <stdio.h> class Rat { public: //общедоступные элементы int x, y; Rat(int x, int y=1): x(x), y(y) {} //конструктор friend Rat operator+(Rat, Rat); //перегрузка операции + friend Rat operator-(Rat, Rat); //перегрузка операции - friend Rat operator*(Rat, Rat); //перегрузка операции * friend Rat operator/(Rat, Rat); //перегрузка операции / void operator--() {x=x-y;} //перегрузка префиксной операции -- void operator--(int) {x=x-y;}//перегрузка постфиксной операции -- //функция вывода в десятичной форме void show() {printf("%.3f", float(x)/float(y));} }; Rat operator+(Rat v, Rat w) //перегрузим операцию сложения { v.x=v.x*w.y+w.x*v.y; //формируем числитель дроби v.y=v.y*w.y; //формируем знаменатель дроби return v; } Rat operator-(Rat v, Rat w) //перегрузим операцию вычитания { v.x=v.x*w.y-w.x*v.y; //числитель дроби v.y=v.y*w.y; //знаменатель дроби return v; } Rat operator*(Rat v, Rat w) //перегрузим операцию умножения { v.x=v.x*w.x; v.y=v.y*w.y; return v; } Rat operator/(Rat v, Rat w) //перегрузим операцию умножения { v.x=v.x*w.y; v.y=v.y*w.x; return v; } void main() { clrscr(); printf("Класс рациональноых несократимых дробей\n"); Rat v(1),w(1),t(1); printf ("\nВходные данные:\nv= "); scanf("%d/%d",&v.x, &v.y); printf("w= "); scanf("%d/%d",&w.x,&w.y); //Проверка на несократимость и положительноть знаменателя if(v.y>0 && w.y>0 && v.x%v.y!=0 && w.x%w.y!=0) { t=v+w; printf("\nРезультат сложения v+w={%d/%d}=",t.x, t.y); //функция вывода рационального числа в десятичной форме t.show(); t=v-w; printf("\nРезультат вычитания v-w={%d/%d}=",t.x, t.y); t.show(); t=v*w; printf("\nРезультат умножения v*w={%d/%d}=",t.x, t.y); t.show(); t=v/w; printf("\nРезультат деления v/w={%d/%d}=",t.x, t.y); t.show(); v--; printf("\nУнарный постфиксный минус v--={%d/%d}=",v); v.show(); --v; printf("\nУнарный префиксный минус --v={%d/%d}=",v); v.show(); } else printf("\nОшибка при вводе рационального числа"); getch(); }
|