Bonsoir,
je dois écrire un algorithme permettant de passer un nombre N de la base 10 vers une autre base quelconque b. J'arrive très bien à changer de base à la main, mais je n'arrive pas à écrire cet algorithme.
merci à ceux qui m'aideront.
Décris ta procédure manuelle avec des mots simples, y compris avec le critère qui va te faire arréter la procédure (en fait je ne sais pas comment tu fais manuellement car il y a deux méthodes a priori : de la droite vers la gauche ou de la gauche vers la droite). Après, ce sera un jeu d'enfant que de décrire l'algorithme en question.
Si tu veux de l'aide, fais cela sur ta réponse et je verrai ce que je peux faire.
Merci de répondre
Voilà l'énoncé tel qu'il m'est donné :
Écrire un algorithme pour obtenir l'écriture en base b d'un entier naturel donné en base 10
*l'utilisateur pourra saisir le nombre N et la base b
* la machine affichera les chiffres qui constituent l'écriture du nombre N en base b
Ce n'est pas ce que j'ai demandé !!!
désolé je savais pas que ça changeait l'algorithme de prendre l'une ou l'autre =S
Je prend la puissance la plus grande sans dépasser N
je multiplie par le plus grand chiffre possible sans dépasser N, ce chiffre constituant le premier de l'autre base
comme ça avec b la base
a1 x b(puissance p) = premier nombre a1
a2 x b(puissance p-1)=second nombre
et le nombre en base b est a1a2...
Bon !
La variable P sera la puissance de B. On part de P=1 et on fait :
Tant que P<N faire P <-- P * B
P est alors la première puissance de B strictement supérieure à N
Faire P <-- P / B
P devient la plus grande puissance de B inférieure ou égale à N
On va mettre le résultat dans R. On part de R=0
Le premier chiffre sera C=N/B (division entière)
A chaque étape on va placer le nouveau chiffre à droite du nombre déjà partiellement construit. Cela revient à multiplier R par 10 et à ajouter le nouveau chiffre.
Donc : r<-- r*10+C
On remplace alors N par N-C*B
Et on divise P par B pour avoir la puissance précédente de B et on recommence.
Quand s'arrêter ? Par exemple, lorsque P=1.
Finalement ça donne :
P=1
Tant que P<N faire P <-- P * B
P=P/B
R=0
Faire
{
C=N/P
R=R*10+C
P=P/B
}
...tant que P>0
Afficher R
Lorsque la dernière division est faite avec P=1, le fait de calculer P<--P/B va mettre 0 dans P et ce sera le signal d'arrêt.
Cela suppose évidemment que B<10.
Pour B>10 il faut consacrer deux chiffres de R pour chaque résultat. On écrira alors R<-- R*100+C à la place de R<-- R*10+C
L'algorithme se décrit quasiment en langage naturel. En fonction du langage utilisé, il faut bien sûr traduire ce langage naturel en langage compréhensible par la machine utilisée.
J'ai regardé l'autre méthode que tu as donnée et je la trouve beaucoup plus simple le seule problème consiste à afficher les nombres dans l'ordre. désolé de changer de méthode :-{
J'ai trouvé il suffit de créer une nouvelle variable (moi j'ai appelée C) à laquelle on affecte 1
et la boucle est :
R prend la valeur du reste
N prend la valeur du résultat de la division entière
N' prend la valeur R*C+N'
C prend la valeur C * 10
merci beaucoup
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :