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

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

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.