DIRECTION DE L'ENSEIGNEMENT DE SERVICE EN INFORMATIQUE
COURS: IFT 1175 EXAMEN INTRA
DATE: Jeudi, 2 juin 2005 DURÉE: Deux heures
TOUTE DOCUMENTATION PERMISE PAR: Francis Fournelle
PARTIE - I Connaissances générales (20 questions, 40 points)
Si l’énoncé est une question, répondez-y brièvement. S'il s'agit d'un énoncé incomplet, indiquez l'expression qui le complète le mieux. S’il s’agit d’une affirmation, répondez par "Vrai" ou par
"Faux" selon qu’elle est vraie ou fausse. Si elle est fausse, ou si elle n’est pas toujours vraie, expliquez brièvement et succinctement pourquoi. Notez la distinction qu'il faut faire entre le déclenchement (activation) d'un événement d'un contrôle et l'exécution de cet événement par la procédure événementielle qui lui est associée.
1) Si le focus passe du contrôle «A» au contrôle «B», l'événement «Leave/LostFocus» de «B» sera déclenché avant l'événement «Enter/GotFocus» de «A».
Faux Inverser «A» et «B»
2) Il est possible que l'énoncé «Compteur = Comteur + 1» donne un résultat différent selon la présence ou l'absence de l'énoncé «Option Explicit» au début du module de programmation.
Vrai
3) Dans la séquence suivante, le texte «Deuxième valeur» ne sera jamais affiché, peu importe la valeur de X (de type Integer).
Select Case X Case <= 20
MsgBox("Première valeur") Case 5, 10, 15, 20
MsgBox("Deuxième valeur") Case Else
... ' Suite du programme Vrai
4) La propriété «Text» d'un contrôle «Barre de défilement» (ScrollBar) permet d'afficher sa valeur en tout temps.
Faux C'est la propriété «Value»
5) La façon de réagir aux actions de l'utilisateur est de programmer les _____ des contrôles.
événements
6) Une des principales différences entre les zones de listes (ListBox) et les zones de listes modifiables (ComboBox) est que les ______ ne permettent pas de sélectionner plus d'un choix.
ComboBox
7) Tous les contrôles internes de VB possèdent des propriétés graphiques qui permettent à l'auteur de déterminer précisément ce que verra l'utilisateur.
Faux Ex. Timer
8) Pour afficher du texte à l'utilisateur sans qu'il ne puisse le modifier, on peut le placer soit dans un contrôle étiquette «Label», soit dans un contrôle zone de texte muni d'une propriété _____mise à
«False».
Enabled
9) Dans une procédure d’un événement «KeyPress», la propriété «Handled» du paramètre «e» est généralement en lecture seule.
Faux Doit pouvoir être modifiée
10) Si une minuterie a sa propriété «Enabled» fixée à Vrai (True) et sa propriété «Interval» à 5, son événement «Tick» sera déclenché à toutes les 5 secondes jusqu'à ce qu'elle soit désactivée.
Faux 5 millièmes de seconde
11) Si on ouvre un objet «MonFS» de la classe FileStream en mode Append, on pourra ensuite lui associer un objet «MonSR» de la classe StreamReader au moyen de l'énoncé
MonSR = New StreamReader(MonFS) Faux erreur : en mode Append, on ne peut pas lire.
12) Dans tous les contrôles possédant une propriété «Text», l’auteur peut permettre à l’utilisateur d’entrer du texte.
Faux ex. label
13) Si «MonSR» est un objet de type «StreamReader», «K» une variable entière et «Lettres» un tableau de 5 caractères, la boucle
For K = 0 to 4
Lettres(K) = MonSR.Peek() Next K
placera les 5 prochains caractères du fichier dans le tableau Lettres.
Faux 5 fois le premier caractère
14) Toutes les variables définies dans un module régulier sont visibles à partir de toutes les feuilles de l'application.
Faux pas si Private
15) Pour désactiver (désélectionner) un bouton d'option (RadioButton), l'utilisateur n'a qu'à cliquer de nouveau dessus.
Faux demeure sélectionné
16) On peut associer un objet «MonSR» de type «StreamReader» à un objet MonFS de type
«FileStream», par exemple «MonSR = New StreamReader(MonFS)» ou bien directement à un fichier, par exemple «MonSR = New StreamReader("toto.txt")». Dans le premier cas, la lecture se fera au moyen d'un FileStream, dans le deuxième cas, elle se fera directement sans passer par un FileStream.
Faux passera par un FileStream «caché» (en arrière-plan)
17) Quelle propriété doit-on utiliser pour qu’une zone de liste (ListBox) ne permette qu’un seul choix?
Faux SelectionMode
18) La valeur de la propriété SelectedIndex d'une zone de liste modifiable (ComboBox) varie entre zéro et ________ .
ComboBox1.Items.Count - 1
19) Dans le corps de la définition d'une propriété d'une classe, il doit y avoir le même nombre d'énoncés «GET» que d'énoncés «SET».
Faux ReadOnly et WriteOnly
20) L’énoncé «Z = Replace("("123", "(", "")» placera dans Z la valeur "123".
Faux erreur de syntaxe
PARTIE - II Analyse et programmation (4 questions, 60 points)
La question 21 : 15 pts
La meilleure des autres réponses : 25 pts, La moins bonne des autres réponses: 5 pts L'«autre» réponse : 15 pts
21) Dans une procédure, la variable «Nom» contient une chaîne de caractères qui peut se terminer par le caractère «,» (virgule) et une variable «Prenom» qui peut commencer par une «,». On veut placer dans la variable «NomPren» le texte formé du nom en majuscule et du prénom (tel quel) séparé par une (et une seule) «,» et un espace. Ainsi, «LeTarte» et «Mimi» donnera
«LETARTE, Mimi», tout comme «LeTarte» et «,Mimi», «LeTarte,» et «,Mimi», ou bien
«LeTarte,» et «Mimi».
NomPren.Text = Nom.Text, & ",^" & Prenom.Text ' ^ représente espace NomPren.Text = Replace(NomPren.Text, ",," , ",") ' (virgule dans nom) NomPren.Text = Replace(NomPren.Text, "^," , "^") ' (virgule dans prénom)
Ou bien
NomPren.Text = Nom.Text.Replace(",", "^") & ",^" & _ Prenom.Text.Replace(",", "^")
22) Une variable est définie comme suit : Dim LstEmp() As TypEmp.
Le type «TypEmp» est un type personnalisé (Structure) qui comporte dans l'ordre un champ Nom de type «chaîne de longueur variable», un champ Sexe de type «1 seul caractère» et un champ Salaire de type «entier» ainsi que quelques autres champs. On suppose que le fichier séquentiel «Employes.dta» contient, pour un certain nombre d'employés, une ligne de données par champ conformément à la description précédente.
A) Écrivez la description du type TypEmp et des variables LstEmp et NbEmp.
Public Structure TypEmp Dim Nom As String Dim Sexe As Char
Dim Salaire As Integer
...
End Structure
Dim LstEmp() As TypEmp Dim NbEmp As Integer = 0
B) Programmez la section du «Form_Load» (pas les en-têtes) qui place dans une variable NbEmp le nombre d'employés dont les données sont lues et placées dans le tableau.
Dim UnFich As New FileStream("Employes.dta", Filemode.Open) Dim UnLect As New StreamReader(UnFich)
...
Do While UnLect.Peek() <> -1
NbEmp += 1 ' Le tableau ira de 1 à NbEmp ReDim Preserve LstEmp(NbEmp)
With LstEmp(NbEmp)
.Nom = UnLect.ReadLine() .Sexe = UnLect.ReadLine() .Salaire = UnLect.ReadLine() End With
Loop
UnLecteur.Close
23) Dans la même application qu'à la question précédente, votre feuille de travail comporte une zone de liste (ListBox) ListeChoix dont la propriété «Sorted» est mise à False, une zone de liste modifiable (ComboBox) ListeSalaires dont la propriété «Visible» est à False et une zone de texte txtTotSalaires.
A) Écrivez le code (seulement) qui placera dans la zone de liste ListeChoix les noms de toutes les femmes du tableau (Sexe vaut «F») et simultanément la valeur de leur salaire dans le combo ListeSalaires.
...
Dim J As Integer For J = 1 To NbEmp
If LstEmp(J).Sexe = "F" Then
ListeChoix.Items.Add(LstEmp(J).Nom)
ListeSalaires.Items.Add(LstEmp(J).Salaire) End If
Next
B) On suppose que l'utilisateur analyse la liste des femmes et, en l'honneur du «8 mars», il sélectionne celles à qui il veut accorder une augmentation de salaire. Programmez l'événement «LostFocus» (sans les en-têtes) de la zone de liste pour que la somme des salaires des employées qui ont été sélectionnées par l'utilisateur soit placée dans la zone de texte txtTotSalaires. (Conseil : utilisez les propriété SelectedIndices de la zone de liste et Items du combo).
...
Private Sub ...
Dim J, Ind, Total As Integer
For J = 0 To ListeChoix.SelectedIndices.Count - 1 Ind = ListeChoix.SelectedIndices(J)
Total += ListeSalaires.Items(Ind) Next
txtSalaires.Text = Str(Total) End Sub
24) Créez une classe «clSandwich» possédant les caractéristiques suivantes.
• Une propriété Nom de type «Chaîne de caractères» sans aucune contrainte.
• Une propriété Contenu en lecture-écriture de type «Chaîne» qui renvoie son contenu mais qui n'accepte une valeur que si aucune valeur n'est définie (écriture unique).
• Une propriété Prix en lecture-écriture de type réelle n'acceptant que des valeurs positives comprises entre 2,50 et 13,50.
• Le constructeur «New()».place la date du jour (au moment de la création) dans une variable privée (cachée).
• La méthode Jours renvoie un entier indiquant depuis combien de jours le sandwich a été fabriqué.
...
Public Class SandWich
Public Nom As String ' Propriété Nom Private mContenu As String ' Propriété Contenu Public Property Contenu() As String
Get
Contenu = mContenu End Get
Set(Value As String)
If mContenu = "" Then mContenu = Value End Set
End Property
Private mPrix As Single ' Propriété Prix Get
Prix = mPrix End Get
Set(Value As Single)
If Value >= 2.50 And Value <= 13.50 Then mPrix = Value
Else
mPrix = 2.50 End If
End Set
End Property
Private mDate As Date
Public Sub New() ' Constructeur place la date mDate = DateTime.Today
End Sub
Public Function Jours() As Integer ' Méthode Jours
Jours = DateDiff(DateInterval.Day), mDate, DateTime.Today) End Function
End Class