Y.Grusson IUT Génie CivilUniversité Joseph Fourier
1
Programmation VISUAL BASIC
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
2
PLAN DES SEANCES• Séance 1 : Prise en main de l’outils et des premiers
composants - Premiers programmes.
• Séance 2 : La structure conditionnelle.
• Séance 3 : La structure répétitive.
• Séance 4 : Synthèse des structures conditionnelles et répétitives - Contrôle écrit.
• Séance 5 : Procédures / fonctions.
• Séance 6 : Procédures / fonctions.
• Séance 7 : Tableaux à 1 et 2 dimensions.
• Séance 8 : Synthèse – Contrôle écrit.
• Contrôle sur machine (date fixée ultérieurement)
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
3
SEANCE 1
• La Programmation• Le langage• Les concepts
– L’objet– Héritage– Évènement
• Présentation de Visual Basic• Mise en pratique
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
4
La Programmation
• A tout moment un programme fonctionne ("tourne") sur un ordinateur.
• Le programme est toujours situé en mémoire centrale après son chargement en général depuis le disque dur. Il est exécuté par le processeur.
• Que signifie "exécuter" ? Un programme est composé d'instructions. Chaque instruction représente une action élémentaire. Le processeur va chercher les instructions les unes après les autres en mémoire centrale pour faire (exécuter) les actions élémentaires qu'elles représentent.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
5
• Le programme utilise des données qui sont également en mémoire centrale. – Des données peuvent être introduites en mémoire
centrale par l’utilisateur (saisie au clavier) à la demande du programme.
– Des données peuvent être introduites en mémoire depuis le disque dur (fichier) sans intervention de l'utilisateur.
• Le programme produit des résultats (affichage à l'écran, enregistrement sur disque, etc.)
La Programmation
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
6
La Programmation
Écran
PROGRAMME
DONNEES
Mémoire centrale
Clavier
Souris
Imp.
Bande
Et … SCANNER, MODEM, APPAREIL PHOTO NUMERIQUE, etc.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
7
Les Langages
Chaque type processeur (X386, Alpha, etc.) à sont propre jeu d'instructions binaires.
Par contre, le programmeur écrit ses programmes dans un langage facilement compréhensible et indépendant des processeurs.
La rencontre de ces deux extrémités se fera par l'intermédiaire d'une traduction.
Il y a deux types de traduction :
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
8
Compilation / Interprétation
Précision : Le compilateur est spécifique à la fois au processeur et au langage
La Compilation : Elle se fait une seule fois
Programmeécrit par le
programmeur
Programmedirectementexécutable
par leprocesseur
(.exe)
COMPILATEUR
Les langages sont variés : Assembleur, C, C++, Pascal, ADA, VisualBasic, Fortran, Cobol, etc.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
9
Compilation / Interprétation
L'interprétation : Elle se fait à chaque exécution
Programmeécrit par le
programmeur
Exécutionde la lignetraduite
Interprétation"ligne par ligne"
On parle ici de script : JavaScript, HTML, VBScritp, les scripts des système d'exploitation (MsDos, Unix, etc)
Cette technique a été repopularisée avec les développements pour les applications Web
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
10
Les concepts : l'objet
La programmation actuelle s'appuie sur le concept d'objet.
Devant la complexification des applications, l'objet va permettre au programmeur d'utiliser des briques (l'objet) pour construire son propre programme.
Les objets sont eux-mêmes des programmes.
Les objets possèdent : des propriétés des méthodes
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
11
Les objets peuvent représentés des éléments variés (objet réel – vêtement, voiture, etc.- des objets visuels –une fenêtre Windows, un menu, une liste déroulante, etc.- des objets abstraits –une connexion-)
Les objets peuvent être hiérarchisés. Un objet qui "découle" d'un autre objet héritera ("récupérera") ses propriétés et ses méthodes.
Exemple : L'objet VETEMENT. Les objets PANTALON et CHEMISE seront des types
de VETEMENT et ils en hériteront certaines propriétés et méthodes.
Les concepts : l'objet
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
12
Les concepts : l'héritage
L'objet VETEMENTPropriétés : TauxTVA = 0.186 TauxMarge = 0.01 PrixAchat PrixVenteMéthodes : Calcul de la TVA = PrixVente * TauxTva Calcul du Prix de Vente = Prix Achat * (1 + TauxMarge)
L'objet PANTALON genre de VETEMENTPropriétés : Celles de VÊTEMENT TauxMarge = 0.015 (redéfinition de la propriété) Couleur = "Bleu" (Nouvelle propriété)Méthodes : Celles de VETEMENT Modification de la propriété COULEUR (nouvelle méthode)
(Les méthodes peuvent également être redéfinies)
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
13
La programmation des applications Windows utilise des objets : fenêtre, bouton, menu, zone de saisie, liste déroulante, etc.
Ces objets ont des propriétés : couleur, libellé, position, taille, etc.
Ces objets ont des méthodes : Par exemple "Ajouter un élément dans une liste déroulante".Une des particularité de certaines méthodes est de réagir à des évènements extérieurs (le click de la souris par exemple)
Les concepts : l'évènement
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
14
Présentation de Visual Basic
Les Objets Les propriétés
Structuredu projet
Le projet
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
15
Présentation de Visual Basic
TextBox
CommandButtonComboBox
Label
LineLes objets
(ou les composants)
ListBox
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
16
Présentation de Visual Basic
Exemple de propriétés pour un composant "TextBox"
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
17
Présentation de Visual Basic
Héritage
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
18
Présentation de Visual Basic
Les méthodes de l'objet "CommandButton" nommé dans l'application "Bouton"
La liste des objets de l'application
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
19
Présentation de Visual Basic
Les méthodes de l'objet "CommandButton" nommé dans l'application "Bouton"
La liste des méthode de l'objet "Bouton"
Écriture de la méthode qui réagit à l'événement "Click" de l'objet "Bouton"
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
20
SEANCE 2
LA STRUCTURE CONDITONNELLELa structure conditionnelle de programmation permet de mettre
en place une alternative en fonction d'une condition. L'expression générale de cette structure est la suivante :
SI Expression_Logique
ALORS
Bloc d'instructions si l'expression logique est vraie
SINON
Bloc d'instructions si l'expression logique est fausse
FIN DU SI
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
21
SEANCE 2
Syntaxe VB la plus générale :
IF Expression_Logique THEN Bloc d'instructions si l'expression logique est vraieELSE Bloc d'instructions si l'expression logique est fausseEND IF
Ou plus simple :
IF Expression_Logique THEN Bloc d'instructions si l'expression logique est vraieEND IF
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
22
• L'expression_logique est une expression calculée qui ne peut retourner que 2 valeurs :
VRAI ou FAUX (TRUE ou FALSE)• Comme toute opération elle a un ensemble
d'opérateurs. Les plus courants sont :=, <, <=, >, >=, < >, ET, OU
• Exemples :A > 12Zone.Text = "Bonjour"AGE >= 18SURFACE1 < > SURFACE2AGE > 18 ET DOMICILE = "Grenoble"(ET et OU relient deux expressions logiques)
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
23
SEANCE 2Exemple
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
24
Derrière le bouton :
Private Sub Command1_Click()Dim Rep as Integer If Val(Zone1.Text) >= Val(Zone2.Text) Then Rep = MsgBox("Oui, A est supérieur ou égal à B", vbOKOnly, " A >= B ?") Else Rep = MsgBox("Non, A n'est pas supérieur ou égal à B", vbOKOnly, " A >= B ?") End IfEnd Sub
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
25
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
26
Private Sub Command1_Click()Dim Rep as Integer If Val(Zone1.Text) >= 5 Then If Val(Zone1.Text) <= 10 Then rep = MsgBox("A est compris entre 5 et 10", vbOKOnly, "5<=A<=10") Else rep = MsgBox("A est exterieur à [5 et 10]", vbOKOnly, "5<=A<=10") End If Else rep = MsgBox("A est exterieur à [5 et 10]", vbOKOnly, "5<=A<=10") End IfEnd Sub
SEANCE 2Utilisation d'un "SI" imbriqué (dans le "THEN" ou le "ELSE")
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
27
Private Sub Command1_Click()Dim Rep as Integer If Val(Zone1.Text) >= 5 AND Val(Zone1.Text) <= 10 Then rep = MsgBox("A est compris entre 5 et 10", vbOKOnly, "5<=A<=10") Else rep = MsgBox("A est exterieur à [5 et 10]", vbOKOnly, "5<=A<=10") End IfEnd Sub
SEANCE 2
Autre solution
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
28
Syntaxe avec des structures imbriquées :
IF Expression_Logique1 THEN Bloc d'instructions si l'expression logique1 est vraie (Ce bloc peut contenir une structure IF……END IF) ELSEIF Expression_Logique2 THEN Bloc d'instructions si l'expression logique2 est vraie ELSEIF Expression_Logique3 THEN Bloc d'instructions si l'expression logique3 est vraie ……. ELSE Bloc d'instructions pour tous les autres cas (Optionnel)END IF
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
29
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
30
Private Sub BCalculer_Click()Dim Rep as integer If Len(ZValeur.Text) = 0 Then Rep = MsgBox("A doit être saisi", vbOKOnly, "Erreur") ElseIf Opt1.Value = Checked Then LResult.Caption = "Résultat = " & Str(Val(ZValeur.Text) * 6) ElseIf Opt2.Value = Checked Then LResult.Caption = "Résultat = " & Str(Val(ZValeur.Text) ^ 2) ElseIf Opt3.Value = Checked Then LResult.Caption = "Résultat = " & Str(Val(ZValeur.Text) / 3) ElseIf Opt4.Value = Checked Then LResult.Caption = "Résultat = " & Str(Val(ZValeur.Text) ^ 3) Else Rep = MsgBox("Il faut cocher...", vbOKOnly, "Erreur") End IfEnd Sub
SEANCE 2
Attention : ELSEIF et non ELSE IF. Pas de END IF pour fermer les ELSEIF.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
31
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
32
Private Sub CIci_Click()Dim Rep As Integer Select Case Val(ZColor.Text) Case 1 Ovale.FillColor = vbRed Case 2 Ovale.FillColor = vbYellow Case 3 Ovale.FillColor = vbGreen Case 4 Ovale.FillColor = vbWhite Case Else Rep = MsgBox("Out", vbOKOnly, "Pfff!!!") End SelectEnd Sub
SEANCE 2
Attention cette structuren'est possible qu'avec un choix multiple sur la même valeur numérique–ici Val(ZColor.Text)-
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
33
Syntaxe du SELECT CASE …. END SELECT :Select Case Variable Case liste de valeur 1 Bloc d'instructions quand "variable" possède une valeur de la liste 1
Case liste de valeur 2 Bloc d'instructions quand "variable" possède une valeur de la liste 2
Case liste de valeur 3 Bloc d'instructions quand "variable" possède une valeur de la liste 3
Case liste de valeur 4 Bloc d'instructions quand "variable" possède une valeur de la liste 4
…. Case Else Bloc d'instructions pour tous les autres cas (optionnel)
End Select
SEANCE 2
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
34
SEANCE 3
LA STRUCTURE REPETITIVE
Cette structure va permettre de répéter un bloc d'instructions. La syntaxe la plus générale de cette structure est la suivante :
TANT QUE Expression_Logique
FAIRE
Bloc d'instructions à exécuter tant que l'expression logique RESTE vraie
FIN TANT QUE
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
35
SEANCE 3
Le bloc d'instructions est répété "tant que l'expression logique reste vraie", ceci implique que :• Pour s'arrêter, il faut qu'elle deviennent fausse. Au
moins une instruction dans le bloc doit donc faire évoluer l'expression logique afin de la faire basculer de "vrai" à "faux" (au risque sinon de rentrer dans une boucle infinie)
• De même, il faut que l'expression logique soit initialisée à "vrai" (le plus généralement) ou à "faux".
(Vous remarquerez qu'une structure "Tant Que" peut ne pas répéter son bloc d'instructions si l'expression logique est initialisée à "faux")
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
36
SEANCE 3
Il possible de réécrire la structure ainsi :
Instruction(s) d'initialisation de l'expression logique
TANT QUE Expression_Logique
FAIRE
Bloc d'instructions à exécuter tant que l'expression logique RESTE vraie. Ce bloc doit contenir au moins une Instruction d'évolution de l'expression logique
FIN TANT QUE
En général l'Expression_Logique possède un opérande fixe (limite a ne pas dépasser) et un opérande variable qui tend vers l'opérande fixe.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
37
SEANCE 3
Syntaxe Visual Basic du "Tant Que"
DO WHILE Expression_logique
Bloc d'instructions à exécuter tant que l'expression logique RESTE vraie
LOOP
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
38
SEANCE 3
Il existe deux autres structures répétitives :• La structure REPETER
REPETERBloc d'instructions jusqu'à ce que l'expression
devienne FAUSSEJUSQU'À Expression-logique
• En Visual BasicDO Bloc d'instructionsLOOP UNTIL Expression-logique
Ici, l'expression est évaluée à la fin de la boucle ; Par conséquent, le bloc est exécuté au moins une fois.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
39
SEANCE 3
• La structure POURPOUR Variable = Val_début à Val_Fin PAS Val_pasFAIRE
Bloc d'instructionsFIN POUR
• En Visual BasicFOR Variable = Val_début TO Val_Fin STEP Val_pas
Bloc d'instructionsNEXT
Remarque : Le pas est par défaut égal à 1 et la variable est de type entier.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
40
SEANCE 3
Exemple
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
41
SEANCE 3Solution avec une structure DO WHILE….
Private Sub BLancer_Click()Dim I As IntegerDim Total As Integer (Déclaration locales de 2 variables)Total = 0I = 1 (Initialisation de l'expression logique)Do While I <= Val(ZLimite.Text) Total = Total + I I = I + 1 (Evolution de l'expression logique)LoopZTotal.Text = Str(Total)
End Sub
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
42
SEANCE 3Solution avec une structure DO … UNTIL
Private Sub BLancer_Click()Dim I As IntegerDim Total As Integer (Déclaration locales de 2 variables) Total = 0I = 1 (Initialisation de l'expression logique)Do
Total = Total + I I = I + 1 (Déclaration locales de 2 variables)
Loop Until I > Val(ZLimite.Text)ZTotal.Text = Str(Total)
End Sub
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
43
SEANCE 3
Solution avec une structure FOR … NEXT
Private Sub BLancer_Click() Dim I As Integer Dim Total As Integer (Déclaration locales de 2 variables) Total = 0 For I = 1 To Val(ZLimite.Text) (Le For initialise I avec I=1) Total = Total + I Next (Le NEXT fait évoluer I en exécutant I=I+1) ZTotal.Text = Str(Total)End Sub
Cette solution est la plus adaptée à ce problème
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
44
Séance deREVISION
et de Synthèse
SEANCE 4
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
45
Procédures et Fonctions
• Ces deux notions correspondent à la notion plus générale de "sous-programme" (terme qui n'est plus utilisé actuellement).
• Le premier objectif d'une procédure ou d'une fonction est d'écrire qu'une seule fois une partie de programme qui se répète dans le même programme ou dans plusieurs programmes.
• Le second objectif est de fractionner un (gros) programme en plusieurs parties (plus petites) développées en général par des personnes différentes.
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
46
Premier exemple de procédure :
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
47
• Ce problème sera résolu à l'aide d'une procédure qui "dira" si un nombre entier est pair ou non.• Cette procédure sera réutilisable dans un autre programme.
• D'une façon générale, les procédures (ou fonctions) doivent être considérées comme des programmes autonomes. De ce fait :
– Elles n'utilisent que des variables locales– Elles n'utilisent pas de composants graphiques
(sauf si le composant fait partie des paramètres)
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
48
• La procédure demandée (un nombre entier est-il pair ou impair ?) devra donc communiquer avec le programme qui l'utilise.
• Pour répondre à la question la procédure devra donc :
– Connaître le nombre entier concerné,– Donner sa réponse.
• La communication entre la procédure (ou la fonction) se fera au travers d'une interface.
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
49
L'interface :
SEANCE 5
1
1 Le programme communique les données (ici le nombre entier) 2
2 La procédure récupère les données3
3 La procédure communique le résultat (le nombre est ou n'est pas pair)
4
4 Le programme récupère et utilise le résultat
ProgrammePrincipal
(ou appelant)
Procédure
Interface
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
50
Sub PairOuiOuNon(ByVal Nbre As Long, ByRef RepON As Boolean) RepON = False If Nbre Mod 2 = 0 Then RepON = True End IfEnd SubPrivate Sub BGenerer_Click()Dim OuiNon As BooleanDim Aleas As LongDim I As Integer Randomize Liste.Clear For I = 1 To 20 Aleas = Int(Rnd * 200) Call PairOuiOuNon(Aleas, OuiNon) If OuiNon = True Then Liste.AddItem (Aleas) NextEnd Sub
SEANCE 5
La valeur contenue par "ALEAS" est passée à la procédure
La procédure récupère la valeur d'ALEAS dans la variable NBRE. La procédure répond
par true ou false dans la variable RepON.
La réponse de la procédure est récupérée dans OUINON
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
51
Procédure (Syntaxe générale) La procédure :
Sub Nom_procedure (Paramètres )Ou Sub Nom_procedure ( )
Corps de la procédure
End Sub
Appel de la procédure :Call Nom_procedure(Paramètres)Ou Call Nom_procedure
SEANCE 5
Absence de paramètres
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
52
Procédure (Syntaxe détaillée)
Sub Nom_Procedure (ByVal NVar1 as type_NVar1, ByRef Nvar2 as type_NVar2,… ) (Récupération des valeurs de Var1 et Var2 dans NVar1 et
NVar2)Modifications éventuelles de NVar1 et NVar2
End Sub
Appel de la procédure :
(Initialisation de Var1 et Var2)Call Nom_Procedure (Var1, Var2,…)(Récupération de la valeur de NVar2 dans Var2. Par contre
Var1 n'est pas touchée par les modifications de NVar1)
SEANCE 5
Attention à l'ordre
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
53
Il est également possible d'appeler une procédure en précisant directement des valeurs.
Par exemple:Sub LaProc (Byval Age as integer, Byval Nom
as string) …….End Sub
Call LaProc (12, "Pierre")
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
54
Second exemple de procédure :
Exemple : Écrire une procédure qui calcule n !
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
55
Sub Factoriel(ByVal N As Long, ByRef Prod As Double) Dim I As Integer Prod = 1 For I = 1 To N Prod = Prod * I NextEnd Sub
Private Sub BFacto_Click() Dim Facto As Double Facto = 1 Call Factoriel(Val(Zn.Text), Facto) ZFacto.Text = Str(Facto)End Sub
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
56
Contre exemple : Passons les deux paramètres par valeur
Sub Factoriel(ByVal N As Long, ByVal Prod As Double) Dim I As Integer Prod = 1 For I = 1 To N Prod = Prod * I NextEnd Sub
Private Sub BFacto_Click() Dim Facto As Double Facto = 1 Call Factoriel(Val(Zn.Text), Facto) ZFacto.Text = Str(Facto)End Sub
SEANCE 5
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
57
Contre exemple : Passons les deux paramètres par valeur
SEANCE 5
La variable FACTO n'a pas été influencée par la procédure et à conserver sa valeur d'appel
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
58
Procédures et Fonctions
Les FONCTIONS jouent un rôle identique à celui des procédures, elles peuvent posséder des paramètres et retourner des résultats grâce à eux.
Deux différences néanmoins, les fonctions : Retournent obligatoirement un résultat. S'utilisent toujours dans une expression.
(De nombreuses fonctions du langage ont déjà été utilisées : Ucase, Lcase, Mid, Len, Sqr, Rnd, etc.)
SEANCE 6
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
59
Exemple de fonction :
SEANCE 6
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
60
Function Resultat(ByVal N As Long, ByVal Puis As Integer) As Long
Resultat = N ^ PuisEnd Function
Private Sub BCarre_Click() Dim I As Integer For I = Val(ZDebut) To Val(ZFin) Carre.AddItem (Resultat(I, 2)) NextEnd Sub
SEANCE 6
Private Sub BCube_Click() Dim I As Integer For I = Val(ZDebut) To Val(ZFin) Cube.AddItem (Resultat(I, 3)) NextEnd Sub
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
61
Syntaxe : La fonction :
Function Nom_Fonc (Paramètres éventuels)As type_du résultat
Corps de la fonction contenant au moins une fois l'instruction Nom_Fonc = ……..
End Function
Appel de la fonction :
Obligatoirement dans une expression. Par exemple :Variable = Nom_Fonc(…..) * P
Considérer le nom de la fonction comme un paramètre (ByRef)
SEANCE 6
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
62
AnnexeFunction Resultat(ByVal N As Long, ByVal Puis As Integer)
As Long Resultat = N ^ PuisEnd Function
Private Sub BCarre_Click() Dim I As Integer For I = Val(ZDebut) To Val(ZFin) Carre.AddItem (Resultat(I, 2)) NextEnd Sub
SEANCE 6
Private Sub BCube_Click() Dim I As Integer For I = Val(ZDebut) To Val(ZFin) Cube.AddItem (Resultat(I, 3)) NextEnd Sub
En conservant les 2 boutons, les 2 procédures peuvent-elles se réunir en une seule ?
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
63
AnnexeCréer un bouton puis
le copier et le coller afin d'obtenir un groupe de composants indicés
SEANCE 6
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
64
Annexe
Function Resultat(ByVal N As Long, ByVal Puis As Integer) As Long Resultat = N ^ PuisEnd Function
Private Sub Btn_Click(Index As Integer) Dim I As Integer For I = Val(ZDebut) To Val(ZFin) Select Case Index Case 0 Carre.AddItem (Resultat(I, 2)) Case 1 Cube.AddItem (Resultat(I, 3)) End SelectNextEnd Sub
SEANCE 6
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
65
Les TABLEAUX
Un tableau est une structure de données qui permet de stocker en mémoire des informations généralement de même type. Chaque valeur est repérée dans le tableau par un indice qui indique sa position.
Un tableau est une variable complexe.
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
66
Représentation d'un tableau à une dimension :Nom du tableau : PRIX
SEANCE 7
12.5 1.6 15 12.1 16.9 1.24 8.4 9.0 0.60 22.8 3.45
1 2 3 4 5 6 7 8 9 10 11
Ce tableau contient des réels.
Il contient 11 éléments.
Le Nème élément sera noté PRIX(N) c'est à dire
Nom_du_tableau (Numéro_de_l'élément)
Exemple : la valeur du 7ème élément, noté PRIX(7) est 8.4
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
67
Un tableau doit être DECLARE puis INITIALISE avant d'être EXPLOITE.
DECLARATION :
PRIVATE (ou DIM) PRIX ( 1 TO 11 ) AS SINGLE
SEANCE 7
Nom du tableauValeur inférieure
de l'indiceValeur supérieure
de l'indice
Type de la donnée contenue par le tableau
Les indices commencent généralement à 1 ou à 0
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
68
DECLARATION : (autres exemples)
DIM SEMAINE (1 TO 7) AS STRING
DIM AGE (0 TO 15) AS INTEGER
DIM REPONSE (0 TO 20) AS BOOLEAN
DIM CACLIENT (1 TO 358) AS DOUBLE
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
69
INITIALISATION :Un tableau étant une structure implantée en mémoire
centrale (comme une variable simple), il est obligatoire de l'initialisée (le remplir) au début de chaque programme. Cette opération peut se faire :– Manuellement (saisie par l'utilisateur dans une
zone de texte puis affectation au tableau)– Automatiquement
• A l'activation du programme• A partir d'un source de sauvegarde (fichier).
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
70
A l'activation du programme :
Private AGE(0 To 5) As IntegerPrivate Sub Form_activate() AGE(0) = 5 AGE(1) = 12 AGE(2) = 3 AGE(3) = 45 AGE(4) = 48 AGE(5) = 16End Sub
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
71
Saisie par l'utilisateur puis affectée au tableau :Soit Zsaisie un TextBox et I = 3
AGE(I) = Val(Zsaisie.Text)permettra d'affectée la valeur saisie dans la zone
Zsaisie au troisième élément du tableau AGE.
Remplissage aléatoireDIM NBRE(1 TO 10) AS DOUBLERANDOMIZEFOR J=1 TO 10
NBRE(J) = INT(RND*100)NEXT
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
72
Cas particulier : L'indice peut lui-même avoir une signification dans le contexte traité. Par exemple :
DIM EFFECTIF (1 TO 45) AS LONGEFFECTIF est un tableau dans lequel le Néme élément
contient le nombre de personnes ayant l'âge N (l'indice correspond à la classe d'âge).
Soit ZAge et ZEffectif, deux TextBoxEFFECTIF(Val(ZAge.text)) = Val(ZEffectif.Text)
Permet d'affecter l'effectif (saisi dans ZEffectif) à la classe d'âge correspondante (saisi dans ZAge)
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
73
EXPLOITATION : L'exploitation peut se faire :
DIRECTEMENT en accédant directement à l'élément en utilisant son indice :
Liste.AddItem = Str(AGE(6))EFFECTIF(Val(ZAge.text)) = Val(ZEffectif.Text)
INDIRECTEMENT en parcourant le tableau soit pour utiliser toutes les données soit pour rechercher une valeur dont on ne connaît pas l'indice.
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
74
Exemples :DIM EFFECTIF (1 TO 45) AS LONG
• Combien de personnes ont 28 ans :ZONE.TEXT = STR(EFFECTIF(28))
• Quel est l'effectif total de la population ?FOR I = 1 TO 45 TOTAL = TOTAL + EFFECTIF(I)NEXTZONE.TEXT = STR(TOTAL)
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
75
Quel est la première classe d'âge ayant un effectif supérieur ou égal à 2000 ?FOR I=1 TO 45
IF EFFECTIF(I) >= 2000 THENZAGE.TEXT = STR(I)ZEFFECTIF.TEXT = STR(EFFECTIF(I))
END IFNEXT
SEANCE 7
Mauvaise solution car obtient la dernière classe d'âge et non la première.
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
76
Quel est la première classe d'âge ayant un effectif supérieur ou égal à 2000 ?I=1TROUVE = FALSEDO WHILE TROUVE = FALSE AND I <= 45
IF EFFECTIF(I) >= 2000 THEN TROUVE = TRUEI=I+1
LOOPIF TROUVE = TRUE THEN ZAGE.TEXT = STR(I-1)
ZEFFECTIF.TEXT = STR(EFFECTIF(I-1)END IF
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
77
Quel est la première classe d'âge ayant un effectif supérieur ou égal à 2000 ? (autre solution)I=1DO WHILE EFFECTIF(I) < 2000 AND I <= 45
I=I+1LOOPIF I <= 45 THEN ZAGE.TEXT = STR(I-1)
ZEFFECTIF.TEXT = STR(EFFECTIF(I-1)END IF
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
78
Les tableaux à 2 dimensions
Ces tableaux se définissent à l'aide de 2 coordonnées, le premier représentant la ligne, le second la colonne. Par exemple :
SEANCE 7
A R
MQ W
Z
P RO F
K
X
1
3
32 4
2
1
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
79
Ce tableau nommé "LETTR" se déclarera de la façon suivante :PRIVATE LETTR (1 TO 3, 1 TO 4) AS STRING
SEANCE 7
A R
MQ W
Z
P RO F
K
X
1
3
32 4
2
1
LIGNE 1 à 3 COLONNE de 1 à 4
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
80
L'accès aux éléments se fera ainsi :LETTR( 2 , 3 )
SEANCE 7
A R
MQ W
Z
P RO F
K
X
1
3
32 4
2
1
Coordonnée de la ligne Coordonnée de la colonne
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
81
Parcours d'un tableauLe parcours d'un tableau se fera à l'aide de deux
structures répétitives imbriquées, par exemple :
PRIVATE VOLUME(1 TO 12, 1 TO 15) AS DOUBLE
RANDOMIZEFOR L = 1 TO 12 FOR C = 1 to 15 VOLUME(L,C)=RND*250 NEXT CNEXT L
SEANCE 7
Y.Grusson IUT Génie CivilUniversité Joseph Fourier
82
Séance deREVISION
et de Synthèse
SEANCE 8
Top Related