Cours VB.NETDate de mise à jour : 05/12/2010
V-A. Introduction
V-A-1. Les Classes du framework
V-A-2. Les instructions de Microsoft.VisualBasic
V-A-3. Saisir, Afficher
V-B. Les 'Algorithmes'
V-B-1. Pour écrire un programme
V-B-2. Définition de l'algorithme
V-B-3. Structures élémentaires:
V-B-3-a. Séquences
V-B-3-b. Variables, 'Type' de variable
V-B-3-c. Constantes
V-B-3-d. Affectation (ou Assignation)
V-B-3-e. Booléens
V-B-3-f. Choix : Si..Alors
V-B-3-g. Choix: Décider entre
V-B-3-h. Répétitions : Pour...Répéter
V-B-3-i. Répétitions : Tant que
V-B-3-j. Logique : Et, Ou, Non
V-B-3-k. Les Sauts
V-B-3-l. Programmation structurée
V-B-3-m. 'Sous-programme' ou 'procédure'
V-B-3-n. Tableaux
V-B-3-o. Collection
V-B-3-p. Pile et Queue
V-B-3-q. Liste Chaînée
V-B-3-r. Notion de Clé
V-B-3-s. Notion de Hachage
V-B-3-t. Arbre
V-B-3-u. Erreur d'exécution : Notion de 'Sécurisation' du code
V-B-3-v. Récursivité
V-B-3-w. Flag et variables d'état
V-B-3-x. Compilation, interprétation
V-B-4. Grandes stratégies.
V-B-5. Quelques algorithmes
V-B-5-a. Recherche dans un tableau
V-B-5-b. Tri de tableau
V-B-6. Lexique anglais=>Français
V-C. L'affectation
V-A. Introduction
Nous allons étudier :
Le langage Visual Basic.Net qui est utilisé dans les procédures.
Comme nous l'avons vu, le langage Visual Basic sert à
Tout le travail du programmeur est là.
Dans VB.Net nous avons à notre disposition 2 sortes de choses:
V-A-1. Les Classes du framework
Le Framework (un framework est un ensemble de classes) en est à sa version 4 en VB 2010.
Les classes du Framework permettront de créer des objets de toutes sortes: objet 'chaîne de caractères', objet 'image', objet 'fichier'.... On travaille sur ses objets en utilisant leurs propriétés, leurs méthodes.
Il existe des milliers de classes: les plus utilisées sont les classes 'String' (permettant de travailler sur des chaînes de caractères), Math (permettant d'utiliser des fonctions mathématiques), Forms (permettant l'usage de formulaires, de fenêtres et donnant accès aux contrôles: boutons, cases à cocher, listes..)
Elles sont communes à tous les langages utilisant le FrameWork (VB, C#, C....)
Ces classes ont de multiples méthodes (rappel de la syntaxe: Classe.Methode).
Exemple d'utilisation de la Class TextBox (contrôle contenant du texte) et de sa méthode Text:
'Affiche "Hello" dans le Textbox.
Parfois la Classe n'est pas chargée par défaut au démarrage de VB, il faut dans ce cas 'l'importer' en haut du module (au dessus de Public Class..). Si par exemple, je veux utiliser Sin() de la classe Math, il faut écrire en haut du module:
Imports System. Math
Public Class Form1
Private Sub Form1_Load (ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles MyBase. Load
Console. WriteLine (Sin (1). ToString )
End Sub
End Class
|
Si on n'a pas importé Math, on peut quand même utiliser Sin en tapant Math.Sin()
V-A-2. Les instructions de Microsoft.VisualBasic
Vb permet d'utiliser des instructions Visual Basic; seul VB peut les utiliser et de lui seul (pas C#).
Il s'agit d'instructions, de mots clé qui ont une syntaxe similaire au basic mais qui sont du VB.Net.
Exemple:
'Mid retourne une partie de la chaîne de caractères.
Il y a aussi les Classes de compatibilité VB6. Elles ne dépayseront pas ceux qui viennent des versions antérieures de VB car elles reprennent la syntaxe utilisée dans VB6 et émulent les fonctions VB6 qui ont disparu de VB.Net.
Ce sont des fonctions VB6 qu'on ajoute à VB.net par souci de compatibilité, mais ce n'est pas du VB.Net. Il faut les oublier!!
L'outil d'import automatique de VB6 vers VB.Net en met beaucoup dans le code. Il faut à mon avis éviter de les utiliser car ce n'est pas vraiment du VB. Ce cours 'pur' VB.Net n'en contient pas.
Pour le moment cela peut paraître un peu compliqué, mais ne vous inquiétez pas, cela va devenir clair.
V-A-3. Saisir, Afficher
Dans l'étude du langage VB, on s'occupe du code, on ne s'occupe pas de l'interface (les fenêtres, les boutons, l'affichage du texte...), mais parfois, on a besoin, pour faire fonctionner des exemples de code, de saisir des valeurs, de les afficher:
- Saisir une valeur, pour cela on utilise une InputBox, c'est une boite qui s'ouvre, l'utilisateur y tape un texte puis il clique sur 'ok'; on retrouve ce qu'il a tapé dans la variable Réponse.
- Afficher des résultats, pour le moment on affichera du texte de la manière suivante:
dans une fenêtre, dans des TextBox:
ou un label:
sur la console:
Console. WriteLine (" Résultat " )
|
ou
dans une Boite de message:
MsgBox (" Bonjour " )
MessageBox. Show (" Bonjour " )
|
V-B. Les 'Algorithmes'
Ici nous allons étudiez les principes généraux de la programmation, ils sont valables pour tous les langages de programmation. Ici il faut simplement comprendre le principe de ce qui est expliqué.
V-B-1. Pour écrire un programme
Pour écrire un programme, aller du problème à résoudre à un programme exécutable, il faut passer par les phases suivantes:
- Analyse du cahier des charges.
Il doit être clair, exhaustif, structuré.
- Analyse générale du problème.
Il existe des méthodes pour professionnels (MERISE, JACKSON..), nous utiliserons plutôt l'analyse procédurale: Le problème global est découpé en sous problèmes nommés fonctions. Chaque fonction ne contient plus qu'une partie du problème. Si une fonction est encore trop complexe, on itère le processus par de nouvelles fonctions à un niveau plus bas.
Cela s'appelle la 'Conception structurée descendante'. La 'Conception ascendante' existe aussi: en assemblant des fonctions préexistantes, on résout le problème: attention, il faut que les fonctions préexistantes soient cohérentes. (Pour le moment on ne fait pas de programmation objet)
- Analyse détaillée.
Chaque fonction est mise en forme, la logique de la fonction est écrite dans un pseudo langage (ou pseudo code) détaillant le fonctionnement de la fonction. Ce pseudo code est universel, il comporte des mots du langage courant ainsi que des mots relatifs aux structures de contrôle retrouvées dans tous les langages de programmation.
- Codage.
Traduction du pseudo code dans le langage que vous utilisez.
- Test
Car il faut que le programme soit valide.
Exemple simpliste:
- Analyse du cahier des charges.
Création d'un programme affichant les tables de multiplication, d'addition, de soustraction.
- Analyse générale du problème.
Découpons le programme en diverses fonctions:
Il faut créer une fonction 'Choix de l'opération', une fonction 'Choix de la table', une fonction 'TabledeMultiplication', une fonction 'TabledAddition', une fonction 'Affiche'...
- Analyse détaillée.
Détaillons la fonction 'TabledeMultiplication'
Elle devra traiter successivement (pour la table des 7 par exemple)
1X7
2X7
3X7..
Voici l'algorithme en pseudo code.
Début
Pour i allant de 1 à 10
Ecrire (i* 7)
Fin Pour
Fin
|
- Codage.
Traduction du pseudo code en Visual Basic, en respectant la syntaxe du VB.
Sub MultiplicationPar7
Dim i As Integer
For i= 1 to 10
Call Affiche (i* 7)
next i.
End Sub
|
- Test
Ici il suffit de lancer le programme pour voir s'il marche bien..
Pour des programmes complexes, il existe d'autres méthodes.
V-B-2. Définition de l'algorithme
Un problème est traitable par informatique si :
- on peut parfaitement définir les données (entrées) et les résultats (sorties),
- on peut décomposer le passage de ces données vers ces résultats en une suite d'opérations élémentaires exécutables.
 |
L'algorithme décrit le processus de résolution d'un problème permettant de décrire les étapes vers le résultat.
L'algorithme détaille, le fonctionnement de ce passage et en décrit la logique.
|
L'algorithme est une succession de tests, décisions et actions dans le but de décrire le comportement d'une entité (objet, programme, personne). Définition du Dicodunet.
On écrit bien 'algorithme' et non 'algorythme'.Le mot « algorithme » vient du nom du mathématicien arabe Al Khuwarizmi (latinisé au Moyen Âge en Algoritmi).
Pour représenter l'algorithme et ses opérations, on utilisait les organigrammes ( dessins avec des cases et des flêches qui ne permettaient de visualiser que des problèmes très simples); maintenant on utilise du pseudo-code (composé d'instructions généralistes).
La mise en oeuvre de l'algorithme consiste en l'ècriture de ces opérations dans un langage de programmation (le visual Basic pour nous).
On utilise l'anglicisme implémentation pour désigner cette mise en oeuvre.
Etudions cette logique valable pour tous les langages de programmation (ceux qui sont des langages impératifs):
Pour représenter n'importe quel algorithme, il faut disposer des trois possibilités suivantes:
- la séquence qui indique que les opérations doivent être exécutées les unes après les autres.
- le choix qui indique quelles instructions doivent être exécutées en fonction de circonstances.
- la répétition qui indique que des instructions doivent être exécutées plusieurs fois.
Exemple d'algorithme principalement composé d'une répétition: |
Pour i allant de 1 à 10
Ecrire (i* 7)
Fin Pour
|
Voyons cela en détails:
Le langage algorithmique et son pseudo-code ne sont pas vraiment standardisés, chacun écrit le pseudo--code à sa manière, aussi vous verrez des notations différentes dans les divers cours d'algorithme. Cela n'a pas d'importance car un programme en pseudo-code ne sera jamais exécuté sur une machine.
L'intérêt de d'étude des algorithmes est didactique: elle permet de comprendre la logique d'un programme totalement indépendamment du langage: ce qui suit est valable en C++, Delphi, Java, Visual Basic, Assembleur...
Comme on est dans un cours de VisualBasic, je donnerais pour chaque notion le pseudo-code mais aussi l'équivalent en Visual Basic.
V-B-3. Structures élémentaires:
Il y a les structures de données (dans quoi sont stockées les données?) dans des:
-Constantes
-Variables
-Tableaux
-Collections
-Listes, Graphe, Arbre..
Il y a les structures de contrôles (Comment fonctionne le code?):
-Sequence
-Condition
-Boucle
V-B-3-a. Séquences
Au sein d'un programme, la structure est généralement séquentielle.
On fait de la programmation impérative, on travaille sur le modèle de la machine de Turing, avec une mémoire centrale et des instructions qui modifient son état grâce à des assignations successives.
Le code est fait d'une succession de lignes (ou instructions) qui seront lues et traitées les unes après les autres.
Instruction 1
Instruction 2
Instruction 3
..
Quand le programme s'exécute, il le fait de haut en bas, Instruction 1 sera exécuté puis instruction 2 puis instruction 3...
En VB on peut mettre plusieurs instructions sur la même ligne séparées par ":"
Instruction1 : Instruction2
V-B-3-b. Variables, 'Type' de variable
Les 'Variables' contiennent les informations les données nécessaires au déroulement du programme (C'est le même sens qu'en mathématique, à la différence qu'en informatique une variable ne contient qu'une valeur).
Chaque variable a un Nom (identifiant) et un Type. Ce dernier indique la nature de l'information que l'on souhaite mettre dans la variable:
Un type indique:
-La nature de l'information (un chiffre? du texte?)
- Les valeurs que peut prendre la variable (un entier, un réel..).
- Les opérations possibles (addition, concaténation..)
Exemple: le Type 'Entier' (Integer en VB) peut contenir une valeur entière, positive ou négative, les opérations possibles sont l'addition, la soustraction, la multiplication...Ainsi si je crée une variable de type Entier, je sais que je ne pourrais y mettre qu'un entier et que je pourrais faire une addition avec; je ne pourrais pas y mettre de caractères.
Les types disponibles sont:
Type numérique:
'Entier', 'réel'.. (Integer, Single en VB) Exemple d'un entier: 123
Type alphanumérique:
'Caractère' (Char en VB) contient 1 caractère Exemple d'un caractère: 'a' (avec des guillemets)
'Chaîne de caractères',(String en VB), contient plusieurs caractères. Exemple: 'toto' (avec des guillemets)
Booléen (Boolean en VB) ne peut contenir que 'Vrai' ou 'Faux'
Objet. (Object en VB)
Monétaire (Décimal en VB)
Date (Date en VB)
Matrice, nombre imaginaire (depuis VB 2010)
A partir des types précédents on peut créer des types complexes (ou structurés):
-Les Tableaux (Array) qui contiennent plusieurs éléments.
-Les Collections qui contiennent plusieurs éléments aussi.
Exemple: la variable nommée 'Total' contient un réel dans un programme de comptabilité.
on remarque qu'il ne faut pas confondre 1 qui est une valeur numérique( sans guillemets) et "1" qui est le caractère '1' (avec des guillemets).
Utilisation des variables:
Les variables numériques serviront à faire des calculs:
Les variables alphanumériques (String et Char du VB) serviront entre autres à manipuler et afficher du texte:
Comment afficher les résultats de calcul?
On apprendra à transformer des variables numériques en variables alphanumériques.
Pour utiliser une variable, il faut qu'elle existe, il faut donc la créer, on dit il faut la déclarer:
Dans un algorithme: 'Variable A en Numérique' 'crée une variable nommée A et de Type Numérique.
En VB: 'Dim A As Integer' 'crée une variable nommée A et de Type Integer.
On peut aussi initialiser une variable c'est à dire définir sa valeur initiale.
Pour cela on peut utiliser un littéral: c'est une donnée utilisée directement.
X <- 2 veut dire: donner à la variable X la valeur 2 ( 2 est une littéral).
V-B-3-c. Constantes
Comme une variable, une 'Constante' a un Nom (identifiant) et un Type. Elle contient une valeur: un nombre, une chaîne de caractères..
Son contenu ne peut pas être modifié.
Exemple :'Constante A en Numérique =12'
En VB: 'Const A As Integer =12'
On la déclare et on l'initialise en même temps.
Ensuite on ne peut pas modifier sa valeur, on ne peut que la lire. Les constantes sont utilisées dans les programmes pour conserver des valeurs fixes qui n'ont pas à changer. Si j'ai un programme d'astronomie, je créerais une constante contenant la vitesse de la lumière pour faire mes calculs (elle a peu de chance de changer!!).
V-B-3-d. Affectation (ou Assignation)
C'est une instruction consistant à donner une valeur à une variable.
En langage algorithmique on l'indique par '<-'
X <- 2 veut dire: donner à la valeur X la valeur 2 ( 2 est une littéral)
Z <- X veut dire: donner à la variable Z la valeur de la variable X .
Z <- X+1 veut dire: donner à la variable Z la valeur de la variable X à laquelle on ajoute 1 (Z prendra la valeur 2+1 =3).
Cela revient à évaluer l'expression de droite et à en mettre la valeur dans la variable de gauche.
En VB le signe d'affectation est '=' on écrit donc:
 |
Attention le signe '=' utilisé en VB est ambigue et n'a donc pas le même sens qu'en mathématiques.
|
Exemple Visual Basic: A=B
 |
Attention ce n'est pas une égalité mais une affectation.
|
L'affectation ne marche que si le type de variable est le même:
Variable A en Numérique
Variable B en Numérique
B<-12
A<-B 'fonctionne car B contient 12, on met 12 dans A
Variable A en Numérique
Variable B en Alphanumérique
B<-'toto'
A<-B 'ne fonctionne pas car on tente de mettre le contenu de B qui est alphanumérique dans une variable numérique.
L'affectation sert à effectuer des calculs:
Variable A en Numérique
A<-3+4-2 'L'expression à droite est évaluée et son résultat est affecté à la variable A.
Ici les + - sont des opérateurs; il y en a d'autres: * (multiplier) / (diviser)....
V-B-3-e. Booléens
On a parfois besoin de savoir si une assertion est vraie ou Fausse.(True ou False)
Pour stocker une information de ce type, on utilise une variable de type booléen. Une variable de ce type ne peut contenir que True ou False.
Le terme booléen vient de "l'algèbre de Boole", cet algèbre ne travaille que sur les valeurs 1 ou 0 (True ou False)
Soit B une variable booléenne:
On peut écrire B<-True (B=True en VB)
On peut aussi tester cette variable:
Si B=False alors (If B=False Then.. en VB)
L'expression après 'Si' est évaluée, si elle est vraie 'alors' se produit.
Autre exemple:
Si C=2 alors.. (If C=2 Then ..en VB)
L'expression C=2 est évaluée, si C est effectivement égal à 2, C=2 est évalué et prend la valeur True; dans ce cas le programme se poursuit après Then.
si C est différent de 2, C=2 est évalué et prend la valeur False; dans ce cas le programme ne se poursuit pas après Then.
V-B-3-f. Choix : Si..Alors
Le programme doit pouvoir choisir parmi deux ou plusieurs possibilités en fonction d'une condition :
Si Condition Alors
Action 1
Sinon
Action 2
Fin Si
|
Si Condition est vraie Action 1 est effectuée, sinon Action 2 est effectué.
Parfois il n'y a pas de seconde branche :
Si Condition Alors
Action 1
Fin Si
|
ou sur une seule ligne:
Si Condition Alors Action 1
|
Il peut y avoir plusieurs conditions imbriquées :
Si Condition 1 Alors
Si Condition 2 Alors
Action 1
Sinon
Action 2
Fin Si
Sinon
Action 3
Fin Si
|
Noter bien le retrait des lignes de la seconde condition afin de bien visualiser la logique du programme :
Action 2 est effectuée si la Condition 1 est remplie et la Condition 2 n'est pas remplie.
En VB cela correspond à l'instruction IF THEN
If Condition 1 Then
Action 1
Else
Action 2
End If
|
Remarque sur les conditions
Une condition contient 2 valeurs et un opérateur:
Si C>2 Alors est correcte.
Si B=3 Alors est correcte.
Si 2<B<7 Alors est incorrecte car il y a 2 opérateurs, il faut dans ce cas utiliser plusieurs conditions et des opérateurs logiques:
Si B>2 Et B<7 Alors est correct (If B>2 And B<7 Then en Visual Basic)
La condition est évaluée:
Exemple : Soit l'expression Si C>2 Alors , elle sera évaluée; si C contient 3, C>2 est vérifié donc Vrai.
Exemple: Trouver le plus grand nombre entre x et y et le mettre dans max
Variable x en Numerique
Variable y en Numerique
Variable max en Numerique
Si x> y Alors
max< - x
Sinon
Max< - y
Fin Si
|
En VB
Dim x As Integer
Dim y As Integer
DIm max As Integer
if x> y Then
max= x
Else
max= y
End if
|
V-B-3-g. Choix: Décider entre
Il est parfois nécessaire d'effectuer un choix parmi plusieurs solutions :
Décider Entre
Quand Condition 1 Alors
Action 1
FinQuand
Quand Condition 2 Alors
Action 2
FinQuand
. .
. .
Autrement
Action 4
FinAutrement
FinDécider
|
Si la condition 1 est remplie Action 1 est effectuée puis le programme saute après FinDécider.
Si la condition 1 n'est pas remplie, on teste la condition 2..
Si aucune condition n'est remplie on saute à Autrement, on effectue Action 4.
On pourrait aussi parler de sélection :
Sélectionner.
Le cas : condition 1
Action 1
Le cas : condition 2
Action 2
. .
Les autres cas
FinSélectionner
|
En VB cela correspond à
Select Case Valeur
Case condition 1
Action 1
Case condition 2
Action 2
. .
Case Else
Action 4
End Select
|
Si Valeur=Condition 1 Action 1 est effectuée,si Valeur=Condition 2 Action 2 est effectuée...
V-B-3-h. Répétitions : Pour...Répéter
Permet de répéter une séquence un nombre de fois déterminé :
Le cas le plus classique est :
Pour I variant de 0 à N Répéter
Action
FinRépéter
|
I prend la valeur 0, 'Action' est effectuée,
puis I prend la valeur 1, Action est effectuée,
puis I prend la valeur 2..
cela jusqu'à N
La boucle tourne N+1 fois (car ici on commence à 0 )
Cela se nomme une itération.
Intérêts?
Au lieu de faire
Afficher (1*7)
Afficher (2*7)
Afficher (3*7)
Afficher (4*7)
...
on remarque qu'un élément prend successivement la valeur 1, 2, 3, ..
Une boucle peut faire l'itération:
Pour i allant de 1 à 10 Répéter
Affiche (i* 7)
Fin répéter
|
La variable dite 'de boucle' prend bien les valeurs 1 puis 2 puis 3.. ; elle est utilisée dans le corps de la boucle.
Une instruction Sortir permet de sortir prématurément de la boucle.
En VB
L'instruction Exit For permet de sortir prématurément de la boucle.
On peut aussi boucler en parcourant tous les éléments d'une collection.
(Une collection est une liste d'objets, liste de taille variable en fonction de ce qu'on ajoute ou enlève.)
Pour Chaque élément de la liste
Action
Fin Pour
|
En VB :
For Each élément In list
Next
|
V-B-3-i. Répétitions : Tant que
Permet de faire une boucle sans connaître le nombre d'itérations à l'avance.
Tant Que Condition
Action
Fin Tant Que
|
L'action qui est dans la boucle doit modifier la condition afin qu'à un moment 'Tant que' ne soit pas vérifié et que l'on sorte de la boucle. Sinon la boucle tourne sans fin.
Pour plus cadrer avec la réalité :
Faire tant que condition
Action
Boucler
|
En VB :
Do while Condition
Action
Loop
|
Il existe une boucle équivalente :
Répéter
Action
Jusqu
En VB :
Do
Action
Loop Until Condition
|
Une instruction Exit Do permet de sortir prématurément de la boucle.
V-B-3-j. Logique : Et, Ou, Non
Une condition contient 2 valeurs et un opérateur:
Si C>2 Alors.. est correcte.
Si B=3 Alors est correcte.
Si 2<B<7 Alors est incorrecte car il y a 2 opérateurs, il faut dans ce cas utiliser plusieurs conditions et des opérateurs logiques:
Si B>2 Et B<7 Alors est correct (If B>2 And B<7 Then en Visual Basic)
La condition est évaluée:
Exemple : Soit l'expression Si C>2 Alors , elle sera évaluée; si C contient 3, C>2 est vérifié donc Vrai.
ET:
On a vu Si B>2 Et B<7 Alors
Il existe aussi:
OU:
Si B>2 Ou B<7 Alors
Et
NON:
Si NON(B>2) Alors est équivalent à Si B<=2 Alors
En VB on utilise les termes AND OR NOT.
V-B-3-k. Les Sauts
Un saut dans le code correspond à 'Aller à'.
Cela permet de 'sauter' vers un label (une étiquette= un endroit du code).
Exemple:
Variable A en Numérique
Variable B en Numérique
Variable C en Numérique
B<-12
A<-B
Aller à Poursuivre
C=11
Étiquette Poursuivre
A<-A+1
|
Le programme saute de 'Aller à Poursuivre' à 'Étiquette Poursuivre', il n'exécute pas C=11.
En VB on utilise GoTo pour faire le saut, pour créer une étiquette, on lui donne un nom et on ajoute ':'..
MonEtiquette:
GoTo monetiquette
|
On verra que les sauts ne sont pratiquement plus utilisés.
V-B-3-l. Programmation structurée
Avant on écrivait:
Variable A en Numérique
Variable B en Numérique
Variable C en Numérique
B< - 12
A< - B
Si A= B Aller à Poursuivre1
C< - 1
Étiquette Poursuivre1
Si A< > B Aller à Poursuivre2
C< - 2
Étiquette Poursuivre2
|
On faisait des sauts dans tous les sens!! Code illisible, non structuré.
Maintenant on structure et on n'utilise pas de 'Aller à'.
Variable A en Numérique
Variable B en Numérique
Variable C en Numérique
B<-12
A<-B
Si A=B Alors
C<-1
Sinon
C<-2
Fin Si
|
V-B-3-m. 'Sous-programme' ou 'procédure'
On a déjà vu cette notion.
Quand on appelle une procédure, le logiciel 'saute' à la procédure, il effectue celle-ci puis revient effectuer ce qui suit l'appel.
Dans un algorithme, une procédure commence par le mot Proc et se termine par End Proc.
Le programme effectuera les instructions 1, 2, 3, 10, 11, 4, 5.
Une opération complexe peut être découpée en plusieurs procédures ou sous-programmes plus petits et plus simples qui seront appelés.
Chaque procédure résout un problème.
Et VB les sous-programmes (ou procédures) sont des Sub ou des Function. Pour appeler une procédure on utilise Call NomProcedure() ou NomProcedure()
On peut fournir aux procédures des paramètres, ce sont des variables qui seront transmises à la procédure.
Exemple:
Création d'une Procédure 'MaProcédure' recevant 2 paramètres:
Sub MaProcédure (paramètre1, paramètre2)
. .
End Sub
|
Exemple d'appel de la procédure 'Maprocédure' en envoyant 2 paramètres:
Call MaProcédure(premierparamètre, secondparamètre)
Exemple : si j'écris Call MaProcédure(2,3)
dans la procédure MaProcédure paramètre1=2 et paramètre2=3.
Il est nécessaire de définir le type des paramètres:
Sub MaProcédure(paramètre1 As Integer, paramètre2 As Integer) indique que la procédure attend 2 entiers.
Il y a 2 manières d'envoyer des paramètres :
- Par valeur : (By Val)c'est la valeur, le contenu de la variable qui est envoyé.
- Par référence :(By Ref) c'est l'adresse (le lieu physique où se trouve la variable) qui est envoyée. Si la Sub modifie la variable, cette modification sera visible dans la procédure appelante après le retour.
Parfois on a besoin que la procédure appelée retourne une valeur dans ce cas il faut créer une fonction:
Function MaFonction() As Integer 'MaFonction qui retourne un entier
..
Return Valeur
End Function
|
Pour appeler la fonction:
ValeurRetournée=MaFonction()
Donc ValeurRetournée est aussi un entier
Exemple de fonction: créer une fonction qui retourne le plus petit nombre:
Fonction Minimum (x en Numerique, y en Numérique) en numérique
Si x<y Alors
Retourner x
Sinon
Retourner y
Fin Si
Fin Fonction
|
Pour l'utiliser:
Variable Min en Numerique
Min<-Minimum (5,7) 'Appelle la fonction en donnant les 2 paramètres 5 et 7.
|
Min contient maintenant 5
En Vb
Function Minimum (x As Integer, y As Integer) As Integer
If x< y Then
Return x
Else
Return y
End If
End Function
|
Pour l'utiliser:
Dim Min As Integer
Min= Minimum (5,7)
|
La fonction résout un problème et plus précisément à partir de données, calcule et fournit un résultat.
V-B-3-n. Tableaux
Un tableau de variables permet de stocker plusieurs variables de même type sous un même nom de variable, chaque élément étant repéré par un index ou indice.
C'est une suite finie d'éléments.
Soit un tableau A de 4 éléments:
Pour accéder à un élément il faut utiliser l'indice de cet élément.
L'élément d'index 0 se nomme A[0] et contient la valeur 3.
On remarque que le premier élément est l'élément d'index 0 (ZERO).
L'élément d'index 1 se nomme A[1] et contient la valeur 12.
Quand on crée un tableau, il a un nombre d'éléments bien défini: 4 dans notre exemple d'index 0 à 3.
Pour donner une valeur à un des éléments, on affecte la valeur à l'élément.
Pour lire une valeur dans un tableau et l'affecter à une variable x:
Traduction en VB
Dim A (4) As Integer
A (2)= 4
x = A (2)
|
Pour parcourir tous les éléments d'un tableau on utilise une boucle:
Exemple: afficher tous les éléments du tableau tab qui contient n éléments.
début
Pour i allant de 0 à n-1 Répéter
écrire(tab[i])
Fin Répéter
fin
|
En VB:
For i= 0 to n- 1
Affiche ( tab (i))
Next i
|
Il existe des tableaux multidimensionnels avec plusieurs index:
Voyons les index de chaque élément:
B(0,0) |
B(0,1) |
B(0,2) |
B(1,0) |
B(1,1) |
B(1,2) |
B(2,0) |
B(2,1) |
B(2,2) |
B[1,0] désigne l'élément de la seconde ligne, première colonne.
Voyons par exemple, le contenu de chaque élément:
Ici B[1,0] =18
En VB on utilise des parenthèses: B(1,0) =18
V-B-3-o. Collection
Une collection permet de stocker plusieurs variables ou objets, chaque élément étant repéré par un index ou indice. Mais la collection n'a pas de nombre d'éléments précis au départ, elle ne contient que les éléments qu'on y ajoute.
Soit la collection Col, au départ elle est vide.
J'ajoute des éléments (ou items) à cette collection.
Col.Ajouter ("Toto")
Voici la collection:
La collection a maintenant 1 élément.
Col. Ajouter (" Lulu " )
Col. Ajouter (" Titi " )
|
La collection a 3 éléments maintenant.
Col.Retirer(2) enlève l'élément numéro 2.
La collection n'a plus que 2 éléments maintenant.
On voit que le nombre d'éléments n'est pas connu à l'avance, il varie en fonction des éléments ajoutés (ou retirés).
Un élément est repéré par un indice.
En VB
Il existe des collections avec des clés permettant de retrouver la valeur d'un élément rapidement.
V-B-3-p. Pile et Queue
Une Pile (ou stack) est une collection de type LIFO (Last In, First Out). Dernier entré, premier sortie.
Ce type de stack (pile) est très utilisé en interne par les programmes informatiques: on stocke dans une stack les adresses de retour des procédures appelées, au retour on récupère l'adresse du dessus.
Push insère un objet en haut de la pile.
Pop enlève et retourne un objet en haut de la pile.
On peut utiliser une pile dans un programme pour gérer le déplacement de l'utilisateur dans un arbre, les éléments en cours sont stockés par Push, pour remonter en chemin inverse, on Pop.
Une 'Queue' est une collection de type FIFO (First In, First Out). Premier arrivé premier servi.
C'est la queue devant un cinéma, le premier arrivé, prend son billet le premier.
Les éléments stockés dans Queue sont insérés à une extrémité; les éléments extrait le sont à l'autre extremité.
Le nombre d'élément de la queue est géré automatiquement.
Généralement on a les possibilités suivantes:
DeQueue supprime et retourne l'objet de début de liste
EnQueue ajoute un objet en fin de liste
Peek retourne l'objet de début sans le supprimer
V-B-3-q. Liste Chaînée
Une liste chaînée est une liste d'éléments non classée. Dans chaque enregistrement il y a, outre le contenu de l'enregistrement, la localisation, l'adresse, l'index de l'enregistrement précédent et de l'enregistrement suivant.
Ainsi on peut parcourir la liste en allant d'enregistrement en enregistrement. il existe des algorithmes pour ajouter ou supprimer un enregistrement. La liste peut être ouverte ou fermée (le dernier enregistrement bouclant sur le premier).
V-B-3-r. Notion de Clé
Quand on classe une série importante de données, on peut utiliser la notion de clé/Valeur (Key/Value).
Ici on utilise comme clé le numéro du département et comme valeur, le nom du département.
Si on a la clé, on peut retrouver la valeur correspondante.
Autre exemple: La clé peut être le nom, prénom.
V-B-3-s. Notion de Hachage
Une fonction de hachage est une fonction qui fait subir une succession de traitements à une donnée fournie en entrée pour en produire une empreinte servant à identifier la donnée initiale.
Donnée d'entrée=> Fonction de hachage => Empreinte.
Le résultat d'une fonction de hachage peut être appelé selon le contexte empreinte, somme de contrôle (dans le cas de la CRC), résumé, condensé, condensat ou encore empreinte cryptographique (dans le cadre de la cryptographique). On l'appelait aussi autrefois aussi signature.
Les fonctions de hachage sont utiles en cryptographie où elles sont utilisées pour chiffrer une donnée initiale.
Mot de passe: "GftUi6h77"=> Fonction de hachage => Empreinte: "4587213399545684246847"
C'est l'empreinte qui va être enregistrée. Quant l'utilisateur rentre le mot de passe, on le 'hache" et on compare l'empreinte du mot de passe tapé par l'utilisateur avec l'empreinte enregistrée pour voir si le mot tapé est bon. Ainsi a aucun moment le mot de passe est en clair.
Ces fonctions de hachage sont aussi très utilisées pour accéder rapidement à une donnée contenue dans un grand nombre de données.
Ceci grâce aux tables de hachage (ou hash tables en anglais).
Un exemple classique et simpliste de fonction de hachage est la fonction modulo n : Si on dispose d'un grand nombre de données, à mettre dans un tableau de n cases, on pourra ranger l'élément numéro i dans la case i modulo n. Ainsi, pour aller chercher notre donnée, nous n'avons plus besoin de parcourir tous les éléments jusqu'à trouver l'élément i : Il suffit de parcourir les éléments contenus dans la case i modulo n. Si les données initiales étaient réparties uniformément, le temps de recherche en moyenne est divisé par n. En pratique, on utilise des fonctions de hachage bien plus complexes.
Le hachage est un nombre qui permet la localisation des éléments dans une table.
Exemple:
Nous avons une série de noms et adresses, nous voulons rapidement trouver l'adresse correspondant à un nom sans avoir à faire une boucle qui compare le nom cherché avec chaque élément du tableau pour le trouver.
Pour chaque nom la fonction de hachage, va créer un numéro (empreinte).
On crée des enregistrements indexés par le dit numéro (empreinte), chaque enregistrement contenant l'adresse.
Si maintenant on cherche un nom, on calcul son empreinte, ce qui nous donne l'index de l'enregistrement que l'on trouve rapidement.
Si la fonction de hachage est uniforme, cela veut dire que pour des entrées différentes, il n'y a jamais la même empreinte. Ce qui est la plupart du temps impossible.
Deux noms peuvent donc donner la même empreinte parfois (on parle de collision). Dans ce cas, on range les enregistrements ayant la même empreinte les uns à la suite des autres (sous forme de liste chaînée). Si le premier enregistrement n'est pas le bon, on regarde le suivant.
V-B-3-t. Arbre
Structure de données. Désigne une forme de diagramme qui modélise une hiérarchie.
Un arbre est constitué d'un ensemble de noeuds et de branches reliant les noeuds. On peut parler de feuilles pour les éléments, les objets qui sont en bout de branches.
Le premier noeud d'un arbre (celui sans branche entrante) se nomme la racine.
Un arbre est unidirectionnel et sans boucle.
Un exemple de données en 'arbre': sur un disque dur, les répertoires, sous-répertoires et fichiers ont une structure en arbre.
V-B-3-u. Erreur d'exécution : Notion de 'Sécurisation' du code
Erreur d'exécution:
Si le code exécute Z=X/Y avec Y=0 (pour des entiers) , comme la division par zéro est impossible, le logiciel s'arrète.
Il s'agit d'une 'Erreur d'exécution' (dépassement de capacité).
En VB on dit qu' une exception est levée.
Il appartient au programmeur, une fois l'algorithme écrit, de le sécuriser: Des instructions doivent protéger certaines parties du code afin d'éviter d'effectuer des opérations incohérentes.
Si Y < > 0 Alors
Z= X/ Y
Fin Si
|
Si vous testez cela en VB, bien utiliser des Integers; avec des singles le comportement est différent.
V-B-3-v. Récursivité
Une procédure est récursive si elle peut s'appeler elle même.
Sub Calcul ()
Calcul ()
End Sub
|
Pourquoi utiliser la récursivité?
Une procédure récursive découpe le problème en morceaux plus petits et s'appelle elle-même pour résoudre chacun des plus petits morceaux, elle résout une petite partie du problème elle même.
V-B-3-w. Flag et variables d'état
Un Flag (ou drapeau) est une variable utilisée pour enregistrer un état, la valeur de cet état servant à déclencher ou non des actions. C'est une manière de retenir qu'un évènement s'est produit.
Si le drapeau est abaissé, les voitures roulent..
Exemple: Utiliser un Flag pour sortir d'une boucle:
On utilise flagSortir.
flagSortir=Faux
Tant que flagSortir =Faux
Si on doit sortir de la boucle, on met la valeur de flagSortir à Vrai
Boucler
|
En VB:
flagSortir= Faux
Do while flagSortir = Vrai
Loop
|
Tant que flagSortir =Faux la boucle tourne.
On peut généraliser cette notion en parlant de variable d'état.
Une variable d'état sert à décrire l'état du programme.
Exemple:
fileIsOpen est une variable indiquant si un fichier est ouvert ou fermé.
V-B-3-x. Compilation, interprétation
Ici on n'est pas à proprement parlé dans l'algorithmie.
Le texte que vous écrivez pour construire une programme est le code source.
Tout langage doit obligatoirement être traduit en langage machine (le langage du processeur) pour que ce programme soit exécutable.
Il existe deux stratégies de traduction:.
-le programme traduit les instructions au fur et à mesure qu'elles se présentent (à la volée)au cours de l'exécution. Cela s'appelle l'interprétation.
-le programme commence par traduire l'ensemble du programme (programme source) en langage machine, constituant ainsi un deuxième programme (un deuxième fichier) distinct physiquement et logiquement du premier, c'est le fichier exécutable. Cela s'appelle la compilation. Ensuite, pour exécuter le programme, on exécute l'exécutable, ce second programme.
Les premiers langages Basic étaient interprétés. Un langage interprété était plus maniable: on exécutait directement son code au fur et à mesure qu'on le tapait, sans passer à chaque fois par l'étape supplémentaire de la compilation. Un programme compilé s'exécute beaucoup plus rapidement qu'un programme interprété : le gain est couramment d'un facteur 10, voire 20 ou plus
Le VB.Net est un langage compilé.
Le code source est dans des fichiers '.vb' et l'exécutable est un '.exe'. On verra que dans l'environnement de développement vb présente les avantages d'un langage interprété (exécution pas à pas, modification du source en cours de débogage...) On peut aussi créer une exécutable autonome.
Les choses sont plus complexes car en vb , entre le source et l'exécutable il y a un code 'intermédiaire'.
V-B-4. Grandes stratégies.
Pour trouver des réponses à un problème, on va choisir une grande statégie et utiliser des structures élémentaires pour l'exécuter.
Algorithme direct ou explicite:
Ici l'agorithme utilise la seule voie possible, évidente mathématiquement:
Exemple: pour calculer les racines d'une equation du second degré, l'algorithme calcule le déterminant puis en fonction de sa valeur (plusieurs cas), il calcule les racines.
Il est possible de découper un problème complexe en plusieurs problèmes plus simples.
Algorithme glouton:
Un algorithme glouton suit le principe de faire, étape par étape, un choix optimum local, dans l'espoir d'obtenir un résultat optimum global.
Par exemple, dans le problème du rendu de monnaie (rendre une somme avec le moins possible de pièces), l'algorithme consiste à répéter le choix de la pièce de plus grande valeur qui ne dépasse pas la somme restante; c'est un algorithme glouton.
Nous faisons beaucoup d'algorithme glouton!!
Diviser pour régner:
Diviser pour régner est une technique algorithmique consistant à diviser un problème de grande taille en plusieurs sous-problèmes analogues.
Les algorithmes Diviser pour régner appliquent deux stratégies principales. La première est la récursivité sur les données: on sépare les données en deux parties, puis on résout les sous-problèmes (par la même fonction), pour enfin combiner les résultats. La seconde stratégie, la récursivité sur le résultat, consiste elle à effectuer un pré-traitement pour bien découper les données, puis à résoudre les sous-problèmes, pour que les sous-résultats se combinent d'eux-mêmes à la fin.
Exemple: les algorithmes de tri (trier une tableau par exemple).
Recherche exhaustive:
Cette méthode utilisant l'énorme puissance de calcul des ordinateurs consiste à regarder tous les cas possibles.
Exemple: Rechercher une clé pour pénétrer dans un site (c'est mal!!): on teste à l'aide d'une boucle toutes les clés possibles; on parle de 'force brute'.
Algorithme aléatoire, approche successives:
Certains algorithmes utilisent des recherches aléatoires, ou par approches successives donnant de meilleurs résultats que des recherche directes ou explicites.
Exemple : ceux dits de Monte-Carlo et de Las Vegas.
Les heuristiques.
Pour certains problèmes, les algorithmes ont une complexité beaucoup trop grande pour obtenir un résultat en temps raisonnable. On recherche donc une solution la plus proche possible d'une solution optimale en procédant par essais successifs. Certains choix stratégiques doivent être faits. Ces choix, généralement très dépendants du problème traité, constituent ce qu'on appelle une heuristique. Les programmes de jeu d'échecs, de jeu de go fonctionnent ainsi.
V-B-5. Quelques algorithmes
Les algorithmes les plus étudiés sont:
-Algorithmes simples:
...Inversion de variables
...Recherche d'une valeur dans un tableau
...Tri
...Problème du voyageur de commerce
-Algorithmes utilisant la récursivité
-Algorithmes mathématiques
-Algorithmes informatiques complexes:
...Compression
...Cryptage
...Graphisme
....
V-B-5-a. Recherche dans un tableau
Soit un tableau A() de 4 éléments:
Je veux parcourir le tableau pour savoir s'il contient le chiffre '4'.
Il faut faire une itération afin de balayer le tableau: la variable dite de boucle ( I ) va prendre successivement les valeurs: 0 ,1 ,2 ,3. (Attention: dans un tableau de 4 éléments, l'index des éléments est 0,1,2,3)
Pour I variant de 0 à 3 Répéter
..
FinRépéter
|
Dans la boucle il faut tester si la valeur de l'élément du tableau est bien la valeur cherchée.
Pour I variant de 0 à 3 Répéter
Si A(I)= 4 Alors..
FinRépéter
|
Si on a trouvé la bonne valeur, on met un flag (drapeau) à Vrai.
flagTrouvé<-Faux
Pour I variant de 0 à 3 Répéter
Si A(I)= 4 Alors flagTrouvé<-Vrai
FinRépéter
|
Ainsi si après la boucle flagTrouvé= Vrai, cela veut dire que le chiffre 4 est dans le tableau.
En VB
flagTrouve= False
For I= 0 To 4
If A (I)= 4 Then flagTrouve= True
Next I
|
V-B-5-b. Tri de tableau
Pour trier un tableau de chaînes de caractères (des prénoms par exemple), 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: "Bruno" est supérieur à "Alice"))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é.
Tableau non trié:
On compare les lignes 1 et 2, on inverse
On compare les lignes 2 et 3, on inverse
Le tableau n'étant pas encore trié, on recommence:
On compare les lignes 1 et 2, on inverse
On compare les lignes 2 et 3, on n'inverse pas.
Le tableau est trié.
Tout l'art des routines de tri est de faire le moins de comparaisons possibles pour trier le plus vite possible.
On a utilisé ici le Bubble Sort (ou tri à bulle); on le nomme ainsi car l'élément plus grand remonte progressivement au fur et à mesure jusqu'au début du tableau comme une bulle. ("Agathe" est passé de la troisième à la seconde puis à la première position).
Une boucle externe allant de 1 à la fin du tableau balaye le tableau N fois ( La boucle varie de 0 à N-1), une seconde boucle interne balaye aussi le tableau et compare 2 éléments contigus (les éléments d'index j et j+1)et les inverse si nécessaire. La boucle interne fait remonter 1 élément vers le début du tableau, la boucle externe le fait N fois pour remonter tous les éléments.
Pour i allant de 0 à N-1
Pour j allant de 0 à N-1
Si T(j)>T(j+1) Alors
Temp<-T(j)
T(j)<-T(j+1)
T(j+1)<-Temp
Fin Si
Fin Pour
Fin Pour
|
En Visual Basic:
Dim i, j , N As Integer
Dim Temp As String
N= 4
Dim T (N) 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
|
 |
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)
Cet algorithme de tri peut être optimisé, on verra cela plus loin.
Les algorithmes s'occupent aussi de décrire la manière de rechercher des données dans des tableaux, de compresser des données... Nous verrons cela au fur et à mesure.
V-B-6. Lexique anglais=>Français
If = Si.
Then= Alors
Step=Pas
Do (To)= faire
While= tant que
Until= Jusqu'à ce que.
Loop= boucle
V-C. L'affectation
C'est l'instruction la plus utilisée en programmation.
On peut aussi utiliser le terme 'Assignation' à la place de l'affectation.
'Variable = Expression' est une affectation, c'est le signe '=' qui indique l'affectation.
L'affectation transfère le résultat de l'expression située à droite du signe 'égal' dans la variable (ou la propriété) à gauche du signe égal.
Exemple:
A=B est une affectation (ou assignation).
A=B affecte la valeur de la variable B à la variable A, la valeur de B est mise dans A.
Si
A=0
B=12
A=B entraîne que A=12 (B n'est pas modifié).
Si nécessaire l'expression à droite du signe = est évaluée, calculée avant d'être affectée à la variable de gauche.
Si
A=0
B=12
A=B+2 entraîne que A=14
L'affectation permet donc de faire des calculs :
Si nombrdHeure=100 et tauxHoraire=8
paye= nombredHeure * tauxhoraire
paye prend la valeur 800 (notez que '*' , l'étoile veut dire : multiplication.)
 |
Attention dans le cas de l'affectation "=" ne veut donc pas dire 'égal'.
|
A=A+1 est possible
Si A=1
A=A+1 entraîne que A=2
On verra qu'il existe des variables numériques ('Integer' 'Single') et alphanumériques (chaîne de caractères ou 'String'), l'affectation peut être utilisée sur tous les types de variables.
Le second membre de l'affectation peut contenir des constantes, des variables, des calculs dans le cas de variables numériques.
A=B+2+C+D
On ne peut pas affecter une variable d'un type à une variable d'un autre type:
si A est numérique et B est alphanumérique (chaîne de caractères) A=B n'est pas accepté.
Ecriture compacte:
A=A+1 peut s'écrire de manière plus compacte : A += 1
A=A*2 peut s'écrire de manière plus compacte : A *= 2
A=A&"Lulu" pour une variable chaîne de caractère peut s'écrire de manière plus compacte : A &= "Lulu"
L'affection marche pour les objets, leurs propriétés..
Bouton1.BackColor= Bouton2.BackColor
Signifie que l'on donne au Bouton1 la même couleur de fond que celle du bouton2: on affecte la valeur BackColor du Bouton2 au Bouton1.
 |
Attention le signe '=' signifie par contre 'égal' quand il s'agit d'évaluer une condition, par exemple dans une instruction If Then (Si Alors):
|
If A=B then 'signifie: Si A égal B alors...
Permutation de variables:
C'est un petit exercice:
J'ai 2 variables A et B contenant chacune une valeur.
Je voudrais mettre dans A ce qui est dans B et dans B ce qui est dans A.
Si je fais
A=B
B=A
Les 2 variables prennent la valeur de B!!
Comment faire pour permuter?
Et bien il faut utiliser une variable intermédiaire C qui servira temporairement à conserver le contenu de la variable A:
C=A
A=B
B=C
|
A |
B |
C |
Départ |
1 |
2 |
0 |
C=A |
1 |
2 |
1 |
A=B |
2 |
2 |
1 |
B=C |
2 |
1 |
1 |
Voila, on a bien permuté.
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.
|