21
0 INF130 Ordinateurs et programmation Hiver 2015 – Préparation en vue de l’examen Final Enseignants : Francis Bourdeau, Samuel Deslauriers-Gauthier, Frédérick Henri et Hugues Saulnier INFORMATIONS SUR L’EXAMEN FINAL : Pondération : 40 % de la note finale Durée : 3 heures Documentation permise : Aucune documentation n’est permise. Un aide-mémoire est fourni en annexe. Autres informations : L’examen final comporte 6 questions (11 si on compte les sous- questions). 6 questions nécessitent l’utilisation de tableaux. 9 questions nécessitent l’utilisation d’enregistrements. 1 question porte sur les objets d’Excel. 1 question porte sur les formulaires.

INF130 Ordinateurs et programmation Hiver 2015

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: INF130 Ordinateurs et programmation Hiver 2015

0

INF130 Ordinateurs et programmation

Hiver 2015 – Préparation en vue de l’examen Final

Enseignants : Francis Bourdeau, Samuel Deslauriers-Gauthier, Frédérick Henri et Hugues Saulnier

INFORMATIONS SUR L’EXAMEN FINAL :

Pondération : 40 % de la note finale Durée : 3 heures Documentation permise : Aucune documentation n’est permise. Un aide-mémoire est fourni en annexe. Autres informations : L’examen final comporte 6 questions (11 si on compte les sous-

questions). 6 questions nécessitent l’utilisation de tableaux. 9 questions nécessitent l’utilisation d’enregistrements. 1 question porte sur les objets d’Excel. 1 question porte sur les formulaires.

Page 2: INF130 Ordinateurs et programmation Hiver 2015

1

Question 1

On retrouve dans la feuille « Table pays » des informations sur divers pays du monde (voir la figure ci-

dessous).

a) Définissez le type t_pays qui permet de conserver les informations d’un enregistrement (une ligne)

de la feuille « Table pays ».

Page 3: INF130 Ordinateurs et programmation Hiver 2015

2

b) Écrivez une fonction nommée km_carre_par_habitant qui reçoit un t_pays et qui retourne le

nombre de kilomètres carrés disponible pour chaque habitant. À titre d’exemple, puisque le

Canada a une superficie de 9 984 670 km2 et qu’il y a 34 834 841 habitants, il y a donc environ 0.287

km2 par habitant (où 0.287 ≈ 9 984 670 / 34 834 841).

Page 4: INF130 Ordinateurs et programmation Hiver 2015

3

c) Écrivez une fonction nommée minimum_km_carre_par_habitant qui reçoit un tableau de

t_pays et qui retourne l’indice de l’élément contenant le pays dont les habitants disposent du

plus petit nombre de kilomètres carrés par habitant.

Page 5: INF130 Ordinateurs et programmation Hiver 2015

4

d) Écrivez une fonction nommée liste_pays_religion qui reçoit un tableau de t_pays ainsi

qu’une chaîne de caractères contenant un nom de religion. Elle retourne un tableau de t_pays

dans lequel on retrouve les pays dont la principale religion correspond à la valeur du second

paramètre. Si le tableau reçu ne contient aucun pays dont la principale religion correspond à celle qui

est demandée, la fonction retourne alors un tableau vide (non alloué).

Page 6: INF130 Ordinateurs et programmation Hiver 2015

5

e) Écrivez une fonction prochaine_ligne_vide qui ne reçoit aucun paramètre et qui retourne le

numéro de la prochaine ligne vide dans la feuille « Table pays ». À titre d’exemple, si l’on appelle

la fonction et que la table contient les données visibles dans la figure de la question 1 a), alors la

fonction retourne 7.

À NOTER : Vous pouvez supposer que les noms de pays débutent toujours à la deuxième ligne et se

trouve toujours dans la première colonne.

Page 7: INF130 Ordinateurs et programmation Hiver 2015

6

f) Écrivez une fonction ligne_pays qui reçoit une chaîne de caractères contenant un nom de

pays et qui retourne le numéro de ligne dans la feuille « Table pays » qui contient un pays

portant ce nom. Si aucun pays dans la feuille ne porte ce nom, la fonction retourne -1.

