Cours VB.NETDate de mise à jour : 05/12/2010
VII-A. Petites routines sur les chaînes de caractères
VII-A-1. Une string 'Nom' contient un nom, mettre si nécessaire la première lettre en majuscule
VII-A-2. Comment voir si un caractère est une voyelle
VII-A-3. Comment éliminer une combinaison bien précise de caractères en début de chaîne
VII-A-4. Vous avez une chaîne de caractères : comment afficher le premier caractère, puis les 2 premiers, puis 3... ?
VII-A-5. Vous avez deux chaînes de caractères : comment savoir si la seconde est un anagramme de la première ?
VII-A-6. Compter combien de fois un mot apparaît dans un texte
VII-B. Petits programmes de mathématiques
VII-B-1. Calcul de l'hypoténuse d'un triangle rectangle
VII-B-2. Somme de N entiers
VII-B-3. Afficher les tables de multiplications
VII-B-4. Trouver la valeur la plus élevée d'un tableau d'entiers
VII-B-5. Factorielle
VII-B-6. Factorielle avec 'Récursivité'
VII-B-7. Un nombre est-il premier ?
VII-B-8. Décomposition en nombre premier
VII-B-9. Diviseurs d'un nombre
VII-C. Travail sur les tableaux et collections (tri, recherche, insertion, effacement d'éléments)
VII-C-1. Utiliser les Tableaux
VII-C-1-a. Trier un tableau
VII-C-1-b. Rechercher un élément dans un tableau
VII-C-1-c. Effacer, insérer un élément dans un tableau
VII-C-2. Utiliser les Collections
VII-C-2-a. Trier une collection
VII-C-2-b. Rechercher un élément dans une collection
VII-C-2-c. Effacer, insérer un élément dans une collection
VII-C-3. Différences tableau/collection
VII-C-4. Utilisation particulière des tableaux
VII-D. Calculs financiers simples
VII-D-1. Conversion Francs=>Euros
VII-D-2. Coût d'augmentation de la vie
VII-D-3. Remboursement d'un prêt
VII-A. Petites routines sur les chaînes de caractères
VII-A-1. Une string 'Nom' contient un nom, mettre si nécessaire la première lettre en majuscule
- En utilisant les Classes String et Char:
Dim Nom As String = " philippe "
If Char. IsLower (Nom. Chars (0)) Then
MessageBox. Show (Char. ToUpper (Nom. Chars (0)) + Nom. Substring (1, Nom. Length - 1))
End If
|
On regarde si le premier caractère de la chaîne Nom.Chars(0) est minuscule (.IsLower).
Si oui on transforme ce premier caractère en majuscule (.ToUpper) et on ajoute la sous chaîne allant du second au dernier caractère.
- En utilisant les instructions VB:
Dim Nom As String = " philippe "
Nom = UCase (Microsoft. VisualBasic . Left (Nom, 1)) & Mid (Nom, 2)
|
On prend le premier caractère de gauche : Left(Nom,1), on le transforme en majuscule (Ucase) , on ajoute la chaîne commençant par le second caractère et allant jusqu'à la fin.
VII-A-2. Comment voir si un caractère est une voyelle
Dim Voy As String = " aeiouy "
Dim C As String = " p "
If Instr ( Voy, C)< > 0 then
. .
End If
|
Ici on regarde si la String C est contenue dans la String Voy (qui contient toutes les voyelles), si cela retourne 0 c'est que la String C n'y est pas.
VII-A-3. Comment éliminer une combinaison bien précise de caractères en début de chaîne
Exemple: éliminer une balise html de type </b ../b0> et son contenu dans une chaîne nommée Ch:
If Ch. Trim (). StartsWith (" < " ) Then
Dim lastLocation As Integer = Ch. IndexOf (" > " )
If lastLocation >= 0 Then
Ch = Ch. Substring ((lastLocation + 1))
End If
End If
|
VII-A-4. Vous avez une chaîne de caractères : comment afficher le premier caractère, puis les 2 premiers, puis 3... ?
Dans un formulaire (une fenêtre), il y a un TextBox1( zone de texte avec sa propriété Multiline=True)
Dim C As String = " DUBONET "
Dim Tx As String
Dim i As Integer
For i = 1 To Microsoft. VisualBasic . Len (C)
Tx + = Microsoft. VisualBasic . Left (C, i) + ControlChars. CrLf
Next i
TextBox1. Text = Tx
For i = 1 To C. Length
Tx + = C. Substring (0, i) + ControlChars. CrLf
Next i
TextBox1. Text = Tx
|
Mettre ce code dans Form_Load puis lancer le programme.
Affiche:
D
DU
DUB
DUBO
DUBON
DUBONE
DUBONET
|
On remarque: Tx est une string permettant de stocker temporairement la string à afficher; a chaque boucle on ajoute la nouvelle string (Tx += est équivalent à Tx=Tx+..) et un caractère de retour à la ligne.
Left fait partie de l'espace de nom Microsoft.VisualBasic.
VII-A-5. Vous avez deux chaînes de caractères : comment savoir si la seconde est un anagramme de la première ?
Pour les nuls, un anagramme c'est les mêmes lettres dans un ordre différent.
Il faut mettre les 2 chaînes dans un tableau de caractères, trier les 2 tableaux, les remettre dans des strings et les comparer.
Dim maString1 As String = " stressed "
Dim maString2 As String = " desserts "
Dim myChar1 As Char = mastring1. ToCharArray
Dim myChar2 As Char = mastring2. ToCharArray
Array . Sort ( myChar1)
Array . Sort ( myChar2)
Dim MyStringTrie1 As New String (myChar1)
Dim MyStringTrie2 As New String (myChar2)
Dim anagramme As boolean = (String . Compare (MyStringTrie1 ,MyStringTrie2 )= 0)
|
VII-A-6. Compter combien de fois un mot apparaît dans un texte
Calculer le nombre d'occurrences ( compteur )d'une sous-chaîne (monMot) dans une String (monTexte).
'On rappelle que .IndexOf permet de chercher une sous-chaîne dans une chaîne (il retourne 0 si la chaîne n'est pas présente ou la position de la chaîne).
Dim monTexte As String = " jfkjf.... "
Dim monMot As String = " lulu "
Dim compteur As Integer = - 1
Dim index As Integer = - 1
Do
compteur+ = 1
index= monTexte. IndexOf (monMot, index + 1)
Loop Until index < 0
|
On initialise le compteur à -1 car la boucle Do Loop est systématiquement effectuée une fois et incrémente le compteur une fois de trop.
On initialise l'index à -1 car dans la boucle Do Loop on utilise Index+1; sinon, si la chaîne cherchée débute au 1er caractère elle n'est pas comptée.
VII-B. Petits programmes de mathématiques
On prendra des exemples de routines mathématiques simples :
- Calcul de l'hypoténuse d'un triangle rectangle
- Somme de N entiers
- Afficher les tables de multiplication
- Valeur maximum d'un tableau
- Calcul de factorielle (avec ou sans récursivité)
- Un nombre est-il premier?
- Décomposition en nombre premier
- Diviseurs d'un nombre
VII-B-1. Calcul de l'hypoténuse d'un triangle rectangle
On crée pour cela une fonction, on envoie 2 paramètres de type Single: les 2 cotés du triangle; la fonction retourne l'hypoténuse.
Function Hypotenuse (ByVal Side1 As Single, ByVal Side2 As Single) As Single
Return Sqrt ((Side1 ^ 2) + (Side2 ^ 2))
End Function
|
Pour les nuls, on rappelle que le carré de l'Hypoténuse est égal à la somme des carrés des 2 autres cotés.
VII-B-2. Somme de N entiers
Calculer par exemple pour Nombre=20 la Somme=1+2+3+4...+18+19+20
Dim Somme As Integer
Dim Nombre As Integer= 20
Dim i As Integer
For i= 0 To Nombre
Somme + = i
Next i
|
On rappelle que Somme += i est équivalent à Somme =Somme + i
Pour afficher le résultat, si il existe une TextBox:
TextBox1. Text = Cstr (Somme)
|
VII-B-3. Afficher les tables de multiplications
On fait 2 boucles:
celle avec i (qui décide de la table: table des 1, des 2..)
On affiche 'table des' puis valeur de i
celle avec j (allant de 1 à 10 pour chaque table)
Pour chaque ligne, on affiche la valeur de i puis ' X ' puis la valeur de j puis ' = ' puis la valeur de i fois j
ControlChars.Crlf permet un saut à la ligne
A chaque fois que l'on a quelque chose à afficher, on l'ajoute à la variable String T
A la fin on affecte T à la propriété Text d'un TextBox pour rendre visible les tables.
Dim i As Integer
Dim j As Integer
Dim T As String
For i = 1 To 10
T + = ControlChars. CrLf
T + = " Table des " & i & ControlChars. CrLf
For j = 1 To 10
T + = i. ToString & " X " & j. ToString & " = " & i * j & ControlChars. CrLf
Next j
Next i
TextBox1. Text = T
|
Affiche:
Table des 1
1 X 1 =1
1 X 2 =2
...
|
VII-B-4. Trouver la valeur la plus élevée d'un tableau d'entiers
Pour cela on crée une Fonction, on l'appelle en donnant en paramètre le tableau d'entier; la fonction retourne l'entier le plus grand.
Function FindMax (ByVal a () As Integer) As Integer
Dim fin As Integer = UBound (a)
Dim valeurMax As Integer = a (0)
Dim i As Integer
For i = 0 To fin
If a (i) > valeurMax Then valeurMax = a (i)
Next i
Return valeurMax
End Function
|
Un boucle compare chaque valeur du tableau a() avec valeurMax, si l'élément du tableau est plus grand que valeurMax, valeurMax prend la valeur de l'élément.
VII-B-5. Factorielle
On rappelle que N! (factorielle N)= 1*2*3*...*(N-2)*(N-1)*N
Exemple Factorielle 3 =1*2*3
Dim R As Long
R= Factorielle (3)
|
Cette fonction n'est pas fournie par VB, créons une fonction 'Factorielle':
Function Factorielle (ByVal N as Long) As Long
Dim i As Long
Resultat= 1
For i= 1 to N
Resultat= i* Resultat
Next i
Return Resultat
end Function
|
Cela crée une fonction recevant le paramètre N et retournant un long.
Une boucle effectue bien 1*2*3...*N-1*N.
VII-B-6. Factorielle avec 'Récursivité'
Une autre manière de calculer une factorielle est d'utiliser la récursivité:
Une procédure est récursive si elle peut s'appeler elle-même.
VB gère la récursivité.
Comment faire pour les factorielles?
On sait que Factorielle N= N * Factorielle(N-1)
N!= N*(N-1)! : en sachant que 1!=1
Créons la fonction:
Function Factorielle (ByVal N as Long) As Long
If N= 1 then
Return 1
Else
Return N* Factorielle (N- 1)
End If
end Function
|
Dans la fonction Factorielle on appelle la fonction Factorielle, c'est bien récursif.
Pour N=4, la fonction Factorielle est appelée 4 fois :Factorielle (4) puis Factorielle(3) puis Factorielle(2) puis Factorielle (1)
Factorielle (1) retourne 1
Factorielle (2)retourne 2 '2*factorielle(1)
Factorielle (3)retourne 6 '3*factorielle(2)
Factorielle (4) retourne 24 '4*factorielle(3)
|
Vb gère cela avec une pile des appels. il met dans une pile les uns aux dessus des autres les appels, quand il remonte, il dépile de haut en bas (Dernier rentré, premier sortie)
 |
