Conversion dans les principales bases (octal, binaire, hexa, déc)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 100 fois - Téléchargée 35 fois

Contenu du snippet

ce programme converti les nombre de n'importe quelle base (a préciser si jamais)
mais il est prévu pour les convertir principalement dans la base les plus utilisées

(utile pour les cours a Favre-Bulle)

Source / Exemple :


//*******************************************************//
//							//
// Auteur : Boiron Laurent					//
// Date : 10 janvier 2005					//
// Projet : Moyenne						//
// Version : 1.0						//
// Plateforme : Win32					//
// But : Convertir des nombres de base n en base n		//
//			dans les principales base (d,b,h,o)	//
//						                //
//*******************************************************//

// Librairies
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include<math.h> // Gestion des operation mathematiques

using namespace std;

// Prototypes de fonctions
void bienvenue (void);
void accueil (void);
int baseFin (int&);
int baseEnNb (char, int&);
char NbEnBase (int &);
int inBaseNToDec (int&, int&, char*);
void chDecToN (int&, int&, char*);
void affichage (int&, char*, char*); 
void base (void);

// Fonctions
void bienvenue (void){
	cout << "Bienvenue" << endl;
	cout << endl;
	cout << "Ce programme permet de convertir des nombres de base n en base n" << endl;
	cout << "dans les principales base (d,b,h,o)" << endl;
}

void accueil (void){
	cout << endl;
	cout << "Entrez la lettre de la base, le caractere '_' puis le nombre a convertir" << endl;
	cout << "'b' binaire, 'h' hexa, 'd' decimal et 'o' octal" << endl;
}

int baseFin (int & inBool){
	char chBaseFin;
	int inBaseFin;
	cout << "En quelle base voulez-vous convertir ce nombre ? " << endl;
	cout << "'b' binaire, 'h' hexa, 'd' decimal et 'o' octal : ";
	cin >> chBaseFin;
	inBaseFin = baseEnNb (chBaseFin, inBool);
	return (inBaseFin);
}
int baseEnNb (char chBase, int & inBool){
	int inBase;
	switch (chBase){
		case 'B' :
		case 'b' :{
			inBase = 2;
			break;
		}
		case 'D' :
		case 'd' :{
			inBase = 10;
			break;
		}
		case 'H' :
		case 'h' :{
			inBase = 16;
			break;
		}
		case 'O' :
		case 'o' :{
			inBase = 8;
			break;
		}
		default :{
			cout << endl << "Il est impossible de convertir dans cette base" << endl;
			inBool = 1;
			inBase = 0;
		}
	}
	return (inBase);
}
char NbEnBase (int & inBaseFin){
	char chBase;
	switch (inBaseFin){
		case 2 :{
			chBase = 'b';
			break;
		}
		case 8 : {
			chBase = 'o';
			break;
		}
		case 10 : {
			chBase = 'd';
			break;
		}
		case 16 : {
			chBase = 'h';
			break;
		}
	}
	return (chBase);
}

int inBaseNToDec (int & inLon, int & inBaseDep, char * ptTabDep){
	int inChar = 0;
	int i = 0;
	int inTotal = 0;
	while (ptTabDep[inLon] != '_'){
		inChar = ptTabDep[inLon];
		if (inChar >= 64){
			if (inChar < 96){
				inChar -= 55;
			}
			else{
				inChar -= 87;
			}
		}
		else inChar -= 48;
		inTotal += inChar * (int)pow(inBaseDep,i);
		i++;
		inLon--;
	}
	return (inTotal);
}
void chDecToN (int & inTotal, int & inBaseFin, char * ptResult){
	int taille = 2;
	char chBin[64] = {0};
	char chBaseFin;
	for (int compt = 0; inTotal; compt++, taille++, inTotal/=inBaseFin)
	chBin[compt] = inTotal%inBaseFin + '0';
	for (int compt=1; compt<=taille; compt++)
	ptResult[compt] = chBin[taille-compt-1];
// nombre en Hexa
	if (inBaseFin == 16){
		for (int compt=1; compt<=taille; compt++){
			if (ptResult[compt] > 57){
				ptResult[compt] += 7;
			}
		}
	}
	chBaseFin = NbEnBase(inBaseFin);
	ptResult[0] = chBaseFin;
	ptResult[1] = '_';

}

void affichage (int & inLon, char * ptResult, char * ptTabDep){
	int i = 0;
// affichage du resultat
	cout << endl;
	cout << "Le nombre " << ptTabDep << " vaut : ";
	while (i != inLon-1){
		cout << ptResult[i];
		i++;
	}
}

void base (void){
	bienvenue();
	int inLon, inBaseDep, inBaseFin;
	char chBaseDep;
	char chResult[64] = {0};
	char * ptResult = chResult;
	int inTotal;
	int inBool = 1;
	while (inBool == 1){
		accueil();
		inBool = 0;
		char chTabDep[64] = {0};
		cin >> chTabDep;
		char * ptTabDep = chTabDep;
		chBaseDep = chTabDep[0];
		inBaseDep = baseEnNb(chBaseDep, inBool);
		if (inBool == 0){
			inBaseFin = baseFin(inBool);
			if (inBool == 0){
				inLon = (int)strlen(chTabDep);
				inLon--;
			//base N to dec
				inTotal = inBaseNToDec (inLon, inBaseDep, ptTabDep);
			//decimal to N
				chDecToN (inTotal, inBaseFin, ptResult);
				inLon = (int)strlen(chResult);
				affichage(inLon, ptResult, ptTabDep);
			}
		}
	}
}

// Programme principal
void main (void){
	base();
	getch();
}

Conclusion :


voilà j'espère que ca pourra aider qqun...

A voir également

Ajouter un commentaire Commentaires
Messages postés
9
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
1 avril 2009

Dans la fonction chDecToN(), il faut enlever la deuxième déclaration de l'entier compt dans la boucle for.....c-a-d :

for (int compt=1; compt<=taille; compt++) ==> for (compt=1; compt<=taille; compt++)
Messages postés
3
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
29 novembre 2009

ce programme n est pas excutable......aider moi

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.