Curso de Programación en C/Prog130

De WikiCabal
Saltar a: navegación, buscar

Prog130

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void   itobs( int, char * );
void   Muestra_bstr( const char * );

int main( void )
{
  char Bin_str[8 * sizeof(int) + 1],
       Buf[12];

  int  i,
       Numero;

  puts( "\n\t\tDecimal a Binario Convertidor" );
  printf( "\nDame un número positivo entre 0 y 99999999: " );

  while( fgets( Buf, 10, stdin ) && Buf[0] != '\n' )
  {
    if( *(Buf + strlen( Buf ) -1 ) != '\n' )
    {
      fputs( "La línea que entraste es demaciado largo.\nSolo 10 chars MAX",
                                                                   stderr );
      exit(1);
    }
    *(Buf + strlen( Buf ) -1 ) = '\0';

    for( i = 0; i < strlen( Buf ); i++ )
    {
      if( Buf[i] < '0' || Buf[i] > '9' )
      {
        fputs( "Caracteres ilegales en su ingreso\n", stderr );
        exit(1);
      }
    }

    Numero = atoi( Buf);
    if( Numero > 99999999 )
    {
      fputs( "Su entrada está fuera del rango especificado\n", stderr );
      exit(1);
    }

    itobs( Numero, Bin_str );
    printf( "%d is ", Numero );
    Muestra_bstr( Bin_str );
    putchar( '\n' );
    printf( "\nDame un número positivo entre 0 y 99999999"
            " (<Enter> para terminar): " );
  }
  puts( "¡Adios!\n" );
  return 0;
}

void itobs( int n, char * ps )
{
  int i;

  int size = 8 * sizeof(int);

  for( i = size - 1; i >= 0; i--, n >>= 1 )
    ps[i] = ( 1 & n ) + '0';
  ps[size] = '\0';
}

void Muestra_bstr( const char * str )
{
  int i = 0;

  putchar( '\t' );
  while( str[i] )
  {
    putchar( str[i] );
    if( ++i % 4 == 0 && str[i] )
      putchar( ' ' );
  }
}

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