Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: juanpalomo098 en 7 Diciembre 2016, 01:29 am



Título: Duda ejercicio C nº binarios
Publicado por: juanpalomo098 en 7 Diciembre 2016, 01:29 am
Hola tengo que hacer una programa que pase un numero decimal a binario, tengo el ejercicio practicamente hecho, pero no se porque no funciona..
A ver si me consigo explicar...
Son dos bucles uno que saca el resultado de 2 elevado a X mas grande menor que un numero introducido por teclado y otro que resta ese resultado al numero para cuando pase por el primer bucle y ademas eleva 10^X y lo suma cada vez  para dar el numero binario.


Ejemplo si queremos sacar el binario de 15


1 bucle: Resultado de 2^x mas alto <o igual a 15 =   es 2elevado a 3 =8  
2 bucle:  15-8=7 y    10^3 =1000 + 0= 1000
  
1 bucle: Resultado de 2^x mas alto <o igual a7 = es 2elevado a 2 =4
2 bucle: 7-4=3    y      10^2 =100 + 1000  =1100

1 bucle: Resultado de 2^x mas alto < o igual a 13 = es 2elevado a 1 =2
2 bucle: 3-2=1    y      10^1 =10 + 1100 = 1110

1 bucle: Resultado de 2^x mas alto < o igual a 1 = es 2elevado a 0 =2
2 bucle: 1-1=0   y       10^0 =1 + 1110 = 1111  15 en binario



Código
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<conio.h>
  4. void main(){
  5. int num,ex,suma,res;
  6. printf("introduce numero");
  7. scanf("%d",&num);
  8. ex=0;
  9. suma=0;
  10.  
  11. do{do{
  12. res=(pow (2,ex));
  13.  
  14. ex++;
  15. }while(res<=num);//deberia encontar el resultado de 2^ex mas alto menor que un numero introducido por teclado
  16. ex=ex-2;res=(pow (2,ex));//corrige errores del primer bucle porque al salir del bulcle ex ha aumentado dos veces mas de lo debido
  17. num=num-res;//resta el resultado del bucle al numero introducido por teclado
  18. suma=(suma+(pow(10,ex)));//eleva 10 al numero correspondiente y lo suma con el resultado anterior
  19. ex=0; res=0;//reinicia variable
  20. }while(num<=0);
  21. printf("%d",suma);
  22. }//void


Título: Re: Duda ejercicio C nº binarios
Publicado por: jvm1994 en 7 Diciembre 2016, 02:34 am
Juan hay un algoritmo que es la version "Play House Disney" es mucho más simple y creo que te podría ser de ayuda, te grabé un video, luego de verlo te indico el último paso por que se cortó.

https://sendvid.com/bh8kvbdo

Una vez realizado este algoritmo

Se toman todos los restos y el último cociente desde abajo hacia arriba.

ATENCION: Agarras el último cociente, que es uno (Es el unico que vale 1)
Y después comenzas a agarrar los restos, desde abajo hacia arriba.

Te quedaría 1111

Nota con / podés obtener el cociente
Con % podes obtener el residuo

Ese algoritmo es bastante más facil de aplicar en un programa.

Link útil: http://diagramas-de-flujo.blogspot.com.ar/2013/01/Determinar-cociente-residuo-division-C.html


Título: Re: Duda ejercicio C nº binarios
Publicado por: juanpalomo098 en 7 Diciembre 2016, 02:46 am
Gracias jaja ya se cual es ese algoritmo pero se me ocurrio como hacerlo con este lo que pasa que no se porque no funciona...


Título: Re: Duda ejercicio C nº binarios
Publicado por: jvm1994 en 7 Diciembre 2016, 02:56 am
Jajaj yo ando estudiando, mañana rindo dos finales juntos, sino revisaba el código.
La verdad es que leí rápido y conteste jajaj, me resultó más efectivo hacer ese mini video y subirlo que ponerme a testear el code, lo siento.


Título: Re: Duda ejercicio C nº binarios
Publicado por: juanpalomo098 en 7 Diciembre 2016, 03:39 am
Ya esta solucionado gracias igualmente.
Código
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<conio.h>
  4. void main(){
  5. int num,ex,suma,res;
  6. printf("introduce numero");
  7. scanf("%d",&num);
  8. ex=0;
  9. suma=0;
  10.  
  11. do{do{
  12. res=(pow (2,ex));
  13.  
  14. ex++;
  15. }while(res<=num);//deberia encontar el resultado de 2^ex mas alto menor que un numero introducido por teclado
  16. ex=ex-2;res=(pow (2,ex));//corrige errores del primer bucle porque al salir del bulcle ex ha aumentado dos veces mas de lo debido
  17. num=num-res;//resta el resultado del bucle al numero introducido por teclado
  18. suma=(suma+(pow(10,ex)));//eleva 10 al numero correspondiente y lo suma con el resultado anterior
  19. ex=0; res=0;//reinicia variable
  20. }while(0<num);//error estaba aqui
  21. printf("%d",suma);
  22. }//void