---
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
