Salut,
Je voudrais savoir comment on fait pour transformer un nombre en chaine de caractère (pour l'afficher)
[ Isis ]
Salut,
Je voudrais savoir comment on fait pour transformer un nombre en chaine de caractère (pour l'afficher)
[ Isis ]
slt,
Je vais essayer de te répondre sans me planter (sinon y aura bien qqn pour me rattraper).
Donc tu veux prendre un nombre par ex.: 139 et l'écrire à l'écran.
Il faut pour cela transformer ton nombre en code ascii
1°) Tu dois convertir chaque chiffres en code ascii.
Voici une petite table :
chiffre code ascii
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
Donc en regardant cette table tu t'apperçoit que tu dois prendre ton chiffre et lui rajouter 48 (!!! ATTENTION DECIMAL !!!).
2°) Convertion d'un nombre
Le nombre que l'on veut convertir est 139.
Tu prend le 1° chiffre ici 1
1 + 48 = 49
le 2°
3 + 48 = 51
le 3°
9 + 48 = 57
Tu peux vérifier par rapport au tableau, les résultats sont corrects et tu sait aussi vérifier via ton clavier en appuyant sur la touche alt + le code ascii (alt + 49 = 1).
A partir de maintenant il y a plusieurs solution, je vais en donner qu'une seule.
Faire une petite boucle pour écrire le code ascii 49 ensuite le code ascii 51 et pour finir le code ascii 57.
Voilà tu viens de transformer ton nombre décimal en code ascii que tu as imprimer à l'écran.
Je pense que c'est plus au moins bon si tu comprends pas je veux bien te faire une petite routine.
++
Merci pour ton explication, c'est beaucoup plus clair a présent, mais comment extraire un seul chiffre d'un nombre décimal.
Pour un nombre hexa c'est facile puisque il suffit d'isoler 4 bits mais pour un nombre décimal ?
[ Isis ]
Ton nombre tu le rentre au clavier ou il se trouve dans une variable
Si il se trouve dans une variable, il suffit que tu le déclare dans un tableau comme ca tu pourras aller chercher le chiffre que tu voudras.
Si tu le rentre au clavier, il y a plusieurs solution, moi j'en connais une qui est assez compliquée (pas qu'elle soit difficile mais qu'il existe une autre solution beaucoup plus facile), ma solution :
inscrire le caractère taper au clavier dans un tableau -> avancer le pointeur du tableau -> inscrire le caractère taper au clavier dans un tableau -> avancer le pointeur du tableau -> etc. jusqu'au moment où tu as le nombre de caractère voulu (dans cette solution, tu dois initialiser le tableau avec des 0 par ex. car si tu n'utilise pas tout le tableau tu risque d'avoir des problèmes).
L'autre solution est d'utiliser un buffer organiser, je sait que ça existe mais je ne l'ai jamais utilisé.
Le nombre est enregistré dans une variable mais tu pourrai détailler un peu plus la méthode a utiliser dans ce cas là...
[ Isis ]
Heu oubli ce que j'ai dit avec le tableau c beaucoup plus compliqué avec un tableau.
J'ai fais avec ta méthode c'est à dire le nombre est dans une variable (ici elle s'appelle nb)
Voilà un petit programme qui permet de convertir un nombre et de l'imprimer à l'écran.
Si tu ne comprends pas le code je peux t'expliquer en plus détailer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 .model small .stack 100h .486 .data ; Je déclare le nombre en word nb DW 139 ; La chaîne de caractère à imprimer à l'écran affnb DB ' ','$' un DW 1 dix DW 10 .code main proc MOV AX,@data MOV DS,AX CALL imprnb MOV AH,04CH INT 21H main endp imprnb proc MOV BX,offset affnb ; Je lui passe une chaine de 3 caracteres ADD BX,2 ; J'ai 3 chiffre mais j'avance de 2 pour pas ecraser le caractere de fin de chaine '$' MOV AX,nb ; Je recupere le nb dans AX MOV CX,3 ; CX sert de compteur pour la boucle @@chiffreSuivant: PUSH CX MUL un ; Je multiplie AX par 1 pour eviter les divisions pas 0 DIV dix ; Je divise AX par 10 pour recuper le chiffre dans DL ADD DL,48 ; J'additionne 48 au chiffre pour avoir le code ascii MOV [BX],DL ; Je deplace la reponse dans la chaine DEC BX ; Je me deplace dans la chaine POP CX LOOP @@chiffreSuivant ; J'affiche a l'ecran la chaine qui contient le score MOV AH,09h MOV DX,offset affnb INT 21h RET imprnb endp end main
Merci pour ton code tout est clair a présent...
[ Isis ]
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager