Semestre 7‎ > ‎

CES7AJ - CES9AK - C/C++

Introduction to C/C++

Responsables : Pierre-Etienne MOREAU, Professeur, Pierre-Etienne.Moreau@univ-lorraine.fr
                          Cédric ZANNI, Maitre de Conférences, Cedric.Zanni@univ-lorraine.fr
Durée du module : 36 heures  
Crédits ECTS : 4

Objectifs pédagogiques
“This course provides a fast­paced introduction to the C and C++ programming languages.
You will learn the required background knowledge, including memory management, pointers, 
preprocessor macros, object­ oriented programming, and how to find bugs when you
inevitably use any of those incorrectly.” (MIT 6.S096)

Contenu - Programme
Mots clefs :
langage machine, langage de programmation, microprocesseur, compilation, structures de donnée, gestion de la mémoire, outils de build

Outils utilisés
GCC, Gvim, Emacs, VisualStudio

Descriptif : 
    Comprendre de manière abstraite le mécanisme d’exécution des programmes
    Être capable de comprendre le fonctionnement d’un programme
    Être capable d’écrire ou de modifier un programme écrit en C ou C++

Fonctionnement d’un ordinateur


  • architecture
  • rappels sur l'exécution d'un programme
  • processeur, langage machine
  • langage d’assemblage, assembleur
  • langage haut niveau, compilation
  • notion de machine abstraite
  • mémoire, donnée, programme
  • introduction à Unix

Compilation pipeline

  • pré­processeur
  • compilation, règles de déclaration, règles de typage
  • compilation séparée, linkage
  • conception modulaire de programmes
  • outils de build (makefile)

Syntaxe et sémantique de core C

    • types de données élémentaires
    • codage de l’information (int, short, char)
    • structures de contrôle
    • notion de tableau
    • notion de chaine

Organisation de la mémoire

    • notion d’adresse
    • déréférencement
    • pile et tas
    • allocation dynamique

          Structures de données avancées

            • type record
            • allocation dynamique et gestion de la mémoire

              Introduction à C++

                • encapsulation des données, classes, espace de noms
                • gestion de la mémoire, constructeurs et destructeurs

                  Programmation objet

                    • héritage, polymorphisme
                    • liaison dynamique
                    • entrées/sorties

                        Utilisation avancées

                          • standard template library
                          • pointeurs de fonctions
                          • exceptions
                          • standardisation

                                Applications

                                  • Exemples issus de problématiques liées aux départements autres que I&S
                                  • Analyse d'image avec OpenCV
                                  • Programmation parallèle avec MPI
                                Séances :
                                1. (26/09/2017) - Fonctionnement d'un ordinateur, introduction à Unix. Cours au tableau. TD.
                                2. (03/10/2017) - Compilation pipeline [S096, MIT]. TD.
                                3. (10/10/2017) - Types de données élémentaires. TD.
                                4. (17/10/2016) - Structures de contrôle et notion de chaine. TD.
                                5. (24/10/2017) - Notion d'adresse : allocation dynamique des tableaux et de chaines. TD.
                                6. (07/11/2017) - Types de données structurées. TD + projet
                                7. (14/11/2017) - Introduction à C++ [S088, MIT]. TD (lecture and assignment 4). 
                                8. (21/11/2017) - Conception objets, héritage, polymorphism [S088, MIT]. TD (lecture and assignment 5).
                                9. (05/12/2017) - Projet
                                10. (12/12/2017) - Interface graphique. TD.
                                11. (19/12/2017) - Standard Template Library. CoursTD.
                                12. (09/01/2018) - Projet
                                Mode d’évaluation : 
                                Contrôle continu, projet et examen final.

                                Supports de cours :
                                Compléments de cours :
                                vous devez lire ces livres si vous voulez progresser
                                • Le langage C, Norme ANSI, Brian W. Kernighan, Denis M. Ritchie, Dunnod (une référence)
                                • C: A Reference Manual, Fifth Edition,  Samuel P. Harbison, Guy L. Steele Jr., Pearson, 2002 (mon préféré)
                                • Effective C++, Third Edition, Scott Meyers, Addison Wesley, 2005 (excellent mais il faut déjà connaitre un peu le langage)
                                • C++ Primer, Fifth Edition, Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo, Addison Wesley, 2013 (un gros pavé pas facile à avaler)
                                • Autres cours introductifs :
                                  • CS197U, UMassAmherst, A Hands-on Introduction to UNIX
                                  • EECS381, University of Michigan (matériel de très bonne qualité)
                                  • S087, MIT (très détaillé mais peu pédagogique)
                                  • S088, MIT (assez classique)
                                  • S096, MIT (premier cours intéressant, ensuite cela devient classique)
                                  • 6.S096, 2013, MIT
                                  • 6.S096, 2014, MIT
                                • un article intéressant pour les "vieux" programmeurs : How to C in 2016

                                CES7AJ - web