Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda con programita simple en C

Estas en el tema de duda con programita simple en C en el foro de C/C++ en Foros del Web. Estoy aprendiendo C con tutos y cursos. Para practicar quise desarrollar un programita simple que al ingresr un Nº te de su equivalente en binario. ...
  #1 (permalink)  
Antiguo 21/05/2009, 09:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 24
Antigüedad: 15 años
Puntos: 0
Pregunta duda con programita simple en C

Estoy aprendiendo C con tutos y cursos. Para practicar quise desarrollar un programita simple que al ingresr un Nº te de su equivalente en binario.

A continuacion puse el main de mi programa. El problema es que el metodo que use para calcular binarios (dividiendo por 2 y analizando su resto) te da el numero al revez. Alguna idea como puedo tomar un numero e invertirlo.

ej. 4 = 001 = 100
10 = 0101 = 1010
el programa me los devuelve al revez, y quiero que antes de imprimirlos los de vuelta . Alguna idea¿?¿?

Código:
 
  int numero;
  int *punt_div;
     
  printf("Escriba un numero: ");
  scanf("%d", &numero);
 
 punt_div = №
   
 if (numero == 0) {printf("0");}
 
    else 
  {     
        printf("%d", *punt_div % 2); 
        while (numero != 1)
        {
           *punt_div = *punt_div / 2;   
            printf("%d", *punt_div % 2); 
        }
   } 
 printf("\n");

Última edición por semrar; 21/05/2009 a las 09:34
  #2 (permalink)  
Antiguo 21/05/2009, 09:46
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: duda con programita simple en C

Hola. Normalmente ese es un ejercicio tipico de recursividad. Busca por internet inforamacion para aprender esta tecnica.
Se basa en crear una funcion que se autoinvoca mientras que no se cumpla una condicion que tu pogas ( caso base).
Otra forma seria ir guardando los restos en un vector y luego leerlo del final al principio e ir imprimiendolo por pantalla cada posicion.
  #3 (permalink)  
Antiguo 24/05/2009, 20:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 24
Antigüedad: 15 años
Puntos: 0
Respuesta: duda con programita simple en C

gracias poi. Lo intente hacer con arrays, pero no me funciona, cuando pongo un numero par me impreme un cero, cuando pongo un muero impar me imprime cualquier cosa... les dejo el codigo a ver si alguien detecta el error..

Código:
int numero,  *punt_num;
  char inversor[100], *punt_inv;  
  int i, j;
     
  printf("Escriba un numero: ");
  scanf("%d", &numero);
 
 punt_num = №
   
 if (numero == 0) {printf("0");}
 
    else 
  {     
       punt_inv = &inversor[0];
       *punt_inv = numero % 2;
               
               
        while (numero != 1)
        {
          
          *punt_num /= 2; 
           
           for(i = 1; i <100; i++)
               {
               punt_inv = &inversor[i]; 
               *punt_inv = numero % 2 ;
               }
        }
   }
               
         for(j = strlen(inversor); j >= 0; j--)
         {
         printf("%d", inversor[j]);
         }
  #4 (permalink)  
Antiguo 25/05/2009, 01:44
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: duda con programita simple en C

el bucl for dentro del while no se para que lo usas.
....
else
{
i = 0;
while(numero != 1)
{
inversor[i] = numero % 2;
numero = numero / 2;
i++;
cont ++;
}
inversor[i] = numero;
}

for(j = cont; j >= 0; j--)
{
printf("%d", inversor[j]);
}

la variable cont es para saber los bits que se han guardado
  #5 (permalink)  
Antiguo 25/05/2009, 18:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 24
Antigüedad: 15 años
Puntos: 0
Respuesta: duda con programita simple en C

Gracias poi, si! era innecesario el for. Ya lo resolvi usando alguna de las cosas q me dijiste. me quedo asi

Lo extraño es que para que funcione, en el bucle for que uso al final para imprimir el array tengo q poner j = i - 1
Cuando para mi seria mas entendible tener q poner i + 1, ya que el primero resto se calcula fuera de el while, en fin asi si funciona el generador de binarios.

Código:
printf("   ***GENERADOR DE BINARIOS***\n\n");       
  printf("Escriba un numero: ");
  scanf("%d", &numero);
 
  punt_num = &numero;
   
printf("\nBin: ");

  if (numero == 0) {printf("0");}
 
    else 
    {     
     inversor[0] = numero % 2;                     
        while (numero != 1)
          {
          *punt_num /= 2;          
           inversor[i] = numero % 2;           
           i++;    
               }
    }
                       
        for(j = i - 1 ; j >= 0; j--)
         {
         printf("%d", inversor[j]);
         }
         printf("\n");
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:33.