Exercice VB: Table des Produits
Rédigé par GC Team, Publié le 02 Janvier 2012, Mise à jour le Vendredi, 16 Décembre 2022 22:36![](/images/thumb/146/default.png)
Objectif :
Travailler avec les Tableaux à deux dimensions.
Travail à Faire :
- Faire un programme permettant de calculer d'afficher la table des produits pour N variant de 1 à 10 :
X * Y |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
2 |
2 |
4 |
6 |
8 |
10 |
12 |
14 |
16 |
18 |
20 |
|
3 |
3 |
6 |
9 |
12 |
15 |
18 |
21 |
24 |
27 |
30 |
|
4 |
4 |
8 |
12 |
16 |
20 |
24 |
28 |
32 |
36 |
40 |
|
5 |
5 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
|
6 |
6 |
12 |
18 |
24 |
30 |
36 |
42 |
48 |
54 |
60 |
|
7 |
7 |
14 |
21 |
28 |
35 |
42 |
49 |
56 |
63 |
70 |
|
8 |
8 |
16 |
24 |
32 |
40 |
48 |
56 |
64 |
72 |
80 |
|
9 |
9 |
18 |
27 |
36 |
45 |
54 |
63 |
72 |
81 |
90 |
|
10 |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
100 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Module Module1 Dim i, j As Integer Sub Main() Dim T(10, 10) As Integer For i = 0 To 10 For j = 0 To 10 t(i, j) = i * j Next Next Console.WriteLine("X * Y 0 1 2 3 4 5 6 7 8 9 10") For i = 0 To 10 For j = 0 To 10 Console.Write(T(i, j) & " ") Next Console.WriteLine(" ") Next Console.ReadLine() End Sub End Module |
Exercice VB: Choix de catégorie
Objectif:
Etre capable de créer le code vb avec les instructions répétitives
Enoncé:
Ecrire le code VB qui permet de Demander à l’utilisateur d’entrer l’âge et vérifie la catégorie si :
- Age >= 12 alors on écrit que la catégorie est cadette
- Age >= 10 alors on écrit que la catégorie est Minimu
- Age >= 8 alors on écrit que la catégorie est pupille
- Age >= 6 alors on écrit que la catégorie est poussin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Module age Sub Main() Dim age As Integer Dim rep As String Do Console.WriteLine("entrer l'age") age = Console.ReadLine() If age >= 12 Then Console.WriteLine("la catégorie est cadette") Console.ReadLine() ElseIf age >= 10 Then Console.WriteLine("la catégorie est Minimu") Console.ReadLine() ElseIf age >= 8 Then Console.WriteLine("la catégorie est pupille") Console.ReadLine() ElseIf age >= 6 Then Console.WriteLine("la catégorie est poussin") Console.ReadLine() End If Console.WriteLine("voulez-vous contunuer O/N") rep = Console.ReadLine Loop Until rep = "N" Console.ReadLine() End Sub End Module |
Exercice VB: Classe Stagiaire
Suite au deux exercices "Classe Formateur" et "Class Individu"
On dérive la classe Individu déjà vue par une classe Stagiaire
En plus des données membres Individu, la classe Stagiaire a comme données membres privées:
Filière
Moyenne générale
6. Construire la classe Stagiaire qui hérite de la classe Individu
7. Au niveau de la Classe de Test :
Prévoir deux Stagiaires et les instancier avec les constructeurs adéquats.
8. On souhaite Enregistrer des objets Stagiaires dans un fichier.
9. Ecrire des procédures de mise a jour de ce fichier :
3.1 Ajout
3.2 Modification
3.3 Suppression
10. Prévoir une procédure qui permet de recopier les enregistrements du fichier vers un Vecteur.
11. afficher à partir du vecteur les Stagiaires ayant une moyenne >=10.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
Public Class Stagiaire Inherits Individu Private Filière As String Private Moy_G As Double Property _Filière() As String Get Return Filière End Get Set(ByVal value As String) Filière = value End Set End Property Property _Moy_G() As Double Get Return Moy_G End Get Set(ByVal value As Double) Moy_G = value End Set End Property Public Sub New() End Sub Public Sub New(ByVal C As String, ByVal n As String, ByVal P As String, ByVal A As String, ByVal F As String, ByVal MG As Double) MyBase.New(C, n, P, A) _Filière = F _Moy_G = MG End Sub Public Overrides Sub afficher() MyBase.afficher() Console.WriteLine(_Filière & vbTab & _Moy_G) End Sub End Class Public Class test Public Sub New() Console.WriteLine("******** [Programme de teste] ************") Console.WriteLine() Console.WriteLine("----------------------------------------------------------") Console.WriteLine() Console.WriteLine(" ----STAGIAIRE----") Console.WriteLine() Dim stagiaire1 As New Stagiaire("AA190", "Alali", "Marwa", "Hay Nahda II", "TDI", 15.75) Dim stagiaire2 As New Stagiaire("BB198", "Alawi", "Sara", "Rue imam malek suissi rabat", "TDI", 19) stagiaire1.afficher() Console.WriteLine() stagiaire2.afficher() Console.WriteLine() Console.WriteLine() Console.WriteLine("-----------------------------------------------------------") Console.ReadLine() End Sub End Class Module Module1 Dim st As New ArrayList Sub Main() Dim x As New test Dim k = New Stagiaire("AA123", "Alami", "Fadwa", "hay nahda", "TDI", 19) st.Add(k) FileOpen(1, "naziha.txt", OpenMode.Output) Dim i As Integer For i = 0 To st.Count - 1 PrintLine(1, k._NumCin & "/" & k._nom & "/" & k._prénom & "/" & k._Adresse & "/" & k._Filière & "/" & k._Moy_G) Next FileClose() Dim num, nom, prénom, adresse, filière As String Dim moye As Double Console.WriteLine("saisire le numCin du stagiairz") num = Console.ReadLine Console.WriteLine("saisire le nom du stagiaire") nom = Console.ReadLine Console.WriteLine("saisire le prénom du stagiaire") prénom = Console.ReadLine Console.WriteLine("saisire l'adresse du stagiaire") adresse = Console.ReadLine Console.WriteLine("saisire le filière du stagiaire") filière = Console.ReadLine Console.WriteLine("saisire la moyenne du stagiaire") moye = Console.ReadLine ajout(num, nom, prénom, adresse, filière, moye) copier() End Sub Sub ajout(ByVal num As String, ByVal nom As String, ByVal prénom As String, ByVal adresse As String, ByVal filière As String, ByVal moye As Double) Dim stag = New Stagiaire(num, nom, prénom, adresse, filière, moye) st.Add(stag) FileOpen(1, "naziha.txt", OpenMode.Append) Dim i As Integer For i = 0 To st.Count - 2 PrintLine(1, stag._NumCin & "/" & stag._nom & "/" & stag._prénom & "/" & stag._Adresse & "/" & stag._Filière & "/" & stag._Moy_G) Next FileClose() End Sub Sub copier() Dim R(), lin As String FileOpen(1, "naziha.txt", OpenMode.Input) While Not EOF(1) lin = LineInput(1) R = Split(lin, "/") FileClose(1) End While For i = 0 To R.GetUpperBound(0) Console.WriteLine(R(i) & vbTab) Next End Sub End Module |
Exercice VB: Class Formateur
Suite à l'exercice " Class Individu"
On dérive la classe Individu déjà vue par une classe Formateur
En plus des données membres Individu, la classe Formateur a comme données membres privées :
Masse horaire effective
Heure supplémentaire
Taux horaire effectif
Taux horaire supplémentaire
La méthode CalculSalaire () intègre un mode de calcul comme suit :
CalculSalaire = (Masse horaire effectif* taux horaire effectif) +
(Heure supplémentaire* taux horaire supplémentaire)
4. Construire la classe Formateur qui hérite de la classe Individu
5. Au niveau de la Classe de Test :
- Prévoir deux Formateurs et les instancier avec les constructeurs adéquats.
- Les afficher notamment CalculSalaire ( ).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
Public Class Formateur Inherits Individu Private MassH As Double Private Heur_Sup As Double Private Taux_H_Effec As Double Private taux_H_Sup As Double Property _MassH() As Double Get Return MassH End Get Set(ByVal value As Double) MassH = value End Set End Property Property _Heur_Sup() As Double Get Return Heur_Sup End Get Set(ByVal value As Double) Heur_Sup = value End Set End Property Property _Taux_h_effec() As Double Get Return Taux_H_Effec End Get Set(ByVal value As Double) Taux_H_Effec = value End Set End Property Property _taux_H_Sup() As Double Get Return taux_H_Sup End Get Set(ByVal value As Double) taux_H_Sup = value End Set End Property Sub New() End Sub Public Sub New(ByVal N As String, ByVal No As String, ByVal P As String, ByVal A As String, ByVal M As Double, ByVal HS As Double, ByVal THE As Double, ByVal THS As Double) MyBase.New (N, No, P, A) _MassH = M _Heur_Sup = HS _Taux_h_effec = THE _taux_H_Sup = THS End Sub Public Sub New(ByVal M As Double, ByVal HS As Double, ByVal THE As Double, ByVal THS As Double) _MassH = M _Heur_Sup = HS _Taux_h_effec = THE _taux_H_Sup = THS End Sub Sub CalculSalaire() Console.WriteLine((MassH * Taux_H_Effec) + (Heur_Sup / taux_H_Sup)) End Sub Public Overrides Sub afficher() MyBase.afficher() Console.WriteLine(MassH & vbTab & Heur_Sup & vbTab & Taux_H_Effec & vbTab & taux_H_Sup) End Sub End Class --------------------------------------------------------------------------------------------------------- Public Class test Public Sub New() Console.WriteLine("******** [Programme de teste] ************") Console.WriteLine() Console.WriteLine("----------------------------------------------------------") Console.WriteLine(" ----FORMATEURS---") Console.WriteLine() Dim formateur1 As New Formateur(20, 40, 70, 33) Dim formateur2 As New Formateur(70, 22, 80, 65) Console.WriteLine("Salaire du premier formatteur" & vbTab & vbTab) formateur1.CalculSalaire() Console.WriteLine("Salaire du deuxième formatteur" & vbTab & vbTab) formateur2.CalculSalaire() Console.WriteLine() Console.WriteLine() Console.WriteLine("-----------------------------------------------------------") End Sub End Class |
Exercice VB: Éditeur simplifié d'une matrice
Sous Windows, une icône est constituée de petits points juxtaposés formant une image. Chacun de ces points peut avoir une couleur choisie parmi un nombre souvent limité de couleurs "standard". On appelle cette gamme de possibilités une palette. Un éditeur d'icônes a donc pour premier rôle de permettre à l'utilisateur de placer des points de différentes couleurs dans une grille agrandie représentant une matrice de points. Ils formeront plus tard l'image de l'icône.
Programme demandé :
On se propose ici de réaliser un éditeur simplifié d'une matrice de 16 x 16 carrés. On pourra en cliquant sur l'un d'entre eux y placer une couleur choisie dans une palette située à sa droite (voir exemple ci-dessous). Il ne sera pas demandé de prévoir la lecture ou la sauvegarde de ces points dans un fichier. En revanche, toutes ces valeurs seront stockées dans un tableau (nommé grille) de 256 éléments de type entiers.
- Interface (voir exemple ci-dessous):
- Une zone image (objet PictureBox – voir note en bas de page) pour y dessiner votre grille
- Une autre zone image pour y dessiner la palette
- Bouton Effacer pour effacer le pictogramme et "vider" le tableau
- Le code d'affichage initial sera placé dans Form_Activate et débutera par l'instruction DoEvents
- La grille ou image principale (nommée par défaut Picture1) devra être quadrillée à l'aide de petits carrés représentant chacun un pavé de couleur. Pour obtenir ce type de carrés, on utilisera l'instruction line précédée de deux autres commandes ayant pour but de changer le mode de remplissage des rectangles (propriété .FillStyle = 0) et d'en spécifier la couleur (propriété .FillColor). Le cadre est dessiné par défaut en noir, avec par exemple: Picture1.line (x1,y1)-(x2,y2) , , B
- Pour choisir une couleur dans la palette, cliquez simplement sur le carré rempli avec la couleur correspondante. A l'aide de l'événement MouseDown de chacun des objets Picture, vous pourrez repérer les positions X et Y de la souris pour déterminer la case visée. Un choix judicieux de la propriété Scale vous simplifiera grandement la tâche. Les 16 couleurs de la palette correspondent aux 16 valeurs possibles pour la fonction QBColor.
- Le bouton Effacer aura pour but de réinitialiser le tableau (nommé grille) et d'effacer les cases de la grille en les remplissant de blanc.
Note:
Pour dessiner dans un objet Picture, on peut utiliser les instructions classiques précédées du nom de l'objet en question. Par exemple : |
Picture1.Scale (Xmin,Ymax)-(Xmax,Ymin) |
Conseil:
Pour la gestion de la souris, essayez donc d'utiliser les événements MouseDown et MousMove sur les objets Picture1 ou Picture2, plutôt que l'événement Click
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Dim grille (1 To 16, 1 To 16) As Integer Dim pal (1 To 16) As Integer Dim couleur As Integer Private Sub Bouton_Effacer_Click() Form_Activate End Sub Private Sub Form_Activate() Dim i As Integer, j As Integer DoEvents '1) Echelle de la grille Picture1.Scale (0, 16)-(16, 0) '2) Initialisation de la grille et affichage initial Picture1.FillStyle = 0 couleur = 15 'Blanc Picture1.FillColor = QBColor(couleur) 'On pourrait aussi utiliser VBWhite avec VB5 For i = 1 To 16 'pour X For j = 1 To 16 'pour Y grille(i, j) = couleur Picture1.Line (i - 1, j - 1)-(i, j), , B Next j Next i 'Définition de l'échelle de la palette Picture2.Scale (0, 16)-(1, 0) Picture2.FillStyle = 0 For i = 1 To 16 Picture2.FillColor = QBColor(i - 1) Picture2.Line (0, i - 1)-(1, i), , B Next i End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) grille(Int(X), Int(Y)) = couleur Picture1.Line (Int(X), Int(Y))-(Int(X) + 1, Int(Y) + 1), , B End Sub Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button 0 Then Picture1_MouseDown Button, Shift, X, Y End Sub Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) couleur = Int(Y) Picture1.FillColor = QBColor(couleur) End Sub |
Exercices de programmation avec le langage VB
Exercice VB: Media Player
Ecrire le programme qui permet de réaliser l'interface suivante:
Remarque: la boutton Player = Ouvrire un nouveau fichier contenant des médiats
Solution :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdplay.Click OpenFileDialog1.ShowDialog() Player.URL = OpenFileDialog1.FileName End Sub Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub Private Sub Media_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) 'Dim pt As Point = Label2.Location 'pt.Offset(0, Label2.Height) 'Stagiaires.Show(Me, pt) End Sub End Class |
Exercice VB: Examen de Visual Basic 2ème session
Solution :
Exercice Visual Basic : ListBox
Ecrire le code VB qui permet de réaliser l'interface suivante:
Solution :
![ExerciceVB-id2130](/images/stories/VB/ExerciceVB-id2130.jpg)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Public Class Form1 Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged TextBox3.Text = ListBox1.Items.Count TextBox4.Text = ListBox1.SelectedIndex TextBox5.Text = ListBox1.Text End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ListBox1.Items.Clear() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Add(TextBox1.Text) TextBox1.Text = "" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Val(TextBox2.Text) <= ListBox1.Items.Count - 1 Then ListBox1.SelectedIndex = CInt(TextBox2.Text) Else MsgBox("L'élément rechercher est introuvable!") End If End Sub End Class |
Exercice Visual Basic : Editer Facture
Solution :
![ExerciceVB-id2120](/images/stories/VB/ExerciceVB-id2120.jpg)
Exercice VB: Interface calculator
Ecrire le programme qui permet de réaliser l'interface suivante:
- Ajouter une Méthode qui permet de vérifier si lle variable entré dans les zones de textes 1 et 2 sont un caractère ou un nombre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Public Class Form1 Private Sub btncalcul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncalcul.Click If Not IsNumeric(TextBox1.Text) Then MsgBox("vous devez saisir un nomdre valide") : TextBox1.Focus() : Exit Sub If Not IsNumeric(TextBox2.Text) Then MsgBox("vous devez saisir un nomdre valide") : TextBox2.Focus() : Exit Sub lblsom.Text = CDbl(TextBox1.Text) + CDbl(TextBox2.Text) End Sub Private Sub btnvider_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnvider.Click TextBox1.Text = "" TextBox2.Text = "" lblsom.Text = "" End Sub Private Sub btnqter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnqter.Click If MessageBox.Show("voulez vous quiter l'application", "fin", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then End End Sub Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 'Select Case e.KeyChar ' Case "0" To "9" ' Case Else ' e.Handled = True 'End Select 'Label4.Text = e.KeyChar 'Label5.Text = Asc(e.KeyChar) Select Case Asc(e.KeyChar) Case 8, 48 To 57 Case 13 SendKeys.Send("{tab}") Case Else e.Handled = True End Select End Sub End Class |
Exercice VB: L'addition de deux matrices A et B de mêmes dimensions N et M
Objectif :
Travailler avec les Tableaux à deux dimensions.
Travail à Faire :
Ecrire un programme qui réalise l'addition de deux matrices A et B de mêmes dimensions N et M.
Exemple :
/ \ / \ / \
| a b c d | | a' b' c' d | | a + a' b + b' c + c' d + d |
| e f g h | + | e' f' g' h'| = | e + e' f + f' g + g' h + h' |
| i j k l | | i' j' k' l' | | i + i' j + j' k + k' l + l' |
\ / \ / \ /
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Module Module1 Dim i, j, N, M As Integer Sub Main() Console.Write(" N : ") N = Console.ReadLine Console.Write(" M : ") M = Console.ReadLine Dim A(N, M) As String Dim B(N, M) As String Dim A_B(N, M) As String For i = 0 To N - 1 For j = 0 To M - 1 Console.Write("A(" & i + 1 & " ; " & j + 1 & ") = ") A(i, j) = Console.ReadLine Next Next Console.WriteLine(" ") For i = 0 To N - 1 For j = 0 To M - 1 Console.Write("B(" & i + 1 & " ; " & j + 1 & ") = ") B(i, j) = Console.ReadLine Next Next For i = 0 To N - 1 For j = 0 To M - 1 A_B(i, j) = A(i, j) & " + " & B(i, j) Next Next For i = 0 To N - 1 For j = 0 To M - 1 Console.Write(A_B(i, j) & " ") Next Console.WriteLine(" ") Next Console.ReadLine() End Sub End Module |
Exercice VB: La structure REPETER
Travail à Faire :
- Ecrire un programme qui demande successivement des nombres à l’utilisateur, et qui calcule le nombre de valeurs saisies. La saisie des nombres s’arrête lorsque l’utilisateur entre le caractère « n » ou « N ».
- Ecrire un programme qui demande successivement des nombres à l’utilisateur, et qui calcule leur moyenne. La saisie des nombres s’arrête lorsque l’utilisateur entre un zéro.
- Modifiez le programme de l’exercice 1, de façon qu’il nous renseigne sur le nombre des valeurs positives et sur le nombre des valeurs négatives. Ne comptez pas les valeurs nulles.
- Ecrire un programme qui lit les caractères saisies par l’utilisateur. A la fin ce programme nous affichera la phrase saisie. La saisie des caractères s’arrête lorsqu’on tape point «. ». Pour l’utilisateur veut insérer un espace il lui suffit de tapez sur 0. Par exemple si l’utilisateur tape successivement les caractères « b », « o », « n », « j », « o », « u », « r », « t », « o », « u », « s », «.», il nous affichera la chaîne « bonjourtous ». Mais si il tape « b », « o », « n », « j », « o », « u », « r », « 0 », « t », « o », « u », « s », « . » , le programme affichera « bonjour tous ».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
1. Module Module1 Dim a, Compteur As Integer Dim Reponse As String Sub Main() Compteur = 0 Do Console.Write("Entrez un nombre : ") a = Console.ReadLine Compteur = Compteur + 1 Console.Write("Voulez-vous continuez O/N ? : ") Reponse = Console.ReadLine Loop Until (Reponse = "n" Or Reponse = "N") Console.Write("Le nombre de valeurs saisies est : " & Compteur) Console.ReadLine() End Sub End Module 2. Module Module1 Dim a, Somme, Moyenne, Compteur As Integer Sub Main() Compteur = 0 Somme = 0 Do Console.Write("Entrez un nombre : ") a = Console.ReadLine Compteur = Compteur + 1 Somme = Somme + a Loop Until (a = 0) Moyenne = Somme / (Compteur - 1) Console.Write("La moyenne de valeurs saisies est : " & Moyenne) Console.ReadLine() End Sub End Module 3. Module Module1 Dim a, Npos, Nneg As Integer Dim Reponse As String Sub Main() Npos = 0 Nneg = 0 Do Console.Write("Entrez un nombre : ") a = Console.ReadLine If a > 0 Then Npos = Npos + 1 ElseIf a < 0 Then Nneg = Nneg + 1 End If Console.Write("Voulez-vous continuez O/N ? : ") Reponse = Console.ReadLine Loop Until (Reponse = "n" Or Reponse = "N") Console.WriteLine("Le nombre de valeurs positives saisies est : " & Npos) Console.WriteLine("Le nombre de valeurs positives saisies est : " & Nneg) Console.ReadLine() End Sub End Module 4. Module Module1 Dim Caractere, Phrase As String Sub Main() Phrase = "" Do Console.Write("Entrez une caractère : ") Caractere = Console.ReadLine If Caractere = "0" Then Caractere = " " End If Phrase = Phrase + Caractere Loop Until (Caractere = ".") Console.WriteLine("La phrase résultante est : " & Phrase) Console.ReadLine() End Sub End Module |
Exercice VB: La taupe
Le principe:
On se propose d'écrire un programme permettant à un pointeur aveugle (la taupe) de trouver son chemin à travers une grille de 10x10 cases. A l'aide de la souris, vous choisirez une case de départ en cliquant sur celle-ci. A partir de cette case, il devra essayer aléatoirement de se déplacer sur une case libre touchant un de ses côtés immédiats (gauche, droite haut ou bas, mais jamais en diagonale), jusqu'à atteindre la case d'arrivée (10, 10). Il marquera son passage en coloriant chaque case en bleu et en la marquant du numéro de son pas. Une case sur laquelle il est déjà passé n'est pas considérée comme libre – sinon il pourrait tourner en rond… Si aucune case n'est libre autour de lui, elle sera coloriée en rouge, car c'est une impasse. Il devra alors reculer d'un pas et chercher un autre passage.
Programme demandé:
- Interface (voir exemple ci-dessous):
- Le dessin se fera sur la feuille même – le fond utilisé sera celui par défaut
- Au lancement, le programme devra dessiner une grille de 10 x 10 occupant tout l'espace imprimable de la feuille. Il faudra choisir une échelle appropriée.
- Aucun menu, aucun bouton. Seul le click de la souris sur la feuille sera intercepté. Pour des raisons pratiques, nous n'utiliserons d'ailleurs pas l'événement Click mais l'événement MouseDown.
- Vous devrez déclarer deux tableaux T et P et une variable C , utilisables par toutes les procédures:
- Un tableau T (10, 10) de type long qui contiendra la couleur pour chaque case.
- Un tableau P (100) de type XY - à définir dans un module séparé. Ce type se composera de deux entiers nommés X et Y. On stockera ainsi en P les coordonnées de chaque point du parcours de la "taupe" depuis le point de départ jusqu'en (10,10).
- Un entier C contiendra en permanence l'indice de la position de notre "taupe" dans P. Ainsi, dans l'exemple illustré ci-dessous, pour C = 5 on aurait P(C).X = 3 et P(C).Y = 3 . En principe, C devrait toujours augmenter de 1 à chaque progression de notre taupe, sauf quand celle-ci s'est engagée dans une impasse et doit par conséquent reculer successivement jusqu'à la dernière position offrant au moins une liberté de mouvement non-exploitée.
- Vous devrez écrire une fonction Impasse de type Boolean définie comme suit :
- Elle doit renvoyer True (vrai) par défaut. On déclare ainsi que l'on est dans une impasse, à moins de découvrir qu'une des 4 cases limitrophes de la position courante P(C) est libre. Pour savoir si une case est "libre", il suffit de s'assurer que sa couleur est à 0, valeur attribuée par défaut à tout élément du tableau T lors de sa création. Bien sûr, on ne teste que les cases limitrophes qui se situent à l'intérieur des limites physiques du tableau (X ou Y entre 0 et 10)
- Si l'une de ces cases légitimes est libre, elle renvoie alors False (faux)
- Vous devrez écrire une procédure marquée recevant l'argument couleur de type long comme suit :
- Elle aura pour but de "marquer" la case courante P(C) avec la couleur passée en argument en utilisant la méthode line …, couleur, BF
- Elle imprimera la valeur de C sur cette même case.
Rappel: vous pouvez ajuster la position du curseur graphique avec Form1.CurrentX et Form1.CurrentY, puis imprimer avec Form1.Print
- Comme expliqué plus haut, l'essentiel du programme sera écrit dans Form_MouseDown :
- On initialise C à 1 et P(C) avec les valeurs choisies par la souris. Cette case sera marquée avec VbGreen
- On effectue une boucle qui ne s'arrêtera que lorsque l'on sera arrivé en (10,10) :
Après avoir traité le cas d'une impasse (case à marquer avec VbRed), on propose aléatoirement une nouvelle case limitrophe (voir l'astuce ci-dessous). Si celle-ci est acceptable et libre, alors on s'y déplace et elle est marquée avec VbBlue.
Astuce: Pour chercher une nouvelle case où aller, vous pouvez vous inspirer de l'exemple ci dessous :
r = Int (Rnd * 4) * 1.57
Xnew = p(c).X + CInt (Cos(r))
Ynew = p(c).Y + CInt (Sin(r))
En cliquant sur (3,1), on peut obtenir :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
Dim t(1 To 10, 1 To 10) As Long Dim p(1 To 100) As XY 'Parcours Dim c As Integer 'déplacement Courant (n ième Coup) Private Sub Form_Activate( ) Dim i As Integer Form1.Scale (-0.01, -0.01) - (10.01, 10.01) For i = 0 To 10 Form1.Line (i, 0) - (i, 10) Form1.Line (0, i) - (10, i) Next i End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim r As Double Dim Xnew As Integer, Ynew As Integer Randomize c = 1 p(c).X = Int(X) + 1 p(c).Y = Int(Y) + 1 marquer vbGreen Do If impasse Then marquer vbRed If c = 1 Then MsgBox "Aucune solution !!!" Exit Do Else 'reculer d'un pas c = c - 1 End If Else ' Il existe donc au moins une solution r = Int(Rnd * 4) * 1.57 'Choix aléatoire de la direction en radians Xnew = p(c).X + CInt(Cos(r)) Ynew = p(c).Y + CInt(Sin(r)) If Xnew > 0 And Xnew <= 10 And Ynew > 0 And Ynew <= 10 Then 'pas hors-cadre If t(Xnew, Ynew) = 0 Then 'case vide c = c + 1 p(c).X = Xnew p(c).Y = Ynew marquer vbBlue End If End If End If Loop Until p(c).X = 10 And p(c).Y = 10 End Sub Sub marquer(couleur As Long) t(p(c).X, p(c).Y) = couleur Form1.Line (p(c).X - 1, p(c).Y - 1)-(p(c).X, p(c).Y), couleur, BF Form1.CurrentX = p(c).X - 1 Form1.CurrentY = p(c).Y - 1 Form1.Print c End Sub Function impasse() As Boolean impasse = True If p(c).X + 1 <= 10 Then If t(p(c).X + 1, p(c).Y) = 0 Then impasse = False If p(c).X - 1 > 0 Then If t(p(c).X - 1, p(c).Y) = 0 Then impasse = False If p(c).Y + 1 <= 10 Then If t(p(c).X, p(c).Y + 1) = 0 Then impasse = False If p(c).Y - 1 > 0 Then If t(p(c).X, p(c).Y - 1) = 0 Then impasse = False End Function Code à placer dans un module : Public Type XY X As Integer Y As Integer End Type |
Exercice VB: Les Suites
Objectif :
Travailler avec les Suites et Fonctions.
Travail à Faire :
1. Donnez un programme pour calculer :
S = 30 + 31 + 32 + ……. + 3n-1
2. Donnez un programme pour calculer :
S = 1 + X2 + X4 +…... + X2n
3. Donnez un programme pour calculer :
S = 1 + 1/2 + 1/3 + …………+ 1/n
4. Donnez un programme pour calculer :
S = 1 + 1/2 + 1/4 + 1/6 + …….. + 1/2n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
1. Module Module1 Dim P, i, S As Integer Sub Main() Console.Write("Entrez la puissance : ") P = Console.ReadLine S = 0 For i = 1 To P S = S + (3 ^ (i - 1)) Next Console.Write("S est : " & S) Console.ReadLine() End Sub End Module 2. Module Module1 Dim P, i, S, X As Integer Sub Main() Console.Write("Entrez la Valeur de x : ") X = Console.ReadLine Console.Write("Entrez la puissance : ") P = Console.ReadLine S = 0 For i = 0 To P S = S + (X ^ (i * 2)) Next Console.Write("S est : " & S) Console.ReadLine() End Sub End Module 3. Module Module1 Dim N, i, S As Double Sub Main() Console.Write("Entrez la valeur de N : ") N = Console.ReadLine S = 0 For i = 1 To N S = S + (1 / i) Next Console.Write("S est : " & S) Console.ReadLine() End Sub End Module 4. Module Module1 Dim N, i, S As Double Sub Main() Console.Write("Entrez la valeur de N : ") N = Console.ReadLine S = 1 For i = 1 To N S = S + (1 / (2 * i)) Next Console.Write("S est : " & S) Console.ReadLine() End Sub End Module |