Código en C para convertir Sistema Decimal a Binario y Viceversa
El Código es un C sencillo y se puede mejorar sustancialmente
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// Initializing methods
int presentacion();
int menu();
int calcBinaryToDec();
double getPow(double value1, double position);
int isPair(int param);
int main() {
presentacion();
int menuOpcion;
menuOpcion = 1;
while(menuOpcion==1 || menuOpcion==2){
menu();
printf("Ingrese numero de opcion: ");
scanf("%d", &menuOpcion);
printf("\n");
if(menuOpcion==1){
calcBinaryToDec();
}
else if(menuOpcion==2){
calDecToBinary();
}
else
printf("******** Fin ********\n");
}
return 0;
}
int presentacion(){
printf("*********************\n");
printf("** ADRIAN BORDONES **\n");
printf("*********************\n");
return 0;
}
int menu(){
printf("Opciones de Calculo\n");
printf("1 - Binario a Decimal\n");
printf("2 - Decimal a Binario\n");
printf("0 - Salir\n");
return 0;
}
int calDecToBinary() {
int decNum;
int nextValue;
int j;
int largoCadena;
char cadena[10] = "";
char localValue[2];
char cadenaFinal[10] = "";
char tempValue, newTemp;
double resultDiv;
int isPairValue;
printf("Calculo Decimal a Binario\n");
printf("Ingrese Numero Decimal: ");
scanf("%d", &decNum);
nextValue = decNum;
while(nextValue != 0)
{
if(decNum > 1)
{
isPairValue = isPair(decNum);
resultDiv = decNum/2;
if(isPairValue==1)
tempValue = '0';
else
{
tempValue = '1';
resultDiv = trunc(resultDiv);
}
strncat(cadena, &tempValue, 1);
decNum = (int)resultDiv;
nextValue = 1;
}
else
{
tempValue = '1';
isPairValue = isPair(decNum);
resultDiv = 1;
strncat(cadena, &tempValue, 1);
nextValue = 0;
}
}
largoCadena = strlen(cadena);
for(j = largoCadena-1; j >= 0; j--) {
newTemp = cadena[j];
localValue[0] = newTemp;
localValue[1] = '\0';
strcat(cadenaFinal, localValue);
}
printf("Valor Binario: %s\n", cadenaFinal);
printf("---------------------\n");
return 0;
}
int isPair(int param) {
int result = 0;
if ((param % 2) == 0)
result = 1;
else
result = 0;
return result;
}
int calcBinaryToDec() {
// variables
int binaryNum, i;
//char numString[25];
char newString[25];
int largo, iParam, iRespuesta, iSummary;
double param1, respuesta, lposition;
int result;
char valor0;
char valor1[2];
double summary;
summary=0;
printf("Calculo de Binario a Decimal\n");
printf("Ingrese Numero Binario: ");
scanf("%d", &binaryNum);
// sprintf : convert integer variable to string
sprintf(newString, "%d", binaryNum);
// reverse string binary value to process inside for loop
largo = strlen(newString);
for(i=largo-1;i>=0;i--) {
valor0 = newString[i];
valor1[0] = valor0;
valor1[1] = '\0';
// atoi : conver this piece of string into integer value
result = atoi(valor1);
// cast values from int to double
param1 = (double)result;
lposition = (double)(largo - (i+1));
// call function to get power of number value with position
respuesta = getPow(param1, lposition);
// add to summary calc
summary = summary + respuesta;
iParam = (int)param1;
iRespuesta = (int)respuesta;
}
iSummary = (int)summary;
printf("Valor Decimal: %d\n", iSummary);
printf("---------------------\n");
return 0;
}
double getPow(double value1, double position)
{
double result = 0;
double binRef = 2; // base calculo binario
double refResult = pow(2, position);
if (value1 == 1) // si binario es 1 devuelve resultado, de lo contrario 0
result = refResult;
else
result = 0;
return result;
}
Elaborado el Sábado 27 de Agosto de 2023