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

Invertir Numero en C

Estas en el tema de Invertir Numero en C en el foro de C/C++ en Foros del Web. Saludos a todos, debo hacer un algoritmo que me convierta un numero decimal en binario, para eso usé el siguiente codigo Código: #include<stdio.h> main() { ...
  #1 (permalink)  
Antiguo 26/04/2011, 10:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 19
Antigüedad: 13 años, 4 meses
Puntos: 0
Invertir Numero en C

Saludos a todos, debo hacer un algoritmo que me convierta un numero decimal en binario, para eso usé el siguiente codigo
Código:
#include<stdio.h>
main()
{
int n, temp;

printf("Ingrese un numero: ");
scanf("%d",&n);
for(n;n!=0;printf("%d",temp))
{
temp=n%2;
n=n/2;
}
return 0;
}
Esto me da el resultado (un numero binario) en orden inverso es decir si el usuario ingresó: 30 el programa le imprime en pantalla 01111 pero 30 en binario es 11110

¿Como puedo invertir el resultado?

P.D: Se que puedo hacer esto mismo usando funciones pero en este caso solo puedo usar ciclos.

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 26/04/2011, 11:44
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Invertir Numero en C

Hola amigo, este programa lo tengo como ejemplo en mi libro, pero como diagrama de flujo.

Te adjunto la imagen:




Si tu puedes codificarlo que bien, de cualquier forma voy a intentar codificarlo porque yo tengo el mismo problema pero para convertir en base 8.


