Bonjour,
J'essaye de faire un simple programme de conversion d'un entier vers du binaire mais j'ai du mal a traduire l'algo sur certaines parties, notamment je ne sais pas par quoi remplacer la fonction str et je ne sais pas comment concatener ddes variables.
voici mon programme :
merci
Déjà y'a un problème avec la variable 'binaire'. Tu veux que ce soit une chaîne de caractère non ? Là si c'est un char, c'est UN SEUL caractère. Il faut en faire un tableau de char, que je te conseille de mettre sous la forme de char*.
Ensuite quand tu fais 'binaire = str(nb%2) + binaire' tu oublies justement que tu travailles avec une variable de type 'char'. Un char c'est rien d'autre qu'un nombre entier en fait qui représente le code ASCII d'un caractère. Quand tu additionnes deux char, tu additionnes deux codes ASCII. Le code ASCII de '0' vaut 48, donc si tu additionnes (en char, donc) '0' + '0' tu obtiens 48+48 = 96, soit le code ASCII du caractère ' ` '.
Je réfléchis un peu et je te donne une structure de code qui devrait fonctionner mieux.
Voici mon code :
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
int nb = 0;
char* binaire;
int taille = 0;
int index = 0;
cout << "Entrer un nombre : " << endl;
cin >> nb;
if(nb < 0)
{
return -1;
}
//Déterminer la taille du tableau
while(pow(2,taille) < nb)
{
taille++;
}
//Allocation mémoire
binaire = (char*) malloc((taille+1)*sizeof(char));
if(binaire == NULL)
{
return -1;
}
//Initialisation du tableau
for(int i = 0; i < taille; i++)
{
*(binaire+i) = ' ';
}
//On remplit avec les caractères
while(nb!=0)
{
if(nb%2==0)
{
*(binaire + taille - index) = '0';
}
else
{
*(binaire + taille - index) = '1';
}
nb = nb/2;
index++;
}
*(binaire + taille + 1) = '\0';
//On affiche
cout << endl << nb << " en binaire s'écrit : " << binaire << endl;
free(binaire);
return 0;
}
Sur pastebin : http://pastebin.com/WnNbWi9z
J'espère que ça reste propre, j'ai pas fait de C++ depuis des plombes, je code principalement en C embarqué.
int main(void)
{
// str qui va contenir notre résultat en binaire
std::string bin;
// une valeur décimale à convertir en binaire
int res = 10;
// tant que res est supérieur à 0
while (res > 0)
{
// on rajoute le LSB (bit de poids faible) au début de la chaine
// puis on fait un +48 pour obtenir sa valeur en ascii (c.f table ascii)
bin.insert(bin.begin(), (res & 1) + 48);
// on décalle notre resultat de 1 vers la droite pour obtenir le LSB suivant
res = res >> 1;
}
std::cout << bin << std::endl;
return (0);
}
merci a vous ça va bien m'aider !
Bon du coup je vais essayer de faire un petit programme complet avec un petit menu qui permet de convertir un décimal vers hexadécimal et inversement.
Déjà voici l'algo que je viens de faire, il n'est pas complet il manque la partie hexa vers décimal, je préfère déjà valider la première partie.
Par contre la j'ai comme résultat une chaine de chiffres, je fais comment pour que 10 = A par exemple?
Programme conversion
choix : caractère
hexa : chaine
nb, k : entier
debut
//boucle sur le menu
Choix ← ‘’Z’’
Tantque choix <> ‘’Q’’ et choix <> ‘’q’’
//menu
Afficher ‘’ conversion decimal vers hexadecimal…………1’’
Afficher ‘’conversion hexadecimal vers decimal………….2’’
Afficher ‘’quitter………………………………………………………….Q’’
Saisir choix
//conversion entier vers hexadecimal
Si choix = ‘’1’’ alors
Hexa ← ‘’ ‘’
Afficher ‘’entrer un entier = ‘’
Saisir nb
Tantque nb <> 0
hexa ←str(nb mod 2) + hexa
nb ←nb div 16
fin tantque
afficher ‘’conversion en hexadecimal = ‘’ + hexa
sinon
//conversion hexadecimal vers decimal
La méthode la plus simple c'est un switch avec les 16 cas (ou les chiffres + les 6). Après ya sûrement moyen d'être plus élégant et efficace mais ça c'est à toi de trouver l'optimisation
un switch? j’insère ça comment dans mon algo?