--- header-includes: title: \textbf{Micro cours Python} subtitle: author: Thierry Dumont institute: date: Aldil /06/02/25/ section-titles: false bibliography: a_bib_file.bib filter: pandoc-citeproc lang: fr_FR beamer: true theme: metropolis innertheme: outertheme: colortheme: urlcolor: red aspectratio: 169 --- ## Tous les langages de programmation (ou presque) ont les mêmes capacités . . . Vieille question: que peut-on _calculer ?_ * Leibnitz (fin XVII° siècle). . . . * Turing (1936) : _on ne peut pas tout calculer._ ## Machines à registres * Des registres $R_i$ en nombre fini qui peuvent contenir des nombres entiers _quelconques_. . . . * On peut incrémenter chaque registre: $R_i \leftarrow R_i +1$ et $R_i \leftarrow R_i -1$. * Faire $R_i =x$ et $R_i = R_j$. . . . ###### Test : * _if_ $R_i$ = 0 _then_ S _else_ S'. . . . ###### Boucles : * _for_ i= 1 _to_ $R_i$ _do_ S. . . . * _while_ $R_i \neq 0$ _do_ S. ## Les machines à registres sont équivalentes à des machines de Turing. Donc, ce qui est calculable est ce qui est calculable avec une machine à registres. . . . Donc: un ordinateur + langage de programmation _"équivalent à une machine à registres"_ peut __tout__ calculer. ## Apprendre par l'exemple : quelques exercices * les types en python. * les fonctions. . . . * factorielle : $n! = 1\times 2 \times 3 \times \ldots \times n$. 4 manières de calculer. . . . * Tri par la méthode des bulles (peu efficace). 2 programmes légèrement différents. . . . * Manipulation de chaînes de caractères. ## * Le _théorème de l'arrêt_ (Turing, 1936) _"Il n'existe pas de programme (d'algorithme) permettant de prouver qu'un programme s'arrête ou non"_ __Une preuve en moins de 10 lignes de Python !__ ## Python est vendu avec accessoires... * Doctests