À titre d’exemple, si la fonction reçoit « Croatie », elle retourne la valeur 5. Cependant, si elle reçoit la

valeur « Brésil », elle retourne la valeur -1 puisque ce pays n’est pas présent dans la feuille.

À NOTER : Vous pouvez supposer que les noms de pays débutent toujours à la deuxième ligne et se

trouve toujours dans la première colonne.

Page 8: INF130 Ordinateurs et programmation Hiver 2015

7

g) Écrivez une fonction nommée ajouter_pays qui reçoit un t_pays et qui tente de l’ajouter dans

la feuille « Table pays ». Si un pays portant le même nom est déjà présent, elle retourne False.

Sinon, elle ajoute le pays dans la première ligne vide de la feuille et retourne True.

Page 9: INF130 Ordinateurs et programmation Hiver 2015

8

Question 2

Soit les définitions de type suivantes :

Public Type t_pixel rouge As Double ' L’intensité du rouge est dans l’intervalle [0, 1]. vert As Double ' L’intensité du vert dans l’intervalle [0, 1]. bleu As Double ' L’intensité du bleu dans l’intervalle [0, 1]. End Type Public Type t_imageRGB tableau_pixels() As t_pixel ' La matrice des pixels de l’image. hauteur As Integer ' Hauteur du tableau tableau_pixels. largeur As Integer ' Largeur du tableau tableau_pixels. End Type

a) Écrivez une fonction nommée moyenne_couleurs qui reçoit un t_pixel et qui retourne la

moyenne de ses trois champs.

Page 10: INF130 Ordinateurs et programmation Hiver 2015

9

b) Écrivez une procédure nommée couleur_a_noir_et_blanc qui reçoit un t_imageRGB et qui

convertit cette image en noir et blanc. Pour transformer une image en noir et blanc, il faut parcourir

tous les pixels de l’image et appliquer la transformation ci-dessous.

Pixel en couleur Pixel en noir et blanc

��, �, �� � ��� + � + �3 � ,

��� + � + �3 � ,

��� + � + �3 ��

On constate qu’il faut donc diviser chaque couleur du pixel par la moyenne des trois couleurs du pixel.

Page 11: INF130 Ordinateurs et programmation Hiver 2015

10

c) Écrivez une fonction nommée image_deux_fois_plus_grosse qui reçoit un t_imageRGB et

qui retourne un t_imageRGB dont la taille est deux fois plus grande (en hauteur et en largeur).

Le tableau ci-dessous offre un exemple du résultat attendu lorsqu’on double la taille d’une minuscule

image 2 x 2.

Image originale Image deux fois plus grosse

(0.2, 0.2, 0.2) (0.5, 0.5, 0.5)

(0.1, 0.1, 0.1) (0.3, 0.3, 0.3)

2

2

(0.2, 0.2, 0.2) (0.2, 0.2, 0.2) (0.5, 0.5, 0.5) (0.5, 0.5, 0.5)

(0.2, 0.2, 0.2) (0.2, 0.2, 0.2) (0.5, 0.5, 0.5) (0.5, 0.5, 0.5)

(0.1, 0.1, 0.1) (0.1, 0.1, 0.1) (0.3, 0.3, 0.3) (0.3, 0.3, 0.3)

(0.1, 0.1, 0.1) (0.1, 0.1, 0.1) (0.3, 0.3, 0.3) (0.3, 0.3, 0.3)

4

4

On constate que chaque pixel dans l’image originale se répète 4 fois dans l’image agrandie.

Page 12: INF130 Ordinateurs et programmation Hiver 2015

11

Page 13: INF130 Ordinateurs et programmation Hiver 2015

12

Question 3

Soit un formulaire nommé formulaire_horloge.

Complétez les sous-programmes suivants qui se trouvent dans le formulaire.

Option Explicit ' Cette variable globale privée permet de savoir si l'utilisateur ' a annulé la saisie. Il est également possible d'utiliser ' l'attribut "tag" du formulaire pour obtenir un résultat similaire. Private global_utilisateur_a_annule As Boolean '------------------------------------------------------------------- ' SOUS-PROGRAMMES PUBLICS '------------------------------------------------------------------- ' ' UTILISATEUR_A_ANNULE ' ' Cette fonction retourne True si l’utilisateur a annulé et False ' si ce n’est pas la cas. ' ' PARAMÈTRES : Aucun. ' ' VALEUR DE RETOUR : True si l’utilisateur a annulé et False ' dans le cas contraire (type : Boolean). ' Public Function utilisateur_a_annule() As Boolean

