Cours Initiation au C++ 

MUMA016

Version du 14/01/2020


Sorbonne Universite 

F. Hecht, (FH)   X. Claeys  (XC) , Site des TD 


Année 2019-2020 (6 ECTC) 


Emploi du temps M1.


Examen S1 le mardi 7 janvier   2020 de 9h00 a 11h00 salle 14-24 101


Soutenance des projets: les 14 et 15 Janvier 2020  


le rapport et les sources de votre projet sont à envoyer avant le Lundi  13 Janvier 2020   08h00 de Paris.

à frederic.hecht@sorbonne-universite.fr  et à claeys@ljll.math.upmc.fr


Liste des projets attributer   liste-projets.txt

Les notes du partiel NotePartiel.txt

Horaires de passage pour la soutenance (en cas impossibilité envoiyez un courriel

à Frederic.hecht@upmc.fr pour changer l'horaire de passage ceci avant 11/01/2019). 

en salle 15-25 326b . 



MAHI

SALAH-EDDINE

x

14/01   14h00



x

14/01   14h00

RONDEAU

FLORENT

x

15/01   17h00

ELUERE

LUC

x

14/01   15h00

KANE

SEYDOU

x

14/01   15h00

LOUCAR

KHADIME

x

14/01   15h00

ALAVIOUN

SEYED

x

14/01   16h00

CONTI

PAOLO

x

15/01   16h00

DIALLO

MALICK TOUSSAINT

x

14/01   16h00

ALAMA

YVONNE

x

15/01   14h00

BLANKE

THOMAS

x

15/01   14h00

COUSINO

THEO

x

15/01   14h00

MINLOUBOU

DAVID

x

15/01   15h00

FERHAT

AMELIA

x

15/01   15h00

KEITA

IBRAHIMA

x

14/01   14h00

MEZZINE

ILIAS

x

15/01   16h00

OUARAB

SARA

x

15/01   16h00

SATOURI

MOINE

x

15/01   17h00



les étudiants sont absent à l'écrit. 


RJAIBA

IMEN

EKWORAWAT

ROERINA

FAN

CHUNYANG

HERVE

PIERRICK

LANCE

ARMAND

LANKERS

LAURA

LEVY

THEO

LIANG

JIAXIN

LUO

QIAOYU






F. Hecht 

            Jeudi                    8h30 – 10h30            Salle 14-15 103


T.D:X. Claeys, (T.D)     mardi 17h-20h a  l'Atrium en salle micro 435.

voir  https://www.ljll.math.upmc.fr/~claeys/MM016.html et le Moodle pour les TPs



les projets 




NotesdeCoursC++.pdf


Evaluation: Les sujets des evaluations précédentes 


Notation:

   Ex /20  = sup (examen ,(partiel+ examen) /2) 

   CC  /20  =    Note de TD  controle continue

   Pj /20  =         50% rapport et programme  

                                  + 50% soutenance 

Ex: note examen/20

Pj: Note Projet/20

CC:  note de contrôle continue/20 


Total=( max(Ex+Ex,Ex+Partiel)/2 + 3*Pj + CC) /100

 

Pour les debutants en programmation vous pouvez tester vos

programme avec le site:


Cours de C pour débutants, par Mathias Hiron

http://a.michelizza.free.fr/pmwiki.php?n=TutoCFrench.TutoCFrench

Bien programmer en langage C (Emmanuel Delahaye)

TUTORIELS C++


Pour bien comprendre la gestion mémoire

La gestion de la mémoire en langage C


Outil informatiques utilises sur votre ordinateur:


Si vous avez un ordinateur de type Windows 98, XP, Vista, 7, 8 

il faut utiliser l'environnement msys2 qui est le portage des outil unix sur Windows.

voir la page : installation de  msys2.html

Si vous avez un ordinateur de type Unix (Linux, FreeBSD, ....)

il faut installer les paquets suivants:

g++ et les outils de développement

X11 et les outils de développement

curl (outil réseau)

texlive

emacs ou xemacs



Si vous avez un ordinateur de type apple (OSX)

il faut installer les developper tools qui sont disponible sur App Store   (Gratuit)

installation MacTeX.pkg et texshop/ pour latex 


Pour Linux, 

installer les outils de développement  :

 g++, gcc, make,  et gnu plot



S1/Jeudi 12 Septembre: FH


le système unix,  les commandes de base de linux 

voir par exemple http://www.linux-france.org/article/debutant/debutant-linux.html


Présentation:

- Organisation du cours (partiel, projets, examen, soutenance)

- Site du cours 

- Calcul scientifique, C++

- Développement sous UNIX

- Les sous-sujets (Algorithmique, complexité, structure de données, graphes, analyse programmation dynamique)


Début de l'étude

- quelques commandes pwd, ls, mkdir, cd, pwd, vi, emacs

-programme  main.cpp qui retourne 0 ou 1 

la compilation et test de le terminal: 

 

cd s1

make main

test

./main

# test du retour de la fonction main dans le shell 

 if ./main ; then echo ok;else echo Pb;fi


- programme SerieDesUn.cpp : compilation et exécution à la main.



une premiere commande  de compilation du fichier SerieDesUn.cpp  


make SerieDesUn 


Attention au bug si compilation avec optimiseur -O

Pour lancer le programme faire

./SerieDesUn 


Pour installer les outils de développement sous Windows,   lire le fichier msys2.html

sous MacOS installer Xcode (gratuit sous App Store attention plus de 5Go)

sous linux ubuntu voir:


Tous les exemples des programme sont dans: 

s1 et la version zip s1.zip


voila les sortie du terminal pendant le cours:

ici  :  int s;  et les 1.F sont  remplacés pas des 1 dans serie-des-un.cpp 

MBP-FH6:s1 hecht$ make serie-des-un

c++     serie-des-un.cpp   -o serie-des-un

MBP-FH6:s1 hecht$ ./serie-des-un 

 s = 2147483647

MBP-FH6:s1 hecht$ time ./serie-des-un 

 s = 2147483647


real 0m3.675s

user 0m3.665s

sys 0m0.007s

# recompilation on version optimize théoriquement 3 fois plus rapide environ

# ici trop agressif, le code boucle


MBP-FH6:s1 hecht$ c++ -O     serie-des-un.cpp   -o serie-des-un

MBP-FH6:s1 hecht$ time ./serie-des-un 

^C


real 0m24.118s

user 0m24.088s

sys 0m0.019s

MBP-FH6:s1 hecht$ 


ici  :  float  s; et les 1 sont  remplacés pas des 1.F  dans serie-des-un.cpp 


MBP-FH6:s1 hecht$ make serie-des-un

c++     serie-des-un.cpp   -o serie-des-un

MBP-FH6:s1 hecht$ time ./serie-des-un 

 s = 1.67772e+07


real 0m0.062s

user 0m0.056s

sys 0m0.005s




S2/Jeudi 19  Septembre:  Axel Fourmont


Les opérateurs  des operateurs.pdf du C++

les note de cours de la semaine S2 s2/noteC++S2.pdf et le dossier des exemples s2

les pointeurs et références, les structure de contrôles for, while, if , else , break, continue

   -> relation entre pointeurs et tableaux


Oublie de l'instruction switch 


   switch ( expression )  

   case constant-expression : statement  

   [default  : statement]  


en fin instruction case ne pas oublie le break pour sortie du swicth et ne pas continue le case suivant. 


 do  

   statement  

   while ( expression ) ;  



Ecriture de fonction et explication du problème du passage des paramètres



Récuper les argument du shell et programmer le crible Erathostene 


Les deux examples coder sont  dans s2 et ou dans l'archive  s2.zip   



S3/Jeudi 26  Septembre:  F. Hecht


- Inclusion des fichiers d'entête 

  compilation separe  les .hpp les .cpp

- les variable global , dynamic et static , la pile (stack) et le tas (heap)

  


Une premiere classe R2 et surcharge d'opérateur 

  construction 

  constructeurs  par défaut

  les méthodes versus fonction.

  les surcharges de opérateurs pour finir 

  dans (méthode) et hors (fonction)  de la classe 

Tous les donnés sont dans s3 et ou dans l'archive s3.zip


S4/Jeudi 3  Octobre:  F. Hecht


Suite de la class R2

  les méthodes versus fonction.

  les surcharges de opérateurs pour finir 

  dans (méthode) et hors (fonction)  de la classe 


Tous les données sont dans s4 et ou dans l'archive s4.zip


Sujet TD du 8 octobre F. Hecht TD-08-10-2019.pdf



S5/Jeudi 10 Octobre: FH
Des classe avec des allocation  et des destructeurs


Problème de Operation de copie 

voir Règle 1 (section 4.4) 


Presentation du problème de vitesse de calcul dans les operations vectorielles sur 

des tableaux dû au recopie intempestive. 


Optimisation de classe A et problème de vitesse execution 

dans la programmation simple.


Tous les données sont dans s5 et ou dans l'archive s5.zip


S6/Jeudi 17 Octobre: FH


Algorithmique 

 chapitre 5 des notes de cours 



décalage d'un tableau 

Renumérote un tableau

Construction de l’image réciproque d’une fonction

Construction des triangles contenant un sommet donné


 

Tous les examples sont dans s6 ou s6.zip


S7/Jeudi 24 Octobre: FH


Algorithmique 

 chapitre 5 des notes de cours 


Construction des arête d'un maillage  (H-code) 


S8/Jeudi 4 novembre  Partiel


sujet du partiel Partiels/Partiel-4M016-2019-v2.pdf

S9/ Jeudi 14 novembre FH


Template et STL 


les premiers exemples de templates fonctions et classe sont dans s9


presentation de la STL 

introduction des conteneurs et itérateurs et de coût des associés.

Des exemples assez complet  d'utilisation sont dans le dossier stl ou stl.zip


S10/ Jeudi 21 novembre FH



Explication de la syntaxe des classe derives 

et des méthodes virtual (cf OG.cpp) dans les classe derives pour appeler

les méthodes des classe dérivé plutôt que  la méthode de la classe mère 

le graphique obtenu s10/plot.pdt


avec la note encapsulage du pointeur sur la classe abstrait avec ou non destructeur 

(cf. avec la méthode abstraite  clone et destructeur, ou sans )

les exemples et programme sont  dans s10 et/ou  s10.zip


S11/ Jeudi 28 novembre FH


calcul du nombre de composante connexe d'un graphe. 


- NbCCGraphe (c-version recusrive et non recursive)

avec utilisation des arc ayant un sommet donne (cf. utilistaion la construction de F^-1 d'un fonction

avec des listes chaine)


 - algo force brute en n*M operation: NbCCGraphe-brute

 - algo de type Kruscal:  NbCCGraphe-Kruscal



Pour generer les fichers de données des graphe à partir d'un fichier .msh

faire pour 3.msh:  

(awk -f msh2Graphe.awk 3.msh ; awk -f msh2c.awk 3.msh ) > 3.txt


remarque, il y a théoriquement un bug de le NbCCGraphe

car la profondeur  de pile est trés grande il faut donc utilise la version sans recursion (plus dur a programmer).


dans le dossier Dijkstra, il y a un de l'algorithme de Dijkstra programmé par B. Bernardi. 

les source et exemples sont dans s11 ou dans l'archive s11.zip


Jeudi 5 décembre 

 le cours est annulé en raison de la grève générale (pas de train) et est reporté au 

jeudi 12 décembre 


S12/ Jeudi 12 décembre  FH


Dernier cours du semestre.


Présentation de la differentiation automatique de programme


Aide au  projet.