Código C++:
Ver original
  1. #include <stduio.h>
  2. #include <conio.h>
  3.  
  4.  
  5. main(){
  6.  
  7. int n,k=1;
  8.  
  9. printf("Indique un numero entero en base 10 para convertirlo a base 2: "); scanf("%d",&n);
  10.  
  11. if(n==0){
  12.  
  13. //Entiendo q aqui imprime el valor de N y despues hace un proceso. No entiendo que sea, si while  o for.
  14.  
  15. } //Fin if n=0
  16.  
  17. else {
  18.  
  19. if(n%2==0){
  20.  
  21. d(k)=0;
  22.  
  23. } else {
  24.  
  25. d(k)=1;
  26.  
  27. }
  28.  
  29. n =  n/2;
  30. k++;
  31.  
  32.  
  33. }//Fin else if N=0

Última edición por iovan; 26/04/2011 a las 12:01
  #3 (permalink)  
Antiguo 26/04/2011, 12:15
 
Fecha de Ingreso: diciembre-2010
Mensajes: 19
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Invertir Numero en C

Muchas gracias New pero yo tampoco entiendo ademas aqui se usan instruccion de decision y debo hacerlo sin usarlas tal vez por esto se me ha hecho tan dificil.
Gracias a de nuevo, espero q alguien pueda ayudarme.

EDITO
Añadi -- antes temp y me imprime el binario en orden solo que con un problemita asi: -1-1-1-1-10

Código C:
Ver original
  1. #include<stdio.h>
  2. main()
  3. {
  4. int n, temp;
  5.  
  6. printf("Ingrese un numero: ");
  7. scanf("%d",&n);
  8. for(n;n!=0;printf("%d",--temp))
  9. {
  10. temp=n%2;
  11. n=n/2;
  12. }
  13. return 0;
  14. }

Tengo que decir que este es mi primer programa usando ciclos :D

Última edición por Andrewxk7; 26/04/2011 a las 12:25
  #4 (permalink)  
Antiguo 26/04/2011, 12:44
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Invertir Numero en C

Solamente con bucles, si se te está permitido usar múltiples bucles podrías guardar los valores en un array y despues reordenarlos.
Código C++:
Ver original
  1. #include<stdio.h>
  2. main()
  3. {
  4. int n, i, temp[50];
  5.  
  6. printf("Ingrese un numero: ");
  7. scanf("%d",&n);
  8. for(i=0;n!=0;i++)
  9. {
  10. temp[i]=n%2;
  11. n=n/2;
  12. }
  13. while (i>0){
  14. i--;
  15. printf("%d",temp[i]);
  16. }
  17.  
  18. return 0;
  19. }
__________________
Foros Desarrollo de Juegos
  #5 (permalink)  
Antiguo 26/04/2011, 13:08
 
Fecha de Ingreso: diciembre-2010
Mensajes: 19
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Invertir Numero en C

Muchas gracias amigo, este si me funciona bien pero tengo una duda
Porque inicializas asi temp[50] ???
Disculpa mi pregunta ignorante pero soy nuevo en esto.
  #6 (permalink)  
Antiguo 26/04/2011, 13:27
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Invertir Numero en C

Realmente exelente yo tambien ya solucione mi problema con este programa.
  #7 (permalink)  
Antiguo 26/04/2011, 13:30
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Invertir Numero en C

Es un array de 50 números, no hay ninguna razón especifica de porque 50, me pareció apropiado. Usando el código anterior, cada dígito del numero binario se almacena en un índice del array.
__________________
Foros Desarrollo de Juegos
  #8 (permalink)  
Antiguo 27/04/2011, 23:17
Avatar de Chris9294  
Fecha de Ingreso: abril-2011
Ubicación: Medellin Colombia
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: Invertir Numero en C

Cita:
Iniciado por ssaammuu Ver Mensaje
Es un array de 50 números, no hay ninguna razón especifica de porque 50, me pareció apropiado. Usando el código anterior, cada dígito del numero binario se almacena en un índice del array.
Lastima este problema de C y C++ La declaración y el tamaño de los arrays No se puede Modificar en tiempo de ejecución amenos que trabajes Directamente con memoria :(
  #9 (permalink)  
Antiguo 28/04/2011, 04:44
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Invertir Numero en C

Cita:
Iniciado por Chris9294 Ver Mensaje
Lastima este problema de C y C++ La declaración y el tamaño de los arrays No se puede Modificar en tiempo de ejecución amenos que trabajes Directamente con memoria :(
Si se puede, pero necesitarías declarar el array dinámico. Cuando no lo necesitamos más deberemos liberar la memoria.

Código C:
Ver original
  1. //num -> numero de elementos
  2. int* array = (int*)malloc(num*sizeof(*array));
  3.  
  4. free(array);

Código C++:
Ver original
  1. int* array = new int[num];
  2.  
  3. delete[] array;
__________________
Foros Desarrollo de Juegos
  #10 (permalink)  
Antiguo 28/04/2011, 11:20
Avatar de Chris9294  
Fecha de Ingreso: abril-2011
Ubicación: Medellin Colombia
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: Invertir Numero en C

Cita:
Iniciado por ssaammuu Ver Mensaje
Si se puede, pero necesitarías declarar el array dinámico. Cuando no lo necesitamos más deberemos liberar la memoria.

Código C:
Ver original
  1. //num -> numero de elementos
  2. int* array = (int*)malloc(num*sizeof(*array));
  3.  
  4. free(array);

Código C++:
Ver original
  1. int* array = new int[num];
  2.  
  3. delete[] array;
jejeje men a eso me referia a trabajar directamente con memoria ... la idea era trabajar en el heap quiza me exprese mal y esa declaracion esta bien interesante gracias por comentar , si por favor pudieras mirar la inquietud que deje seria de mucha ayuda.
  #11 (permalink)  
Antiguo 28/04/2011, 11:27
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Invertir Numero en C

Este problema se resolveria mejor recursivamente y no te haria falta ningun array para luego invertir el numero. Seria mas simple creo yo.
  #12 (permalink)  
Antiguo 28/04/2011, 11:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 19
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Invertir Numero en C

poi, yo soy nuevo en esto y me gustaria saber como lo harias tu.
  #13 (permalink)  
Antiguo 28/04/2011, 12:41
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Invertir Numero en C

La verdad es que una función recursiva si que sería mejor

Código C++:
Ver original
  1. #include<stdio.h>
  2.  
  3. int convertirBinario(int num){
  4.     int respuesta=num%2;
  5.  
  6.     if (num>=2){
  7.     respuesta+=10*convertirBinario(num/2);
  8.     }
  9.  
  10.     return respuesta;
  11. }
  12.  
  13. int main(){
  14.     int n;
  15.     printf("Ingrese un numero: ");
  16.     scanf("%d",&n);
  17.  
  18.  
  19.     printf("%d",convertirBinario(n));
  20.  
  21.     return 0;
  22. }
__________________
Foros Desarrollo de Juegos
  #14 (permalink)  
Antiguo 28/04/2011, 12:54
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 18 años, 10 meses
Puntos: 9
Respuesta: Invertir Numero en C

te recomiendo que cheques esta función. ademas debes siempre pensar en diseñar funciones de tal manera que te puedan servir para otros momentos, si observas esta funcion, te puede convertir a cualquier base que quieras. ademas el resultado lo puedes aparte de mostrarlo en pantalla lo puedes utilizar en otra parte del tu programa.

char* _itoa_(int numero, char *valor, int base)
{
if(numero == 0)
return valor;

int resultado = numero/base;

char *pos =_itoa_(resultado, valor, base);

*pos = numero%base+'0';
*(pos+1) = 0;
return pos+1;
}
  #15 (permalink)  
Antiguo 28/04/2011, 12:56
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 18 años, 10 meses
Puntos: 9
Respuesta: Invertir Numero en C

samus tu funcion no serviria, debido a un numero puede ser visto en decimal, octal o hexadecimal, pero al fin del acabo es solo una representacion, de un mismo numero, esto es si tu declaras un numero como

int a= 100;

puede ser verlo en hexadecimal

printf("%x", a);

en octal

printf("%o", a);

o en decimal

printf("%d", a);

por desgracia la represtación en binario no existe. por lo que es necesario primero pasarlo a un arreglo y luego mostrarlo.

otra forma de comprobar lo que te digo es la siguiente

si tu declararas un numero


int a= 0144 ,b = 0x64;

y lo representas asi

printf("%d %d", a, b);

veras que lo que te muestra es "100 100" y no el 144 y el 64 como aparentemente se esperaria
  #16 (permalink)  
Antiguo 28/04/2011, 13:07
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Invertir Numero en C

Cita:
Iniciado por dragg04 Ver Mensaje
samus tu funcion no serviria, debido a un numero puede ser visto en decimal, octal o hexadecimal, pero al fin del acabo es solo una representacion, de un mismo numero, esto es si tu declaras un numero como
Como has dicho no puede ser representado en binario.

El número que devuelve no es para nada el número que se introduce, meramente una visualisación 'binario falsa' del número decimal insertado que creia que era lo que pedías.
__________________
Foros Desarrollo de Juegos
  #17 (permalink)  
Antiguo 28/04/2011, 16:48
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Invertir Numero en C

Mira a ver si este codigo te sirve, lo unico que hace es mostrar el resultado por pantalla.
Se le pasa como argumentos a la funcion el numero que quieres transformar y la base a la cual lo quieres transformar. Lo he hecho rapido y no lo he probado pero me parece que si funciona.

Código C++:
Ver original
  1. void cambiarBase(int num, int base)
  2. {
  3.      int resto;
  4.      int cociente;
  5.      
  6.      
  7.      resto = num &#37; base;
  8.      cociente = num/base;
  9.      
  10.      if(cociente < base)
  11.      {
  12.               cout << cociente;
  13.               cout << resto;
  14.      }
  15.      else
  16.      {
  17.               cambiarBase(cociente,base);
  18.               cout << resto;
  19.      }
  20. }

Etiquetas: invertir, numero
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 08:56.