Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ryan parker en 3 Junio 2011, 20:55 pm



Título: capicua de un rango de numeros
Publicado por: ryan parker en 3 Junio 2011, 20:55 pm
Hola gente :)

Bueno a ver si me hechan un cable con este code, que en mi pseudodigo funciona, pero llevado al programa y ejecutado este no muestra el capicua de forma correcta:
Código
  1. #include<stdio.h>
  2. main()
  3. {
  4.   int num, max, min, banmin=0, banmax=0, aux, resto, invertido=0;
  5.  
  6.   do{
  7.        printf("\nIngrese Minimo: ");
  8.        scanf("%d", &min);
  9.        if(min < 0 || min < 9)
  10.          printf("\nIngrese correctamente\nSugerencia: Numeros de 2 digitos");
  11.        else
  12.          banmin=1;
  13.   }while(banmin == 0);
  14.  
  15.   do{
  16.        printf("\nIngrese Maximo: ");
  17.        scanf("%d", &max);
  18.        if(max < min)
  19.          printf("\nMaximo es menor que minimo\nIngrese Nuevamente");
  20.        else
  21.          banmax=1;
  22.   }while(banmax == 0);
  23.  
  24.   do{
  25.       num = min;
  26.       aux = num;
  27.  
  28.       while(num > 0)
  29.       {
  30.           resto = num % 10;
  31.           num = num / 10;
  32.           invertido = invertido*10 + resto;
  33.       };
  34.  
  35.       if(invertido == aux)
  36.          printf("\nEl numero es capicua: ", aux);
  37.  
  38.      min = min + 1;
  39.  
  40.   } while ( min < max);
  41.  
  42.  return 0;
  43. }

Si ingresan datos de 10 - 20, debe de mostrar 11 como capicua.
Pero ingresan datos de 11-12, muestra recientemente el capicua algo que no entiendo.

En fin saludos


Título: Re: capicua de un rango de numeros
Publicado por: Akai en 3 Junio 2011, 21:37 pm
Dos cosas: no se entiende bien tu problema tal como lo expresas, De hecho lo he entendido leyendo tu código más que tu post.

Código
  1. printf("\nEl numero es capicua: ", aux);
  2.  

te falta decirle a printf que ha de imprimir un entero:

Código
  1. printf("\nEl numero es capicua: %d", aux);
  2.  

Por otro lado,

Código
  1. if(min < 0 || min < 9)

Eso se puede reducir a una única condicion, la segunda. Los números <0, están englobados en aquellos <9.



Título: Re: capicua de un rango de numeros
Publicado por: ryan parker en 4 Junio 2011, 16:45 pm
jeje creo que muy rapido escribi este code, que olvide el %d, bueno lo del <9 tenes razon.

Pero eso no soluciona el problema.

Aun sigue sin el rango de numeros de capicua.


Título: Re: capicua de un rango de numeros
Publicado por: Akai en 4 Junio 2011, 17:15 pm
Tu fallo es que invertido no se inicializa en cada iteración, por tanto, da resultados extraños:

Ingrese Minimo: 10                                                                      
                                                                                        
Ingrese Maximo: 15                                                                      
                                                                                        
El numero es capicua: 1                                                                  
El numero es capicua: 111                                                                
El numero es capicua: 11121                                                              
El numero es capicua: 1112131                                                            
El numero es capicua: 111213141

tu código tal cual está imprimiendo si invertido NO es igual a aux da lo de arriba.

La simple correción es:

Código
  1. invertido=0; //añade esto
  2. while(num > 0)
  3.       {
  4.           resto = num % 10;
  5.           num = num / 10;
  6.           invertido = invertido*10 + resto;
  7.       };

y el resultado:

Ingrese Minimo: 10                                                                       
                                                                                         
Ingrese Maximo: 23                                                                       
                                                                                         
El numero es capicua: 11                                                                 
El numero es capicua: 22


Título: Re: capicua de un rango de numeros
Publicado por: ryan parker en 4 Junio 2011, 18:48 pm
pues  acabo de volver de mi casa y de ver este problema de logica, agarre al cuaderno hice las mismas pruebas  que mencionas   incluyendo en el  do  - while  del  min <=  max,  escribi los printf pa  ver onde andaba el error, obteniendo los mismos codes extraños .

En fin  acabo de  entrar  al ciber y  ya tenes el error.

se agradece de todas maneras, bueno hice  unos cambios  pero =  se ve bien.

Código
  1. while(max >= min){
  2.        num = min;
  3.        aux = num;
  4.        resultado = 0;
  5.        while(num > 0){
  6.            resto = num % 10;
  7.            num = num / 10;
  8.            resultado = resultado * 10 + resto;
  9.        }
  10.        if(resultado == aux)
  11.            printf("\nEl numero: %d es capicua --> %d", aux, resultado);
  12.        min = min + 1;
  13. }

Saludos