Exercice convertir entier base 10->16 16->10
Bonjour à la communauté developpez :)
Alors voilà, j'essaie de faire un exercice mais je me retrouve bloqué. Le but étant à partir d'un vecteur et de mes connaissances de base en c++ plutôt médiocre, de faire un programme qui puisse convertir comme un grand un chiffre en base 10 vers une base 16 et l'inverse.
Dans un premier temps, j'ai essayé de produire quelque chose sous la forme d'un algorithme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| Programme conversionBase1016
//déclaration des variables du programme
vecteur[10..15]: caractere
choix: caractere
calcule, poids, resultat, k, nb: entier
Debut
////on donne au vecteur les valeurs de la base 16 entre 10 et 15
vecteur<-{"A","B","C","D","E","F"}
choix<-"c"
tantque choix <> "Q" et choix <> "q"
//affichage du menu
afficher "Conversion base 10 en base 16 (1)"
afficher "Conversion base 16 en base 10 (2)"
afficher "Quitter le programme (Q)"
//conversion base 10 en base 16
si choix = 1 alors
resultat<-""
afficher "Renter un nombre entier de base 10"
saisir nb
tanque nb <> 0 alors
resultat<-gauche(str(nb mod 16)+resultat
nb<-nb div 16
pour k de 10 à 15
si resultat = k alors
resultat<-vecteur[k]
finsi
finpour
fintantque
afficher "Le nombre en base 16:"+resultat+
sinon
si choix = 2 alors
calcule<-0
afficher "Rentrer un nombre de base 16:"
saisir nb
taille<-taille(nb)
//tantque nb contient toujours quelque chose
tantque taille(nb)>0
poids<-pow (16, taille-1)
//exemple: si 'A' alors k=10; si 'B' alors k=11
pour k de 10 à 15
si extraire(nb,1,1)=vecteur[k] alors
calcules<-poids*k
sinon
//Comme on ne se sert pas de k ici, on utilise val
calcule<-poids*val(extraire(nb,1,1)
finsi
finpour
fintanque
afficher"Le nombre en base 10:"+calcule
finsi
fin |
En c++, j'ai quelque chose avec beaucoup d'erreurs et des problèmes aussi pour traduire/passer d'un algorithme à du c++.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| /*programme exo1
* but: convertir base 10 et 16
* auteur: Mario
* Date 24/03/2015
*/
//Bibliothèques nécessaires au programme
#include <conio.h> //pour utiliser le 'getch'
#include <stdio.h> //permet d'utiliser 'printf' et 'scanf'
#include <math.h> //permet d'utiliser dans notre cas la fonction mathématique 'pow'
using namespace std;
int main()
{
//déclaration des variables du programme
//on choisis l'interval 10 et 15 par rapport à 'A' étant égale à 10 et 'F' à 15
//on donne au vecteur les valeurs de la base 16 entre 10 et 15
string vecteur[10.15] = {"A","B","C","D","E","F"};
char choix;
int calcule, poids, resultat, k, nb, taille;
//on choisit une valeur quelconque qui n'est pas '1','2', ou 'Q'/'q' pour demarrer le programme
choix = "c";
while (choix != "Q" & choix != "q"){
//affichage du menu du programme
printf("Conversion base 10 en base 16(1):");
printf("Conversion base 16 en base 10(2):");
printf("Quitter le programme (Q):");
//si 1 alors conversion base 10 en base 16
if(choix = 1){
resultat = ;
printf("Rentrer un nombre entier de base 10:");
scanf("%d", &nb);
while(nb != 0){
resultat = nb.substr(nb % 16)+resultat;
nb = (nb/16);
for(k=10 ; k<=15 ; k++){
if (resultat == k){
resultat = vecteur[k];
}
}
}
printf("Le nombre en base 16: %d ", &resultat);
}else{
if(choix = 2){
calcule = 0;
printf("Rentrer un nombre base 16:");
scanf("%d", &nb);
//tantque nb contient toujours quelque chose
taille = nb.size();
while (nb.size() > 0){
poids = pow(16, taille-1);
for(k=10; k<=15; k++){
//exemple: si 'A' alors k=10. Si 'F' alors k=15
if(extracte(nb,1,1)==vecteur[k]){
calcule=poids*k;
}else{
//comme on ne se sert pas de k ici, on utilise la fonction Val
calcule=poids*Val(extract(nb,1,1));
}
}
}
printf("Le nombre en base 10: %d ", &calcule);
}
}
getch();
return 0;
}
} |
Je suis conscient que ma logique est soit fausse ou très peu optimisée. Qu'il y a des erreurs (même trop) mais je suis ici pour avoir des conseilles et je suis pas la partie débutant :). Bonne journée