Résumé

  • Cours : les mercredis 28/03, 18/04, 25/04 et 02/05
  • Local : 1.97 au B28 (montefiore)
  • Horaire : De 10h30 à 12h30
  • Langue : Français
  • Professeur suppléant : Laurent Mathy
  • Professeur coordinateur : Guy Leduc
  • Assistant : Samuel Hiard
  • Evaluation : 3 projets à rendre

Engagement pédagogique

Langue(s) du cours :

Langue française

Contenu du cours :

Dans ce cours, les étudiants apprennent le langage de programmation C++ et réalisent individuellement trois projets de complexité croissante dans ce langage.

Acquis d'apprentissage (objectifs d'apprentissage) du cours :

Etoffer vos connaissances en programmation orientée-objet et apprendre les particularités de C++. Etre capable d'écrire un programme d'une certaine complexité utilisant les concepts de base de C++.

Pré-requis et corequis / Modules de cours optionnels recommandés :

Connaissance de la programmation orientée-objet et du langage C. La connaissance du langage Java est un avantage.

Activités d'apprentissage prévues et méthodes d'enseignement :

Trois projets de programmation individuels en C++, de complexité croissante.

Mode d'enseignement (présentiel ; enseignement à distance) :

2ème quadrimestre à partir du 28 mars 2012. Quelques séances d'introduction au langage C++, de présentation des énoncés et de correction d'erreurs initiales, seront organisées les mercredis de 14 à 16h dans l'amphi 01/B37.

Lectures recommandées ou obligatoires et notes de cours :

Les transparents d'introduction au langage C++, un livre de référence sur ce langage, et quelques autres ressources.

Modalités d'évaluation et critères :

L'évaluation est essentiellement basée sur la correction des programmes réalisés. Le code produit devra respecter les consignes, être fonctionnel, lisible et robuste. Les étudiants auront 2 ou 3 semaines pour réaliser chaque projet. Pas d'examen.

Support

Vous pouvez télécharger ici

Enoncés

Enoncé du premier projet (pdf)

Erreurs pénalisantes pour le TP1 :
  • Il est impossible de tracer une ligne de droite à gauche
  • Il est impossible de tracer une ligne sortant partiellement de l'image
  • const mal utilisé dans méthodes getters
  • Les accesseurs ne sont pas ou seulement partiellement utilisés
  • Mauvaise gestion des indices de colonne dans hline()
  • getRGBA ne convertit pas 4 unsigned char en int au niveau binaire
  • getRGBA ne tient pas compte de l'énumération
  • L'ordre de getRGBA est incorrect / dépend de l'énumération
  • Le test des valeurs absurdes est manquant / minime
  • Mauvaise utilisation du mot-clé "const"
  • Non respect de la norme d'écriture (CONSTANTE, MaClasse, maVariable, maFonction())
  • Non respect des rêgles d'indentation
  • Commentaires insuffisants
  • Retard dans la remise du projet
  • Fonction main dans un fichier de la librairie (l'inclusion d'un fichier main séparé n'est PAS pénalisant)
  • La classe Pixel n'est pas définie
  • Les méthodes de Pixel ne sont pas statiques
  • Les méthodes de Pixel ne sont pas inline
  • L'énumération n'est pas définie / est définie de manière erronée
  • La classe Drawing n'est pas définie
  • Les méthodes inline sont définies dans le .cpp
  • Je ne peux pas tracer une ligne sur la rangée 0
  • setPixel ne fonctionne pas correctement
  • Avertissements à la compilation
  • Les composantes sont stockées dans un int, pas un unsigned char
  • Passage du paramètre de ligne par référence non const (un entier constant ne marche donc pas)
  • La librairie compile mais n'est pas utilisable / ne compile pas / dépendance dans l'ordre des include
Enoncé du deuxième projet (pdf)

Erreurs pénalisantes pour le TP2 :
  • Le mot-clé "virtual" n'est pas propagé le long de la hiérarchie
  • Mauvaise utilisation du mot-clé "const"
  • Il n'est pas possible de construire un polynome avec coefficients réels et/ou négatifs
  • Non respect de la norme d'écriture (CONSTANTE, MaClasse, maVariable, maFonction())
  • Non respect des rêgles d'indentation
  • Commentaires insuffisants
  • Définition d'un constructeur dans une classe abstraite
  • print() dans la classe Pi n'affiche pas "PI"
  • Pi n'est pas évalué correctement
  • Initialisation manquante dans l'évalution d'un polynome
  • La surcharge de l'opérateur "<<" est (partiellement) manquante / définie dans le main
  • La surcharge de l'opérateur "<<" n'utilise pas la méthode print()
  • Code source dans hpp pour fonctions non inline / main() dans fichier cpp d'une autre classe
  • Mauvaise représentation interne d'un polynome
  • Les variables ne sont pas protégées pas "private" ou "protected"
  • Retard dans la remise du projet
  • La classe polynome n'existe pas
  • Avertissements à la compilation (autre que "unused variable")
  • Le programme ne compile pas / le makefile ne s'appelle pas "makefile" / Travail non rendu
[Voir les points du TP1 et TP2]

Enoncé du troisième projet (pdf) / Librairie ImageDisplay

Modalités de remise des travaux

Les projets doivent être rendus avant 10h30 le jour prévu. Le premier projet doit être rendu pour le 18/04.
En cas de retard, une pénalité sera appliquée pour le projet tardif, à hauteur de N²/2 points en moins (où N est le nombre de jours entamés après la date limite de remise du projet).

Les codes sources archivés (zip, rar, tar.gz, 7z) devront être envoyés à S.Hiard@ulg.ac.be (uniquement les codes sources, pas de rapport).
Ils devront obligatoirement contenir un makefile portant le nom "makefile" et permettant de compiler avec l'instruction "make".
Les programmes doivent compiler sur les machines ms8** sans erreur ni avertissement et accomplir les tâches demandées sans aucune modification du code.
Ces consignes doivent être respectées à la lettre. Dans le cas contraire, l'étudiant obtiendra automatiquement la note de 0/20 pour le projet correspondant.
Vous pouvez rendre les projets à tout moment avant la date limite, mais toute soumission est définitive.

Disponibilités

En cas de problème, les étudiants peuvent me poser des questions chaque vendredi, entre 14h et 15h à mon bureau (II/99 au B28). En dehors de cette période, contactez le professeur suppléant.

Quelques conseils pour vous aider à déboguer vous-même :
  • Faites une recherche avec l'erreur donnée à la compilation.
  • Utilisez le manuel (ex: man printf).
  • En cas d'erreur d'exécution, effectuez des affichages réguliers (printf et fflush) pour savoir à quel moment se produit l'erreur exactement.
  • Erreurs fréquentes :
    • Utiliser un pointeur non alloué.
    • Ne pas utiliser le scope de la classe dans la définition d'une méthode (MaClasse::MaMethode).
    • Oublier de "delete" ce qui a été créé par "new".
    Consultez également cette page pour connaître d'autres erreurs fréquentes.
  • Facilitez votre débogage : Commentez votre code, espacez les blocs, indentez correctement. Une erreur est beaucoup plus facilement détectable dans un code propre.
  • Fermez les balises dès leur ouverture : Lorsque vous écrivez un bloc (ou une condition), définissez les accolades, parenthèses ou crochets en premier lieu, et remplissez le contenu ensuite. Ceci vous évitera de devoir chercher où placer le symbole manquant par la suite.

Ressources

Important

Le dernier projet doit être rendu pour le 25/05 à 23h59 au plus tard.