Conversion d'un nombre d'une base quelconque vers une autre

Soyez le premier à donner votre avis sur cette source.

Vue 25 939 fois - Téléchargée 1 180 fois

Description

Le fonction baseToBase permet de convertir un nombre d'une base quelconque vers une autre, par le biais de la base décimale. Le programme est en console et ne supporte que les entiers naturels.

Source / Exemple :


char* baseToBase(char* nombre, char* base_entree, char* base_sortie)
{
    // On va passer par la représentation décimale pour faire la conversion
    int nombre_decimal=0;

    int i, j;

    int taillebase_entree = strlen(base_entree);
    printf("Taille de la base d'entree : %d\n", taillebase_entree);
    int taillebase_sortie = strlen(base_sortie);
    printf("Taille de la base de sortie : %d\n", taillebase_entree);
    int taille_nombre = strlen(nombre);

    // Conversion vers la base 10
    for(i=0; i<taille_nombre; i++){
        // Le chiffre est donné par la position du caractère dans la base
        int chiffre = strpos(base_entree, taillebase_entree, nombre[i]);
        //printf("Chiffre n %d : %d\n", i, chiffre);

        int expo = pow(taillebase_entree, taille_nombre-i-1);
        //printf("Exposant : %d\n", expo);

        nombre_decimal += chiffre * expo;
    }

    printf("Nombre en decimal : %d\n", nombre_decimal);

    i=0;
    char * nombre_final[MAX_CHIFFRES+1];
    int quotient = nombre_decimal;
    // Le nombre est écrit de droite à gauche dans le tableau (à l'envers)
    // On arrangera ca plus tard
    do{

        nombre_final[i++] = base_sortie[quotient % taillebase_sortie];

        // On a fini ?
        if(quotient < taillebase_sortie)
            break;

        quotient = (int)(quotient / taillebase_sortie);

        if(i > MAX_CHIFFRES){
            printf("Nombre trop grand..\n");
            exit(3);
        }

    }while(1);

	printf("Nombre final (contient %d chiffres) : \n", i);
	// On remet le nombre a l'endroit
	while(i > 0){

	    i--;
	    putchar(nombre_final[i]);

	}

}

Conclusion :


Le programme peut etre amélioré en réfléchissant à la taille des tableaux (Si on convertit un nombre de base 10 en base 16, la chaine résultante est toujours plus petite), mais je n'ai pas cherché plus que ça.

Merci de me dire si il y des bugs.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_bagaz
Messages postés
9
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
27 mai 2007
-
c'est quoi le MAX_CHIFFRES ? il faudrait aussi commencer par l'initialiser.
Toutefois ton code je le trouve interessant.
cs_bagaz
Messages postés
9
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
27 mai 2007
-
desolé quel idiot je fais je viens de le voir dans ton main.c
Abrahamz
Messages postés
14
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
9 décembre 2008
-
C'est pas grave, j'aurais du le préciser dans la source online.
Big cent
Messages postés
13
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 décembre 2008
-
le code est bon mais j'ai des ^petits problèmes pour afficher le resultat car le fichier .exe se ferme automatique à quoi est du cela?
Abrahamz
Messages postés
14
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
9 décembre 2008
-
c'est du au fait que je n'ai pas mis de pause a la fin du programme..

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.