Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Puntoinfinito en 17 Octubre 2012, 00:08 am



Título: ERROR en programa para factorizar desde un numero
Publicado por: Puntoinfinito en 17 Octubre 2012, 00:08 am
Buenas elhackeros.

Tengo que hacer un programa que la entrada sea un numero cualquiera que sera guardado en una variable, luego ha de guardar en variables diferentes la factorizacion en descenso de ese numero. (Por ejemplo. Entrada: 4, las variables seran; 4,3,2,1)

Entonces cada numero de factorizacion se le ha de asignar una variable, y luego en la salida mostrar todas las variables guardadas de dicho numero.

No se si estara muy claro, lo dudo... Por eso os dejare un ejemplo.

Código:
Entrada:5
Salida*:5 4 3 2 1

*El metodo de salida ha de ser cout << variable[];

Os dejo el código en c++ que yo he echo. Algo mal hay...

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int a = 0;
  9. char i[100];
  10. cin >> a;
  11. if (a != 0) {
  12. for (int b = 0;a > b;a--) {
  13. i[a] = a;
  14. cout << i[a] << " ";
  15. }
  16. }
  17. return 0;
  18. }


Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: Blaster en 17 Octubre 2012, 02:48 am
Creo que utilizas el tipo de dato inapropiado para este caso:
Código
  1. char i[100];

 Los diferentes tipos de datos tienen cierta capacidad, es decir, el char equivale a un byte, por lo que solo puedes guardar valores de 0 a 255 (sin signo, con signo es de -127 a 128) mientras un int es de 2 bytes y tiene mas capacidad y si quieres guardar un numero mayor a 255 en un char te dara resultados no deseados.
 Te dejo el code nose si es lo que buscas:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int a = 0;
  8. int j[100];
  9.  
  10. cout << "Ingrese un numero: ";
  11. cin >> a;
  12.  
  13. for(int i = 0; a > i; a--){
  14.        j[a]= a;
  15.   cout << j[a] << " ";
  16.   }
  17. cin.get();cin.get();
  18. return 0;
  19. }

Un saludo  ;)


Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: Puntoinfinito en 17 Octubre 2012, 09:44 am
Eso es lo que queria, gracias :)

Pero si char puede contener hasta 255 sin signo, porque no deja ejecutar este, tiene tan solo 100.

Saludos y gracias :)


Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: 0xDani en 17 Octubre 2012, 12:06 pm
El tamaño del tipo int es variable dependiendo de la plataforma en la que estes, pero en la mayoria es de 4 bytes, 2 bytes suele ser un short. De todas formas podeis averiguar el tamaño de los tipos en vuestros ordenadores usando el operador sizeof().

Saludos.


Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: Puntoinfinito en 17 Octubre 2012, 19:20 pm
Ya me quedo todo claro, para arrays de valor numeral mejor utilizar int[]


Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: Puntoinfinito en 18 Octubre 2012, 23:15 pm
Aprovecho este hilo para preguntaros otra cosa.

Desde este código, ahora es posible que diga la multiplicación de todos los números imprimidos?

Por ejemplo si escribes 5 la salida será : 5*4*3*2*1 = 120


Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: x64core en 18 Octubre 2012, 23:23 pm
Aprovecho este hilo para preguntaros otra cosa.

Desde este código, ahora es posible que diga la multiplicación de todos los números imprimidos?

Por ejemplo si escribes 5 la salida será : 5*4*3*2*1 = 120

cuando decis "la salida sera: ..." te referis a que lo muestre en una cadena no?
bueno muy facil, primero calcularia la factorizacion del numero, luego como podreis fijarte el codigo de los numeros empieza de 0x30 a 0x39 entonces podeis hacer un incremento a 0x30 a la variable que contiene el numero así se convierte en el codigo
que representa al numero. luego copiarlos en un buffer, yo haria un pequeño parser por cierto. muy facil.






Título: Re: ERROR en programa para factorizar desde un numero
Publicado por: $Edu$ en 18 Octubre 2012, 23:37 pm
Pregunto solamente.. porque usas un array? todavia de 100 sin saber cual numero pondra el usuario?

Haces un bucle, que vaya desde la variable (numero que ingreso) hasta 1. Vas imprimiendo cada numero seguido de "*" y te queda "5*4*3*2*1" como querias.

Pero ahora con lo nuevo que dijiste, para sacar el factorial de un numero, podes usar la Recursividad, si no sabes que es busca en google que hay info. Fijate que el factorial de 5 (5!) es igual a 5*4!, y a la vez 4! es igual a 4*3! y 3! es igual a 3*2! y 2! es igual a 2*1! que es 2. Que quiero decir con esto? que usando la recursividad, llamando al mismo procedimiento podes hacer algo simple como esto:

Factorizar(n) {
if (n=2) return 2;

return Factorizar(n) * Factorizar(n - 1)

}

Y si lo entiendes y te gusta esa forma, podes agregarle que muestre la variable n antes del ultimo return, asi como explique al principio.