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";
}
Solo tratas de reducir una fracción, no es así??
Pues si te ayuda... puedes acoplarlo a tu código...
for(int i=2 ; i<=num ; i++){
for(int j=2 ; j<=deno ; j++){
if(num%i==0){
if(den%i==0){
num=num/i;
den=den/i;
}
}
}
}
Tienes un pequeño error en la división, creo que ya debiste darte cuenta, algo sencillo y ademas estas declarando de nuevo a una variable que ya declaraste anteriormente....
Saludos...