IFT1166 Examen Final

Documents pareils
Introduction à l héritage en C++

Cours d initiation à la programmation en C++ Johann Cuenin

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

et Programmation Objet

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Programme Compte bancaire (code)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Une introduction à Java

Programmation stochastique

1.6- Génération de nombres aléatoires

INFO-F-105 Language de programmation I Séance VI

Cours d Algorithmique et de Langage C v 3.0

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Notions fondamentales du langage C# Version 1.0

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation en C/C++

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Le langage C++ (partie I)

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Programmation C++ (débutant)/instructions for, while et do...while

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Informatique III: Programmation en C++

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Langage Java. Classe de première SI

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

TP1 : Initiation à Java et Eclipse

Cours 1: Java et les objets

IRL : Simulation distribuée pour les systèmes embarqués

Java Licence Professionnelle CISII,

Programmer en JAVA. par Tama

Introduction à C++ et à wxwidgets

Plan Pédagogique du cours

TD3: tableaux avancées, première classe et chaînes

LE LANGAGE C++ ENAC 1997 A. DANCEL

Le prototype de la fonction main()

Conventions d écriture et outils de mise au point

Chapitre 10. Les interfaces Comparable et Comparator 1

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Manuel d'installation

PROJET 1 : BASE DE DONNÉES REPARTIES

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction au pricing d option en finance

as Architecture des Systèmes d Information

Java Licence Professionnelle CISII,

Tp 1 correction. Structures de données (IF2)

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Claude Delannoy. 3 e édition C++

Programmation avec des objets : Cours 7. Menu du jour

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Héritage presque multiple en Java (1/2)

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Algorithmique et Programmation, IMA


Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Introduction à l algorithmique et à la programmation M1102 CM n 3

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Projet de programmation (IK3) : TP n 1 Correction

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Le hub d entreprise est une application de déploiement des applications mais aussi un outil de communication

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Génie Logiciel avec Ada. 4 février 2013

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

2. Comprendre les définitions de classes

Programmation système I Les entrées/sorties

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Rafraichissement conditionné d'une page en.net

COMPARAISONDESLANGAGESC, C++, JAVA ET

GOL502 Industries de services

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Programmation Orientée Objet Java

Derrière toi Une machine virtuelle!

Classes et Objets en Ocaml.

Avertissement : Ce cours suppose la connaissance et la maîtrise du langage C CONTENU DU COURS BIBLIOGRAPHIE

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TD/TP PAC - Programmation n 3

Recherche dans un tableau

Le langage C. Séance n 4

TP : Gestion d une image au format PGM

Traduction des Langages : Le Compilateur Micro Java

Introduction à la programmation concurrente

Programmation en Java IUT GEII (MC-II1) 1

Web Tier : déploiement de servlets

INF 321 : mémento de la syntaxe de Java

TD/TP PAC - Programmation n 3

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Transcription:

Trimestre Eté, 2007 Mohamed Lokbani IFT1166 Examen Final Inscrivez tout de suite votre nom et le code permanent. Nom: Prénom(s): Signature: Code perm: Date : mardi 3 juillet 2007 Durée : 3 heures (de 17h30 à 20h30) Local : N-515 ; Pavillon Roger Gaudry Directives: - Toute documentation permise. - Calculatrice non permise. - Répondre directement sur le questionnaire. - Les réponses doivent être brèves, précises et clairement présentées. 1. /20 (1.1, 1.2, 1.3, 1.4) 2. /15 (2.1) 3. /20 (3.1, 3.2) 4. /15 (4.1) 5. /30 (5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9) Total: /100 Directives officielles * Interdiction de toute communication verbale pendant l'examen. * Interdiction de quitter la salle pendant la première heure. * L'étudiant qui doit s'absenter après la première heure remettra sa carte d'étudiant au surveillant, l'absence ne devant pas dépasser 5 minutes. Un seul étudiant à la fois peut quitter la salle. * Toute infraction relative à une fraude, un plagiat ou un copiage est signalée par le surveillant au directeur de département ou au professeur qui suspend l'évaluation. F.A.S IFT1166 Trimestre Eté, 2007: Examen Final 1/12

