Vous êtes sur la page 1sur 3

#include <stdio.

h>
#include <string.h>
//Jose German Torres Calva
@Gerto2015
2015-08-16
//Programa de conversiones de numero,
//Modos de conversion Decimal-Binario-Hexadecimal-Octal
//comprobamos de represetacion de numero por cifras del primer parametro
int correcto(char *cifras, char *representacion, unsigned int base)
{
char *posicion;
int i;
if(strlen(cifras) < 2 || base < 2 || base > strlen(cifras))
return 0;
for(i = 0 ; representacion[i] && (posicion = strchr(cifras , representacion[
i])) && (posicion - cifras < base) ; i++);
return !representacion[i];
}
//obtener valor decimal
unsigned long obtener_valor(char *cifras, char *representacion, unsigned int bas
e)
{
int i;
unsigned long valor = 0;
if(!correcto(cifras , representacion , base))
return 0;
for(i = 0 ; representacion[i] ; i++)
{
valor *= base;
valor += strchr(cifras , representacion[i]) - cifras;
}
return valor;
}
//pasamos el numero "valor" a una representacion en la base "base"
char* obtener_representacion(char *cifras, unsigned long valor, unsigned int bas
e)
{
int i,j;
static char representacion[33]; //hasta 32 bits
char aux;
for(i = 0 ; valor ; i++)
{
representacion[i] = cifras[valor % base];
valor /= base;
}
representacion[i] = '\0';
i--;
for(j = 0 ; j < i ; j++,i--)
{

aux = representacion[i];
representacion[i] = representacion[j];
representacion[j] = aux;
}
return representacion;
}
char* cambiar_base(char *cifras, char *representacion, unsigned int base_inicial
, unsigned long base_final)
{
char aux;
int i,j;
unsigned long valor;
if(!correcto(cifras,representacion,base_inicial))
return NULL;
if(base_final < 2 || base_final > strlen(cifras))
return NULL;
valor = obtener_valor(cifras,representacion, base_inicial);
for(i = 0 ; valor ; i++)
{
representacion[i] = cifras[valor % base_final];
valor /= base_final;
}
representacion[i] = '\0';
i--;
for(j = 0 ; j < i ; j++,i--)
{
aux = representacion[i];
representacion[i] = representacion[j];
representacion[j] = aux;
}
return representacion;
}
//modificamos las cifras del sistema de numeros
char* intercambiar_cifras(char *cifras_antiguas, char *cifras_nuevas, char *repr
esentacion, unsigned int base)
{
int i;
if(!correcto(cifras_antiguas,representacion,base))
return NULL;
if(strlen(cifras_nuevas) < 2 || base < 2 || base > strlen(cifras_nuevas))
return NULL;
for(i = 0 ; representacion[i] ; i++)
representacion[i] = cifras_nuevas[strchr(cifras_antiguas,representacion[
i]) - cifras_antiguas];

return representacion;
}
int main(int argc, char *argv[])
{
unsigned long valor = 10023629;
char cadena[50];// = "10023629";
char cifras1[] = "0123456789ABCDEFGHIJKLMONPQRSTUVWXYZ";
char cifras2[] = "1aH0KLy26Au3Uwq!$%&/()=?[]{}-_.:,;";
//convertimos el valor inicial en una representacion en base 6 (Hexadecimal)
strcpy(cadena,obtener_representacion(CIFRAS,valor,6));
printf("%s:6\n",cadena);
//obtenemos el valor en decimal y lo imprimos
printf("%lu:10\n",obtener_valor(cifras1,cadena,6));
//realizamos distintas conversiones y Realizamos una revision
printf("%s:16\n",cambiar_base(cifras1,cadena,6,16));
printf("%s:10\n",cambiar_base(cifras1,cadena,16,10));
printf("%s:7\n",cambiar_base(cifras1,cadena,10,7));
printf("%s:6\n",cambiar_base(cifras1,cadena,7,6));
printf("%s:2\n",cambiar_base(cifras1,cadena,6,2));
printf("%s:8\n",cambiar_base(cifras1,cadena,2,8));
printf("%s:10\n",cambiar_base(cifras1,cadena,8,10));
printf("%s:25\n",cambiar_base(cifras1,cadena,10,25));
//modificamos las cifras del sistema numerico
printf("%s\n",intercambiar_cifras(cifras1,cifras2,cadena,25));
//modificamos las cifras, el numero sigue siendo el mismo:
printf("%lu\n",obtener_valor(cifras2,cadena,25));
return 0;
}

Vous aimerez peut-être aussi