Duda ejercicio C nº binarios

Iniciado por juanpalomo098, 7 Diciembre 2016, 01:29 AM

0 Miembros y 1 Visitante están viendo este tema.

juanpalomo098

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


jvm1994

#1
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
"La posibilidad de crear tu mundo."

int main()
{
eMundo * Own = world_new();
if(Own != NULL)
{
    world_create(Own);
}

return 0;
}

juanpalomo098

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...

jvm1994

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.
"La posibilidad de crear tu mundo."

int main()
{
eMundo * Own = world_new();
if(Own != NULL)
{
    world_create(Own);
}

return 0;
}

juanpalomo098

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