fichier de révision pour l`examen final
Transcription
fichier de révision pour l`examen final
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 sousquestions). 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. 0 Question 1 On retrouve dans la feuille « Table pays » des informations sur divers pays du monde (voir la figure cidessous). a) Définissez le type t_pays qui permet de conserver les informations d’un enregistrement (une ligne) de la feuille « Table pays ». 1 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 2 Canada a une superficie de 9 984 670 km et qu’il y a 34 834 841 habitants, il y a donc environ 0.287 km par habitant (où 0.287 ≈ 9 984 670 / 34 834 841). 2 2 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. 3 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é). 4 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. 5 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. 6 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. 7 Question 2 Soit les définitions de type suivantes : Public Type t_pixel rouge As Double vert As Double bleu As Double End Type ' L’intensité du rouge est dans l’intervalle [0, 1]. ' L’intensité du vert dans l’intervalle [0, 1]. ' L’intensité du bleu dans l’intervalle [0, 1]. Public Type t_imageRGB tableau_pixels() As t_pixel hauteur As Integer largeur As Integer End Type ' La matrice des pixels de l’image. ' Hauteur du tableau tableau_pixels. ' Largeur du tableau tableau_pixels. a) Écrivez une fonction nommée moyenne_couleurs qui reçoit un t_pixel et qui retourne la moyenne de ses trois champs. 8 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. 9 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.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.3, 0.3, 0.3) (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) 2 2 4 4 On constate que chaque pixel dans l’image originale se répète 4 fois dans l’image agrandie. 10 11 Question 3 Soit un formulaire nommé formulaire_horloge. label_heures label_minutes spin_heures spin_minutes bouton_annuler bouton_ok 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 12 ' ' 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 13 ' 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 14 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 symbole As String est_un_metal As Boolean masse_atomique As Double End Type ' ' ' ' Public Type t_composant symbole As String pourcentage_molaire As Double End Type ' Le symbole de l’élément. ' Dans l’intervalle [0, 1]. Public Type t_alliage nom As String tab_composants() As t_composant nb_composants As Integer End Type Hydrogène, Hélium, etc. H, He, Li, etc. True si l’élément est un métal. En g/mol. ' Bronze, acier, etc. ' Ce qui compose l’alliage. ' Le nombre d’éléments dans l’alliage. É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. 15 16 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 salaire As Double no_chandail As Integer End Type ' L'équipe actuelle du joueur. ' Le salaire actuel du joueur. ' Le numéro de chandail du joueur. Public Type t_statistique matchs As Integer buts As Integer passes As Integer points As Integer penalite As Integer End Type ' Le nb. de match joué durant la saison. ' Le nb. de but obtenu durant la saison. ' Le nb. de passes obtenues durant la saison. ' Le nb. de points obtenus durant la saison. ' Les minutes de pénalité durant la saison. 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 nationnalite As String position As Integer saisons() As t_annee_carriere nb_saisons As Integer End Type ' Le nom du joueur (ex : "Sydney Crosby"). ' Le pays de naissance du joueur (ex : "Canada"). ' La position d'un joueur (ex : "gardien"). ' Les données sur chaque saison d’un joueur ' son nombre de saisons dans la LNH É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. 17 18 Annexe : Aide-mémoire Types de données Boolean Byte Integer Long Single Double String Objets et collections True ou False 0 à 255 -32 768 à 32 767 -2147483648 à 2147483647 -3,4×1038 à 3,4×1038 -1,79×10308 à 1,79×10308 Séquence de caractères Application Window Windows Workbook Workbooks Worksheet Sheets Range ou Cells Microsoft Excel Une fenêtre Collection de fenêtres Un classeur Collection de classeurs Une feuille Collection de feuilles 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 Exemple Dim une_feuille As Worksheet Set une_feuille = ActiveSheet Dim i As Integer i = 1 Fonctions de manipulation d’une chaîne de caractères Len : Mid : Left : Right : UCase : LCase : IsNumeric : Val : Asc : Chr : InStr : Longueur de la chaîne Sous-chaîne Début d’une chaîne Fin d’une chaîne La chaîne transformée en majuscules La chaîne transformée en minuscules Chaîne représente un nombre Transforme une chaîne en nombre Code ASCII d’un caractère Symbole ASCII d’un code ASCII Position d’une chaîne dans une autre. Len("Allo") retourne 4 Mid("Allo toi", 3, 4) retourne "lo t" Left("Allo", 2) retourne "Al" Right("Allo", 2) retourne "lo" UCase("Allo") retourne "ALLO" LCase("Allo") retourne "allo" IsNumeric("Allo") retourne False Val("123") retourne 123 Asc("A") retourne 65 Chr(65) retourne "A" 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 Exemples LBound : Borne inférieure du tableau UBound : Borne supérieure du tableau 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 ... arithmétiques : ... relationnels : ... logiques : ... de concaténation : Exemples + - * / \ Mod ^ < <= = >= > <> And Or Not & 17 Mod 5 vaut 2 et 5 ^ 3 vaut 125 15 <> 13 vaut True "Allo" & " toi" vaut "Allo toi" Instructions conditionnelles Exemple If expression booléenne Then ... ElseIf expression booléenne Then ... Else ... End If If x > 0 Call ElseIf x Call Else Call End If Facultatif 19 Then MsgBox(x & " est positif") < 0 Then MsgBox(x & " est négatif") MsgBox(x & " vaut 0") 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 Do … Loop While expression booléenne … 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 Exemple …parcourant une collection For Each élément In collection ... Next element 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) Feuille.Range(cellule1, cellule2) Feuille.Cells(ligne, colonne) Feuille.Rows(numéro) Feuille.Columns(numéro) Range("A1:E5") Range(Cells(1, 1), Cells(5, 5)) Cells(1, 1) ActiveSheet.Rows(1) ActiveSheet.Columns(3) Propriétés d’un objet de la classe Range Exemples .Cells : .Column : .Count : .Font : .Formula : .Row : .Value : .CurrentRegion Range("A1:E10").Cells(3, 2) ' Range("C6").Column ' Range("A1:E10").Count ' Range("A1").Font.Bold = True Range("A1").Formula = "=3 * 4" Range("C6").Row ' Cells(1, 1).value = 5 Cells(1, 1).CurrentRegion Cellule dans une plage Colonne de la cellule Nombre de cellules dans la plage Police de la plage Formule dans la cellule Ligne de la cellule Valeur de la cellule Plage des cellules adjacentes Méthodes et propriétés diverses Feuille.Rows(n).Delete : Collection.Count : .ListIndex .Value Vaut 6 Exemples Efface une ligne Nb. éléments de la collection Propriétés d’un objet ComboBox (liste déroulante) .AddItem(chaine) .Clear() .ListCount Cellule B3 Vaut 3 Vaut 50 Ajoute un élément à la liste Vide la liste Nombre d’éléments dans la liste Indice de l’élément courant (-1 si aucun élément n’est sélectionné) Valeur de la sélection courante ActiveSheet.Rows(2).Delete ActiveSheet.Rows.Count ' Nb. de lignes. WorkSheets.Count ' Nb. de feuilles. Exemples Liste.AddItem(“ETS”) ' Ajoute ETS à la liste Liste.Clear Liste.ListCount Liste.ListIndex = 0 ' Sélectionne le premier ' élément de la liste. If (Liste.Value = “ETS”) Then Fonctions nécessaire à l’accès aux fichiers Retourne un numéro de fichier disponible Ouvre un fichier Exemples FreeFile() Open Close Print # Input # Ferme un fichier préalablement ouvert Écrit des données dans un fichier texte Lit une ligne dans un fichier texte Put # Écrit dans un fichier binaire Get # Lit dans un fichier binaire numero_fichier = FreeFile() Open "test.txt" For Output As numero_fichier Open "test.bin" For Binary Access Write As _ numero_fichier Close #numero_fichier Print #numero_fichier, "Bonjour" Dim ligne As String Input #numero_fichier, ligne Dim tab_entiers(10) As Integer Put #numero_fichier, tab_entiers Dim tab_entiers(10) As Integer Get #numero_fichier, , tab_entiers 20