You are on page 1of 2

#include <stdio.

h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>

main() {
int entero, resE, i, cont, op;
float num, decimal, outnum;
char opt, r[20], bin[20], inbin[20], innum[20], indec[20];

do {
i=0; cont=0; outnum=0;

do {
system("cls");
printf("\n\tConvertira binario a decimal (1) o decimal a binario (2) ?
");
scanf("%i", &op);
if(op<1 || op>2) {
printf("\n\n\t\tOpcion no valida\n");
getch();
}
} while(op<1 || op>2);

switch(op) {
case 1:
fflush(stdin);
system("cls");
printf("\n\tIngrese un binario: ");
scanf("%s", inbin);
while(inbin[i]!='.') {
innum[cont++] = inbin[i++];
}
innum[i] = '\0';
cont=0; i++;
while(inbin[i]!='\0') {
indec[cont++] = inbin[i++];
indec[cont]='\0';
}
cont = strlen(innum);
for(int a=0; a<cont; a++) {
if(innum[a] == '1') {
outnum += pow(2, cont-1-a);
}
}
for(int a=0; a<strlen(indec); a++) {
if(indec[a]=='1') {
outnum += 1/pow(2, a+1);
}
}
printf("El binario %s en decimal es %f ", inbin, outnum);
getch();
break;
case 2:
fflush(stdin);
system("cls");
printf("\n\tIngrese un numero: ");
scanf("%f", &num);
entero = (int) num;
resE = entero;

do {
if(resE % 2 == 1) r[i++] = '1';
else if (resE % 2 == 0) r[i++] = '0';
resE /= 2;
cont++;
} while(resE >= 1);

i=0;
for(int a=cont-1; a>=0; a--) { bin[i++] = r[a]; }

decimal = num - entero;


if(decimal > 0) {
bin[cont++] = '.';
i=cont;
do {
decimal *= 2;
if(decimal >= 1) {
decimal -= 1;
bin[i++] = '1';
} else if(decimal < 1) bin[i++] = '0';
cont++;
} while(decimal != 0);
}

printf("El numero %f en binario es ", num);


for(int a=0; a<cont; a++) printf("%c", bin[a]);
getch();
break;
}

fflush(stdin);
printf("\n\nDesea convertir otro numero? ");
scanf("%c", &opt);
tolower(opt);
} while (opt == 's');
}

You might also like