Cours Informatique de Base (MM009 )

Version du 10/12/2015


Université Pierre et Marie Curie

F. Hecht, (FH)   X. Claeys  (XC) ,  et G. Vergez (GV)


Année 2015-2016




Emploi du temps M1.


F. Hecht (Cours)

            Mercredi                    8h30 – 10h30            Salle 23-24 105

X. Claeys Cours)

            Jeudi                          8h30 – 10h30            Salle 23-24 102                                                                         


T.D: X. Claeys, ou  G. Vergez (T.D)  

voir https://www.ljll.math.upmc.fr/~claeys/MM009.html

            Lundi 13h30 – 16h30 salle 16-26  401 

           Jeudi 13h30 – 16h30 salle 16-26  401 


Rappel: examen le 16 /12/2015 de 14h00 à 16h30 en salle 45-55 salle 204. 


Les soutenances des projets auront lieu le mercredi 06/01 et Jeudi 07/01 sauf contre information.

les rapports sont à envoyer avant le Lundi 4 Janvier 2016  00h01 de Paris.

à Frederic.Hecht@upmc.fr et xavier.claeys@upmc.fr

avec les sources de votre projet.


Les heures  et jours de passage en salle 16-26  401 


DUBOS

VIRGILE

06/1  9h00

PACI

UGO

06/1 9h00

HADDADI

SOFIANE

06/1 9h00

VALENCIA LLANO

SANTIAGO

06/1 10h00

PAPOUTSIS

PANAYOTIS

06/1 10h00

CALZA

OLIVIER

06/1 10h00

ABETTAN

NOAM

06/1 11h00

TROCELLIER

LOUIS

06/1 11h00

BIDAULT

LAURENT

06/1 11h00

SHEN

KANGWEI

07/1 13h00

MELENDEZ APAGUENO

IVAN OMAR

07/1 13h00

CLEGG

EMMA

07/1 13h00

DELORME

BERTRAND

07/1 14h00

AIT MOULOUD

AREZKI

07/1 14h00

BEN AISSA

AMINE

07/1 14h00

BOUGHIDA

ABDELHAKIM

07/1 14h00

 


Ex: note examen

Pj: Note Projet

CC:  note de contrôle continue


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


les Notes du Partiel: sur 20. 


10,6

3301192

16,5

3363199

6

2960827

11,3

3200723

19,5

3002823

10,8

3001219


3501906


3000686

10,9

2803009

6,1

3526044

7,8

2761961

12,8

3000690

10,4

3150759

8,5

3262462

6,6

2966175

13,9

3205364



Emploi du temps M1.


 les notes finales  du semestre 1 seront visible dans le fichier :  //www.ann.jussieu.fr/~hecht/Notes/S1-MM0091.pdf


Les notes de cours en PDF (version du 23/04/2013) 


Les sujets des projets finaux de l'année  2014 :


 sujet-projets-2013.pdf


Evaluation: Les sujets des evaluations précédentes 


Notation:

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

   CC  /20  =    Note de TD

   Projet /60  =         50% rapport et programme  

                                  + 50% soutenance 


 


Pour les debutants en programmation vous pouvez tester vos

programme avec le site:




Cours de C pour débutants, par Mathias Hiron


Et d'autre site:

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


OpenGL: 

un support de cours OpenGL (E. Boyer)

un support de cours Robin Vivian Format PDF

  Cours OpenGL de l'ESSI par Michel Buffa

  Advanced Graphics Programming Techniques Using OpenGL



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

bibliothèque OpenGL et les outils de développement

bibliothèque GLUT ou freeglut et les outils de développement




Si vous avez un ordinateur de type apple (OSX)

il faut installer les developper tools qui sont sur les DVD installations avec Xcode 

ou sur App Store (Gratuit)

installation MacTeX.mpkg.zip  pour latex et Latest TeXShop



Pour Linux, 

installer les outils de devellopement  :

 g++, gcc, make, freeglut-dev






S1/Mercredi 9 Septembre: FH


le systeme 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 (mini-projet, partiel, projets, examen, soutenance)

