Что можно добавить к этой постановке задачи на C++?учитывая мою задачу
// ConsoleApplication3.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
class Natural_Fraction
{
private:
int nomenator; // числитель
int denominator;// знаменатель
public:
Natural_Fraction(string num) //Конструктор класса, принимающий на вход строчку вила '1/2'
{
string _nomenator = "";
string _denomenator = "";
int i = 0;
while (num[i] != '/')
{
_nomenator += num[i]; // собираем числитель
i++;
}
i++;
for (i; i < num.length(); i++)
{
_denomenator += num[i];
}
nomenator = atoi(_nomenator.c_str());//atoi-приведение типов. Строковый тип присваиваем переменной типа int
denominator = atoi(_denomenator.c_str());
}
Natural_Fraction(int _nomenator, int _denominator) // Конструктор класса, принимающий на вход числитель и знаменатель в виде чисел
{
nomenator = _nomenator;
denominator = _denominator;
}
Natural_Fraction(int number)//Конструктор класса, принимающий на вход целое число и переводящий его в дробь
{
nomenator = number;
denominator = 1;
}
void Print()
{
cout << nomenator<<"/"<<denominator;
}
int NOD() //наибольший общий делитель
{
int a = abs(nomenator);//abs-модуль числа
int b = abs(denominator);
while (a > 0 && b > 0)
if (a > b)
a %= b;
else
b %= a;
return a + b;
}
void Plus(Natural_Fraction nf)
{
int new_denom = nf.denominator * denominator;
nomenator = nomenator * nf.denominator;
nf.nomenator = nf.nomenator * denominator;
nomenator = nomenator + nf.nomenator;
denominator = new_denom;
CutDown();//максимально сокращаем дробь
}
void Minus(Natural_Fraction nf)
{
int new_denom = nf.denominator * denominator;
nomenator = nomenator * nf.denominator;
nf.nomenator = nf.nomenator * denominator;
nomenator = nomenator - nf.nomenator;
denominator = new_denom;
CutDown();//максимально сокращаем дробь
}
void Multiply(Natural_Fraction nf)
{
int new_denom = nf.denominator * denominator;
nomenator = nomenator * nf.nomenator;
denominator = new_denom;
CutDown();
}
void Division(Natural_Fraction nf)
{
nomenator = nomenator * nf.denominator;
denominator =denominator*nf.nomenator;
CutDown();
}
void CutDown()//сокращает дробь по НОД
{
int z = NOD();
nomenator = nomenator / z;
denominator = denominator / z;
}
};
int main()
{
setlocale(LC_ALL, "Russian"); // Переводит вывод консоли на русский язык
Natural_Fraction nf("1/2");
Natural_Fraction nf2("1/3");
Natural_Fraction nf3(5);
cout << "Первая дробь ";
nf.Print();
cout << endl << "Вторая дробь ";
nf2.Print();
cout << endl << "Целое число в виде дроби ";
nf3.Print();
nf.Plus(nf2);
cout <<endl<< "Первая + Вторая= ";
nf.Print();
nf.Plus(nf3);
cout << endl << "Первая + Целое число= ";
nf.Print();
nf.Multiply(nf2);
cout << endl << "Первая * Вторая = ";
nf.Print();
}; я там основное указал, ну мне еще чуть-чуть воды можете добавить
CutDown() надо вызывать и в конструкторах - мало ли, какие числа будут переданы.
В CutDown() надо добавить проверку знаков:
void CutDown() {
if (denominator < 0) {
nomenator = -nomenator;
denominator = -denominator;
}
int z = NOD();
nomenator = nomenator / z;
denominator = denominator / z;
} Это числитель может быть отрицательным, а знаменатель всегда должен быть положителен.
я с другого аккаунта пишу, на это пофиг, можете добавить пару предложений вот сюда к этой постановке задаче, пожалуйста помогите
Андрей ну пожалуйста, предложения добавьте что видите в этом коде какие действия, или последовательность какую-то кратко, мне больше не к кому обратиться. Пишу со второго акканта т.к там много отвечал и лимит
или помогите описать все функции в коде, входные/выходные параметры, поддерживаемые для объектов операции(+-×/), нахождение нод
1. Не nomenator, а numerator
2. Вот здесь https://pastebin.com/93pAQ1zt есть решение, в котором данные хранятся в std::pair, но вы можете заменить все .first на .numerator, а все .second на .denominator, переопределить конструкторы с параметрами в соответствие с заданием, добавить, при необходимости, заголовочный файл <cmath> и вам будет счастье.
а к этой постаноке задачи, можете пару предложений добавить, какие действия в коде или последовательность кратко, или это но это сложно наверное
описать все функции в коде, входные/выходные параметры, поддерживаемые для объектов операции(+-×/), нахождение нод
Сакральный смысл образования кроется в том, что если вы учитесь писать код, то вам должны дать техническое задание. Если вы учитесь составлять техническое задание, то кто-то другой должен написать по нему код. Только так можно определить качество выполнения работ. Если вы сами себе пишите и то и другое, не понимая, зачем оно вам, то вы в обоих случаях напишите всякую ерунду. Что, собственно, у вас и вышло. Так как поставлен вопрос, вам с ним никто помогать не будет. Потому что, если вы не можете объяснить, что вы делаете, вы не понимаете что вы делаете. А вопросы просты. Кому и зачем нужна эта рациональная дробь? Сможете ответить на эти вопросы. Поймёте, как она должна работать, чтобы приносить пользу.