| 
    si (expression vrai) alors   
         execute intruction(s) 1  
    sinon
         execute intruction(s) 2
    fin si
    execute instruction(s) 3
 | 
    if expression :
        intruction1
    else : intruction2
instruction3
 </code></td></tr></table>
 
 
indentation des structures de contrôle¶print "bloc1"
if (condition1) :
   print "bloc2"
   if (condition2) :
       print "bloc3"
   print "bloc2 suite"
print "bloc1 suite"
 tests imbriqués¶si (condition1) alors
    instruction1
sinon si (condition2) alors
    instruction2
sinon
    instruction3
fin si
    
si i= 15
i divisible par 3 mais pas par 2
 
 
erreur de syntaxe: attention à l’indentation et au symbol :¶
    
  File "<ipython-input-9-5162c46baa06>", line 4
    else
        ^
SyntaxError: invalid syntax
 
 
Problème: étant donné un nombre entier positif p,  est-il pair ou impair ? ALGORITHME Parite
  Initialisez p
  si (p modulo 2) == 0 alors
     Affiche "p est pair"
  sinon
     Affiche "p est impair"
  fin si
 
    
valeur p = 17
p est impair.
 
 

 
nombre d’itérations n connuescompteur de boucle i (variable)attention en algorithmique on compte en général à partir de 0premier élément d’une séquence i=0
 
Organigramme et algorithme¶
    Out[11]: 
| Algorithme | Diagramme | 
|---|
 | 
pour i de 0 a n-1
   execute intruction(s) 1
fin pour
execute instruction(s) 2
 |  |  
 
syntaxe Python¶
|  | Algorithmique | Python | 
|---|
 
| **boucle par défaut**
 | 
pour i de 0 a n-1
   instructions 1
fin pour
instructions 2
 | </tr>
for i in range(n):
   instruction1
instruction2
 |  
| **boucle générale**
 | 
pour i de p a n-1 pas q 
   instructions 1
fin pour
instruction2
 | </tr>
</table>
for i in range(p, n, q):
   instruction1
instruction2
 | 
    
0
1
2
3
range(0, 4)
1
3
range(1, 4, 2)
 
 
Itération: répétition d’instructions un nombre fini de fois 
boucle itérative avec un compteur   Pour i=0,1,..,n-1
      instruction
  Fin Pour
 exemple: calcul de la somme $S$ des $n$ premiers entiers $i$ positifs ou nul: 
$$S=\sum_{i=0}^{n-1} i $$
 
Organigramme: tableau des variables¶
    Out[13]: 
| Algorithme | Tableau de variables | 
|---|
 | 
1. S=0.
2. initialise n
3. pour i de 0 a n-1
4.   S = S + i
5. fin i
6. affiche S
 |  |  
    
0 0
1 1
3 2
6 3
10 4
15 5
21 6
28 7
Somme (des  8  premiers entiers >= 0)  S = 28
 
 
 Algorithme itératif dont le nombre d’itérations n’est pas connu à l’avance.
 
| Algorithmique | Python | 
|---|
 | 
Tantque (condition vrai)
    instruction(s) 1
Fin Tantque
instructions 2
 | 
while condition:
    instruction1
instruction2
 | 
 
Calcul de la somme de la série $\frac{x^i}{i!}$ avec une précision $\epsilon$ fixée
$$ S = \sum_i \frac{x^i}{i!} \mbox{ pour tout } i \mbox{ t.q.} \frac{x^i}{i!} > \epsilon $$
 
Algorithme¶ALGORITHME somme
initialiser x,eps
S = 0.
i = 0
term = 1.
tant que (term > eps) repeter
    S = S + term
    i = i + 1
    term = term * x / i
afficher "Somme = ",S
 
    
Somme S = 2.7182818284467594  avec  14  termes
 
 
questions¶
l’algorithme fonctionne-t-il pour x<0 ?
 
la valeur de la condition ne devient jamais fausse => itération infinie Erreur: la condition n’est pas modifiée¶exemple condition=True
i=0
while condition :   
   i=i+1
print i
 
 exemple x = 0.0
while (x != 1.0) :
   x = x + 0.1
print x
    
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
x = 1.0999999999999999 11
 
 
méthode de dichotomie¶On suppose que pendant son lancement, l’altitude $z(t)$ d’un satellite est donnée par:
$$z(t) = H * tanh(\frac{t}{T}) \mbox{ avec }  T = 5 h $$ 
Au bout de $20 h$ le satellite atteint son orbite. Au bout de quel temps $t_1$   le satellite atteint-il son orbite à $1\%$ près i.e calculer $t_1$ tel que:
$$ z(t_1)=0.99*z(20) $$ 
On déterminera la valeur de $t_1$ à 0.1h près en utilisant une méthode de dichotomie.
 schéma

 
Solution algorithme de dichotomie¶
 
ALGORITHME Dichotomie
a = 0.
b = 20.
z0 = 0.99*tanh(b/5.)
tant ((b-a)>0.1) repeter
    t = (a+b)/2.
    si tanh(t/5.) > z0 alors
        b = t
    sinon
        a = t
    fin si
 fin tant
 Affiche "Temps t =", t
    
z0 =  0.899396369765
a= 0.0 b= 20.0 t= 10.0 z= 0.964027580076
a= 0.0 b= 10.0 t= 5.0 z= 0.761594155956
a= 5.0 b= 10.0 t= 7.5 z= 0.905148253645
a= 5.0 b= 7.5 t= 6.25 z= 0.848283639958
a= 6.25 b= 7.5 t= 6.875 z= 0.879826699652
a= 6.875 b= 7.5 t= 7.1875 z= 0.8931933404
a= 7.1875 b= 7.5 t= 7.34375 z= 0.899338734805
a= 7.34375 b= 7.5 t= 7.421875 z= 0.902284442756
Temps  7.421875
 
 
Méthode des trapèzes¶calcul de la valeur approchée de l’intégrale $\int_a^b{f(x)dx}$
   
$$ \int_a^b{f(x)dx} \approx \sum_{i=1}^n{h \frac{f(x_i)+f(x_{i-1})}{2}} \mbox{ avec } x_i=a+ih \ ,\  h=\frac{b-a}{n}$$ Ecrire un programme Python qui calcule une estimation de$$ I=\int_0^\pi{\frac{sin(x)}{x}dx} $$
 validation¶$$ I=si(\pi)\approx 1.85193705198247$$ 
 
Calcul de la suite de Syracuse¶Écrire un programme qui calcule la suite d’entiers définie par
la règle suivante: 
on part d’un nombre entier n plus grand que zéro; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1on recommence et on s’arrête lorsque l’on arrive à 1
 La conjecture de Collatz, énoncée en 1937, postule que cette suite de Syracuse s’arrête au bout d’un nombre fini d’itérations. validation¶Pour n=3, on obtient la suite suivante: 3, 10, 5, 16, 8, 4, 2, 1 |