End Function

spin_heures

bouton_annuler

spin_minutes

bouton_ok

label_minutes label_heures

Page 14: INF130 Ordinateurs et programmation Hiver 2015

13

' ' GET_HORLOGE ' ' Cette procédure assigne les heures et les minutes entrées par ' l’utilisateur aux paramètres qu’elle reçoit. ' ' PARAMÈTRES : ' - heure : (SORTIE) recevra les heures saisies par l’utilisateur ' (type : Integer). ' - minutes : (SORTIE) recevra les minutes saisies par ' l’utilisateur (type : Integer). ' ' VALEUR DE RETOUR : Aucune. ' Public Sub get_horloge(ByRef heures As Integer, _ ByRef minutes As Integer) End Sub '------------------------------------------------------------------- ' ÉVÉNEMENTS PRIVÉS '------------------------------------------------------------------- ' Cette procédure s’exécute lorsque la boîte de dialogue devient la ' fenêtre active. On y fixe le temps de l’horloge à 6:00. Private Sub UserForm_Activate() End Sub

Page 15: INF130 Ordinateurs et programmation Hiver 2015

14

' On note que l’utilisateur a annulé et on cache le formulaire. Private Sub bouton_annuler_Click()

End Sub ' On note que l’utilisateur n’a pas annulé et on cache le formulaire. Private Sub bouton_ok_Click() End Sub ' On ajuste l'étiquette des heures en fonction de la valeur du contrôle ' spin_heures. Private Sub spin_heures_Change()

End Sub ' On ajuste l'étiquette des minutes en fonction de la valeur du ' contrôle spin_minutes. Private Sub spin_minutes_Change()

End Sub

Page 16: INF130 Ordinateurs et programmation Hiver 2015

15

Question 4

Un alliage est une combinaison d’un métal et d’au moins un autre élément du tableau périodique. Il est

possible de calculer la masse molaire moyenne d’un alliage en faisant la somme des masses atomiques

des éléments de l’alliage multipliées par leur pourcentage molaire.

À titre d’exemple, l’argent sterling se compose de 87.9 % d’argent et de 12.1 % cuivre. Puisque les

masses atomiques de l’argent et du cuivre sont respectivement de 107.87 g/mol et de 53.55 g/mol, on

trouve que la masse molaire moyenne de l’argent sterling est de 101.2978 g/mol (cette valeur provient du

calcul 0.879 * 107.87 + 0.121 * 53.55).

Soit les trois types de donnée suivants :

Public Type t_element nom As String ' Hydrogène, Hélium, etc. symbole As String ' H, He, Li, etc. est_un_metal As Boolean ' True si l’élément est un métal. masse_atomique As Double ' En g/mol. End Type Public Type t_composant symbole As String ' Le symbole de l’élément. pourcentage_molaire As Double ' Dans l’intervalle [0, 1]. End Type Public Type t_alliage nom As String ' Bronze, acier, etc. tab_composants() As t_composant ' Ce qui compose l’alliage. nb_composants As Integer ' Le nombre d’éléments dans l’alliage. End Type

Écrivez une fonction nommée masse_molaire_alliage qui reçoit un t_alliage ainsi qu’un

tableau de t_element contenant tous les éléments du tableau périodique. Elle retourne la masse

molaire de l’alliage reçu.

Page 17: INF130 Ordinateurs et programmation Hiver 2015

16

Page 18: INF130 Ordinateurs et programmation Hiver 2015

17

Question 5

Voici une série de types définis qui peuvent représenter la carrière d’un joueur de hockey dans la LNH.

Public Type t_donnees_hors_glace

equipe As String ' L'équipe actuelle du joueur. salaire As Double ' Le salaire actuel du joueur. no_chandail As Integer ' Le numéro de chandail du joueur. End Type Public Type t_statistique

