Bases de numeración en C

– Prog078

/* Prog078.cpp */

/* Programa que convierte un número hexadecimal a decimal*/
#include <stdio.h>
#include<math.h>
#include<string.h>
#include<conio.h>
float hex_dec(char cadena[]);
void main()
{
char hexa[10];
float numero;
clrscr();
printf(«Numero hexadecimal (mayúsculas): «); gets(hexa);
printf(«nCadena= %s»,hexa); numero=hex_dec(hexa);
printf(«nEn decimal es : %.0f»,numero);
}
float hex_dec(char cadena[])
{
int i,j;
char letra;
float decimal=0;
float temp;
temp=0;
i=strlen(cadena);
/* La función «strlen», que se encuentra en <string.h> devuelve la longitud de la cadena.
*/ for (j=0;i>0;j++,i–)
{
letra=cadena[i-1];
printf(«n Letra= %c»,letra);
switch(letra){
case ‘1’:temp=(1*pow(16,j));
break;
case ‘2’:temp=(2*pow(16,j)); break;
case ‘3’:temp=(3*pow(16,j)); break;
case ‘4’:temp=(4*pow(16,j)); break;
case ‘5’:temp=(5*pow(16,j)); break;
case ‘6’:temp=(6*pow(16,j)); break;
case ‘7’:temp=(7*pow(16,j)); break;
case ‘8’:temp=(8*pow(16,j)); break;
case ‘9’:temp=(9*pow(16,j)); break;
case ‘0’:temp=(0*pow(16,j)); break;
case    ‘A’:temp=(10*pow(16,j)); break;
case    ‘B’:temp=(11*pow(16,j)); break;
case ‘C’:temp=(12*pow(16,j)); break;
case ‘D’:temp=(13*pow(16,j)); break;
case ‘E’:temp=(14*pow(16,j)); break;
case ‘F’:temp=(15*pow(16,j)); break;
}
decimal+=temp;
}
return(decimal);
}

– Prog079

/* Prog079.cpp */

/* Función que cuenta las cifras en binario de un número decimal */

#include <stdio.h>
int numerocifras(int n);
void main()
{
int n;
printf(«nEscribe un número natural: «);scanf(«%d»,&n); printf(«nnEl número de cifras en binario es: %d»,numerocifras(n));
}
int numerocifras(int n)
{
int i;
i=1;
while (n>=2)

{
n=int(n/2);
i=i+1;
}
return i;
}

– Prog080

/* Prog080.cpp */

/* Programa que escribe un número decimal en binario */
#include <stdio.h>
#include <conio.h>
int numerocifras(int n);
void main()
{
int numci,n,i,cifra;
printf(«nEscribe un número natural: «);scanf(«%d»,&n);
printf(«nnEl número en binario es:»); numci=numerocifras(n);
i=0;
while (n>=2)
{
cifra=n%2; gotoxy(numci-i,8); printf(«%d»,cifra); n=int(n/2);
i++;
}
gotoxy(numci-i,8);
printf(«%d»,n);
}
int numerocifras(int n)
{
int i;
i=1;
while (n>=2)
{
n=int(n/2);
i=i+1;
}
return i;
}

La función gotoxy(a,b) que se encuentra en el fichero conio.h, sitúa el cursor en la columna a, fila b. De forma que si escribimos:
gotoxy(3,9);printf(“Hola”); 
aparecerá en la columna 3, fila 9 la palabra Hola.

– Prog081

/* Prog081.cpp */
/* Programa que escribe un número decimal en base 3 */
#include <stdio.h>
#include <conio.h>
int numerocifras(int n);
void main()
{
int numci,n,i,cifra;
printf(«nEscribe un número natural: «);scanf(«%d»,&n); //
printf(«nnEl número en base 3 es:»); numci=numerocifras(n);
i=0;
while (n>=3)
{
cifra=n%3; gotoxy(numci-i,8);
printf(«%d»,cifra); n=int(n/3);
i++;
}
gotoxy(numci-i,8);
printf(«%d»,n);
}
int numerocifras(int n)
{
int i;
i=1;
while (n>=3)
{
n=int(n/3);
i=i+1;
}
return i;
}

– Prog082

/* Prog082.cpp */

/* Programa que escribe un número decimal en base 4 */

#include <stdio.h>
#include <conio.h>
int numerocifras(int n);
void main()
{
int numci,n,i,cifra;
printf(«nEscribe un número natural: «);scanf(«%d»,&n);
printf(«nnEl número en base 4 es:»); numci=numerocifras(n);
i=0;
while (n>=4)
{
cifra=n%4; gotoxy(numci-i,8);
printf(«%d»,cifra); n=int(n/4);
i++;
}
gotoxy(numci-i,8);
printf(«%d»,n);
}
int numerocifras(int n)
{
int i;
i=1;
while (n>=4)
{
n=int(n/4);
i=i+1;
}
return i;
}

Fuente: Programación en C/C++ (Manual FV) de Fermí Vilà