Convertisseur de la base 2 à la base 16

Description

voici un code en C++ qui permet de convertir un long int en une autre base (de 2 à 16)... l'entrée des nombres se fait dans un chaine de caractère afin de tester la validité des données introduite.

Source / Exemple :


/* convertisseur de base (de la base 2 à la base 16) by Morre Thierry alias ||MaC|| Ferson */

#include <iostream>
#include <stdlib.h>

using namespace std;

const MAX=100; // taille du vecteur pour la réponse

void input (char *, char *, int &); // encodage des valeurs
void init (int *, int); // initialisationb du tableau
bool isnum (char *); // permet de vérifié si la chaine est bien un nombre
void convert (int *, long int, int); // comvertion en fonction de la base
void print (int *, int, int); // affichage du résultat
void choix (char &); // choix de l'utilisateur

void main (void)
{
	// déclaration de mes variables
	bool err;
	int res[MAX], base;
	long int nombre;
	char nbre[50], base_char[7], choix_ut='o';	

	do
	{
		init (res, MAX);
		input (nbre, base_char, base);
		err = isnum (nbre);
		if (!err)
		{
			nombre = atol(nbre); // atol permet de transformer un chaine de caractère en long int (si tout les lettres sont des chiffres)
			convert (res, nombre, base);
			print(res,MAX,base);	
		}
		else
			cout << nbre << " n'est pas un nombre" << endl;

		choix (choix_ut);
	}while (choix_ut != 'n');
}

void input (char *nbre, char *base_char, int &base)
{
	bool err;
	do
		{
			cout << "En quel base souhaitez-vous le convertir (entre 2 et 16) : ";
			cin >> base_char;
			err=isnum(base_char);
			if (err)
			{
				cout << "Ce n'est pas un nombre" << endl;
				base = 0;
			}
			else
				base = atoi(base_char); // idem que atol mais donne un int au lieu d'un long int
		}while (!(base > 1 && base < 17));		

		cout << "Entrez le nombre : ";
		cin >> nbre;
}

void init (int *ptr, int taille)
{
	for (int i=0; i<taille; i++)

  • (ptr+i) = 0;
} bool isnum (char *a) { bool err=0; int i=0; while (*(a+i) != '\0') { if (!(*(a+i) > ('0'-1) && *(a+i) < ('9'+1))) // test chaque caractere afin de déterminer si l'utilisateur à bien rentré un nombre et pas un lettre err =1; i++; } return err; } void convert (int *ptr, long int nombre, int base) { int i=0; while (nombre > (base - 1)) {
  • (ptr+i) = nombre%base;
nombre = nombre/base; i++; }
  • (ptr+i) = nombre;
} void print (int *ptr, int taille, int base) { bool flag=1; // permet de supprimé les zéro non significatif for (int i=MAX-1; i > -1; i--) // la lecture du résultat se fait a l'envers { if (*(ptr+i) != 0 || !(flag)) // test si la valeur est un zéro non significatif { if (*(ptr+i) > 9) // si la valeur est supérieur a 10 alors il faut afficher une lettre { switch (*(ptr+i)) { case 10 : cout << 'A'; break; case 11 : cout << 'B'; break; case 12 : cout << 'C'; break; case 13 : cout << 'D'; break; case 14 : cout << 'E'; break; case 15 : cout << 'F'; break; default : cout << "erreur"; } } else // sinon on affiche la valeur cout << *(ptr + i); flag=0; } } cout << endl; } void choix (char &choix_ut) { do { cout << "Voulez-vous en faire un autre (o/n)? : "; cin >> choix_ut; }while (choix_ut != 'n' && choix_ut != 'o'); }

Codes Sources

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.