matchs As Integer ' Le nb. de match joué durant la saison. buts As Integer ' Le nb. de but obtenu durant la saison. passes As Integer ' Le nb. de passes obtenues durant la saison. points As Integer ' Le nb. de points obtenus durant la saison. penalite As Integer ' Les minutes de pénalité durant la saison. End Type Public Type t_annee_carriere

statistique As t_statistique ' Les données de matchs d'un joueur. information As t_donnees_hors_glace ' Les données sur le contrat d'un joueur. End Type Public Type t_joueur

nom As String ' Le nom du joueur (ex : "Sydney Crosby"). nationnalite As String ' Le pays de naissance du joueur (ex : "Canada"). position As Integer ' La position d'un joueur (ex : "gardien"). saisons() As t_annee_carriere ' Les données sur chaque saison d’un joueur nb_saisons As Integer ' son nombre de saisons dans la LNH End Type

Écrivez une fonction nommée tab_moyennes_minutes_penalites qui reçoit un tableau de

t_joueur. Pour chaque joueur du tableau, elle :

1. fait la somme de toutes les minutes de pénalités du joueur au cours de sa carrière;

2. divise cette somme par le nombre de saisons du joueur dans la LNH.

Elle retourne un tableau contenant ayant la même dimension que le tableau reçu et contenant les

valeurs obtenues.

En d’autres termes, si la fonction reçoit un tableau contenant 3 joueurs, elle retourne un tableau de 3

nombres réels correspondant au nombre moyen de minutes de pénalité par saison de chacun des

joueurs.

Page 19: INF130 Ordinateurs et programmation Hiver 2015

18

Page 20: INF130 Ordinateurs et programmation Hiver 2015

19

Annexe : Aide-mémoire

Types de données Objets et collections Boolean True ou False Application Microsoft Excel Byte 0 à 255 Window Une fenêtre Integer -32 768 à 32 767 Windows Collection de fenêtres Long -2147483648 à 2147483647 Workbook Un classeur Single -3,4×1038 à 3,4×1038

Workbooks Collection de classeurs Double -1,79×10308 à 1,79×10308

Worksheet Une feuille String Séquence de caractères Sheets Collection de feuilles Range ou Cells Collection de cellules

Déclaration d’une variable Déclaration d’une référence à un objet Dim nom_variable As type nom_variable = valeur

Dim nom_référence As classe Set nom_référence = nom_objet

Exemple Dim i As Integer i = 1

Exemple Dim une_feuille As Worksheet Set une_feuille = ActiveSheet

Fonctions de manipulation d’une chaîne de caractères Len : Longueur de la chaîne Len("Allo") retourne 4 Mid : Sous-chaîne Mid("Allo toi", 3, 4) retourne "lo t" Left : Début d’une chaîne Left("Allo", 2) retourne "Al" Right : Fin d’une chaîne Right("Allo", 2) retourne "lo" UCase : La chaîne transformée en majuscules UCase("Allo") retourne "ALLO" LCase : La chaîne transformée en minuscules LCase("Allo") retourne "allo" IsNumeric : Chaîne représente un nombre IsNumeric("Allo") retourne False Val : Transforme une chaîne en nombre Val("123") retourne 123 Asc : Code ASCII d’un caractère Asc("A") retourne 65 Chr : Symbole ASCII d’un code ASCII Chr(65) retourne "A" InStr : Position d’une chaîne dans une autre. InStr("Salut", "lu") retourne 3 InStr("Salut", "w") retourne 0

Tableaux statiques Tableaux dynamiques Dim nom(1 To n, ...) As type Dim nom() As type

Exemples Exemples Dim tab1(1 To 10) As Integer Dim tab2(1 To 10, 1 To 10) As Double

Dim tab1() As Double ReDim tab1(1 To 10) ReDim Preserve tab1(1 To 25)

Fonctions prédéfinies

LBound : Borne inférieure du tableau UBound : Borne supérieure du tableau

Exemples

Dim tab1(1 To 10, 5 To 25) As Double

LBound(tab1, 1) retourne 1 UBound(tab1, 1) retourne 10 LBound(tab1, 2) retourne 5 UBound(tab1, 2) retourne 25

Types définis par l’utilisateur Exemple portée Type nom_du_type champ1 As type champ2 As type … End Type

Public Type pont nom As String annee_construction As Integer longueur As Double End Type

