DSSGL : correction de l'examen final 2006-2007

Partie 1 : Questions de cours (20 pts/100)

 

1)    En Visual Basic, quel type de donnée devrait être utilisé pour le stockage d’une durée ? Date

2)    Parmi les contrôles standards de Visual Basic 2005, lequel devrait être utilisé pour communiquer avec un modem branché sur le port série de l’ordinateur ? SerialPort

3)    Dans le .NET Framework, définissez la notion d’ «Assembly» ? l’assembly est l’unité logique d’exécution d’une application .net (assemblage en français). Il s’agit d’une collection de plusieurs objets .exe .dll en autres fichiers de ressources.

4)    En Visual Basic 2005, quels sont les propriétés et évènements directement liés à la validation ? Evènements Validating et Validated , Propriété CauseValidation

5)    En Visual Basic 2005, quel est le nom de la propriété qui permet d’ajouter des onglets dans le contrôle « TabControl » ? Tabpages

-------

Soit le modèle logique suivant schématisant une base de données pour la gestion des notes (y compris des moyennes) des étudiants:

Classe     (classenum,classenom)
Etudiant (etunum, etunom, etuprenoms, etuemail, classenum#)
Matiere    (matcode, matlibelle, matcoef)
Epreuve (epreuvenum, epreuvedate, codemat#)
Notation             (etunum#, epreuvenum#, note)

6)    Donner en TSQL et en PL-SQL le type de donnée adapté au stockage de l’attribut Note de la table Notation.

TSQL : Decimal

PL-SQL : Float

7)    Ecrire une instruction en SQL permettant de retourner une liste de tous les étudiants avec les entêtes de colonnes suivantes « Classe », «Nom», « Prénoms »  et « Email » classés par ordre croissant de classe, nom et prénoms.

SELECT C.classenom Classe, E.Etunom Nom, E.etuprénoms Prénoms, E.etuemail Email

FROM  Classe C  Join  Etudiant E

            ON  E.classenum=C.classenum

ORDER BY C.classenom, E.etunom, E.etuprenoms

8)    Ecrire une instruction SQL permettant de d’ajouter +1 à l’épreuve numéro 10 de tous les étudiants.

UPDATE  Notation

SET note = note +1

      WHERE  epreuvenum=10

9)    Ecrire une instruction SQL permettant de créer une nouvelle classe avec les informations suivantes classenum : 24    classenom : Math Phys Chimie

INSERT Classe

      Values (24, 'Math Phys Chimie')

10) Ecrire une instruction SQL permettant de supprimer les notes pour toutes les épreuves passées avant le 31/12/06 (inclus).

DELETE  Notation

FROM  Notation  N  Join  Epreuve  E

            ON  N.epreuvenum = E.epreuvenum

WHERE E.epreuvedate<=#31/12/06#

 

Partie 2 : Programmation Modulaire (30 pts/100)

 

Dans cette partie, vous allez écrire du code afin de répondre aux questions posées.

 

1. Ecrire la fonction PGCD selon l’algorithme d’Euclide (10pts)

L’algorithme d’Euclide permet le calcul du Plus Grand Commun Diviseur (PGCD) de deux nombres entiers. Exemple : PGCD(10,15)=5

Transcrire l’algorithme d’Euclide ci-après en Visual Basic (vous devrez tenir compte de la valeur par défaut de l’Option Explicit) et reportez le code VB sur votre feuille de copie.

 

    Function PGCD(vara As Integer, varb As Integer) As Integer

        If varb = 0 Then

            Return vara

        Else

            Dim varc As Integer

            varc = vara Mod varb

            Return PGCD(varb, varc)

        End If

    End Function

 

2. Ecrire la fonction Factorielle de façon itérative puis de façon récursive (12pts)

En mathématiques, la factorielle d'un entier naturel n, notée n!, est le produit des nombres entiers strictement positifs inférieurs ou égaux à n. Ecrire deux fonctions pour le calcul de factorielle, la première utilisant un algorithme récursif et la seconde utilisant un algorithme itératif.

Pour l’algorithme récursif, vous pouvez vous inspirer de la formule ci-après.

 

Exemple : 9! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 = 362 880

Le type de donné retourné par les fonctions doit être réel. Pour toutes valeurs négatives du paramètre n, les fonctions doivent retourner la valeur 0. Lorsque n vaut 0, les fonctions doivent retourner la valeur 1.

Reportez le code de ces deux fonctions sur votre feuille de copie

 

Factorielle récursive (6 pts)

    Function RFactorielle(n As Integer) As Single

        Select Case n

            Case Is < 0 : Return (0)

            Case 0 : Return (1)

            Case Else : Return n * IFactorielle(n - 1)

        End Select

    End Function

 

Factorielle itérative (6 pts)

    Function IFactorielle(n As Integer) As Single

        Dim i As Integer

        Dim j As Single

        If n < 0 Then

            Return (0)

        ElseIf n = 0 Then

            Return (1)

        Else

            j = 1

            For i = 2 To n

                j *= n

            Next

            Return (j)

        End If

    End Function

 

3. Corriger et améliorer le code du de l’algorithme du Tri Bulle (8pts)

Le tri à bulle ou tri par propagation est un algorithme de tri qui consiste à faire remonter le plus grand élément du tableau (comme une bulle d'air remonte à la surface) en comparant les éléments successifs.

On arrête quand le tableau à trier est de taille 1 ou qu'on n'a pas fait d'échange au dernier passage.

Le code proposé ci-après, pourrait fonctionner s’il ne comprenait pas plusieurs « erreurs ». Le temps d’exécution pourrait être réduit s’il n’y avait pas des « insuffisances » sur les conditions d’arrêt du tri. Identifier toutes les erreurs et insuffisances dans le code. Reporter en le justifiant chacune des erreurs et insuffisances sur votre copie. Indiquer chaque fois le numéro de ligne de code à corriger, et proposer la correction à utiliser en lieu et place.

1 Sub TriBulle(ByRef t() As Integer)

2   Dim i, j, longueur, tempo As Integer

3   longueur = t.Length 

4   For i = longueur To 1 Step -1

5     For j = 1 To i      'Boucle depuis le debut tableau

6       If t(j) < t(j + 1) Then

7         tempo = t(j + 1)'Utiliser la variable tempo pour …

8         t(j + 1) = t(j) 'permuter les valeurs …

9         t(j) = t(j+1)   'de t(j) et de t(j+1).

10      End If

11    Next j

12  Next i

13 End Sub

 

 

 

1 Sub TriBulle(ByRef t() As Integer)

2   Dim i, j, longueur, tempo As Integer

3   longueur = t.Length 

4   For i = longueur To 2 Step -1

5     For j = 0 To i-1      'Boucle depuis le debut tableau

6       If t(j) < t(j + 1) Then

7         tempo = t(j + 1)'Utiliser la variable tempo pour …

8         t(j + 1) = t(j) 'permuter les valeurs …

9         t(j) = tempo   'de t(j) et de t(j+1).

10      End If

11    Next j

12  Next i

13 End Sub

 

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