Exercice 1 (20 points) 1.1 Expliquez brièvement la notion de «fuite de mémoire». 1.2 Écrivez les instructions correspondantes pour libérer l espace mémoire alloué pour chacune des instructions ci-dessous : Allocation Libération A string *p = new string; B string *p = new string[3]; C Temps *p = new Temps(12,0,0); D int *p = new int(33); E int *p = new int[33]; 1.3 Identifiez et corrigez les erreurs dans le programme suivant, s il y en a. #include <iostream> using namespace std; int main() { int *p1 = new int (5); int *p2 = p1; cout << "p1 pointe la valeur " << *p2 << endl; delete [] p1; delete p2; return 0; IFT1166 Trimestre Eté, 2007: Examen Final 2/12

1.4 Le programme suivant compile correctement mais se plante lors de l exécution avec un message «segmentation fault». Il contient en effet 3 erreurs fondamentales reliées à la manière avec laquelle le programme gère l espace mémoire alloué. Trouvez ces erreurs et corrigez-les. 1 2 3 4 5 6 7 8 9 10 11 #include<iostream> int main() { using namespace std; double* d = new double; for(unsigned int i = 0; i < 3; i++) { d[i] = 1.5 + i; for(unsigned int i = 2; i >= 0; i--) { cout << d[i] << endl; IFT1166 Trimestre Eté, 2007: Examen Final 3/12

Exercice 2 (15 points) Dites si les lignes mentionnées ci-dessous sont syntaxiquement correctes ou non. Pour chacune des lignes incorrectes, indiquez la raison. #include <iostream> using namespace std; class C { private: int x; protected: int y; public: int z; C(){x=0;y=0;z=0; ; class C1: public C { private: int x1; public: int y1; C1(){x1=0;y1=0; ; class C2: private C { private: int x2; public: int y2; C2(){x2=0;y2=0; ; int main() { C1 o1; C2 o2; cout << o1.x << endl; cout << o2.y << endl; cout << o1.z << endl; cout << o1.x1 << endl; cout << o1.y1 << endl; cout << o2.z << endl; cout << o2.x2 << endl; cout << o2.y2 << endl; return 0; IFT1166 Trimestre Eté, 2007: Examen Final 4/12

Exercice 3 (20 points) 3.1 Pour chacune des fonctions «f, m et g», justifiez si elle va s'exécuter correctement (la fonction termine) ou non. Si elle s'exécute correctement, dites ce qu'elle calcule. // f est appelée qu'avec des valeurs de n >= 0 par exemple f(3) int f(int n){ if(n == 0) return 1; else return f(n+1); Exécution correcte et affichage en sortie : Exécution Incorrecte : // m est appelée qu'avec des valeurs de n < 0 par exemple m(-3) int m(int n){ if(n == 0) return 0; else { int result = m(n-1); result += n; return result; Exécution correcte et affichage en sortie : Exécution Incorrecte : // g est appelée avec ("Il etait une fois un petit chaperon rouge",'t') int g(char* p, char c){ return (*p)?(*p==c) + g(p+1,c):0; Exécution correcte et affichage en sortie : Exécution Incorrecte : IFT1166 Trimestre Eté, 2007: Examen Final 5/12

3.2 Expliquez les erreurs dans la fonction récursive ci-dessous et proposez une version corrigée (vous devez donc coder une nouvelle version qu en modifiant le corps de la fonction. L en-tête doit rester la même) : double plus_grande_valeur(int nb, double *valeurs) { int a, b; a = plus_grande_valeur(nb/2, valeurs); b = plus_grande_valeur(nb/2, valeurs + nb/2); if(a >= b) return a; else return b; IFT1166 Trimestre Eté, 2007: Examen Final 6/12

Exercice 4 (15 points) Soit une classe «Pile» déjà définie et qui contient les méthodes suivantes : // Elle permet d empiler les éléments du type char void push(char); // Elle permet de dépiler les éléments. Elle retourne l élément char pop(void); // Elle vérifie si la pile est vide. Retourne «true» si c est // le cas, sinon «false». bool estvide(void); En utilisant la classe Pile définie précédemment, écrivez la fonction «verifbalance» qui vérifie si un tableau de caractères contenant des parenthèses est bien «parenthésé». Par exemple : char par0[] = ""; // ok char par1[] = "(()())"; // ok char par2[] = "((((()(()())())())()))"; // ok char par3[] = "((()())"; // incorrect. Manque ) char par4[] = "(()(())))"; // incorrect. Manque ( char par5[] = ")("; // incorrect. Manque ( et ) La signature de la méthode est comme suit : bool verifbalance(char * str) La fonction doit retourner «true» si le tableau est correctement balancé sinon «false» dans le cas contraire. IFT1166 Trimestre Eté, 2007: Examen Final 7/12

IFT1166 Trimestre Eté, 2007: Examen Final 8/12

Exercice 5 (30 points) Soit le fragment de code suivant : //================= // Classe Vehicule //================= class Vehicule { public: Vehicule(int nbroues = 0); virtual ~Vehicule(); virtual void Affiche() const; int GetRoues() const; void SetRoues(int Roues ); private: int m_nbroues; ; Vehicule::Vehicule(int Roues){ m_nbroues = Roues; int Vehicule::GetRoues() const{ return m_nbroues; void Vehicule::SetRoues(int Roues){ m_nbroues = Roues; void Vehicule::Affiche() const{ cout << "Vehicule"; Vehicule::~Vehicule() { //================= // Moto class //================= class Moto:public Vehicule{ public: Moto(int Roues = 2); ~Moto(); ; // Constructeur de Moto à compléter Moto::~Moto (){ //=================== // Classe Voiture //=================== class Voiture:public Vehicule { public: Voiture (int Roues = 4); void Affiche() const; ; // Constructeur de Voiture à compléter void Voiture::Affiche() const{ cout << "Voiture"; //============================= // Classe Parc de stationnement //============================= class Parc { public: Parc(int maxvehicules = 20); ~Parc(); int NbStationnes() const; void Garer(Vehicule& v ); int TotalRoues() const; void Affiche() const; Parc(const Parc&); Parc& operator=(const Parc&); private: int m_nbvehicules; Vehicule **m_vehicules; ; // Constructeur de recopie et opérateur= sont // déjà codés. // Constructeur de Parc à compléter // Destructeur de Parc à compléter int Parc::NbStationnes() const { return m_nbvehicules; // Méthode Garer à compléter // Elle stocke le véhicule (l argument) dans // le tableau m_vehicules // Méthode Affiche à compléter // Elle affiche en sortie le type du véhicule // et son nombre de roues // Comme exemple de format d affichage: // Voiture:4 // Méthode ToTalRoues à compléter // Elle retourne le nombre total de roues dans // le parc de stationnement //=================== // Fonction «main» //=================== int main(){ Parc Parking; Voiture chevy; Voiture camry; Moto harley(3); Moto honda; Parking.Garer(chevy); Parking.Garer(honda); Parking.Garer(harley); Parking.Garer(camry); Parking.Affiche( ); cout << endl; cout << "Le parc contient : "\ << Parking.TotalRoues() \ << " Roues" << endl; return 0; IFT1166 Trimestre Eté, 2007: Examen Final 9/12

5.1 Citez au moins deux instructions du programme qui forcent l'utilisation de la ligature dynamique par ce dernier. 5.2 Le programme contient-il une classe abstraite? Si oui, nommez-la. 5.3 Nommez les classes qui dérivent de la classe «Vehicule». 5.4 La classe «Parc» peut-elle conceptuellement parlant devenir une classe de base pour les autres classes du programme? 5.5 Le compilateur va-t-il prévenir la classe «Voiture» pour redéfinir la méthode «GetRoues»? 5.6 Le compilateur va laisser la classe «Voiture» redéfinir la méthode «GetRoues», mais ce n'est pas une très bonne idée de le faire? Est-ce vrai? 5.7 La méthode «SetRoues» ne peut être utilisée de manière polymorphique car ce n'est pas une méthode virtuelle (ou virtuelle pure). Est-ce vrai? IFT1166 Trimestre Eté, 2007: Examen Final 10/12

5.8 Écrivez le code des méthodes suivantes : (a) Constructeur de la classe «Moto» (b) Constructeur de la classe «Voiture» (c) Constructeur de la classe «Parc» (d) Destructeur de la classe «Parc» (e) Méthode «Garer» de la classe «Parc» IFT1166 Trimestre Eté, 2007: Examen Final 11/12

(f) Méthode «Affiche» de la classe «Parc» (g) Méthode «TotalRoue» de la classe «Parc» 5.9 Tout en justifiant votre réponse que va afficher en sortie le précédent programme? IFT1166 Trimestre Eté, 2007: Examen Final 12/12