2.3 Etude des codes
2.3.1 Algorithme
De par l'objectif de l'application qui est celui de la conversion
d'un nombre entier donné ou d'un caractère en code ASCII, divers
algorithmes ont été utilisés, regroupés en
fonctions, à savoir :
2.3.1.1 Conversion des nombres dans une base
donnée et leur représentation en mémoire
a) La fonction de conversion décimal en binaire
[COM2011]
Le code VB associé à la fonction de conversion du
décimal en binaire se présente comme
suit :
Public Function DecimalABinaire(ByVal DecVal As Double) As
String
'Variable temporaire qui sert lors du traitement du nombre
à convertir
Dim NbTmp As Double
'Variable/Indice de boucle
Dim IndiceP As Integer
' declaration du compteur
NbTmp = DecVal
19
'L'indice est affecté à la variable
décimale
For IndiceP = 1 to Int (Log (DecVal) / Log (2)) + 1
'Parcours de la boucle
DecimalABinaire = CDbl (NbTmp Mod 2) & DecimalABinaire
'Conversion du reste de la division de la variable temporaire
à 2 en variable de type
Double
NbTmp = CDbl (Int (NbTmp / 2))
'Affectation à la variable temporaire sa propre valeur en
entier divisée par 2, mais
convertie en Double
Next IndiceP
'Incrémentation du compteur
End Function
'Fin de la fonction.
b) La fonction DecimalAhexadécimal
[COM2004]
Le code VB associé à cette fonction est :
Public Function DecimalAHexadecimal(ByVal nombre1 As Long) As
String
'Variable temporaire qui sert lors du traitement du nombre
à convertir
DecimalAHexadecimal = hex (nombre1) End Function
Cet algorithme est constitué d'une seule fonction, celle
de la conversion du nombre décimal en hexadécimal.
c) La fonction HexadécimalAdécimal
[SCH2009]
Le code VB associé à la fonction de conversion du
nombre hexadécimal en décimal est :
Public Function HexadecimalADecimal(ByVal hex As String) As Long
HexadecimalADecimal = Val ("&h" & hex)
End Function
Cet algorithme, comme le précédent, n'a qu'un
seul argument de type chaine de caractères et la fonction principale ne
consiste qu'à retransformer ces chaines de caractères en
caractères décimaux.
Exemple : A=10
B=11 C=12 D=13 E=14 F=15
Cette opération consiste à affecter pour chaque
variable A, B, C, D, E et F les valeurs correspondantes 10, 11, 12, 13, 14 et
15.
d) La fonction HexadécimalAbinaire
[EAS2003]
Le code VB associé à la fonction est :
Public Function HexadecimalABinaire(ByVal hex As String) As
String
20
'Variable temporaire qui sert lors du traitement du nombre
à convertir
Dim i as Byte
'Déclaration de la variable i en entier simple
Dim resultat As String
'Déclaration du résultat en chaîne
For i = 1 To Len (hex)
'Pour i allant de 1 à la longueur de la fonction
hexadécimale Select Case Mid (hex, i, 1)
'Sélection de cas en parcourant la boucle Case "0":
resultat = resultat & "0000" Case "1": resultat = resultat & "0001"
Case "2": resultat = resultat & "0010" Case "3": resultat = resultat &
"0011" Case "4": resultat = resultat & "0100" Case "5": resultat = resultat
& "0101" Case "6": resultat = resultat & "0110" Case "7": resultat =
resultat & "0111" Case "8": resultat = resultat & "1000" Case "9":
resultat = resultat & "1001" Case "A": resultat = resultat & "1010"
Case "B": resultat = resultat & "1011" Case "C": resultat = resultat &
"1100" Case "D": resultat = resultat & "1101" Case "E": resultat = resultat
& "1110" Case "F": resultat = resultat & "1111"
End Select
Next i
HexadecimalABinaire = resultat End Function
Cette fonction est constituée d'un seul argument de
type chaine de caractères du fait qu'un nombre hexadécimal peut
être en caractère ou en chiffre comme ci-haut
évoqué.
Elle est constituée en plus de deux variables dont une
de type Byte c'est-à-dire entier simple et une autre de String
c'est-à-dire chaîne de caractères.
C'est dans cette optique qu'elle a été
utilisée dans notre algorithme pour le test de chaque caractère
lors du parcours aux occurrences existantes en hexadécimal à
savoir : les caractères 0 à 9 et les lettres A à F.
e) La fonction binaireAdécimal
[PIE2008]
Elle est l'inverse de la fonction décimalAbinaire
évoquée dans les pages précédentes. Elle a pour
argument une valeur de type chaine de caractères et a comme variable de
type entier servant de compteur et de type décimal servant de conteneur
de résultat.
Le code VB associé à la fonction de conversion du
binaire en décimal est :
Public Function BinaireADecimal(ByVal bin As String) As String
21
'Variable temporaire qui sert lors du traitement du nombre
à convertir
Dim i as Byte
Dim resultat As Long
resultat = 0
For i = 1 To Len (bin)
If Mid (bin, Len (bin) - i + 1, 1) =1 Then
'La fonction Mid va parcourir la boucle pour i allant de 1
à la longueur du binaire
resultat = resultat + 2
End If
Next i
BinaireADecimal = resultat
f) Les fonctions octales à toutes les autres bases
[UNI2008]
Pour l'élaboration de ces différentes fonctions,
les algorithmes ont été les suivants :
y' Octal à binaire
Le code VB associé à cette fonction est :
Public Function CnvOctBin(ByVal Nb As String) As String
'Variable temporaire qui sert lors du traitement du nombre
à convertir
Dim Tmp as String
Nb = («01234567")
For i = 1 to Len (Nb)
C = Mid (Nb, i, 1)
' Affectation de la variable C au parcourt de la boucle i
Select Case c
Case "0": c = "000"
Case "1": c = "001"
Case "2": c = "010"
Case "3": c = "011"
Case "4": c = "100"
Case "5": c = "101"
Case "6": c = "110"
Case "7": c = "111"
End Select
Tmp = Tmp + c
Next
CnvOctBin = Tmp
Exit Function
End Function
y' Octal à hexadécimal
Le code VB associé à cette fonction est :
Public Function CnvOctHex(ByVal Nb As String) As String
'Variable temporaire qui sert lors du traitement du nombre
à convertir Dim Tmp as String
Nb = (Nb, "01234567")
22
For i = 1 to Len (Nb)
C = Mid (Nb, i, 1)
Select Case c
Case "0": c = "000"
Case "1": c = "001"
Case "2": c = "010"
Case "3": c = "011"
Case "4": c = "100"
Case "5": c = "101"
Case "6": c = "110"
Case "7": c = "111"
End Select
Tmp = Tmp + c
Next
CnvOctHex = CnvBinHex (Tmp)
Exit Function
End Function
La procédure de résolution d'une équation
de conversion d'une base octale à une base hexadécimal indique
tout d'abord de passer par la conversion octal à binaire, ensuite
reconvertir de la base octale en hexadécimal. Pour notre cas, la
fonction précédente, celle de conversion d'octal à
binaire, intervient pour passer de l'octal à la base binaire et enfin
faire appel à la fonction allant du binaire à la base
hexadécimal.
g) Le bouton convertir [HAR2007]
La procédure associée au bouton de conversion est
:
Private Sub btconvertir_Click ()
Dim i as Integer
If Combo1.Text = Combo1.List (0) and Combo2.Text = Combo2.List
(0) Then
lblresultat.Caption = txtnombre.Text
ElseIf Combo1.Text = Combo1.List (0) and Combo2.Text =
Combo2.List (1) Then
For i = 1 To Len (txtnombre.Text)
If (Mid (txtnombre.Text, i, 1) > 1) Then
MsgBox "Ce nombre n'est pas binaire.", "Rappel..."
lblresultat.Caption = ""
End If
Next
End sub
L'algorithme joue naturellement avec la base de départ et
la base de conversion. Le teste
s'effectue au niveau de la zone de liste modifiable. Un certain
nombre d'erreurs, comme dit
précédemment, sont affichées en cas de
défaut d'opération.
h) Le bouton représenter [IRE2005]
Le code VB associé au bouton de représentation des
nombres en mémoire est : Function representer (nombre)
23
Dim i, Tableau ()
For i = 8 To 0
Tableau (i - 1) = mid (nombre, i - 1, 1)
If tableau (i - 1) = "" Then
Tableau (i - 1) = "0"
End If
representer = representer & tableau(i - 1)
Next i
End Function
Ce bouton joue un rôle essentiel de notre application,
celle de représenter en mémoire le résultat obtenu des
différents calculs entre les différentes bases. Il joue avec la
zone de liste modifiable de choix du bit de représentation. D'abord, il
faut noter que la représentation en mémoire se fait toujours pour
un nombre converti en base binaire. De ce fait, une base autre que binaire est
tout d'abord reconvertie en base binaire avant sa représentation. Pour
ce la, un teste est fait sur la deuxième liste modifiable pour chercher
à savoir si la base de conversion a été binaire ou non. Si
elle est binaire, la conversion est faite directement. Dans le cas contraire,
le résultat obtenu est reconverti en base binaire puis
représenté en mémoire. Pour cela, les algorithmes sont les
suivants :
V' pour la représentation en 8 bit : la fonction fait
appel à une autre fonction utilisée
qui est celle de conversion en binaire. Ensuite, le nombre de
caractères est compté pour déterminer combien de 0 faut-il
ajouter au début de la suite binaire. La boucle va de 1 jusqu'à 7
diminué de nombre de caractère du nombre binaire. Une
soustraction est faite pour déterminer combien d'espace vide seront vu
pour y affecter des 0 ; et enfin l'affectation des 0 intervient.
Pour les autres représentations, la procédure
est identique sauf pour la boucle qui va de 1 à 15 pour le 16 bits, 1
à 31, pour le 32 bits et enfin de 1 à 63 pour le 64 bits.
i) Conversion des caractères et nombres en ASCII
ou dans une base donnée [HAR2005]
Le code VB associé à la procédure est :
Private Sub Form_KeyPress (KeyAscii as Integer)
Label2.Caption = Chr$(KeyAscii)
'Cette instruction convertit le caractère tapé au
clavier et qui sera stocké dans l'étiquette 2
Label4.Caption = Asc(Label2.Caption)
'Cette instruction convertit en ASCII le caractère
tapé au clavier et qui sera stocké dans
Label6.Caption = Oct(KeyAscii)
'Cette instruction convertit en octal le caractère
tapé au clavier et qui sera stocké dans Label8.
Caption = hex(KeyAscii)
'Cette instruction convertit en hexadécimal le
caractère tapé au clavier et qui sera stocké dans
l'étiquette 8
Label12.Caption = UCase(Label2.Caption)
'Cette instruction convertit en majuscule le caractère
tapé au clavier et qui sera stocké dans
l'étiquette 12
End Sub
24
|