- Site du cours 

- Calcul scientifique, C++

- Développement sous UNIX

- Les sous-sujets (Algorithmique, complexité, structure de données, graphes, TeX, OpenGL, automates, analyse lexicale et syntaxique, programmation dynamique)


Début de l'étude

- quelques commandes ls, cat, rm, cd, pwd, vi, emacs

- programme coucou.cpp: compilation et exécution à la main. Utilisation de make coucou

- analyse du programme, #include, using namespace (on y reviendra)

- distribution de la liste des opérateurs, mise à jour.


une premiere commande  de compilation du fichier prog.cpp ou prog.cc 


make prog 


pour lancer le programme fiare

./prog 


la liste des operateurs.pdf



Pour installer les outils de devellopement sous Windows,   lire 


Tous les exemples de programme sont dans: 

s1 et la version zip s1.zip



S1/Jeudi 10 Septembre: XC

* Rappel rapide sur le programme Hello World et la compilation

* Discussion sur les types de base

* Les entrées sorties standard cin/cout

* Les structures de controle if, switch,


S2/Mercredi 16 Septembre: XC

* Les structures de contrôle while, for

* Les références

* Les fonctions

* Inclusion des fichiers d'entête et include guards


S2/Jeudi 17 Septembre: XC

* Tableaux statiques

* Tableaux dynamiques

* Les pointeurs:

   -> relation entre pointeurs et tableaux

   -> pointeurs constants/pas constants

   -> allocation dynamique de mémoire (avec new)

* Compilation séparée (compilation avec -c etc....)


S3/Lundi 21 Septembre: XC

* déclaration/définition d'une classe

* notion d'instance de classe

* membres d'une classe

* méthodes d'une classe

* mot clé this

* pointeurs sur des objets

* membres statiques

* droit d'accès public/private

S3/Mercredi 23 Septembre: FH


les expression  left value et right value,

 les reference  et reference constant. 


les classe avec la classe R2

les constructeurs 

 par défaut, par copie, 


les méthodes versus fonction.


les surcharges de opérateurs pour finir 

quelque version de la classe R2 avec 


les definitions dans la classe

les definitions hors d la classe


les source est examples sont dans le dossier s3 version compresse s3.zip


S3/Jeudi 24 septembre: XC


* Gestion de l'allocation dynamique de mémoire dans les constructeurs et l'opérateur d'affectation

* L'héritage simple (mais pas les classes abstraites ni l'héritage multiple)

* J'ai commencé à parlé de la STL.



S4/Mercredi 30 Septembre: FH


Présentation du mini projet gl/mini-proj1.pdf, explication de l' exemple ex1 avec la bibliothèque freeglut.


Explication du calcul binaire en C  et utilisation de

fonction static dans un classe.


Algorithmique:


Programmation la resolution d'un sudoku avec un méthode récursive  gloutonne (méthode Resoudre)


méthode Ajoute (case k, valeur vk) 

  retourne si il y a pas d' incompatibilité  

  et ajoute dans ce cas la valeur vk a la case k et modifie  l'état des permutations.


Méthode retire(k) , à n'utilise que si la méthode Ajoute réponse true et

retire tous les modifications fait  par la méthode Ajoute (valeur et permutation). 



méthode Resoudre 


si la n° de case > 80 on  imprimer car on a trouver une grille,

si la case est deja rempli on passe a la case suivante

si la case est vide alors on 

 pour les 9 valeurs  on ajoute si possible cette valeur, 

  si oui on passe a la case suivante, puis on retire cette valeur. 


Il vous faut programme la fin de cette fonction résoudre 

5 lignes.


c.f. ligne 45 du fichier sudoku.cpp 



S4/Jeudi 31 septembre: XC

 Introduction de template 

  SLT et entree sortie.


S5/Mercredi 7 octobre: FH

   Correction et fin de l'algo du sudoku. voir s4

   Quelque remarque sur la fin d'un programme.


    Voir note de Cours de Chapitre 5.3 et 5.4  ( NotesdeCoursC++.pdf )

   Algorithmique: Décalage d'un tableau

   dépendance  temporelle des données 

   Renumérotation d'un tableau

   image réciproque d'une fonction. 