Attention: La pile a une taille maximum, si N est trop grand, on déclenche une erreur de type StackOverflow.
|
VII-B-7. Un nombre est-il premier ?
Un nombre premier est seulement divisible par 1 et lui-même.
Pour voir si N est premier on regarde successivement si ce nombre est divisible par 2 puis 3 puis 4... jusqu'a N-1
Un nombre est divisible par un autre si la division donne un entier. N/B= A Comment voir si le nombre A est entier? Pour ma part, j'utilise la méthode suivante: A est entier si A=Int(A).
Une autre méthode pour voir si N est divisible par B: il est divisible si N Mod(B)=0.
Avec une boucle For Next:
Dim IsPremier As Boolean
Dim j, k As Long
IsPremier = True
j = 2
For k = 2 To N
If (N Mod k = 0) And (k < > N) Then
IsPremier = False
j = n
End If
j = j + 1
Next
|
En sortie de boucle si IsPremier= true , le nombre N est premier.
Avec un Do Loop.
Dim IsPremier As Boolean
Dim N As Double= 59
Dim I As Double
I= 2: IsPremier= True
Do
If N/ I= Int (N/ I) then
IsPremier= False
Else
i + = 1
End if
Loop While IsPremier= True And I< N
|
Pour 59 IsPremier sera égal à True.
On peut améliorer la routine en remarquant:
Si un nombre n'est pas premier il admet 2 diviseurs dont un est inférieur à racine N.
on peut donc :
- Vérifier que le nombre n'est pas pair puis
- Vérifier s'il est divisible par les nombres allant de 3...jusqu'à racine de N en ne tenant compte que des nombres impairs.
Remarque pour ceux qui veulent tester le code :
Pour utiliser la routine sur les nombres premiers, il faut créer une petite interface: dans un formulaire créer un bouton nommé 'Button1' et une TextBox nommée 'TextBox1', enfin mettre dans la routine Button1_Click le code ci-dessous.
Quand on lance le programme, on saisit un nombre dans le textbox , puis on clique sur le bouton , cela affiche True ou False dans une MessageBox, si le nombre est premier ou non:
Private Sub Button1_Click (ByVal sender As System. Object , ByVal e As System. EventArgs ) _
Handles Button1. Click
Dim IsPremier As Boolean
Dim N As Double
Dim I As Double
N = Val (TextBox1. Text )
I = 2 : IsPremier = True
Do
If N / I = Int (N / I) Then
IsPremier = False
Else
I + = 1
End If
Loop While IsPremier = True And I < N
MsgBox (IsPremier. ToString )
End Sub
|
VII-B-8. Décomposition en nombre premier
Dim nbr As Integer = 1000
Dim div As Integer = 2
Dim t As String = " "
While div < = nbr
While nbr / div = Int (nbr / div)
t = t & div & " x "
nbr = nbr / div
End While
div = div + 1
End While
TextBox1. Text = t
|
VII-B-9. Diviseurs d'un nombre
C'est une fonction qui retourne une collection de type List contenant tous les diviseurs d'un nombre nommé Number.
Si Number Mod i est égal à zéro c'est que i est un diviseur de Number; on l'ajoute à la liste.
Public Function Diviseur (ByVal Number As Integer) As List (Of Integer)
Dim Diviseur As New List (Of Integer)
For i As Integer = 1 To Number
If Number Mod i = 0 Then Diviseur. Add (i)
Next
End Function
|
VII-C. Travail sur les tableaux et collections (tri, recherche, insertion, effacement d'éléments)
VII-C-1. Utiliser les Tableaux
Le travail sur des tableaux est très intéressant. On étudiera plusieurs routines en comparant la méthode classique et les fonctions du Framework. Puis on utilisera les collections pour faire la même chose.
VII-C-1-a. Trier un tableau
Routine de Tri .
Pour trier un tableau de chaînes de caractères, il faut comparer 2 chaînes contiguës, si la première est supérieure (c'est à dire après l'autre sur le plan alphabétique)on inverse les 2 chaînes, sinon on n'inverse pas. Puis on recommence sur 2 autres chaînes en balayant le tableau jusqu'à ce qu'il soit trié.
Tout l'art des routines de tri est de faire le moins de comparaisons possibles pour trier le plus vite possible.
Voyons une des routines les plus rapides, le Bubble Sort (ou tri à bulle); on le nomme ainsi car l'élément le plus petit monte progressivement au fur et à mesure jusqu'au début du tableau comme une bulle.(Parfois c'est l'élément le plus grand qui descend!!)
Une boucle interne balaye le tableau et compare 2 éléments contigus et les inverse si nécessaire. Une boucle externe fait tourner la boucle interne N fois.
La boucle interne fait descendre l'élément le plus grand vers la fin du tableau, la boucle externe répète l'opération N fois permettant le tri de tous les éléments.
Private Sub Button1_Click
Dim T (5) As String
T (0) = " toto "
T (1) = " tata "
T (2) = " tutu "
T (3) = " lolo "
T (4) = " lulu "
Dim N As Integer = 5
Dim i, j As Integer
Dim Temp As String
For i = 0 To N - 1
For j = 0 To N - 1
If T (j) > T (j + 1) Then
Temp = T (j) : T (j) = T (j + 1) : T (j + 1) = Temp
End If
Next j
Next i
Dim tt As String = " "
For i = 0 To N
tt = tt + T (i) + ControlChars. CrLf
Next i
TextBox1. Text = tt
End Sub
|
Remarque: pour inverser le contenu de 2 variables, on doit écrire
Temp=T(j): T(j)=T(j+1):T(j+1)=Temp (L'instruction qui faisait cela en VB6 et qui se nommait Swap n'existe plus)
Cette routine trie bien le tableau mais n'est pas optimisée: il n'est pas nécessaire que la boucle interne tourne de 0 à N-1 à chaque fois car après une boucle, le dernier élément, le plus grand, est à sa place. Pour i=0 la boucle interne tourne jusqu'à N-1, pour i=1 jusqu'à N-2...
Cela donne:
For i= 0 To N- 1
For j= 0 To N- i- 1
If T (j)> T (j+ 1) then
Temp= T (j): T (j)= T (j+ 1):T (j+ 1)= Temp
End if
Next j
Next i
|
Il existe d'autres méthodes encore plus rapide (Méthode de Shell et Shell-Metzner), il existe aussi le QuickSort très performant pour les tableaux non triés , voir chapitre sur la récursivité.
Mais il y a plus simple:
Tri avec la méthode SORT du Framework.
Pour un tableau unidimensionnel.
Dim Animals (2) As String
Animals (0) = " lion "
Animals (1) = " girafe "
Animals (2) = " loup "
Array . Sort (Animals)
|
Et le tableau est trié!!
On rappelle que l'on ne peut pas trier un tableau multidimensionnel, mais il y a des ruses.(voir rubrique:tableau)
Les Collections peuvent être triées automatiquement aussi.
VII-C-1-b. Rechercher un élément dans un tableau
Routine de recherche:
On a un tableau de string, on veut chercher ou se trouve(en quelle position) une string.
Pour une liste non triée, on n'a pas d'autres choix que de comparer la string cherchée à chaque élément du tableau, on utilisera donc une boucle:
N= 4
Dim T (N) As String
T (0)= " vert "
T (1)= " bleu "
T (2)= " rouge "
T (3)= " jaune "
T (4)= " blanc "
Dim i As Integer
Dim AChercher As String = " rouge "
For i= 0 To N
If T (i)= AChercher then
Exit For
End if
Next i
|
Pour une liste triée (suite ordonnée), on peut utiliser la méthode de recherche dichotomique: On compare l'élément recherché à l'élément du milieu du tableau, cela permet de savoir dans quelle moitié se situe l'élément recherché.
De nouveau on compare à l'élément recherché à l'élément du milieu de la bonne moitié...jusqu'à trouver. Pour cela on utilise les variables Inf et Sup qui sont les bonnes inférieure et supérieure de la zone de recherche et la variable Milieu.
On compare l'élément recherché à l'élément du tableau d'indice milieu, si il sont égaux on a trouvé, on sort; s'ils sont différents on modifie Inf et Sup pour pointer la bonne plage puis on donne à Milieu la valeur du milieu de la nouvelle plage et on recommence.
Dim N As Integer
Dim T (N) As String
Dim Inf, Sup, Milieu As Integer
Dim Reponse As Integer
Dim i As Integer
Dim AChercher As String = " c "
N= 4
T (0)= " a "
T (1)= " b "
T (2)= " c "
T (3)= " d "
T (4)= " e "
Inf= 0: Sup= N
Do
if inf> Sup then Reponse= - 1: Exit Do
Milieu= INT ((Inf+ Sup)/ 2)
If Achercher= T (Milieu) then Reponse= Milieu:Exit Do
If Achercher< T (Milieu) then Sup= Milieu- 1
If Achercher> T (Milieu) then Inf= Milieu+ 1
Loop
|
La recherche dichotomique est rapide car il y a moins de comparaisons.
Recherche avec les facilités du Framework.
Mais comme d'habitude VB.Net possède des propriétés permettant de rechercher dans un tableau trié ou non et cela sans avoir à écrire de routine.
Binarysearch recherche un élément dans un tableau trié unidimensionnel.(algorithme de comparaison binaire performant sur tableau trié: probablement une recherche dichotomique)
Exemple :
I= Array . BinarySearch (Mois, " Février " )
IndexOf
|
Recherche un objet spécifié dans un tableau unidimensionnel (trié ou non), retourne l'index de la première occurrence.
Dim myIndex As Integer = Array . IndexOf (myArray, myString)
|
Retourne -1 si l'élément n'est pas trouvé.
LastIndexOf fait une recherche à partir de la fin.
VII-C-1-c. Effacer, insérer un élément dans un tableau
1- Éliminer un élément.
Avec une routine:
Soit un tableau de 4 String T(0), T(1), T(2),T(3).
On veut éliminer l'élément "Tata", le second élément; il faut passer le troisième dans le second, le quatrième dans le troisième... et effacer le dernier élément du tableau.
Dim N As Integer
Dim T (N) As String
Dim i As Integer
For i= 1 To N- 1
T (i)= T (i+ 1)
Next i
T (N- 1)= " "
|
On obtient:
On remarque que la boucle démarre au niveau de l'élément à enlever et pas à la fin du tableau.
Avec les facilités du Framework:
On peut décaler les éléments d'un tableau avec la méthode Copy de la Classe Array:
Il suffit de copier le tableau sur le même tableau mais décalé d'un élément.
Array . Copy (T, 2, T, 1, T. Length - 2)
T (T. Length - 1)= " "
|
On utilise ici une surcharge de Copy:
Array . Copy (Tor, indexOrigine, td, indexDestitation, nombredElements)
|
Tor: Tableau d'origine; Td tableau destination.
2-Insérer un élément.
Avec une routine:
Soit un tableau de 4 String T(0), T(1), T(2),T(3).
On veut insérer l'élément "Tata" en seconde position, après "Toto"; il faut d'abord décaler les éléments vers la fin du tableau. Attention : il faut le faire en commençant par la fin du tableau: il faut passer l'avant dernier élément en dernière position puis l'avant avant dernier en avant dernière position.
Dim N As Integer
Dim T (N) As String
Dim i As Integer
For i= N- 1 To 1 Step - 1
T (i)= T (i- 1)
Next i
T (1)= " Tata "
|
On obtient:
On remarque que la boucle doit commencer à la fin du tableau et remonter.
Avec les facilités du Framework:
On peut déplacer les éléments avec la méthode Copy de Array:
On copie le tableau sur le même tableau mais décalé d'un élément.
Array . Copy (T, 1, T, 2, T. Length - 2)
T (1)= " Tata "
|
On utilise ici une surcharge de Copy:
Array . Copy (Tor, indexOrigine, td, indexDestitation, nombredElements)
|
Tor: Tableau d'origine; Td tableau destination
VII-C-2. Utiliser les Collections
Relire le chapitre sur les collections.
On rappelle que nombre d'élément dans une collection n'est pas défini au départ comme dans un tableau. Dans une collection il n'y a que les éléments que l'on a ajouté.
Les éléments sont repérés grâce à un index, mais attention, si vous ajoutez un élément, cela décale l'index des éléments qui suivent.
Dim L As New ArrayList ()
L. Add (" toto " )
MsgBox (L (0))
|
On pourra aussi écrire L.Item(0) pour pointer le premier élément.
 |
Attention c'est le nombre d'éléments. S'il y a 3 éléments dans la ArrayList ce sont les éléments d'index 0,1,2.
|
VII-C-2-a. Trier une collection
VII-C-2-b. Rechercher un élément dans une collection
Recherche d'un élément dans une collection NON TRIEE avec IndexOf:
Dim l As New ArrayList
Dim i As Integer
l. Add (" toto " )
l. Add (" lulu " )
i = l. IndexOf (" lulu " )
MsgBox (i. ToString )
|
On rappelle qu'il existe aussi LastIndexOf qui démarre par la fin et une surcharge permettant de débuter la recherche à partir d'un indice donné.
Recherche d'un élément dans une collection TRIEE avec BinarySearch:
Dim l As New ArrayList
Dim i As Integer
l. Add (" toto " )
l. Add (" lulu " )
l. Sort ()
i = l. BinarySearch (" lulu " )
MsgBox (i. ToString )
|
VII-C-2-c. Effacer, insérer un élément dans une collection
L. Remove (" toto " )
L. RemoveAt (0)
|
Insert permet d'insérer à un index spécifié.
L. Insert ( position, Ainserrer)
|
VII-C-3. Différences tableau/collection
Un tableau peut avoir plusieurs dimensions, cela permet plusieurs indices:
Soit un tableau T(X,2) de String permettant de stocker en mémoire des patients (Nom, prénom, adresse..).
Nom Prénom Adresse
Dupont |
Pierre |
32 rue du.. |
Dubout |
Jean |
12 Place.. |
.. |
|
|
|
|
|
...
Le premier indice est l'indice patient (ligne), le second indice indique la colonne.
Ainsi le prénom du patient 1 est T(1,1)
Un tableau peut avoir X dimensions, tous les éléments sont du même type.
Dim t (45,45,45) As Strings
|
On peut définir une structure
Public Structure Adresse
Dim Numero As Integer
Dim Rue As String
Dim Ville As String
End Structure
|
Il est ensuite possible de travailler sur un tableau de variable 'structure'.
Dim Adresses (99) as Adresse
Adresses (33). Rue = " Place de la mairie "
|
Un tableau a un nombre défini d'élément quand on le déclare, plus les dimensions sont grandes, plus il occupe de place, même si certains de ses éléments sont vides. Une collection ne contient que les éléments qu'on a mis dedans.
Une collection n'a qu'une 'dimension': pour chaque indice on n'a qu'un seul élément (un seul Objet). On peut créer une collection de String ou d'Integer.
On verra plus loin qu'une collection comme ArrayList est une collection d'objets. (Collection d'objet 'Patient' par exemple, chaque objet 'Patient' ayant un nom, un prénom..)
Le travail sur les tableaux est beaucoup plus rapide que sur les collections.
Par exemple , pour stocker 1000 string dans un tableau ou une collection, l'usage du tableau est 60% plus rapide.
En programmation procédurale on utilise les tableaux par habitude, en programmation Objet on utilise bien les Collections.
VII-C-4. Utilisation particulière des tableaux
Utiliser un tableau plutôt qu'une lourde routine permet parfois de résoudre un problème de programmation .
Le principe est: plutôt que d'utiliser une multitude de test pour trouver une valeur, il est parfois préférable de mettre judicieusement les valeurs dans un tableau et ensuite de lire la bonne 'case'.
1 - Exemple 1:
J'ai besoin de savoir le nom du jour de la semaine en fonction de son numéro.
1 doit retourner "Lundi"
2 doit retourner "Mardi"
3 doit retourner "Mercredi"
..
Avec If Then
C'est pas bien élégant, en plus il faut appeler la routine à chaque fois qu'on veut le nom.
Dim J As Integer
Dim Nom As String
If J= 1 Then
Nom= " Lundi "
ElseIf 2 Then
Nom= " Mardi "
. . .
End If
|
Avec Select Case
On peut faire un Select Case, c'est pas bien élégant, en plus il faut appeler la routine à chaque fois qu'on veut le nom.
SelectCase J
Case 1
Nom= " Lundi "
Case 2
Nom= " Mardi "
. .
End Select
|
Avec un tableau
C'est plus élégant de créer un tableau.
Dim Nom as String = {" Lundi " , " Mardi " , " Mercredi " . . . . " Dimanche " }
Lenom= Nom (J- 1)
|
C'est plus commode et le plus compact.
Notez que le premier élément du tableau étant l'élément 0 , il faut utiliser J-1.
Avec le Framework
On utilise pour cela une énumération:
Enum NomJour
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
Dimanche
End Enum
|
puis
Dim s As Type = GetType (NomJour)
Nom = [Enum]. GetName (s, J)
|
2 - Exemple 2:
J'ai besoin de connaître le risque de faire un accident vasculaire en fonction du sexe et de la tranche d'age.
10 à 20 ans , Homme doit retourner 0
...
60 à 70 ans et Femme doit retourner 20
...
Avec If Then
C'est pas bien élégant, en plus il faut appeler la routine à chaque fois.
Dim S As Integer
Dim A As Integer
Dim Risque As Integer
If S= 1 Then
If A= 1 Then
Risque= 0
ElseIf A= 2 Then
Risque= 3
. .
End If
Else
If A= 1 Then
Risque= 0
ElseIf A= 2 Then
Risque= 3
. .
End If
End If
|
Avec un tableau
C'est plus élégant de créer un tableau a 2 dimensions.
Les colonnes indiquent le sexe, les lignes, la tranche d'age.
Sexe Masculin Sexe Féminin
Dim Risques (,) as Integer = {{0, 0}, {1, 2}, {0, 0}, {2, 3}}
Risque= Risques (S, A)
|
VII-D. Calculs financiers simples
VII-D-1. Conversion Francs=>Euros
Si un objet coûte 100F, cela fait combien d'euros ?
Dim Valeur As Double= 100
Dim Resultat As Double
Resultat = Math. Round ((Valeur / 6. 55957 ), 2)
|
On divise par 6.55957 puis on arrondit à 2 chiffres après la virgule.
VII-D-2. Coût d'augmentation de la vie
Si un objet de 100€ augmente de 3% par an, combien coûtera -t-il dans 10 ans.
Dim Prix As Decimal= 100
Dim Taux As Decimal= 3
Dim Periode As Integer= 10
Dim i As Integer
For i= 1 to Periode
Prix= Prix+ (Prix* Taux/ 100)
Next i
|
On peut remplacer les 3 dernières lignes par:
Prix= Prix* (1+ Taux/ 100)^ Periode
|
Noter que l'on utilise des variables de type décimales, c'est une bonne habitude pour faire des calculs financiers (pas d'erreurs d'arrondis).
VII-D-3. Remboursement d'un prêt
Quel est le remboursement mensuel d'un prêt d'une somme S durant une durée D (en année) à un taux annuel T ?
R=S x T / 1-(1+T)^-D (ici avec T en % mensuel et D en mois
Dim R, S , D, T As Decimal
S= 5000
D= 15
T= 4
T= T/ 12/ 100
D= D* 12
R= S* T/ (1- (T+ 1)^ (- D))
|
Si on voulait afficher le résultat dans un label (on verra cela plus loin)
Label1. text = R. ToString (" C " )
|
Ici le résultat est transformé en chaîne de caractères (grâce à ToString) au format monétaire ("C"), on obtient '36,98€' que l'on met dans le label pour l'afficher.
Ultérieurement on verra un exemple plus complet utilisant les fonctions financières de VB.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © .
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|