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