capicua de un rango de numeros

Iniciado por ryan parker, 3 Junio 2011, 20:55 PM

0 Miembros y 2 Visitantes están viendo este tema.

ryan parker

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:
#include<stdio.h>
main()
{
   int num, max, min, banmin=0, banmax=0, aux, resto, invertido=0;

   do{
        printf("\nIngrese Minimo: ");
        scanf("%d", &min);
        if(min < 0 || min < 9)
          printf("\nIngrese correctamente\nSugerencia: Numeros de 2 digitos");
        else
          banmin=1;
   }while(banmin == 0);

   do{
        printf("\nIngrese Maximo: ");
        scanf("%d", &max);
        if(max < min)
          printf("\nMaximo es menor que minimo\nIngrese Nuevamente");
        else
          banmax=1;
   }while(banmax == 0);

   do{
       num = min;
       aux = num;

       while(num > 0)
       {
           resto = num % 10;
           num = num / 10;
           invertido = invertido*10 + resto;
       };

       if(invertido == aux)
          printf("\nEl numero es capicua: ", aux);

      min = min + 1;

   } while ( min < max);

  return 0;
}


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
Your kung-fu is not strong!

Akai

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.


printf("\nEl numero es capicua: ", aux);


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


printf("\nEl numero es capicua: %d", aux);


Por otro lado,

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.


ryan parker

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.
Your kung-fu is not strong!

Akai

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:


invertido=0; //añade esto
while(num > 0)
      {
          resto = num % 10;
          num = num / 10;
          invertido = invertido*10 + resto;
      };


y el resultado:

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

ryan parker

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.

while(max >= min){
       num = min;
       aux = num;
       resultado = 0;
       while(num > 0){
           resto = num % 10;
           num = num / 10;
           resultado = resultado * 10 + resto;
       }
       if(resultado == aux)
           printf("\nEl numero: %d es capicua --> %d", aux, resultado);
       min = min + 1;
}


Saludos
Your kung-fu is not strong!