Exercice VB: Table des Produits

Objectif :

Travailler avec les Tableaux à deux dimensions.

Travail à Faire :

  1. 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

1234567891011121314151617181920Module Module1Dim i, j As IntegerSub Main()Dim T(10, 10) As IntegerFor i = 0 To 10For j = 0 To 10t(i, j) = i * jNextNextConsole.WriteLine("X * Y 0 1 2 3 4 5 6 7 8 910")For i = 0 To 10For j = 0 To 10Console.Write(T(i, j) & " ")NextConsole.WriteLine(" ")NextConsole.ReadLine()End SubEnd 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
123456789101112131415161718192021222324252627Module 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 SubEnd 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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105Public 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 SubEnd ClassPublic 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 SubEnd 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 IntegerFor 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 SubEnd 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 ( ).

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283Public 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 SubEnd 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 SubEnd 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.

  1. 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
  1. Le code d'affichage initial sera placé dans Form_Activate et débutera par l'instruction DoEvents
  2. 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
  3. 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.
  4. 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)
Picture1.Cls
Picture1.Line (X1,Y1) - (X2,Y2)

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

1234567891011121314151617181920212223242526272829303132333435363738394041Dim grille (1 To 16, 1 To 16) As Integer Dim pal (1 To 16) As Integer Dim couleur As IntegerPrivate Sub Bouton_Effacer_Click() Form_ActivateEnd SubPrivate 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 iEnd SubPrivate 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), , BEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button 0 Then Picture1_MouseDown Button, Shift, X, YEnd SubPrivate 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 :

1234567891011121314151617181920Public 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 SubEnd 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 :

123456789101112131415161718192021222324252627Public 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) Then ListBox1.SelectedIndex = CInt(TextBox2.Text) Else MsgBox("L'élément rechercher est introuvable!") End If End SubEnd Class


Exercice Visual Basic : Editer Facture



Solution :

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
1234567891011121314151617181920212223242526272829303132333435Public 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 SubEnd 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'     |

\          /         \          /          \                                  /

12345678910111213141516171819202122232425262728293031323334353637Module Module1Dim i, j, N, M As IntegerSub Main()Console.Write(" N : ")N = Console.ReadLineConsole.Write(" M : ")M = Console.ReadLineDim A(N, M) As StringDim B(N, M) As StringDim A_B(N, M) As StringFor i = 0 To N - 1For j = 0 To M - 1Console.Write("A(" & i + 1 & " ; " & j + 1 & ") = ")A(i, j) = Console.ReadLineNextNextConsole.WriteLine(" ")For i = 0 To N - 1For j = 0 To M - 1Console.Write("B(" & i + 1 & " ; " & j + 1 & ") = ")B(i, j) = Console.ReadLineNextNextFor i = 0 To N - 1For j = 0 To M - 1A_B(i, j) = A(i, j) & " + " & B(i, j)NextNextFor i = 0 To N - 1For j = 0 To M - 1Console.Write(A_B(i, j) & " ")NextConsole.WriteLine(" ")NextConsole.ReadLine()End SubEnd Module

Exercice VB: La structure REPETER

Travail à Faire :

  1. 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 ».
  2. 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.
  3. 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.
  4. 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 ».
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778791.Module Module1Dim a, Compteur As IntegerDim Reponse As StringSub Main()Compteur = 0DoConsole.Write("Entrez un nombre : ")a = Console.ReadLineCompteur = Compteur + 1Console.Write("Voulez-vous continuez O/N ? : ")Reponse = Console.ReadLineLoop Until (Reponse = "n" Or Reponse = "N")Console.Write("Le nombre de valeurs saisies est : " & Compteur)Console.ReadLine()End SubEnd Module2.Module Module1Dim a, Somme, Moyenne, Compteur As IntegerSub Main()Compteur = 0Somme = 0DoConsole.Write("Entrez un nombre : ")a = Console.ReadLineCompteur = Compteur + 1Somme = Somme + aLoop Until (a = 0)Moyenne = Somme / (Compteur - 1)Console.Write("La moyenne de valeurs saisies est : " & Moyenne)Console.ReadLine()End SubEnd Module3.Module Module1Dim a, Npos, Nneg As IntegerDim Reponse As StringSub Main()Npos = 0Nneg = 0DoConsole.Write("Entrez un nombre : ")a = Console.ReadLineIf a > 0 ThenNpos = Npos + 1ElseIf a 0 ThenNneg = Nneg + 1End IfConsole.Write("Voulez-vous continuez O/N ? : ")Reponse = Console.ReadLineLoop 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 SubEnd Module4.Module Module1Dim Caractere, Phrase As StringSub Main()Phrase = ""DoConsole.Write("Entrez une caractère : ")Caractere = Console.ReadLineIf Caractere = "0" ThenCaractere = " "End IfPhrase = Phrase + CaractereLoop Until (Caractere = ".")Console.WriteLine("La phrase résultante est : " & Phrase)Console.ReadLine()End SubEnd 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é:

  1. 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.
  1. 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.
  1. 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)
  1. 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

  1. 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 :

 
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364Dim t(1 To 10, 1 To 10) As LongDim p(1 To 100) As XY 'ParcoursDim 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 iEnd SubPrivate 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 And Ynew > 0 And Ynew 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 = 10End SubSub 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 cEnd SubFunction impasse() As Boolean impasse = True If p(c).X + 1 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 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 = FalseEnd FunctionCode à placer dans un module :Public Type XY X As Integer Y As IntegerEnd 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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960611.Module Module1Dim P, i, S As IntegerSub Main()Console.Write("Entrez la puissance : ")P = Console.ReadLineS = 0For i = 1 To PS = S + (3 ^ (i - 1))NextConsole.Write("S est : " & S)Console.ReadLine()End SubEnd Module2.Module Module1Dim P, i, S, X As IntegerSub Main()Console.Write("Entrez la Valeur de x : ")X = Console.ReadLineConsole.Write("Entrez la puissance : ")P = Console.ReadLineS = 0For i = 0 To PS = S + (X ^ (i * 2))NextConsole.Write("S est : " & S)Console.ReadLine()End SubEnd Module3.Module Module1Dim N, i, S As DoubleSub Main()Console.Write("Entrez la valeur de N : ")N = Console.ReadLineS = 0For i = 1 To NS = S + (1 / i)NextConsole.Write("S est : " & S)Console.ReadLine()End SubEnd Module4.Module Module1Dim N, i, S As DoubleSub Main()Console.Write("Entrez la valeur de N : ")N = Console.ReadLineS = 1For i = 1 To NS = S + (1 / (2 * i))NextConsole.Write("S est : " & S)Console.ReadLine()End SubEnd Module
Article publié le 02 Janvier 2012 Mise à jour le Vendredi, 16 Décembre 2022 22:36 par Babachekhe Mohamed