• Aucun résultat trouvé

Énoncés Itératifs

N/A
N/A
Protected

Academic year: 2022

Partager "Énoncés Itératifs"

Copied!
16
0
0

Texte intégral

(1)

Algorithmique et Langage C

Algorithmique et Langage C

www.polytech.unice.fr/žvg/index-xidian.html

Granet Vincent - Vincent.Granet@univ-cotedazur.fr

Xi’an - Octobre 2019 - Avril 2020

(2)

80/214 Algorithmique et Langage C

Énoncés Itératifs

Énoncés Itératifs

(3)

81/214 Algorithmique et Langage C

Énoncés Itératifs Introduction

Introduction

Les énoncés itératifs sont des énoncés qui permettent l’exécution ré- pétitive d’un ou plusieurs autres énoncés (élémentaires ou structurés).

On les appelle aussi boucles

Les langages de programmation proposent plusieurs types d’énoncés itératifs :tantque,répéter,pourtout...

(4)

82/214 Algorithmique et Langage C

Énoncés Itératifs Forme générale

n−1

Pa

P0

P1

Pi Pi

Pn

B

n E1

Ei E

E

et non B

= P Pc i P

i+1 P

i+1

et B

Pi−1

Règle de déduction

si {P0}⇒ {PE1 1}⇒ {PE2 2}...{Pi−1}⇒ {PEi i}Ei+1⇒ {Pi+1}...{Pn−1}⇒ {PEn n} et {Pn} ⇒ {P0} et{Pa} ⇒ {P0} et {Pi et B} {Pc} et {Pi et non B}Ei+1⇒ {Pi+1}

alors {Pa} énoncé-itératif-général {Pc}

(5)

83/214 Algorithmique et Langage C

Énoncés Itératifs Forme générale

Invariant de boucle

Toutes les affirmationsP0...Pn sontinvariantes

L’affirmationPi qui précède la condition d’arrêt B joue un rôle particulier. Elle est représentative de la sémantique de l’énoncé itératif, et elle est appelée l’Invariantde boucle.

Finitude

Pour que la boucle s’achève, la condition d’arrêt doit être vérifiée.

A démontrer formellement. On cherche une fonctionf(XB)des variables modifiées dans la boucle et utilisées par B, stritement positiveetdécroissante vers une valeur particulière (e.g.0) elle que la condtion d’arrêt soit vérifiée.

(6)

84/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé tantque

L’énoncé tantque

Lorsque les énoncésE1 àEi sont vides au minimum, 0 itération

Pest l’invariant

{P} t a n t q u e B f a i r e E f i n t a n t q u e {P et non B}

Règle de déduction

si {P et B}⇒ {P}E

alors {P} tantque B faire E fintantque {P et non B}

(7)

85/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé tantque

Exemple : factorielle, calcul croissant

0! = 1et n! = 1×2×3× · · · ×(i−1)×i× · · · ×n Finitude:f(i) =ni

{Antécédent : n>0}

{Conséquent : factorielle(n) = n!}

f o n c t i o n factorielle(donnée n : naturel) : naturel

v a r i a b l e s

i, fact t y p e naturel i 0

fact 1 {Invariant : fact = i!}

t a n t q u e i<n f a i r e

{fact × (i+1) = i! × (i+1) = (i+1)! et i<n}

i i+1 {fact × i = i!}

fact fact×i {fact = i!}

f i n t a n t q u e

{i = n et fact = i! = n!}

r e n d r e fact f i n f o n c {factorielle}

(8)

86/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé tantque

Exemple : division entière

∀a>0, b>0, a=quotient×b+reste, 06r<b Finitude:f(reste) =reste−b

{Antécédent : a>0, b>0}

{Conséquent : a = quotient×b + reste, 0 6reste<b}

p r o c é d u r e DivisionEntière(données a, b : naturel

r é s u l t a t s quotient, reste : naturel) reste a

quotient 0

{Invariant : a = quotient × b + reste}

t a n t q u e reste> b f a i r e

{a = (quotient+1) × b + reste b et reste>b}

quotient quotient+1

{a = quotient × b + reste b et reste>b}

reste reste−b

{a = quotient × b + reste}

f i n t a n t q u e

{a = quotient × b + reste et 06reste<b}

f i n p r o c {DivisionEntière}

(9)

87/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé répéter

L’énoncé répéter

Lorsque les énoncésEi+1 àEn sont vides au minimum, 1 itération

Qest l’invariant

{P} r é p é t e r E j u s q u'à B {Q et B}

Règle de déduction

si {P} E {Q} et {Q et non B} E {Q}

alors {P} répéter E jusqu'à B {Q et B}

(10)

88/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé répéter

