From 9fb80c6b48e5c35b8fef690d07780033a422f724 Mon Sep 17 00:00:00 2001 From: gwen Date: Mon, 10 Apr 2017 17:47:40 +0200 Subject: [PATCH] reorganisation du cours --- algorithmique/cours/algo.txt | 43 +++--- algorithmique/cours/annexes/exercices.txt | 133 ++++++------------ algorithmique/cours/control.txt | 7 +- algorithmique/cours/programme.txt | 160 +++++++++++----------- 4 files changed, 146 insertions(+), 197 deletions(-) diff --git a/algorithmique/cours/algo.txt b/algorithmique/cours/algo.txt index c34c830..f561d77 100644 --- a/algorithmique/cours/algo.txt +++ b/algorithmique/cours/algo.txt @@ -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 ----------------------- diff --git a/algorithmique/cours/annexes/exercices.txt b/algorithmique/cours/annexes/exercices.txt index a5050a0..af41f52 100644 --- a/algorithmique/cours/annexes/exercices.txt +++ b/algorithmique/cours/annexes/exercices.txt @@ -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 `_ - et de `la petite galerie `_ - + 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 qu’une 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 d’une 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 d’une 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 d’alternatives implantées par des instructions conditionnelles imbriquées. +Les étudiants devront être capables de niveaux d’alternatives 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 lorsqu’elles contribuent à simplifier notablement la - programmation sans réelle perte de lisibilité des conditions d’arrêt. ++ **Instructions itératives** : + boucles for, boucles conditionnelles while. + Les sorties de boucle (instruction break) peuvent être présentées et se + justifient uniquement lorsqu’elles contribuent à simplifier notablement la + programmation sans réelle perte de lisibilité des conditions d’arrê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 l’utilisation 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 l’utilisation 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 - d’un élément, suppression d’un élément, accès à un élément, extraction d’une 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 + d’un élément, suppression d’un élément, accès à un élément, extraction d’une partie de liste), tableaux à une ou plusieurs dimensions. - On met en évidence le fait que certaines opérations d’apparence simple cachent - un important travail pour le processeur. On met à profit la structure de - tableau d’entiers à deux dimensions pour introduire la notion d’image - ponctuelle (« bitmap »). Les algorithmes de traitement d’image seront abordés - plus tard. + On met en évidence le fait que certaines opérations d’apparence simple cachent + un important travail pour le processeur. On met à profit la structure de + tableau d’entiers à deux dimensions pour introduire la notion d’image + ponctuelle (« bitmap »). Les algorithmes de traitement d’image seront abordés + plus tard. - + **Fichiers** : - notion de chemin d’accè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 d’accès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier. - On encourage l’utilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques. + On encourage l’utilisation 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** d’un tableau à une dimension de valeurs - numériques : tri par insertion, tri rapide (ou 'quicksort'), - tri par fusion. Application à la - recherche de la médiane d’une liste de nombres. ++ **Tris** d’un tableau à une dimension de valeurs + numériques : tri par insertion, tri rapide (ou 'quicksort'), + tri par fusion. Application à la + recherche de la médiane d’une 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. diff --git a/algorithmique/cours/control.txt b/algorithmique/cours/control.txt index c7031f9..76f6558 100644 --- a/algorithmique/cours/control.txt +++ b/algorithmique/cours/control.txt @@ -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} diff --git a/algorithmique/cours/programme.txt b/algorithmique/cours/programme.txt index 6507b40..5326280 100644 --- a/algorithmique/cours/programme.txt +++ b/algorithmique/cours/programme.txt @@ -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 -------------