begin process at 2012 05 27 14:57:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CONVERTISSEUR DE LA BASE 2 À LA BASE 16

CONVERTISSEUR DE LA BASE 2 À LA BASE 16


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :05/12/2002 Date de mise à jour :05/12/2002 12:06:22 Vu / téléchargé :5 560 / 86

Auteur : MaCFerson

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 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

  • /* 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');
  • }
/* 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');
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip GESTIONNAIRE D'UN DICTIONNAIRE

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de MaCFerson le 05/12/2002 14:57:20

un petite précision est à apporter, il n'accepte pas encore les nombres négatif :) ca viendra par la suite

Commentaire de BeB3Re le 05/12/2002 20:53:33

LOL copieur d'idées !!
nan j déconne on va pas cracher ds la soupe elle est bien sympathique ta source!

salu

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales