• Sábado 20 de Abril de 2024, 06:54

Autor Tema:  quien me puede decir cual es la falla en mi programa?  (Leído 1456 veces)

yofeiro

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
quien me puede decir cual es la falla en mi programa?
« en: Lunes 25 de Octubre de 2010, 00:58 »
0
hola a todos, soy nuevo en esto de la programación, y en un libro de programacion (deitel c++) viene un ejercicio que dice asi: escriba un programa que intruduzca un numero de 5 digitos, y que separe el numero en sus digitos individuales de la forma: 12345 en 1  2  3  4  5, lo hice y funciona pero solo para numeros menores a 32768 (de lo que me di cuenta despues de estar introduciendo numeros) ya que exactamente en ese numero me los empieza a dar asi -3 -2 -7 -6 -8 y si introduzco 32769 me regresa -3 -2 -7 -6 -7 y asi... este es mi codigo les agradecieria su ayuda.

#include<stdio.h>
#include<conio.h>

void main()

{


int num,num1,num2,num3,num4,num5;

   printf("Introduce un numero de 5 digitos");
   scanf("%i",&num);

   num1=num/10000;
   num2=num%10000;
   num2=num2/1000;
   num3=num%1000;
   num3=num3/100;
   num4=num%100;
   num4=num4/10;
   num5=num%10;
   printf("n%i   %i   %i   %i   %i", num1,num2,num3,num4,num5);
}

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: quien me puede decir cual es la falla en mi programa?
« Respuesta #1 en: Lunes 25 de Octubre de 2010, 09:33 »
0
Es es porque el tipo int sólo admite valores entre -32769 y 32768, ya que es un valor de 16 bits. Es decir, 16 bits con signo no dan más de sí. Si quieres que te detecte cualquier número de 5 cifras, usa el tipo long.

Aparte, usa un array, es mucho más sencillo y más elegante:

Código: C
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4.  
  5. // "main" devuelve int en C, ponlo siempre asi
  6. int main(int argc, char* argv[])
  7. {
  8.     // El numero introducido
  9.     long num = 0;
  10.  
  11.     // Leemos el numero
  12.     printf("Introduce un numero de 5 digitos positivo: ");
  13.     scanf("%lu",&num);
  14.    
  15.     // Comprobamos que el numero introducido es valido
  16.     if (num >0 and num <=99999)
  17.     {      
  18.         // El array que contiene cada cifra de "num" en una posicion
  19.         int cifras[5];
  20.        
  21.         // Extraemos las cifras
  22.         for(i=0;i<5;i++)
  23.         {          
  24.             cifras[i] = (num % pow(10,i+1))/ pow(10, i);            
  25.         }
  26.        
  27.         // Mostramos las cifras desde la mas significativa hasta la menos significativa
  28.         for(i=4;i>=0;i--)
  29.         {
  30.             printf("%d ", cifras[i]);
  31.         }
  32.        
  33.         printf("n");
  34.     }
  35.     else
  36.     {
  37.         printf("Error: el numero tiene mas de 5 cifrasn");
  38.     }
  39.  
  40.     // Fin de "main", volvemos al sistema
  41.     return 0;
  42. }
  43.  
Lo he almacenado en un array para que veas cómo es, pero si sólo es mostrar los números no tendrías por qué almacenarlo en un array, sino simplemente hacer printf sobre la expresión que extrae el número.

Saludos

PD: no lo he probado, así que si ves que no funciona o te lanza algún error de compilación, avísame  :P

yofeiro

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: quien me puede decir cual es la falla en mi programa?
« Respuesta #2 en: Lunes 25 de Octubre de 2010, 16:39 »
0
Muchas gracias me sirvió de mucho tu ayuda... :D