Test Foro de elhacker.net SMF 2.1

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



#include<stdio.h>
#include<math.h>
#include<conio.h>
void main(){
int num,ex,suma,res;
printf("introduce numero");
scanf("%d",&num);
ex=0;
suma=0;

do{do{
res=(pow (2,ex));

ex++;
}while(res<=num);//deberia encontar el resultado de 2^ex mas alto menor que un numero introducido por teclado
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
num=num-res;//resta el resultado del bucle al numero introducido por teclado
suma=(suma+(pow(10,ex)));//eleva 10 al numero correspondiente y lo suma con el resultado anterior
ex=0; res=0;//reinicia variable
}while(num<=0);
printf("%d",suma);
getch();
}//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.
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main(){
int num,ex,suma,res;
printf("introduce numero");
scanf("%d",&num);
ex=0;
suma=0;

do{do{
res=(pow (2,ex));

ex++;
}while(res<=num);//deberia encontar el resultado de 2^ex mas alto menor que un numero introducido por teclado
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
num=num-res;//resta el resultado del bucle al numero introducido por teclado
suma=(suma+(pow(10,ex)));//eleva 10 al numero correspondiente y lo suma con el resultado anterior
ex=0; res=0;//reinicia variable
}while(0<num);//error estaba aqui
printf("%d",suma);
getch();
}//void