• Aucun résultat trouvé

Boucles définies

N/A
N/A
Protected

Academic year: 2022

Partager "Boucles définies"

Copied!
5
0
0

Texte intégral

(1)

Boucles définies

Skander Zannad et Judicaël Courant 2013-09-08

Lire chapitre 3 et 4.

1 Un programme très simple

Écrivons un programme pour saluer la classe (disons les 8 premiers élèves) :

#! / u s r / b i n / p y t h o n

p r i n t( ’ Bonjour Doriann ’ ) p r i n t( ’ Bonjour S i l v i o ’ ) p r i n t( ’ Bonjour C o r e n t i n ’ ) p r i n t( ’ Bonjour B r i c e−Edine ’ ) p r i n t( ’ Bonjour L u c i e ’ )

p r i n t( ’ Bonjour Jean−C h a r l e s ’ ) p r i n t( ’ Bonjour I l y a s ’ )

p r i n t( ’ Bonjour Marie ’ )

2 Mais peu facile à faire évoluer

Combien de travail faut-il faire si :

– On veut dire bonsoir et non bonjour ?

– On veut dire «Doriann, comment vas-tu ?etc.» et non «Bonjour Doriann,etc.» ? Et s’il y a 500 élèves ?

3 Le principe DRY

«Don’tRepeatYourself»

(2)

«Dans un système, toute connaissance doit avoir une représentation unique, non-ambiguë, faisant autorité ».

«Once and only once»

Ici le programme devrait :

– définir la liste des prénoms auxquels dire bonjour ;

– dire qu’on veut effectuer un même traitement sur tous les prénoms ; – dire que ce traitement consiste à afficher «Bonjour» suivi du prénom.

3.1 Listes

En Python, on peut définir des listes d’objets.

– de tout type ;

– éventuellement hétérogènes.

Liste de chaînes de caractères :

prenoms = [ ’ Doriann ’ , ’ S i l v i o ’ ,

’ C o r e n t i n ’ , ’ B r i c e−Edine ’ ,

’ L u c i e ’ , ’ Jean−C h a r l e s ’ ,

’ I l y a s ’ , ’ Marie ’ ]

Liste hétérogène (entier et chaînes) : liste = [ 1 , ’ t o t o ’ , 42 ]

3.2 Itération définie

Itérer : répéter une action, un calcul

Itération définie/boucle définie : on itère un traitement sur une liste de valeurs fixée à l’avance.

En python : introduite par la construction f o r variable in liste:

instruction 1 instruction 2

...

instructionn

#! / u s r / b i n / p y t h o n

prenoms = [ ’ Doriann ’ , ’ S i l v i o ’ ,

’ C o r e n t i n ’ , ’ B r i c e−Edine ’ ,

’ L u c i e ’ , ’ Jean−C h a r l e s ’ ,

’ I l y a s ’ , ’ Marie ’ ]

(3)

f o r x in prenoms:

p r i n t( ’ Bonjour ’ + x) Combien de travail faut-il faire si :

– On veut dire bonsoir et non bonjour ?

– On veut dire «Doriann, comment vas-tu ?etc.» et non «Bonjour Doriann,etc.» ? Et s’il y a 500 élèves ?

4 Itération sur des entiers

Calculer la somme des carrés des entiers de1à5000 5: s = 1∗∗2 + 2∗∗2 + 3∗∗2 + 4∗∗2 + 5∗∗2

Peut-on transformer ça en boucle ? Il suffit de voir que ça s’écrit : s = 0

s += 1 ∗∗ 2 s += 2 ∗∗ 2 s += 3 ∗∗ 2 s += 4 ∗∗ 2 s += 5 ∗∗ 2

D’où la solution : s = 0

f o r i in [ 1 , 2 , 3 , 4 , 5 ] : s += i ∗∗ 2

Intervalles d’entiers

Liste des éléments de[[a, b[[:range(a,b)

Attention : intervalle ferméà gauche,ouvertà droite1. Cas particulier :[[0, n[[:range(n)

(voir aide en ligne de range) s = 0

f o r i in range( 1 , 6 ) : s += i ∗∗ 2

Somme des carrés de 1àn :

1. VoirWhy numbering should start at zero, E. W. Dijkstra, EWD831. Disponible en ligne.

(4)

s = 0

f o r i in range( 1 , n + 1 ) : s += i ∗∗ 2

Marche aussi avecn = 5000. . .

5 Utilisation classique

On définit une suiteuparu0 = 1et

∀n ∈N un+1 =f(un) oùf :x7→√

x2+x.

On poseN = 100 000. Calculer et afficher une approximation deuN.

Programme proposé

#! / u s r / b i n / p y t h o n from math import sqrt N = 100000

x = 1

f o r i in range(N) :

x = sqrt(x ∗∗ 2 + x) p r i n t(x)

Correction du programme

À la fin, la variablexvaut-elle bienuN? ouuN−1? ouuN+1? ou . . . Cette question :

– Est essentielle ;

– Sera posée par tout lecteur du code.

Il ne suffit pas d’écrire un code, il faut indiquer au lecteur ce qu’il fait et pour- quoi il est correct.

Donc ondocumentele code avec uninvariantde boucle.

Invariant d’un programme : proposition mathématique, liée à un point du programme, toujours vraie lorsque l’exécution en est à ce point du programme.

N = 100000 x = 1

f o r i in range(N) :

# i c i x v a u t u i n d i c e i x = sqrt(x ∗∗ 2 + x)

# i c i x v a u t u i n d i c e i+1

(5)

Reste à vérifier :

1. Vérifier que ces invariants sont corrects ;

2. Vérifier qu’on peut en déduire qu’à la fin,xvautuN. Vérifier qu’un invariant de boucle est correct :

– Vérifier que la proposition est vraie au premier tour de boucle ; – Vérifier que si elle vraie à un tour donné, elle l’est au tour suivant.

Ici : vérifier que ça marche.

En pratique

On ne met que le premier invariant et on documente le programme :

# Ce programme c a l c u l e e t a f f i c h e u (N) a v e c

# u : s u i t e donn é e au 2 e c o u r s i n f o MPSI LMM N = 100000

x = 1

f o r i in range(N) :

# x == u ( i )

x = sqrt(x ∗∗ 2 + x) p r i n t(x)

Références

Documents relatifs

Studies have shown that lead paint, especially when used in homes, contaminates dust and soil, and that contaminated household dust, in particular, is associated with elevated

In this guide, we look at road safe- ty reporting from three distinct perspectives: its effects on public health, how road users are impacted, and how road safety legislation

This to the notable exception of coelomic (eu)gregarines capable of intestinal barrier crossing and neogregarines, capable of reaching intracellular niches in

The first step in reaching this objective is confronting the main issues and difficulties that challenge the research on moralities: the unresolved universalism versus

However, as a recent IP-Forsa poll suggested, a vast majority of those supporting a more active German role in international affairs believes Germany should gear up its

Since 83.7 per cent of female personal names contain a clan reference in one form or another, and 99 per cent of these are to the father’s clan, it is usually possible to guess

As far as social life is concerned, making sure that the air flow exhaled by our neighbor (possibly carrying the virus) does not reach us must be our main concern. The best

Instead we consider the step complexity across every operation in the execution, usually stated as the amortised cost of an operation in terms of the size of the data structure and