1 /* 
  2 Pseudocódigo dec_a_base:
  3    verificar que la base esté en el rango correcto
  4    Si el número es negativo extraer el signo
  5    Mientras el número sea distinto de cero
  6       extraer una cifra como el resto de la división por base
  7       dividir el número por base, quedándose con el entero
  8       agragar la cifra al resultado, para la potencia correspondiente de 10
  9    Fin Mientras
 10    Devolver resultado con signo correcto
 11 
 12 Pseudocódigo base_a_dec: (casi igual al anterior, intercambiando 10 con base)
 13    Chequear que la base esté en el rango correcto
 14    Si el número es negativo extraer el signo
 15    Mientras el número sea distinto de cero
 16       extraer una cifra como el resto de la división por 10
 17       verificar que la cifra sea consistente con la base
 18       dividir el número por 10, quedándose con el entero
 19       agragar la cifra al resultado, para la potencia correspondiente de base
 20    Fin Mientras
 21    Devolver resultado con signo correcto     
 22 */
 23 
 24 #include <stdio.h>
 25 
 26 int dec_a_base (int numdec, int base);
 27 int base_a_dec (int numbase, int base);
 28 
 29 int main()
 30 {
 31    int nd,b,nb;
 32    
 33    printf("Ingrese un numero: ");
 34    scanf("%d",&nb);
 35    printf("Ingrese su base: ");
 36    scanf("%d",&b);
 37    
 38    nd = base_a_dec(nb,b);
 39    printf("En decimal es: %d\n" , nd);
 40    
 41    nb = dec_a_base(nd,b);
 42    printf("En base %d es: %d\n" ,b, nb);
 43    
 44    return 0;
 45 }
 46 
 47 int base_a_dec (int numbase, int base)
 48 {
 49    int cifra, potbase=1, numdec=0, sig=1;
 50    
 51    if (numbase<0)
 52    {
 53       sig = -1;
 54       numbase *= sig;
 55    }
 56    
 57    if (base < 2 || base > 9)
 58    {
 59       printf("Base fuera del rango permitido (2-9)\n");
 60       exit(1);
 61    }
 62    
 63    while (numbase)
 64    {
 65       cifra = numbase%10;
 66       if (cifra >= base)
 67       {
 68          printf("El número no correponde a la base\n");
 69          exit(1);       
 70       }
 71       numbase/=10;
 72       numdec+= potbase*cifra;
 73       potbase*=base;
 74    }
 75     
 76     return sig * numdec;
 77 }
 78 
 79 
 80 int dec_a_base (int numdec, int base)
 81 {
 82    int cifra, potbase=1, numbase=0, sig=1;
 83    
 84    if (numdec<0)
 85    {
 86       sig = -1;
 87       numdec *= sig;
 88    }
 89    
 90    if (base < 2 || base > 9)
 91    {
 92       printf("Base fuera del rango permitido (2-9)\n");
 93       exit(1);
 94    }
 95    
 96    while (numdec)
 97    {
 98       cifra = numdec%base;
 99       numdec/=base;
100       numbase+= potbase*cifra;
101       potbase*=10;
102    }
103     
104     return sig * numbase;
105 }


syntax highlighted by Code2HTML, v. 0.9.1