Exemple : min d’une suite

{Antécédent : n>0}

{Conséquent : MinSuite(n) minimum d'une suite de n entiers lue sur l'entrée standard}

f o n c t i o n MinSuite(donnée n: naturel) : entier

v a r i a b l e s i t y p e [0,n]

x t y p e entier min +∞

i 0 r é p é t e r

i i+1 lire(x)

s i x < min a l o r s min x f i n s i {∀k[1,i],min6xk}

j u s q u'à i = n

{∀k[1,n], min6xk et i=n}

r e n d r e min f i n f o n c {MinSuite}

Finitude:f(i) =n−i

(11)

89/214 Algorithmique et Langage C

Énoncés Itératifs Énoncés itératifs en C

Énoncés itératifs en C

l’énoncé tantques’écrit :

/ {P} / w h i l e (B) E / {P et non B} /

l’énoncé répéters’écrit :

/ {P} / do E w h i l e (B); / {Q et non B} /

(12)

90/214 Algorithmique et Langage C

Énoncés Itératifs Énoncés itératifs en C

Exemple C : factorielle, calcul croissant

/ Antécédent : n>=0 /

/ Conséquent : factorielle(n) = n! /

u n s i g n e d l o n g factorielle(u n s i g n e d l o n g n) { u n s i g n e d l o n g i=0, fact=1;

/ Invariant : fact = i! / w h i l e (i<n) {

/ fact = i! et i<n / i++;

fact =i;

}

/ i = n et fact = i! = n! / r e t u r n fact;

}

printf("%ld\n", factorielle(15)); //1 307 674 368 000

(13)

91/214 Algorithmique et Langage C

Énoncés Itératifs Énoncés itératifs en C

Exemple C : min d’une suite

#i n c l u d e <limits.h>

/ Antécédent : n>0 /

/ Conséquent : MinSuite(n) minimum d'une suite de n entiers lue sur l'entrée standard /

i n t MinSuite(i n t n) {

i n t x, i=0, min = INT_MAX;

do { i++;

scanf("%d", &x);

i f (x<min) min=x;

/ ∀k∈[1,i], min<=xk / } w h i l e (i!=n);

/ ∀k∈[1,n], min<=xk et i=n / r e t u r n min;

}

printf("min = %d\n", MinSuite(5));

(14)

92/214 Algorithmique et Langage C

Énoncés Itératifs Les énoncés pour

Les énoncés pour

On utilise ces énoncés lorsque le nombre d’itérations est connu à l’avance, c’est-à-dire de façonstatique.

Ils garantissent la finitudede la boucle (i.e.pas de condition de fin de boucle à programmer).

Forme générale

{P} p o u r t o u t x de T f a i r e E f i n p o u r {Q}

Exemple

{écrire tous les carrés de 1 à n}

p o u r t o u t i de [1;n] f a i r e écrire(i i)

f i n p o u r

(15)

93/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé pour de C

L’énoncé pour de C

ne garantit pas l’achèvement de la boucle

le programmeur doit s’assurer de la finitude de la boucle

f o r (exp1 ; exp2; exp3) E

équivalent à :

expr1; / initialisation /

w h i l e (exp2) { / condition /

E;

exp3; / incrémentation / }

(16)

94/214 Algorithmique et Langage C

Énoncés Itératifs L’énoncé pour de C

Exemples

/ Antécédent : n>=0 /

/ Conséquent : factorielle(n) = n! / u n s i g n e d l o n g factorielle(i n t n) {

u n s i g n e d l o n g fact=1;

i n t i;

/ Invariant : fact = i! / f o r (i=1; i<=n; i++)

/ fact = i! et i<=n / fact =i;

/ i>n et fact = n! / r e t u r n fact;

}

//écrire tous les carrés de 1 à n f o r (i n t i=1; i<=n; i++)

printf("%d ", i i)

Références

Documents relatifs

[r]

Déterminer le nombre de permutations (bijection d'un ensemble ni dans lui même) d'un ensemble à n éléments ayant au moins un point

Exprime en fonction de x et sous la forme d'une expression simplifiée l'aire du rectangle

Effectue ce programme pour un nombre x de départ et écris une expression simplifiée du résultat en fonction de

Vous allez programmer une feuille de calcul permettant de déterminer les solutions d'un système de deux équations à deux inconnues, en vous aidant des

A still more general class has been considered by Aitken 1 who introduces a new operator at each step; but it appears t h a t there is considerable advantage

la partie supérieure est une pyramide régulière SABCD, de sommet S, de base carrée ABCD et de hauteur [SO] ;?. la partie inférieure est un pavé droit

La construction du tableau de variation d’une fonction permet de connaître le sens de varaition de cette fonction sur