Bonjour tout le monde je suis nouvelle dans ce forum.
Svp j'ai besoin de votre aide pour cette algorithme qui est le suivant:
Ecrire un programme qui permet de convertir un nombre saisie d'une base saisie à une autre base saisie(quel que soit la base)
SVP c'est très urgent
En fait, il faut tout d'abord comprendre comment on compte en base 10. Quand j'écrit le nb 123 par example, le "2" ne vaut pas 2 mais 20(10x2), et le "1" vaut 100(1x100), et pas 1. Donc le resultat est egale a:
(1*100) + (2x10) + (3x1) = 123
En binaire, la base est de 2, donc on calcul 110011 par example comme ceci:
Merci pour ton aide mais c'est pas ça que je cherche ,je doit écrire un algorithme qui permet de convertir des nombres dans n'importe quel base je doit commencer par:
Début
écrire("entrez le nombre a")
lire a
......
T'as compris maintenant?
\'as qu\'as faire deux procédure une de conversion vers la base 10 et une autre depuis la base 10 vers une autre base ...mais tu peus faire directement ...
tu peus completer cette solution ...
n \" nombre a convertir\"
base1 \" conversion de base 10 vers base1\"
i<--0
sauv<--n
tanque n<>0 faire
rest<--n mod base1
n<--n div base1
i<--i+1
si rest <10
S[i]<--rest
sinon s[i]<-- char(ord(\'a\')+rest-10)
fintanque
maintenat t\'as a completer l\'autre proocedure a partir d\'une base1 vers 10 ...
soit tu dois multiplier chaque terme de la chaine apres test s\'il est 0...9 nombre donc * base1
s\'il n\'est aps nombre seulemnt sa valeur ascii - valeur (a) +10 * base1 et faire la somme
soit::
s<--0 initialisation
dans une boucle pour sur la longeur de la chaine
s<--(s+n)*base1
n" valeur de s[i] comme décrit dessus"
et bien bon courage
___________________
__________________________
taherpi
bonjour...
je vais éclicir l'algorithme ....
la boucle tanque prends un entier n(l'entier à convertire vers la base "base1")
ayant supposé que l'entier au début est en base 10 .
ça ce fait facilement par division entiére sur la base "base1"..et toujours prendre le reste de la division jusqu'à avoir un quotion égal à 0 .... c'est ça le principe ....
mais dans le cas ou base1>10 ...donc on peut avoir un reste>=10 ça cause un probleme .. il est résolu dans la condition si ... alors ..
supposons que si reste =10 alors reste='a'
si reste =11 alors reste='b'
si reste =12 alors reste='c'
on va donc changer reste avec un caractére d'ordre de celui de a plus reste moins 10.... tu dois voir les fonction c char et ord ...
enfin l'entier convertis sera dans la chaine S
merci
__________________________
taherpi
n étant compris entre 2 et 16 n'est ce pas ? c'est pas trop compliqué ;-)
==> bon tout d'abord tu dois contrôler la valeur du nombre que tu vas convertir (il doit avoir de chiffres allant de 0 jusqu'à 9 ou des lettres de "A" jusqu'à "F") son type sera alors de type chaîne de caractère (STRING en Pascal) voici la procédure saisie_nb qui va s'assurer que la valeur introduite ne contiendra que des chiffres ou des lettres (de "A" à "F") cette procédure utilise aussi une fonction que j'ai appelé "TEST" en effet le programme vous demandera de saisir à chaque fois un nombre jusqu'à ce que vous introduisiez un nombre valide,... au sein de la procédure, la vérification est assuré par la fonction "TEST".
***Analyse de la procédure saisie_nb DEF PROC Saisie_nb(var nb:chaine)
Répéter
---nb=donnée("Entrer le nombre voulu :")
Jusqu'à test(nb)=VRAI
***Analyse de la fonction test DEF FN test(nb:chaine)
test<=aux
Initialisations:
i<=0
aux<=VRAI
Tant que (aux=VRAI) ET (i<Long(nb)) Faire
---i<=i+1
---Si nb[i] DANS ['0'..'9','A'..'F'] alors aux<=VRAI
------Sinon aux<=FAUX
---Fin si
Fin Tant que
----------------------------------------------------------------------
=> Il faut maintenant saisir la base originale de ce nombre et la base de sortie, on va appeler la base originale "b1" et la base de sortie "b2" on va utiliser une procédure saisie_b qui vérifie que la base introduite est compris entre 2 et 16
DEF PROC Saisie_b(VAR b:entier, msg:chaine)
Répéter
---b=donnée(msg)
Jusqu'à (b>=2) OU (b<=16)
dans le programme principale:
saisie_b(b1,msg1);
saisie_b(b2,msg2);
NB: msg1 et msg2 étant des constantes de type chaîne de caractère
msg1='Entrer la base de ce nombre :'
msg2='Entrer la base de sortie :'
------------------------------------------------------------------
Une fois qu'on a saisie le nombre à convertir, sa base, et sa base de sortie on va passer à l'étape de conversion: tout d'abord on convertie notre nombre "nb" à la base 10 en utilisant une fonction après ça le résultat que va renvoyer cette fonction sera traité par une fonction qui convertira notre nombre "nb" récemment converties à la base 10 à sa base de sortie, autrement dit il faut convertir nb à la base 10 et puis le convertir à la base b2. on doit passer par la base 10
=>tout le traitement sera exécuté par une fonction qu'on va appeler "conv_nb1_b2" et qui va utiliser deux autres fonctions,... algorithme:
0) Début Fonction conv_nb1_b2
1) a<=conv_nb1_b10(nb1,b1)
2) r<=conv_nb10_b2(a,b2)
3) conv_nb1_b2<=r
4) Fin conv_nb1_b2
La prochaine fois je te donnerai la solution de ces deux fonctions, je suis fatigué pour le moment @+
je vais convertir un nombre base 10 en base 2
exemple:4/10 ->100/2
algorithme conversion
var n:entier
debut
ecrire("introduire un entier")
lire(n)
répéter
n<-n mod 2
ecrire(n)
jusqu'a (n div 2=0)
FIN