Opérateurs Exemples ... arithmétiques : + - * / \ Mod ^ 17 Mod 5 vaut 2 et 5 ^ 3 vaut 125 ... relationnels : < <= = >= > <> 15 <> 13 vaut True

... logiques : And Or Not

... de concaténation : & "Allo" & " toi" vaut "Allo toi"

Instructions conditionnelles Exemple If expression booléenne Then ... ElseIf expression booléenne Then ... Else ... End If

If x > 0 Then Call MsgBox(x & " est positif") ElseIf x < 0 Then Call MsgBox(x & " est négatif") Else Call MsgBox(x & " vaut 0") End If

Facultatif

Page 21: INF130 Ordinateurs et programmation Hiver 2015

20

Boucles

…avec une condition d’entrée (3 syntaxes) …avec une condition de sortie (2 syntaxes) While expression booléenne … Wend

Do Until expression booléenne … Loop

Do … Loop While expression booléenne

Do … Loop Until expression booléenne

…avec un compteur Exemple

For compteur = a To b Step saut ... Next compteur

For i = 5 To 1 Step -1 Call MsgBox(i) Next compteur

…parcourant une collection

For Each élément In collection ... Next element

Exemple

Dim cellule As Range For Each cellule In Range("A1:A9") cellule.value = 0 Next cellule

Procédures Fonctions portée Sub nom(paramètres) ... End Sub

portée Function nom(paramètres) As type ... nom = valeur de retour End Function

Accès à une plage de données Exemples Feuille.Range(référence) Range("A1:E5") Feuille.Range(cellule1, cellule2) Range(Cells(1, 1), Cells(5, 5)) Feuille.Cells(ligne, colonne) Cells(1, 1) Feuille.Rows(numéro) ActiveSheet.Rows(1) Feuille.Columns(numéro) ActiveSheet.Columns(3)

Propriétés d’un objet de la classe Range Exemples .Cells : Cellule dans une plage Range("A1:E10").Cells(3, 2) ' Cellule B3

.Column : Colonne de la cellule Range("C6").Column ' Vaut 3

.Count : Nombre de cellules dans la plage Range("A1:E10").Count ' Vaut 50

.Font : Police de la plage Range("A1").Font.Bold = True

.Formula : Formule dans la cellule Range("A1").Formula = "=3 * 4"

.Row : Ligne de la cellule Range("C6").Row ' Vaut 6

.Value : Valeur de la cellule Cells(1, 1).value = 5

.CurrentRegion Plage des cellules adjacentes Cells(1, 1).CurrentRegion

Méthodes et propriétés diverses Exemples Feuille.Rows(n).Delete : Efface une ligne ActiveSheet.Rows(2).Delete

Collection.Count : Nb. éléments de la collection

ActiveSheet.Rows.Count ' Nb. de lignes. WorkSheets.Count ' Nb. de feuilles.

Propriétés d’un objet ComboBox (liste déroulante) Exemples

.AddItem(chaine) Ajoute un élément à la liste Liste.AddItem(“ETS”) ' Ajoute ETS à la liste

.Clear() Vide la liste Liste.Clear

.ListCount Nombre d’éléments dans la liste Liste.ListCount

.ListIndex Indice de l’élément courant (-1 si aucun élément n’est sélectionné)

Liste.ListIndex = 0 ' Sélectionne le premier ' élément de la liste.

.Value Valeur de la sélection courante If (Liste.Value = “ETS”) Then

Fonctions nécessaire à l’accès aux fichiers Exemples FreeFile() Retourne un numéro de fichier disponible numero_fichier = FreeFile() Open Ouvre un fichier Open "test.txt" For Output As numero_fichier

Open "test.bin" For Binary Access Write As _ numero_fichier

Close Ferme un fichier préalablement ouvert Close #numero_fichier Print # Écrit des données dans un fichier texte Print #numero_fichier, "Bonjour" Input # Lit une ligne dans un fichier texte Dim ligne As String

Input #numero_fichier, ligne Put # Écrit dans un fichier binaire Dim tab_entiers(10) As Integer

Put #numero_fichier, tab_entiers Get # Lit dans un fichier binaire Dim tab_entiers(10) As Integer

Get #numero_fichier, , tab_entiers