Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Noob_boy en 1 Enero 2016, 18:29 pm



Título: Ayuda programa en c para sacar palíndromos
Publicado por: Noob_boy en 1 Enero 2016, 18:29 pm
Buenas he estado intentando hacer un programa basandome en una conjetuera matemática que se usa para obtener números palíndromos. En el programa por ejemplo se teclea el 59, entonces 59 + 95 = 154, 154+451=605, 605+ 506= 1111 que es palíndromo.
El caso es que con el codigo que he generado me da un error y se cierra la ventana

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int reverso(int num){
  5. int reverso=0,exp=log10(num);
  6. while(num>0){
  7. reverso = reverso + (num%10)*pow(10,exp);
  8. exp--;
  9. num=num/10;
  10. }
  11. return reverso;
  12. }
  13. int palindromo(int num){
  14. int num1=num;
  15. int tam=log10(num)+1;
  16. int matriz[tam];
  17. int i,j=0,aux=0;
  18. for(i=0; i<tam;i++){
  19. matriz[i]=num1%10;
  20. num1=num1/10;
  21. }
  22. while(!(i<=0)){
  23. i--;
  24. aux=matriz[i]-matriz[j];
  25. if (aux!=0) return -1;
  26. j++;
  27. }
  28. return 0;
  29. }
  30.  
  31.  
  32. int main( )
  33. {
  34. int num,cont;
  35. printf("Ingrese un numero\n");
  36. scanf("%d", &num);
  37. while ((palindromo(num)!=0)||(cont<200)){
  38. num=num+reverso(num);
  39. cont++;
  40. }
  41. printf("su palindromo es %d",num);
  42.  
  43. }


Título: Re: Ayuda programa en c para sacar palíndromos
Publicado por: ivancea96 en 1 Enero 2016, 20:19 pm
Localiza la sentencia que tira el error. Para ello, ve poniendo "pivotes" en el código. Por ejemplo:
Código
  1. SENTENCIA1
  2. printf("1-2\n");
  3. SENTENCIA2
  4. printf("2-3\n");
  5. SENTENCIA3

No hace falta que pongas uno entre cada sentencia, desde luego. Ponlas en lugares etsratégicos, y localiza el error desde el main, hasta las funciones. Una vez sepas qué da el error, mira qué variables utiliza, y qué puede ser incorrecto.


Título: Re: Ayuda programa en c para sacar palíndromos
Publicado por: MAFUS en 1 Enero 2016, 20:59 pm
Vale, dos cosas que veo.

En tu sentencia de control del while de la función main te interesa que itere mientras se cumplan las dos condiciones: que el numero no sea palíndromo Y que el contador no llegue a 200. Así como lo tienes, aunque pases por encima de un palíndromo no se va a parar porque el contador no ha llegado a 200.

Por otra parte en tu función de búsqueda de palíndromo te has complicado bastante mucho y verás:
qué pasa si restas un palíndromo por su reverso? qué ocurre si restas un número que no lo es por su reverso?


Título: Re: Ayuda programa en c para sacar palíndromos
Publicado por: user-marcos en 1 Enero 2016, 21:02 pm
Un fallo importante es que estas usando un contador sin inicializar.
Cuando hagas una función pruebala por separado te ahorra trabajo en tu caso revisa la función reverso.
Asegúrate que estés usando bien los tipos de datos, te lo digo por el uso de logaritmos y enteros.


Título: Re: Ayuda programa en c para sacar palíndromos
Publicado por: Noob_boy en 1 Enero 2016, 22:27 pm
gracias por la ayuda he modificado el programa y ya hace su funcion  :D

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int reverso(int num){
  5. int reverso=0,exp=log10(num);
  6. while(num>0){
  7. reverso = reverso + (num%10)*pow(10,exp);
  8. exp--;
  9. num=num/10;
  10. }
  11. return reverso;
  12. }
  13. int palindromo(int num){
  14. if (num-reverso(num)==0)
  15. return 0;
  16. else return -1;
  17. }
  18.  
  19.  
  20. int main( )
  21. {
  22. int num;
  23. printf("Ingrese un numero\n");
  24. scanf("%d", &num);
  25. while ((palindromo(num)!=0)){
  26. num=num+reverso(num);
  27. }
  28. printf("su palindromo es %d",num);
  29.  
  30. }