Bonjour à tous, il m'est demandé pour ce soir de réaliser cette algorithme sur algobox :
ecrire un algorithme permettant, par la méthode des divisions euclidiennes de convertir un entier de la base 10 à la base 16
J'ai déjà commencé mais je ne sais pas si c'est bon et c'est le cas je ne sais pas continuer :
Merci !
Bonjour à tous, il m'est demandé pour ce soir de réaliser cette algorithme sur algobox :
ecrire un algorithme permettant, par la méthode des divisions euclidiennes de convertir un entier de la base 10 à la base 16
J'ai déjà commencé mais je ne sais pas si c'est bon et c'est le cas je ne sais pas continuer :
*** message déplacé ***
bonjour,
avant d'écrire l'algortihme, il faut savoir comment tu fais sur papier, avec un crayon..
comment fais tu ?
je te donne un exemple : 362 en base 10
362 divisé par 16 ==> Quotient = 22, reste = 10 ==> A sera le chiffre de rang 0 (unités)
22 divisé par 16 ==> quotient = 1, reste 6 ==> 6 est le chiffre de rang 1
1 divisé par 16 ==> quotient = 0, reste = 1 ==> 1 est le chiffre de rang 2 et j'arrete.
en langage naturel, ca donne :
début
entrer E
afficher E
rang = 0
Q = quotient de (E/16)
reste = E - (Q*16) ===> reste de la division euclidienne
tant que E différent de 0 faire
chiffre = reste
si chiffre = 10, alors chiffre = A
si chiffre = 11, alors chiffre = B
etc.. jusque
si chiffre = 15, alors chiffre = F
afficher "rang " rang "chiffre " chiffre
rang = rang + 1
E = Q
Q = quotient de (Q/16)
reste = E - (Q*16)
fin tant que
fin prog
je n'ai pas testé.. je te laisse faire, et traduire en algobox..
bon courage !
Vous dites faire: chiffre = reste mais reste est du type nombre et chiffre est du type chaine car on lui associe A, B ... comment dois je faire ?
il n'y a pas de fonctions qui te permet de placer un nombre dans une chaine ?
autre façon de faire : déclarer une table de 16 postes
0 1 2 3 4 5 6 7 8 9 A B C D E F
et au lieu de "
chiffre = reste
et faire les tests si chiffre = 10, alors chiffre = A ... etc... "
tu mets : chiffre = table(reste+1)
je ne suis pas pro d'algobox. Tu sais déclarer une table ?
Déclaration de la variable table :
table EST_DU_TYPE chaine
chiffre est du type chaine
ensuite, il faut initialiser les 16 caractères de la table
table prend la valeur "0123456789ABCDEF"
et
à la place de
chiffre = reste
si chiffre = 10, alors chiffre = A
si chiffre = 11, alors chiffre = B
etc.. jusque
si chiffre = 15, alors chiffre = F
je mettrais
chiffre prend la valeur table.substr(reste,1)
cette instruction place dans chiffre le reste+1 caractère de table (d'après l'aide algobox).. A verifier !
Si j'ai bien compris il faut que je rentre table.substr(0,15) ou (0,F) ? j'ai essaye les deux l'algorithme plante directement
Bonjour,
remarque la variable i ne sert pas
après tant que :
calcule d'abord le reste prend la valeur Q%16
et ensuite Q prend la valeur floor(Q/16)
*** message déplacé ***
Bonjour ,
sans être complètement mauvais , ton algorithme ne va pas donner la bonne traduction .
Tout d'abord tu initialises i et tu ne l'utiles pas .
Ensuite un nombre en base 16 est construit avec les chiffres de 0 à 9 plus 6 lettres de A à F . Par exemple 15 en décimal se traduit par F en base 16 .
Cordialement
*** message déplacé ***
table EST_DU_TYPE chaine
init
table prend la valeur "0123456789ABCDEF"
dans la boucle TANT QUE :
chiffre prend la valeur table.substr(reste,1)
Je sais qu'un nombre en base 16 est construit avec les chiffres de 0 à 9 plus 6 lettres de A à F mais je ne sais pas comment le traduire sur algorithme ? pouvez vous me mettre sur la voie sil vous plait ?
*** message déplacé ***
début
table prend la valeur "0123456789ABCDEF"
entrer E
afficher E
rang = 0
Q = quotient de (E/16)
reste = E - (Q*16) ===> reste de la division euclidienne
tant que E différent de 0 faire
chiffre prend la valeur table.substr(reste,1)
afficher "rang " rang "chiffre " chiffre
rang = rang + 1
E = Q
Q = quotient de (Q/16)
reste = E - (Q*16)
fin tant que
fin prog
voila mon algorithme sur algobox :
mais ca ne marche toujours pas ai je fait une erreur quelque part ?
chiffre est du type chaine..
tant que e!=0(e en minuscule)
et a la fin de la boucle, tu affiches reste..
c'est plutot
afficher "rang " i
afficher "chiffre " chiffre
non ?
tu dis ca que ne marche pas : ca plante, ou ca sort n'importe quoi ?
Je viens de corriger toutes mes erreurs et ça plante ca marque :
***L'algorithme contient une erreur : impossible de le lancer***
***Vérifiez la syntaxe des affectations et des conditions***
en effectuant les remarques indiquées
Tu obtiens avec E=3845 ceci
res=5
res =0
res =15
3845=15*16^2+0*16^1+5
soit écrit en base 16
(F05)16
*** message déplacé ***
Labo, peux tu m'écrire l'algorithme sur algobox ou bien en language naurel car je ne vois vraiment pas la...
*** message déplacé ***
si tu as bien mis chiffre est du type chaine, je ne vois pas d'autre erreur de syntaxe ou d'affectation,
mais encore une fois, je ne suis pas une pro d'algobox..
ah oui :
table prend la valeur "0123456789ABCDEF" entre quote..
je dois m'absenter pour l'instant : je reviens tout a l'heure.
tu fais cela:
ligne à supprimer i prend la valeur 1
OK ==>début de tant que
( permute ces deux lignes pour avoir ceci )
res prend la valeur Q%16
Q prend la valeur floor(Q/16)
*** message déplacé ***
Attention !
algorithme
algorithme
*** message déplacé ***
Ca marche! mais le probleme est que c'est inversé par exemple si je veux 182 en base 16 je trouve 6B alors que c'est B6...
merci alb12 !
starwars, tu aurais pu me dire que tu avais fait un multi post..
et oui, on affiche d'abord le chiffre de rang 0 (les unités)
puis celui de rang 1 ,
puis celui de rang 2, c'est vrai..
cf. mon post de 13:38
c'est pour ça que je t'avais conseillé d'afficher le rang devant le chiffre.
Mais tu peux imaginer une autre façon d'afficher le résultat..
je te laisse faire.
Bon courage !
Je suis nouveau sur ce site, je ne savais qu'il était interdit de créer plusieurs topics. En tout cas, merci beaucoup Leile, tu m'as été d'une grande aide
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :