Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONVERSION D'UN NOMBRE D'UNE BASE QUELCONQUE VERS UNE AUTRE


Information sur la source



Description

Cliquez pour voir la capture en taille normale
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

  • 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]);
  • }
  • }
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.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de bagaz le 27/05/2007 09:21:10

c'est quoi le MAX_CHIFFRES ? il faudrait aussi commencer par l'initialiser.
Toutefois ton code je le trouve interessant.

signaler à un administrateur
Commentaire de bagaz le 27/05/2007 09:34:20

desolé quel idiot je fais je viens de le voir dans ton main.c

signaler à un administrateur
Commentaire de Abrahamz le 11/11/2007 18:09:18

C'est pas grave, j'aurais du le préciser dans la source online.

signaler à un administrateur
Commentaire de Big cent le 13/04/2008 13:16:32

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?

signaler à un administrateur
Commentaire de Abrahamz le 14/04/2008 16:40:11

c'est du au fait que je n'ai pas mis de pause a la fin du programme..

signaler à un administrateur
Commentaire de Big cent le 25/04/2008 11:27:18

Très beau programme

signaler à un administrateur
Commentaire de messmate le 02/12/2008 17:37:25 1/10

C'est quel C ?? Sorry, impossible à faire marcher, trop d'erreurs dans le mien. Pas de portabilité ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

conversion de la partie fractionnaire en base n [ par Alucard ] J'ai vu qu'il y avait beaucoup d'algorithme de la partie entière (int) d'un nombre en n'importe quel base mais je voulais savoir si quelqu'un avait un Algorithme conversion Noms longs <-> Noms courts [ par franck406 ] Je suis à la recherche de l'algorithme qui permet d'obtenir un nom fichier court à partir d'un nom de fichier long comme le fait Dos. Je dois écrire u Conversion décimale => binaire [ par nicolas66 ] Bonsoir tlm,j'ai un pb un une ptite fonction pas très compliquée à mon avis :char * itob( int n ){ char * chaine; int i = 0; while ( n &gt; 0 ) { *(c conversion des données EXCEL vers une base de données ACCESS [ par mallouka ] salut,j'ai besoin d'un logiciel ou un code source permettant de convertir une page XLS afin d'alimenter unedatabase ACCESS.s'il vous pla&#238;t ,j'ai Conversion chaine en entier base 16 [ par Cako19 ] Bonjour, Je souhaiterais convertir une chaine en entier base 16, tout comme le fait la fonction atoi en base 10. Ex: j'ai la chaine "0x013036" et je s Aide Conversion !!! [ par vincfred ] slt jai un programme a faire pour mon licé et je comprend rien le prof ma doné ke le fichier de déclaration jespere ke kelkun pouré maider voici le fi conversion hexadecimal en float [ par wantofirst ] Salutje recherche un code qui me permettra de convertir des resultat hexadecimal en float;ou est ce qu'il y'a une fonction en  C ou C++ qui nous perme algorithme de conversion logarithmique et correllation [ par develdelphi ] Bonjour,J'ai un système embarqué  integrant des fonctionnalités audio et qui a un microcontrolleur Atmel.Voila j'ai des valeurs en decimal sur l'ecran algorithme de conversion de fichier [ par novaghost ] Bonjour, j'aimerais un coup de pouce pour faire un algorithme de conversion de fichier texte. Voila je doit pour exercice, faire un programme qui conv conversion hexadecimal-binaire [ par naddoush ] salut tout le monde, je voudrais bien faire une conversion de l'hexadecimal en binaire, y a-t-il une fonctio que me permet de faire ça? je travaille


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,998 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.