UdMHaut
UdMBAS

IFT1169
Programmation Avancée en C++

Département d'informatique et de recherche opérationnelle

Direction de l'enseignement de service en informatique
 

Image C++
 
Automne 2024

Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Cours
après Cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Sessions antérieures

  Démonstration #1  
 
Dernière mise à jour : mercredi 11 septembre 2024 10:52:20
 


Buts:

Directives: On vous conseille de faire la démonstration en équipe de 2, mais de vous brancher tous les 2 à tour de rôle.



A. Connexion

  • Pour se connecter

    Quand vous vous installez devant une machine de la DESI, vous avez une fenêtre vous demandant :

      Login : entrez ici votre nom d'usager
      Mot de passe : entrez ici votre mot de passe initial
      Domaine : choisissez ads-iro

    Dans le cas d'une première connexion, suivre pour cela les directives affichées. Une copie de ces directives se trouvent aussi dans cette page. Vous ne pouvez pas appliquer ces directives dans le cas d'une première connexion, en utilisant à titre d'exemple telnet, vous devez être physiquement en face d'une machine de la DESI pour pouvoir le faire.

  • Pour terminer une session de travail

    1. cliquer sur les touches Ctrl-Alt-Suppr (i.e. Ctrl-Alt-Del) simultanément,
    2. choisir Log Off
    3. confirmer par un yes. Ne faites surtout pas un shutdown (un arrêt complet) de la machine. Pas besoin d'éteindre l'écran. L'ordi. est programmé pour le faire après quelques minutes d'inutilisation.

B. Session de travail

Sur le bureau (de l'écran), appelé aussi Desktop, vous avez 2 icônes, qui sont:

  • Raccourcis DESI Un dossier qui contient les éléments de base suivant:

    1. Documents personnels: Un dossier où vous stockez vos fichiers personnels. Lorsque vous enregistrez un fichier à partir d'un logiciel assurez-vous d'enregistrer le fichier dans ce dossier. Ce dossier se trouve sur le disque R:\ qui est en réalité un serveur de fichiers dans lequel vos données seront sauvegardées. Attention, assurez-vous de ne pas dépasser les 32Mo de taille totale sur votre disque R.

    2. Cours-DIRO: Un dossier où vous trouverez les accès aux répertoires des différents cours.

    3. Branchement Unix: Un icône qui vous permet de vous brancher sur votre serveur Unix attitré.

  • Recycle Bin: La poubelle où vous déposez les fichiers à jeter.

  • Courrier Internet: Le contenu du lien suivant décrit les outils nécessaires (webmail) pour lire votre courriel. N'hésiter pas à demander à vos démonstrateurs de vous aider à configurer le renvoi (forward) de votre courriel vers une autre adresse. Attention à la balle de ping pong (bounce)!
    Votre adresse électronique est votre login suivi de @IRO.UMontreal.CA

    Par exemple, l'étudiant Fred Cailloux ayant comme login caillouf, aura comme adresse électronique caillouf@IRO.UMontreal.CA

    Attention ce n'est pas tout le monde qui a une boite aux lettres @iro, voir ce lien.

    L'utilisation du webmail nécessite un mot de passe, celui de Unix (s'il est différent de celui de windows), sinon celui de windows fera l'affaire.

Plus de détails sur l'utilisation des machines vous seront donnés par les démonstrateurs.

N'oubliez pas de vous débrancher quand vous aurez fini!

C. Accès à la page Web du cours

  1. Utilisez IE ou Mozilla pour aller chercher l'énoncé de la démonstration 1 (ce texte).

  2. Lancer Mozilla en spécifiant l'adresse: http://www.iro.umontreal.ca/~dift1169

    puis cliquez sur les liens appropriés. N'hésitez pas à fouiller les liens de la page Web du cours.

D. Familiarisation à Unix

Vous allez utiliser Linux, une version de Unix.

  1. Essayez quelques commandes Unix (ex: ls, mkdir, cd, pwd, ...)

  2. Utilisez la commande mkdir pour créez les répertoires suivants dans votre compte:

      IFT1169/
      IFT1169/Devoirs/
      IFT1169/Demos/

  3. Utilisation de la commande man.

Ceux qui ne sont pas familiers aux systèmes Unix doivent impérativement prendre le temps de lire les documents sur Unix. Un autre document sur Unix, plus complet est disponible sur ce lien.

E. Familiarisation à Windows

Refaire "D" mais cette fois-çi à partir de Windows.

F. Éditeurs de texte

Les plus utilisés, vi ou emacs ou Scintilla ou TextPad etc. etc. Pour plus de détails sur l'éditeur Emacs voir ce lien. Les outils TextPad et SciTE sont assez simples à utiliser, en cas de troubles appuyer sur F1 pour activer l'aide.



A. Informations sur les outils de compilation

Il y a plusieurs manières pour utiliser le compilateur g++ sur les postes de la desi.

  • MinGW

    Procéder comme suit: Appuyer sur ... Démarrer, Tous les programmes, MinGW, MSYS, msys
    Vous allez obtenir une console ordinaire comme une fenêtre dos ou xterm. Vérifier si le compilateur est présent avec l'aide de la commande g++ -v vous devez obtenir une série d'informations ainsi que la version du compilateur (gcc version 3.4.2)

  • SciTE

    Procéder comme suit: Appuyer sur ... Démarrer, Tous les programmes, Scintilla Text Editor, SciTE
    Vous allez obtenir une ide. Cette interface fera appel à g++ installer à part (par MinGW) pour compiler des programmes C++. Donc c'est juste MinGW+ide.

  • Dev-C++

    Procéder comme suit: Appuyer sur ... Démarrer, Tous les programmes, Boodshed Dev-C++, Dev-C++
    Vous allez obtenir une ide. Cette interface fera appel à un compilateur g++ intégré (built-in) dans l'interface.

  • Branchement Unix

    Procéder comme suit: Raccourcis DESI, Branchement sur UNIX, login et password.
    C'est l'équivalent de MinGW sous windows à une version du compilateur près (ici 4.0.1).

B. Informations sur le compilateur g++ utilisé dans ce cours

Lorsque le compilateur est lancé, on peut spécifier des options sur la ligne de commande, afin de modifier le comportement du compilateur. Les options sont des lettres ou mots précédés d'un tiret et suivis si c'est nécessaire par un paramètre. Voici les plus importantes options; pour plus de renseignements, faites man g++.

Pour tester les procédures de compilation et de remise électronique, vous allez écrire un programme qui ne fait rien! Il se contente de déclarer une méthode main ordinaire avec un type de retour pour signifier une exécution correct. Le code source de ce programme devra être sauvegardé dans le fichier exemple.cpp

Soit donc exemple.cpp le fichier que nous désirons compiler:

g++ exemple.cpp

Par défaut, le compilateur compile le fichier exemple.cpp en un fichier objet (qui sera détruit automatiquement à la fin de la compilation) et combine ce fichier avec les librairies C++ pour produire le programme exécutable a.out. Pour exécuter le programme, il faut alors taper a.out sous Windows/Unix.

g++ -o prog exemple.cpp

L'option -o nom indique quel nom utiliser pour le fichier produit par le compilateur plutôt qu'utiliser le nom a.out. Donc ici, le compilateur compile le fichier exemple.cpp en un fichier objet (qui sera détruit automatiquement à la fin de la compilation) et combine ce fichier avec les librairies C++ pour produire le programme exécutable prog.

g++ -Wall exemple.cpp

L'option -Wall demande au compilateur de signaler tous les endroits dans le fichier compilé qui sont des utilisations douteuses du langage C++ (par exemple des instructions qui ne sont pas portables à d'autres compilateurs). L'option Wall vient de Warnings ALL.

g++ -g exemple.cpp

L'option -g demande au compilateur de générer des informations de déboguage dans l'exécutable produit (ce qui est nécessaire si vous utilisez le débogueur gdb).

g++ -O exemple.cpp

L'option -O demande au compilateur de faire de son mieux pour générer du code exécutable efficace.

Il est possible de combiner plusieurs options sur une ligne de commande. Par exemple:

g++ -O -Wall -o prg exemple.cpp

C. Compilation sur les deux systèmes

Utiliser les précédentes commandes. Sauf dans le cas des ide où il faut suivre les indications mentionnées sur chacun des outils.

D. Remise électronique

