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... |