Hola, estoy intentando arreglar este pequeño problema pero no sé dónde está el fallo.
El tema es que estoy intentando reducir la fracción 2/-4 y que quede como -1/2 (por ejemplo), pero no consigo pasar del paso de reducir a 1/2.
Gracias de antemano.
#include <iostream>
#include <cmath>
// Multiplica, suma, resta y divide racionales.
using namespace std;
int mcd(int numero1, int numero2){
int res=1,aux=1;
if(numero1<numero2){
aux=numero2;
}
else{
aux=numero1;
}
if(numero1>0 && numero2>0){
for(int i=1; i<=aux; i++){
if ((numero1%i==0) && (numero2%i==0)){
res=i;
}
}
}
else if(numero2<0)
{
numero2*=-1;
if(numero1<numero2){
aux=numero2;
}
else{
aux=numero1;
}
int res=1;
for(int i=1; i<=aux; i++){
if ((numero1%i==0) && (numero2%i==0)){
res=i;
}
}
}
return res;}
void ReducirQ(int nume, int deno, int &numereducido, int &denoreducido)
{
numereducido=(nume/mcd(nume,deno));
denoreducido=(deno/mcd(nume,deno));
}
void LeerQ(int &nume, int &deno)
{
cout<<"Numero racional (nume deno): ";
cin>>nume>>deno;
}
void EscribirQ(int nume, int deno)
{
cout<<nume <<'/'<<deno;
}
void SumaQ(int nume1, int nume2, int deno1, int deno2, int &numerador, int &denominador, int &nred, int &dred)
{
cout<<"La suma resultante es: ";
numerador=(nume1*deno2)+(nume2*deno1);
denominador=deno1*deno2;
ReducirQ(numerador, denominador, nred, dred);
}
void RestarQ(int nume1, int nume2, int deno1, int deno2, int &numerador, int &denominador, int &nred, int &dred)
{
cout<<"La resta resultante es: ";
numerador=(nume1*deno2)-(nume2*deno1);
denominador=deno1*deno2;
ReducirQ(numerador, denominador, nred, dred);
}
void DividirQ(int nume1, int nume2, int deno1, int deno2, int &numerador, int &denominador, int &nred, int &dred)
{
cout<<"La division resultante es: ";
numerador=nume2*deno1;
denominador=nume1*deno2;
ReducirQ(numerador, denominador, nred, dred);
}
void MultiplicarQ(int nume1, int nume2, int deno1, int deno2, int &numerador, int &denominador, int &nred, int &dred)
{
cout<<"La multiplicacion resultante es: ";
numerador=nume1*nume2;
denominador=deno1*deno2;
ReducirQ(numerador, denominador, nred, dred);
}
int main()
{
int nume1, deno1, nume2, deno2, numerador, denominador, nred, dred;
//LeerQ(num1, deno1);
LeerQ(nume1, deno1);
LeerQ(nume2, deno2);
EscribirQ(nume1, deno1);
cout<<"\n";
EscribirQ(nume2, deno2);
cout<<"\n";
SumaQ(nume1, nume2, deno1, deno2, numerador, denominador, nred, dred);
EscribirQ(nred, dred);
cout<<"\n";
RestarQ(nume1, nume2, deno1, deno2, numerador, denominador, nred, dred);
EscribirQ(nred, dred);
cout<<"\n";
DividirQ(nume1, nume2, deno1, deno2, numerador, denominador, nred, dred);
EscribirQ(nred, dred);
cout<<"\n";
MultiplicarQ(nume1, nume2, deno1, deno2, numerador, denominador, nred, dred);
EscribirQ(nred, dred);
cout<<"\n";
}