[ Foro de C++ ]
Hola: tengo como duda ¿el siguiente código que hice (que ejecutandose parece andar bien) si me salió más complejo de lo que se necesita o no?
Lo que el programa hace es (dada una fracción, por ej 4/8) va preguntandose (si se puede dividir) y llega a 1/2.
-----------------------------
#include <cstdlib>
#include <iostream>
using namespace std;
int cantidadFactores(int nx1, int nx2,int x)
{
if (x==1)
{
if(nx2%nx1 == 0){
nx2=nx2/nx1;
nx1=1;
cout<<" "<<nx1<<"/"<<nx2<<" ";
}
cout<<" , la fraccion no es mas reductible";
return 0;
}
else if (nx1%x == 0 && nx2%x == 0)
{
nx1=nx1/x;
nx2=nx2/x;
cout<<"la fraccion es: "<<nx1<<"/"<<nx2<<" ";
cout<<" , se dividio por "<<x<<", ";
if(x==1)
{
return 0;
}
else
{
return cantidadFactores(nx1,nx2,x-1);
}
}
else
return cantidadFactores(nx1,nx2,x-1);
}
int main(int argc, char *argv[])
{
int x1=16,x2=32,cont1=0,cont2=0;
cout<<"ingrese 2 numeros enteros, primero: ";
cin>>x1;
cout<<"segundo: ";
cin>>x2;
int aux;
if(x1>x2)
{
aux=x1;
x1=x2;
x2=aux;
}
cout<<endl<<"la fraccion es: "<<x1<<"/"<<x2<<endl;
cantidadFactores(x1,x2,x1-1);
cout<<endl;
system("pause");
return 0;
}
A priori, la lógica parece correcta, aunque es difícil de seguir con esos nombres de variable tan crípticos (¿no sería mejor "numerador" en vez de "nx1"? ¿qué es x? ¿el siguiente divisor a probar?) y sin espacios junto a los operadores.
En cualquier caso, no creo que necesites intercambiar los valores (una fracción como 5/3 es correcta) y no tengo certeza que se comporte bien en todos los casos, porque no estoy seguro de entender tu lógica ni de que no debas volver a probar el mismo divisor en caso de encontrar una coincidencia.
hola julián
como dices:
- Lo que el programa hace es (dada una fracción, por ej 4/8) va
preguntandose (si se puede dividir) y llega a 1/2.
te paso código iterativo y recursivo
como verás en el recursivo si aumentas x10 el numerador o denominador, la pila se rompe
con el método iterativo el límite es la capacidad del tipo que es mucho más que el recursivo, a demás de más claro y más corto
https://www.online-ide.com/217tLovYh8
https://www.online-ide.com/mhukpZCWG3
saludos ;-)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)