DSSGL 2008: Correction Examen Final - Partie 2
Partie 2 : Programmation procédurale en Visual Basic
1. Ecrire les fonctions MoyenneAlgebrique et MoyenneGeometrique (20pts)
La Moyenne algébrique est le quotient de la somme des éléments divisé par le nombre d’éléments.
Formule :
Reportez le code de cette fonction MoyenneAlgébrique sur votre feuille de copie
Function MoyenneAlgebrique(T() As Single) As Single
Dim somme As Single = 0
Dim nb As Integer = T.Length
Dim i = 0
If nb = 0 Then Return 0
For i = 0 To nb - 1
somme += T(i)
Next
Return somme / nb
End Function
La Moyenne géometrique est le quotient de la racine carrée de la somme des éléments élevés au carré le tout divisé par le nombre d’éléments.
Formule :
Reportez le code de cette fonction MoyenneGéometrique sur votre feuille de copie
Function MoyenneGeometrique(T() As Single) As Single
Dim somme As Single = 0
Dim nb As Integer = T.Length
Dim i = 0
If nb = 0 Then Return 0
For i = 0 To nb - 1
somme += T(i) ^ 2
Next
Return System.Math.Sqrt(somme) / nb
End Function
2. Compléter le Code pour la résolution des Tours de Hanoï (30pts)
Le problème des tours de Hanoï est un exercice de réflexion consistant à déplacer des disques
de diamètres différents d'une tour de « départ » à une tour d'« arrivée » en passant par une tour « intermédiaire ».
La méthode de résolution conduit à un algorithme récursif, codé ci-dessous en Visual Basic. Les paramètres à utiliser sont les suivants :
- TourMax : Variable publique déterminant le nombre maximum de disque. Nous l’initialiserons à la valeur 10.
- Nombre : nombre de disques utilisés
- Départ : entier indiquant la tour de départ
- Arrivée: entier indiquant la tour de destination
- Intermédiaire : entier indiquant la tour intermédiaire
- Tour (3,TourMax) : Tableau d’entier utiliser pour représenter les tours.
Ecrire en Visual Basic le code de la procédure BougerUnDisque en suivant les directives ci-après :
Déclarer la procédure « BougerUnDisque » avec les paramètres Départ et arrivée
Déclarer deux variables locales « vara » et « varb » de type entier
Déclarer une variable local « tempo » de type entier
Initialiser la variable locale vara à TourMax
Initialiser la variable locale varb à 1
Faire une boucle de type TANTQUE avec comme
Condition : Tour[Départ,vara] est nul et vara >1
Action à répéter: Décrémenter vara de 1.
Fin de la boucle
Faire une boucle de type TANTQUE avec comme
Condition : Tour[Arrivée,varb] n’est pas nul et varb<TourMax
Action à répéter: Incrémenter varb de 1
Fin de la boucle
Permuter les valeurs de Tour[Départ, vara] et de Tour[Arrivée,varb]
Fin de la procédure
Sub BougerUnDisque(Depart As Integer, Arrivee As Integer)
Dim vara, varb As Integer
Dim tempo As Integer
vara = TourMax
varb = 1
Do While Tour(Depart, vara) = 0 And vara > 1
vara -= 1
Loop
Do While Tour(Arrivee, varb) <> 0 And varb < TourMax
varb += 1
Loop
tempo = Tour(Depart, vara)
Tour(Depart, vara) = Tour(Arrivee, varb)
Tour(Arrivee, varb) = tempo
End Sub
Ecrire en Visual Basic le code de la procédure InitaliserTour en suivant les directives ci-après :
Déclarer la procédure « InitialiserTour » avec le paramètre N de type entier
Déclarer deux variables locales « i » et « j » de type entier
Faire une boucle de i allant de 0 à 2
Faire une boucle de j allant de 0 à TourMax
Tour[ i , j ]=0
Fin de la boucle j
Fin de la boucle i
Faire une boucle de j allant de 0 à N - 1
Tour[ 0 , j ]= N - j
Fin de la boucle j
Fin de la procédure
Sub initTours(n As Integer)
For i = 0 To 2
For j = 0 To TourMax
Tour(i, j) = 0
Next
Next
For j = 0 To n - 1
Tour(0, j) = n - j
Next
End Sub