Curso de Programación en C/Prog130

De WikiCabal
Ir a la navegación Ir a la búsqueda

Prog130

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 void   itobs( int, char * );
 6 void   Muestra_bstr( const char * );
 7 
 8 int main( void )
 9 {
10   char Bin_str[8 * sizeof(int) + 1],
11        Buf[12];
12 
13   int  i,
14        Numero;
15 
16   puts( "\n\t\tDecimal a Binario Convertidor" );
17   printf( "\nDame un número positivo entre 0 y 99999999: " );
18 
19   while( fgets( Buf, 10, stdin ) && Buf[0] != '\n' )
20   {
21     if( *(Buf + strlen( Buf ) -1 ) != '\n' )
22     {
23       fputs( "La línea que entraste es demaciado largo.\nSolo 10 chars MAX",
24                                                                    stderr );
25       exit(1);
26     }
27     *(Buf + strlen( Buf ) -1 ) = '\0';
28 
29     for( i = 0; i < strlen( Buf ); i++ )
30     {
31       if( Buf[i] < '0' || Buf[i] > '9' )
32       {
33         fputs( "Caracteres ilegales en su ingreso\n", stderr );
34         exit(1);
35       }
36     }
37 
38     Numero = atoi( Buf);
39     if( Numero > 99999999 )
40     {
41       fputs( "Su entrada está fuera del rango especificado\n", stderr );
42       exit(1);
43     }
44 
45     itobs( Numero, Bin_str );
46     printf( "%d is ", Numero );
47     Muestra_bstr( Bin_str );
48     putchar( '\n' );
49     printf( "\nDame un número positivo entre 0 y 99999999"
50             " (<Enter> para terminar): " );
51   }
52   puts( "¡Adios!\n" );
53   return 0;
54 }
55 
56 void itobs( int n, char * ps )
57 {
58   int i;
59 
60   int size = 8 * sizeof(int);
61 
62   for( i = size - 1; i >= 0; i--, n >>= 1 )
63     ps[i] = ( 1 & n ) + '0';
64   ps[size] = '\0';
65 }
66 
67 void Muestra_bstr( const char * str )
68 {
69   int i = 0;
70 
71   putchar( '\t' );
72   while( str[i] )
73   {
74     putchar( str[i] );
75     if( ++i % 4 == 0 && str[i] )
76       putchar( ' ' );
77   }
78 }

Resultado


[rrc@AbelLap CClase]$ vi Prog130.c
[rrc@AbelLap CClase]$ gcc -Wall -o Prog130 Prog130.c
[rrc@AbelLap CClase]$ ./Prog130

		Decimal a Binario Convertidor

Dame un número positivo entre 0 y 99999999: 99999999
99999999 is 	0000 0101 1111 0101 1110 0000 1111 1111

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 2
2 is 	0000 0000 0000 0000 0000 0000 0000 0010

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 4
4 is 	0000 0000 0000 0000 0000 0000 0000 0100

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 8
8 is 	0000 0000 0000 0000 0000 0000 0000 1000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 32
32 is 	0000 0000 0000 0000 0000 0000 0010 0000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 64
64 is 	0000 0000 0000 0000 0000 0000 0100 0000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 128
128 is 	0000 0000 0000 0000 0000 0000 1000 0000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 256
256 is 	0000 0000 0000 0000 0000 0001 0000 0000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 1024
1024 is 	0000 0000 0000 0000 0000 0100 0000 0000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 65536
65536 is 	0000 0000 0000 0001 0000 0000 0000 0000

Dame un número positivo entre 0 y 99999999 (<Enter> para terminar): 
¡Adios!

Explicación