Programa convertidor de base numerica C++-->C (requiero ayuda)

Iniciado por Daidronix, 9 Mayo 2014, 08:08 AM

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

Daidronix

Hola, tengo un programa de conversión de base numérica para cualquier base con un rango de 1 byte, el programa funciona correctamente, mi asunto es que esta programada en C++ y lo necesito en C, podría alguien ayudarme a  pasarlo? o decirme como funcionan las funciones que aparecen?

Código:

#include<iostream>
#include<cmath>
#include<bitset>

using namespace std;

//DECLARACION DE FUNCIONES:
int baseCharAInt(char []);
int numCharAInt(char[],double);
void convierte(int ,int);

int main(){
   
    const char ask=168; //PARA QUE SALGA EL SIGNO "¿"
    char baseInChar[3],baseOutChar[3],repetir='s';
    char numInChar[]={0,0,0,0,0,0,0,0};
    int baseIn,baseOut,numIn;
     
    cout<<"\t\t*BASES: HEX=X16  DEC=X10  OCT=X8  BIN=X2\n\n";
    while(repetir=='s'||repetir=='S'){
                                     
    cout <<"--->"<<ask<<"EN QUE BASE ESTA TU NUMERO ORIGINAL?: ";
    cin >>baseInChar;
    baseIn=baseCharAInt(baseInChar); if(baseIn==0)cout<<"\n\n \t\tBASE NO VALIDA!!!\n";
   
    if(baseIn!=0){
    cout <<"\n--->"<<ask<<"A QUE BASE DESEAS CONVERTIR TU NUMERO?: ";
    cin >>baseOutChar;
    baseOut=baseCharAInt(baseOutChar);if(baseOut==0)cout<<"\n\n \t\tBASE NO VALIDA!!!\n";
    }
   
    if(baseIn!=0&&baseOut!=0){
    cout <<"\n--->"<<ask<<"CUAL ES EL DICHOSO NUMERO A CONVERTIR?: ";
    cin >>numInChar;
    numIn=numCharAInt(numInChar,baseIn);
    cout<<"\n\n\t\t*Muy bien. Tu numero en base "<<baseOutChar<< " es: ";
    convierte(numIn,baseOut);
    }
   
    cout<<"\n\n\n"<<ask<<"Quieres convertir algun otro numerillo? (S/N): ";
    cin>>repetir;
    cout<<"\n\n";
    cin.get();
    }
}   
//CONVIERTE LA BASE DE CHAR A INT
int baseCharAInt(char baseChar[3]){
    int base;   
    if(baseChar[1]=='1'&&baseChar[2]=='6') base=16;
    else if(baseChar[1]=='1'&&baseChar[2]=='0') base=10;
    else if(baseChar[1]=='8')base=8;
    else if(baseChar[1]=='2')base=2;
    else base=0;
    return base;
}
//CONVIERTE EL NUMERO DE CHAR A SU VALOR EN FORMATO DOUBLE:   
int numCharAInt(char numChar[],double base){
    int length;
    for(int i=1;numChar!=0;i++) length=i+1;
    int num=0;
    int numArr[length];
    for(int j=0;j<length;j++){ //USANDO ASCII PARA DARLE UN VALOR NUMERICO A LOS CARACTERES DE '1'-'9', 'A'-'F' y 'a'-'f'
            if(numChar[j]<=57)
            numArr[j]=numChar[j]-48;
            else if(numChar[j]<=70)
            numArr[j]=numChar[j]-55;
            else if(numChar[j]<=102)
            numArr[j]=numChar[j]-87;
            }
    for(int k=0;k<=length-1;k++) num+=numArr[k]*pow(base,length-1-k);
                 
    return num;   
}
   
//MUESTRA EL VALOR DEL NUMERO EN LAS DISTINTAS BASES:   
void convierte(int num,int baseOut){
        switch(baseOut){
        case 10: cout<<num; break;
        case 16: cout<<noshowbase<<hex<<num;break;
        case  8: cout<<noshowbase<<oct<<num;break; 
        case  2: cout <<bitset<8>(num);break;             
        }
}

eferion

Si lees las normas del foro... una de ellas dice: "No se hacen tareas".

Empieza a traducirlo tú y cuando te atasques avísanos.