Le système de remise de travaux pratiques permet à un étudiant de copier des fichiers dans un sous répertoire du compte de démonstration et ce, de façon sécuritaire pour tout le monde, car ce sous répertoire n'est accessible qu'aux seuls démonstrateurs d'un cours donné. Il permet aussi à un étudiant de vérifier ce qu'il a remis pour un travail (TP) donne dans un cours. Dans cette démonstration, il vous est demandé de suivre les étapes précédemment décrites puis de remettre le programme exemple.cpp après vous être assuré que ce programme s'exécute correctement.

La remise électronique doit se faire obligatoirement à partir de Linux, et elle s'effectue comme suit :

  • De votre console de travail, tapez la commande: remise ift1169 tp0 exemple.cpp
  • Pour vérifier que la procédure de remise s'est déroulée correctement, tapez la commande:
    remise -v ift1169 tp0
  • Pour plus de détails sur la procédure de remise, voir le lien suivant ou consulter à l'aide de la commande man la commande remise (c-à-d tapez dans votre console: man remise).

    Notes importantes

    Une fois les fichiers remis, l'étudiant ne peut plus les effacer. Par contre rien ne l'empêche de remettre plusieurs fois un travail s'il le désire. Les anciens fichiers seront tout simplement écrasés par les nouveaux.

    N'oubliez pas de vous déconnecter à la fin de la démonstration. Demandez le cas échéant à votre démonstrateur comment procéder. Si vous oubliez de vous déconnecter, le support informatique du DIRO peut à sa discrétion décider de bloquer votre compte. Vous donnez également à d'autres utilisateurs la possibilité de détruire/lire/modifier vos documents...



    C'est quoi un fichier "makefile"? C'est quoi son intérêt? C'est quoi son contenu? Comment l'utiliser? etc. Pour toutes ces questions et bien d'autres, télécharger le fichier compressé DocMakefile.zip qui contient un document théorique sur le fichier "makefile" et des fichiers pratiques pour les tests.



  • Q0: Des exercices sur l'héritage simple, fonctions virtuelles et polymorphisme sont disponibles sur cette page web.

  • Q1: Pour chacune des affirmations suivantes, indiquer laquelle constitue un exemple d'héritage multiple.

    • a. La classe B dérive deux fois de la classe A.

    • b. La classe C qui dérive de la classe B ; sachant que B dérive de la classe A.

    • c. La classe D dérive des classes C et B ; sachant que B et C dérivent de la classe A.

    • d. La classe C dérive des classes B et A.

    • e. La classe B dérive de la classe A.
  • Q2: Pour chacune des affirmations suivantes, indiquer laquelle est vraie.

    • a. Pas plus que deux classes peuvent être utilisées comme classes de base dans un héritage multiple.

    • b. Le nom d'une fonction membre ne peut pas être utilisé plus d'une fois dans un multiple héritage de la classe de Base.

    • c. Une virgule sépare les multiples classes de base spécifiées dans la spécification de la classe dérivée.
  • Q3: Lequel des éléments suivants peut-être utilisé à la place de l'héritage multiple?

    • a. héritage simple.

    • b. integration.

    • c. composition

    • d. fonctions virtuelles.

    • e. opérateur de résolution de portée.
  • Q4: Comment peut-on modifier les schémas d'héritage suivants, pour éviter d'utiliser l'héritage multiple? Classes de Base: Études (les études effectuées) ; Employé (des informations sur l'employé)
    • La classe gestionnaire dérive de Études et Employé
    • La classe scientifique dérive de Études et Employé.
  • Q5: Soit les 4 classes suivantes:
    • X la classe de base (membres: string Id, et afficher_Id).
    • Y & Z héritent de la classe de base.
    • W hérite des deux classes Y & Z.
    • -1- Écrivez les classes X, Y, Z et W de telle manière que la fonction main suivante puisse fonctionner correctement.

      int main() {
        W wtest("wx");
        cout << "Id\n" << wtest.Id;
        wtest.print();
        return 0;

      }

    • -2- reprendre la question -1-, avec la contrainte suivante: X dérive d'une classe abstraite A, dont affiche_Id est la fonction virtuelle.



  • [top]


    dift1169@iro.umontreal.ca