Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 24.09.2015, 11:26   #1 (permalink)
Oxidous
Новичок
 
Регистрация: 12.07.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
Репутация: 110
По умолчанию Простой калькулятор рациональных чисел на C++

Всем доброго времени суток,
Только начал изучать C++ и задали вот такое задание:

Напишите программу, которая позволяет совершать математические действия (сложение, вычитание, умножение, деление, сравнение) с рациональными числами.
Создайте класс для рациональных чисел.Данные класса - рациональные числа ( числитель и знаменатель). В классе должны быть такие методы: сложение, вычитание, умножение, деление, сравнение (больше, меньше, равно), отрицательное (умножение на -1). Данные методы должны возвращать рациональные числа.
Операция сложения a + b при помощи этого класса будет выглядеть так: a.sloz(b);
Так же в классе обязательно должны быть методы: ввод и вывод.

В общем, нужно написать программу, вида:
Ввожу первое рационально число (допустим, 3/4)
Ввожу второе рациональное число(допустим 16/33)
Выводится результат сложения, вычитания, умножения, деления, сравнения и умножения на -1 введённых рациональных чисел.

С целыми числами никаких проблем нет абсолютно, довольно быстро написал консольную программу,но нужно,чтоб было с рациональными числами. Потому очень прошу помочь.

Вот то,что я написал с целыми числами:

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

class MyCalc
{
	private: 
	int a;
	int b;
	
	public: 
	
	void vvod_vivod() 
	{
		cout << "Введите первое число: ";
		cin >> a;
		cout << " " << endl; 
		cout << "Введите второе число: ";
		cin >> b;
		cout << " " << endl;
	}
	void sloz()
	{
		cout << "Сложение " << "(" << a << " + " << b << ")" << " = " << a + b << endl;
	}
	void vicit()
	{
		cout << "Вычитание " << "(" << a << " - " << b << ")" << " = " << a - b << endl;
	}
	void umnoz()
	{
		cout << "Умножение " << "(" << a << " * " << b << ")" << " = " << a * b << endl;
	}
	void delen()
	{
		cout << "Деление " << "(" << a << " / " << b << ")" << " = " << a / b << endl;
	}
	void sravn()
	{
		if (a==b) cout << a << " равно "<< b << endl;  
                if (a<b)   cout << a << " меньше "<< b << endl;  
                if (a>b)   cout << a << " больше "<< b << endl; 
	}
	void otric()
	{
		cout << "Отрицательно: " << "((" << a << " * " << b << ")" << " * -1)"<< " = " << (a * b) * -1 << endl;
	}
};

int main()
{
	setlocale(0, ""); 
	
	cout << "Калькулятор целых чисел.\n" << endl;
	
	MyCalc c1; 
	
	c1.vvod_vivod();
	c1.sloz();
	c1.vicit();
	c1.umnoz();
	c1.delen();
	c1.sravn();
	c1.otric();
	cout << " " << endl;
  
	system("pause"); 
	return 0; 
}
Oxidous вне форума   Ответить с цитированием

Старый 24.09.2015, 11:26
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Содержание вашей темы очень схоже с другими темами, можете потратить минутку и ознакомиться

RPN калькулятор
Помогите исправить калькулятор
Calculator++ - многофункциональный калькулятор

Старый 24.09.2015, 17:05   #2 (permalink)
MagentaTiger
Специалист
 
Аватар для MagentaTiger
 
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,427
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 17820
По умолчанию

А в чем сложность то ? Не умеете с дробями работать ?

Сложение / вычитание - приводим к общему знаменателю , и складываем/вычитаем числитель, если возможно сокращаем полученную дробь

Умножение/деление - ну тут вообще просто - при умножение перемножаем отдельно числители и знаменатели , a/b*c/d = a*c/b*d
деление просто переворачиваем вторую дробь a/b:c/d = a*d/b*c, если возможно сокращаем полученную дробь

Сравнение то же не сложно, приводим к общему знаменателю и сравниваем числитель (только знак числа учесть надо)

Изменить знак это то же самое что умножить на -1/1 (минус одну первую)

Короче элементарная математика, класс 6-7 средней школы по моему ...
MagentaTiger вне форума   Ответить с цитированием
Старый 12.10.2015, 17:21   #3 (permalink)
Oxidous
Новичок
 
Регистрация: 12.07.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
Репутация: 110
По умолчанию

Благодарю! Ваши мысли натолкнули меня на нужный лад.
Всё сделал как нужно. Благодарю за помощь
Oxidous вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:14.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.