sábado, 26 de agosto de 2023

 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