S5/Jeudi 8 octobre: XC


* présentation de gnuplot

* les arguments d'entrées de la fonction main

* présentation plus approfondie d'OpenGL




S6/Mercredi 14 octobre: FH


Calcul du nombre de composante connexe dans graphe


Algo brutal, Algorithm de Kruskal

Introduction du class graphe 

voir exemple dans  s6

  

S6/Jeudi  15 octobre: XC

 


* fonctions template

* classes template

* correction d'un exercice sur les pointeurs et les références


S7/ Mercredi 21 octobre : FH


  Continuation des algorithme de  la semaine 6

  voir programme s6



S7/ Jeudi 22 octobre : XC



presentation de latex 

* Structure d'un document Latex

\begin{document} .... \end{document}

* La compilation avec Latex

-> latex

-> les differents fichiers d'output

-> pdflatex

-> dvipdf, etc...

* Le sectionnement (\section, \subsection, \paragraph, etc...)

* Changer la fonte (bold, italique) et la taille, sauter une ligne...

* Le système des paquets

* Les équations

-> les "$"

-> les environnements equation, array, etc...

* La numerotation des equations

* Les tableaux

* Les figures en latex

-> inclure des images

-> dessiner avec pstricks


S8/ Mercredi 28 octobre :   Partiel 


S8/ Jeudi 22 octobre :XC

correction du partiel 

voir s8



S9/ Mercredi 4 novembre FH

Présentation de projet finaux sujet-projets-2015.pdf  le source sujet-projets-2015

 introduction des automates


Exo  pour le prochain cours écrire un automate qui teste les nombres entier décimaux divisible par 3.



S9/ Jeudi 5 novembre XC


* les méthodes virtuelles et les classes abstraites

* application au dessin de formes sous openGL

* les espaces de nom

* compléments sur les templates


les exemples sont dans s9 ou s9.zip


S10/ Mercredi 11 novembre  ( Pas de cours)


S10/ Jeudi 12 novembre  XC



Rudiments de HTML

* Structure HTML d'une page web

* Principe des balises

* Balises classiques:

 <h1>, <p>, <div>

* Listes:   <ul>, <ol>, <li>

* Tableaux: <table>, <tr>, <td>, <th>

* Placements des images dans une page

* Feuilles de style css

* Identificateurs

* dimensionnement et placement des blocs


S11/ Mercredi 18 novembre  FH

voir note de cours chapitre  11 de  NotesdeCoursC++.pdf

Explication de passage de de l’écriture BNF à la programmation. 

Une premiere calculette en  BNF étendue


voir note de cours section 11.1

lt l'exemple  programme et cours est dans  s11


Note de cours de Dominique Bernardi la compilation compilation.pdf

S11/ Jeudi 19 novembre  XC


S12/ Mercredi 25 novembre  XC




S12/ Jeudi 26 novembre  FH (Dernier cours)


Tous les exemple si-ont dans s12/ ou s12.zip


explication du la nouvelle  version de Calculette.cpp

et ajoute des fonctions a deux arguments


Introduction d'un calculer gainaient avec les logicels bison ou yacc. exp_simple.ypp


Introduction  des class pour faire une algèbre de fonctions fonctionsimple.cpp

et ntrodction des la notion encapsulage pour cacher le pointeur sur class pure virtual. 


Un version avec gestion memoire et operation de clonage pour simplifier la

genertion memoire ( non presenté)  fonctionsimple_withcopy.cpp



Construction d'un petit langagne avec un generation de code via l'algèbre de fonction 

ici tout les instruction sont des fonctiond sans paramètre. 


les classed pour le code (des fonctiond sans paramètre) et la table d'identificateur Expr.hpp

les grammaire bisin fexp.ypp

le programme principale pour tester le language main-lgexp.cpp

et un petit example d'utilisation en mode function pour être utiliser dans un prolet par example

main-fexp.cpp