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

Pour être informé des derniers articles, inscrivez vous :