Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: asa5 en 6 Diciembre 2017, 19:36 pm



Título: No consigo visualizar dónde he cometido el fallo. (Max.Comun.Divisor)
Publicado por: asa5 en 6 Diciembre 2017, 19:36 pm
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";
}


Título: Re: No consigo visualizar dónde he cometido el fallo. (Max.Comun.Divisor)
Publicado por: Erius en 7 Diciembre 2017, 06:09 am
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...