reorganisation du cours

This commit is contained in:
gwen 2017-04-10 17:47:40 +02:00 committed by Benjamin Bohard
parent b988c5cc07
commit f649769545
4 changed files with 146 additions and 197 deletions

View File

@ -110,10 +110,10 @@ Exemple d'algorithme
\end{algorithmic}
\end{algorithm}
Exemple d'algorithme avec deux implémentations
-----------------------------------------------
Exemple d'algorithme avec son implémentation
---------------------------------------------
Soit l'algorithme de factorielle suivant :
Soit l'algorithme de factorielle suivant,
.. raw:: latex
@ -123,40 +123,37 @@ Soit l'algorithme de factorielle suivant :
\Function{factorielle}{$n$}\Comment{La fonction récursive factorielle}
\BState \emph{parametre} : $n$ entier
\If{$n = 1$}
\BState \emph{Return} : 1
\BState \emph{Sortie} : 1
\Else
\BState \emph{Return} : $n * \Call{factorielle}{n-1}$
\BState \emph{Sortie} : $n * \Call{factorielle}{n-1}$ \Comment{On appelle la fonction dans l'algorithme lui-même}
\EndIf
\EndFunction
\end{algorithmic}
\end{algorithm}
Ou encore, en **pseudocode** (algorithme vague) :
.. function:: factorielle(n:int)
::
begin
if n=1
return 1
else
return n * factoriel(n-1)
end if
end
Implémentation en python :
et son implémentation en python :
.. literalinclude:: code/factorielle.py
:language: python
Implémentation en OCaml :
En voici une autre implémentation (en OCaml) :
.. literalinclude:: code/factorielle.ml
:language: ocaml
On remarque que le **pseudocode** (l'algorithme vague) est très proche de
la syntaxe du python :
.. function:: factorielle(n:int)
::
if n=1
return 1
else
return n * factorielle(n-1)
end if
Qualité d'un algorithme
-----------------------

View File

@ -53,123 +53,70 @@ Séance 3 : Chaînes et fichiers
+ glob.glob
+ Sans doute ces points peuvent être intégrés dans la séance 2.
Séance 4 : Python Objet & Bases de données
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Classe
+ Méthodes
+ Surcharge d'opérateurs
+ Construire un exemple de classe progressivement
Idéalement un exemple avec l'utilisation d'une base de données MySQL
utiliser `pymysql`
Deuxième journée : Python Scientifique
--------------------------------------
Séance 5 : Calcul numérique avec Numpy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lecture fichiers (type structuré)
+ Algèbre de base
+ broadcasting
+ stacking(hstack,vstack,dstack)
+ boucle ou pas boucle einsum vs numba comme exemple
Séance 6 : Graphiques avec Matplotlib
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ `visite de la grande galerie <http://matplotlib.org/gallery.html>`_
et de `la petite galerie <http://www.loria.fr/~rougier/coding/gallery/>`_
+ construction d'un graphe simple en 2d en ajoutant des éléments
graduellement pour enrichir le graphe (légendes, titre, ....)
+ imshow , contouplot
+ 3D ?
Séance 7 : Calcul scientifique avec Scipy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ optimisation
+ intégration, ode
+ stats
Séance 8 : Cas pratique de mise en oeuvre
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ écrire des instructions conditionnelles avec alternatives,
+ démontrer quune boucle se termine effectivement.
+ organisation modulaire des programmes
+ programmation structurée.
1. Récupérer des données physiques ouvertes sur le réseau (T°, ...)
2. Appliquer un traitement
3. Mettre en forme une représentation graphique des données
+ **Variables** : notion de type et de valeur dune variable, types simples.
Les types simples présentés sont les entiers, flottants, booléens et chaînes de caractères.
+ **Variables** : notion de type et de valeur dune variable, types simples.
Les types simples présentés sont les entiers, flottants, booléens et chaînes de caractères.
+ **Expressions et instructions simples** :
affectation, opérateurs usuels, distinction entre expression et instruction
Les expressions considérées sont à valeurs numériques, booléennes ou de type chaîne de caractères.
+ **Expressions et instructions simples** :
affectation, opérateurs usuels, distinction entre expression et instruction
Les expressions considérées sont à valeurs numériques, booléennes ou de type chaîne de caractères.
+ **Instructions conditionnelles**:
expressions booléennes et opérateurs logiques simples, structurer et comprendre plusieurs
instruction if. Variantes avec alternative (else).
+ **Instructions conditionnelles**:
expressions booléennes et opérateurs logiques simples, structurer et comprendre plusieurs
instruction if. Variantes avec alternative (else).
Les étudiants devront être capables de niveaux dalternatives implantées par des instructions conditionnelles imbriquées.
Les étudiants devront être capables de niveaux dalternatives implantées par des instructions conditionnelles imbriquées.
+ **Instructions itératives** :
boucles for, boucles conditionnelles while.
Les sorties de boucle (instruction break) peuvent être présentées et se
justifient uniquement lorsquelles contribuent à simplifier notablement la
programmation sans réelle perte de lisibilité des conditions darrêt.
+ **Instructions itératives** :
boucles for, boucles conditionnelles while.
Les sorties de boucle (instruction break) peuvent être présentées et se
justifient uniquement lorsquelles contribuent à simplifier notablement la
programmation sans réelle perte de lisibilité des conditions darrêt.
+ **Fonctions** :
notion de fonction (au sens informatique), définition dans le langage utilisé, paramètres (ou arguments) et résultats, portée des variables.
On distingue les variables locales des variables globales et on décourage lutilisation des variables globales autant que possible.
+ **Fonctions** :
notion de fonction (au sens informatique), définition dans le langage utilisé, paramètres (ou arguments) et résultats, portée des variables.
On distingue les variables locales des variables globales et on décourage lutilisation des variables globales autant que possible.
La récursivité sera présentée plus tard.
La récursivité sera présentée plus tard.
+ **Manipulation de quelques structures de données**:
chaînes de caractères (création, accès à un caractère, concaténation), listes (création, ajout
dun élément, suppression dun élément, accès à un élément, extraction dune partie de liste), tableaux à une ou plusieurs dimensions.
+ **Manipulation de quelques structures de données**:
chaînes de caractères (création, accès à un caractère, concaténation), listes (création, ajout
dun élément, suppression dun élément, accès à un élément, extraction dune partie de liste), tableaux à une ou plusieurs dimensions.
On met en évidence le fait que certaines opérations dapparence simple cachent
un important travail pour le processeur. On met à profit la structure de
tableau dentiers à deux dimensions pour introduire la notion dimage
ponctuelle (« bitmap »). Les algorithmes de traitement dimage seront abordés
plus tard.
On met en évidence le fait que certaines opérations dapparence simple cachent
un important travail pour le processeur. On met à profit la structure de
tableau dentiers à deux dimensions pour introduire la notion dimage
ponctuelle (« bitmap »). Les algorithmes de traitement dimage seront abordés
plus tard.
+ **Fichiers** :
notion de chemin daccès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier.
+ **Fichiers** :
notion de chemin daccès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier.
On encourage lutilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques.
On encourage lutilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques.
+ **Piles**
Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes
(ou tableaux à 1 dimension) pour leur implantation.
+ **Piles**
Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes
(ou tableaux à 1 dimension) pour leur implantation.
+ **Récursivité**
+ **Récursivité**
On en présente les avantages et les inconvénients.
On en présente les avantages et les inconvénients.
+ **Tris** dun tableau à une dimension de valeurs
numériques : tri par insertion, tri rapide (ou 'quicksort'),
tri par fusion. Application à la
recherche de la médiane dune liste de nombres.
+ **Tris** dun tableau à une dimension de valeurs
numériques : tri par insertion, tri rapide (ou 'quicksort'),
tri par fusion. Application à la
recherche de la médiane dune liste de nombres.
On étudie et on compare ces algorithmes de tri du point de vue des complexités temporelles dans le meilleur et dans le
pire cas.
On étudie et on compare ces algorithmes de tri du point de vue des complexités temporelles dans le meilleur et dans le
pire cas.

View File

@ -62,8 +62,10 @@ L'instruction de test
\begin{algorithm}
\caption{Exemple d'instruction de test}
\begin{algorithmic}[1]
\Require $quality\gets 0$ ; $a\gets ""$
\BState Begin
\BState \emph{entrée}: $quality\gets 0$ \Comment{C'est cette valeur qui sera testée}
\BState \emph{locale}: $a\gets ""$
\BState \emph{sortie}: $a$ \Comment{La sortie est la valeur de $a$}
\BState \emph{corps}:
\If{$quality\ge 9$}
\State $a\gets perfect$
\ElsIf{$quality\ge 7$}
@ -75,7 +77,6 @@ L'instruction de test
\Else
\State $a\gets unusable$
\EndIf
\BState End
\end{algorithmic}
\end{algorithm}

View File

@ -7,37 +7,6 @@ Qu'est-ce qu'un programme ?
- Un **programme** est une suite de **phrases** ;
- Une **phrase** est une **déclaration** ou une **expression** (*statement* en anglais) ;
expression
Une expression est une valeur caculée du langage, une opération arithmétique
qui retourne une valeur du langage (entier, texte, valeur logique...)
Par exemple, la ligne suivante est une expression effectuant une addition::
5 + 6
Autres exemples d'expressions :
- 5 est une expression de type int
- 4.5 est une expression de type float
- 'c' est une expression de type char
- true est une expression de type bool
- print ('c') est une expression de type None
- raw_input est une expression de type string
Exemple de déclarations :
- `a = 1`
- `b = 'c'`
.. important:: Le signe égal est utilisé de deux manières
- lors d'une déclaration d'une expression
- lorsque deux expressions sont équivalentes
Suivant les langages, il y a deux symboles différents, ou alors
ils sont identiques.
Production d'un programme :
1. on écrit le code source du programme ;
@ -63,38 +32,76 @@ programme :
2. communiquer avec des fichiers,
3. communiquer avec d'autres programmes.
Interaction avec l'utilisateur
------------------------------
Les expressions
~~~~~~~~~~~~~~~
.. FIXME
expression
- lire et écrire dans un fichier
- afficher du texte ou un nombre
- lire du texte ou un nombre
- les prompts
Une expression est une valeur caculée du langage, une opération arithmétique
qui retourne une valeur du langage (entier, texte, valeur logique...)
Par exemple, la ligne suivante est une expression effectuant une addition::
La REPL
--------
5 + 6
.. glossary::
Autres exemples d'expressions :
REPL
- 5 est une expression de type int
- 4.5 est une expression de type float
- 'c' est une expression de type char
- true est une expression de type bool
- print ('c') est une expression de type None
- raw_input est une expression de type string
Read Eval Print Loop : outil principal de communication avec un programme
ou avec un système. Exemples : la console python, le prompt OCaml.
Un autre exemple d'expression :
interface
.. raw:: latex
outil de communication avec un programme.
\begin{algorithm}
\caption{Exemple d'expression}
\begin{algorithmic}[1]
\BState \emph{sortie}: $l$ \Comment{C'est l'expression calculée renvoyée}
\ForAll {$v \in V(G)$}
\State $l(v) \leftarrow \infty$
\EndFor
\State $l(u) \leftarrow 0$
\Repeat
\For {$i \leftarrow 1, n$}
\State $min \leftarrow l(v_i)$
\For {$j \leftarrow 1, n$}
\If {$min > e(v_i, v_j) + l(v_j)$}
\State $min \leftarrow e(v_i, v_j) + l(v_j)$
\State $p(i) \leftarrow v_j$
\EndIf
\EndFor
\State $l(i) \leftarrow min$
\EndFor
\State $changed \leftarrow l \not= l$
\State $l \leftarrow l$
\Until{$\neg changed$}
\end{algorithmic}
\end{algorithm}
- interface texte
- interface graphique
On voit qu'une expression peut-être complexe, dans tous les cas une valeur
est renvoyée.
Les déclarations
----------------
~~~~~~~~~~~~~~~~
Renseigner une variable
Exemple de déclarations :
- `a = 1`
- `b = 'c'`
.. important:: Le signe égal est utilisé de deux manières
- lors d'une déclaration d'une expression
- lorsque deux expressions sont équivalentes
Suivant les langages, il y a deux symboles différents, ou alors
ils sont identiques.
Il s'agit de **renseigner** une valeur dans une expression nommée
- en javascript :
@ -182,38 +189,35 @@ Voir aussi :
x1 = e1, x2 = e2, ... xn = en;
Les expressions
---------------
Interaction avec l'utilisateur
------------------------------
.. raw:: latex
Il est possible de communiquer de la manière suivante avec un programme :
\begin{algorithm}
\caption{Exemple d'expression}
\begin{algorithmic}[1]
\ForAll {$v \in V(G)$}
\State $l(v) \leftarrow \infty$
\EndFor
\State $l(u) \leftarrow 0$
\Repeat
\For {$i \leftarrow 1, n$}
\State $min \leftarrow l(v_i)$
\For {$j \leftarrow 1, n$}
\If {$min > e(v_i, v_j) + l(v_j)$}
\State $min \leftarrow e(v_i, v_j) + l(v_j)$
\State $p(i) \leftarrow v_j$
\EndIf
\EndFor
\State $l(i) \leftarrow min$
\EndFor
\State $changed \leftarrow l \not= l$
\State $l \leftarrow l$
\Until{$\neg changed$}
\end{algorithmic}
\end{algorithm}
- lire et écrire sur l'entrée/sortie standard
- lire et écrire dans un fichier
- afficher du texte ou un nombre
- lire du texte ou un nombre
- manipuler les prompts
La REPL
--------
.. glossary::
REPL
Read Eval Print Loop : outil principal de communication avec un programme
ou avec un système. Exemples : la console python, le prompt OCaml.
interface
outil de communication avec un programme.
- interface texte
- interface graphique
.. FIXME mieux définir une expression
Une expression est une portion de code qui renvoie une valeur
Les fonctions
-------------