Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2015, 11:28   #1
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию Рациональная дробь

У меня есть код реализации операций сложения, вычитания, умножения, деления, а мне нужно еще реализовать сравнение дробей. Можете дополнить код пожалуйста?

Код:
#include<iostream>
#include<conio.h>
using namespace std;

class rational
{
	int n,d;
public:
	rational() : n(1), d(1) {};
	~rational(){};
	
	void getData()
	{
		cout<<"\nEnter a numerator: ";
		cin>>n;
		cout<<"Enter a denominator: ";
		cin>>d;
		cout<<endl;

		while(d==0)
		{
			cout<<"Please enter a denominator: ";
			cin>>d;
		}

		while(d<0)
		{
			n *= -1;
			d *= -1;
		}
	}
int GCD(int n1, int remainder)
{
	if(remainder==0)
		return(n1);
	else { return(GCD(remainder,n1%remainder)); }
}

void reduce(int &n,int &d)
{
	int rdc = 0;
	if(d>n)
		rdc = GCD(d,n);
	else if(d<n)
		rdc = GCD(n,d);
	else
		rdc = GCD(n,d);
	n /= rdc;
	d /= rdc;
	cout<<"\nPosle operazi drob: "<<n<<"/"<<d<<endl;
}
void operator +(rational c1)
{
rational temp;
temp.n=(n*c1.d)+(c1.n*d);
temp.d=c1.d*d;
reduce(temp.n,temp.d);
}

void operator -(rational c1)
{
rational temp;
temp.n=(n*c1.d)-(c1.n*d);
temp.d=c1.d*d;
reduce(temp.n,temp.d);
}

void operator *(rational c1)
{
rational temp;
temp.n=n*c1.n;
temp.d=d*c1.d;
reduce(temp.n,temp.d);
}

void operator /(rational c1)
{
rational temp;
temp.n=n*c1.d;
temp.d=d*c1.n;
if(temp.d<0) 
{
	temp.n *= -1;
	temp.d *= -1;
}
reduce(temp.n,temp.d);
}
};

int main()
{
	rational c1, c2;
	int n;

	cout<<"Enter the data for the first fraction: ";
	c1.getData();
	cout<<"Enter the data for the second fraction: ";
	c2.getData ();

	cout<<"1 . slogeniya drobey"<<endl;
	cout<<"2 . vichitanie drobey"<<endl;
	cout<<"3 . umnogenie drobey"<<endl;
	cout<<"4 . delenie drobey"<<endl;
	cout<<"5 . sravnenie drobey"<<endl;
	cout<<"\nEnter your choice: ";
	cin>>n;
	switch(n)
	{
		case 1:
			c1+c2;
			getch();
			break;
		case 2:
			c1-c2;
			getch();
			break;
		case 3:
			c1*c2;
			getch();
			break;
		case 4:
			c1/c2;
			getch();
			break;	
		default:
			cout<<"Nepravilni vibor"<<endl;
		return 0;
	}

getch();
return 0;
}

Последний раз редактировалось Stilet; 04.10.2015 в 12:39.
Никита757 вне форума Ответить с цитированием
Старый 04.10.2015, 11:51   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну формально нужно находить НОК знаменателей, домнажать и сравнивать... Хотя можно и по тупому: сравнить домноженные числители на другие знаменатели.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
класс дробь Praud Помощь студентам 9 17.02.2014 21:41
рациональную дробь перевести в цепную дробь. на Паскале. (проверьте программку, где то ошибка:( ) masal86 Помощь студентам 1 20.02.2013 12:42
Рациональная организация программы JAVA pj-infest Общие вопросы по Java, Java SE, Kotlin 2 05.11.2012 21:14
Несократимая дробь strateg66 Помощь студентам 1 20.12.2009 15:34