أهلا وسهلا بك زائرنا الكريم، إذا كانت هذه زيارتك الأولى للمنتدى، فيرجى التكرم بزيارة صفحة التعليمـــات، . كما يشرفنا أن تقوم بالتسجيل

,L'imbrication des Structures SiLes différentes structures de contrôle

اذهب الى الأسفل

,L'imbrication des Structures SiLes différentes structures de contrôle

مُساهمة من طرف Admin في السبت ديسمبر 31, 2011 11:34 am

[coloLes structures de contrôle:
approfondissements
Nous allons reprendre dans ce chapitre, l'étude des structures de contrôle . Dans un
premier temps, nous étudierons d'autres structures que celles que l'on a étudié jusqu'à
présent. Ensuite, nous verrons comment on peut imbriquer les structures de contrôle et
par la même occasion, nous étudierons la programmation descendante.
I. Les différentes structures de contrôle
A. Un extension de la structure Si:
La structure Selon…Faire (de choix)
La structure Selon permet de choisir le traitement à effectuer en fonction de la valeur ou
de l'intervalle de valeur d'une variable ou d'une expression. Cette structure permet de
remplacer avantageusement une succession de structures Si…Alors.
La syntaxe de cette structure est
Selon expression Faire
valeur 1 de l'expression : traitement 1
valeur 2 de l'expression : traitement 2
valeur 3 de l'expression : traitement 3

[Sinon traitement par défaut]
Finselon
Exemple1: Les différents cas sont des valeurs littérales.
Voilà l'algorithme qui affiche le mois en toute lettre selon son numéro.
Le numéro du mois en mémorisé dans la variable mois.
Selon mois Faire
1 : Afficher "Janvier"
2 : Afficher "Février"
3 : Afficher "Mars"
4 : Afficher "Avril"

11: Afficher "Novembre"
12: Afficher "Décembre"
Sinon Afficher "Un numéro de mois doit être compris entre 1 et 12"
Finselon
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
2
Exemple 2: Les différents cas possibles sont décrits par des intervalles de valeur
(taux de remise différent selon le montant d'achat)

Selon montant Faire
<1000 : taux ! 1
≥1000 et < 3000: taux ! 2
≥3000 et < 10000: taux ! 3
≥ 10000: taux ! 4
FinSelon
montant ! montant * ( 1 – taux/100)

B. La boucle Répéter…Jusqu'à
Cette boucle sert à répéter une instruction jusqu'à ce qu'une condition (expression
booléenne) soit vraie. Son formalisme est le suivant:
Répéter
traitement // une instruction simple ou un bloc d'instructions
Jusqu'à condition d'arrêt
Le traitement est exécuté, puis la condition est vérifiée. Si elle n'est pas vraie, on
retourne au début de la boucle et le traitement est répété. Si la condition est vraie, on
sort de la boucle et le programme continue séquentiellement. A chaque fois que le
traitement est exécuté, la condition d'arrêt est de nouveau vérifiée à la fin.
" Exemple:
Programme Aire
Var
rayon : réel
réponse : chaîne
Début
Afficher "Calcul de l'aire d'un cercle"
Répéter
Afficher "Entrez le rayon d'un cercle en cm"
Saisir rayon
Afficher "L'aire de ce cercle est ", rayon*rayon *3.14, "cm²"
Afficher "Voulez-vous l'aire d'un autre cercle? (oui/non)"
Saisir réponse
Jusqu'à réponse ≠ "oui" //si la réponse est différente de "oui", la répétition du traitement s'arrête
Afficher "Au revoir!"
Fin
La boucle Répéter n'est pas indispensable. Elle peut toujours être remplacée par une
boucle Tantque. C'est pourquoi certains langages n'ont pas d'équivalent pour la boucle
Répéter.
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
3
Différences entre la boucle Répéter et Tantque
Tant que…Faire Répéter… Jusqu'à
Condition vérifiée avant le traitement:
le traitement peut ne pas être exécuté
Condition vérifiée après le traitement:
le traitement est forcément exécuté une
fois
condition de continuation :
le traitement est répété si la condition est
vraie
condition d'arrêt :
le traitement est répété si la condition est
fausse
II. L'imbrication des Structures Si
Les structures conditionnelles peuvent être imbriquées (c'est-à-dire incluses les unes
dans les autres).
Voilà un programme qui fait la même chose que l'exemple 2 sur la structure Selon, mais
utilisant l'imbrication des structures Si.
Programme taux
Var
montant, taux: entiers
Début
Si montant < 1000 //(1)
Alors taux ! 1
Sinon Si montant < 3000 //(2)
Alors taux ! 2
Sinon Si montant < 10000 //(3)
Alors taux ! 3
Sinon taux !4
Finsi //(3)
Finsi //(2)
Finsi //(1)
Montant ! montant - montant * taux/100
Afficher montant
Fin
Si le montant est inférieur à 1000, la valeur 1 est affectée au taux et le programme passe
à l'instruction suivante. Attention, l'instruction suivante n'est pas celle qui suit Sinon.
test
Faux
traitement
Vrai
suite
traitement
test
suite
Vrai
Faux
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
4
Si la condition est vérifiée, tout ce qui suit le Sinon est ignoré, y compris les Si qui sont
imbriqués dans le Sinon. Donc le programme passe à l'instruction suivante qui est
montant ! montant - montant * taux/100
En ce qui concerne la présentation, nous avons décalé vers la gauche les structures
imbriquées. C'est une convention d'écriture qu'on retrouve pour toutes les structures, et
qui a pour but de rendre l'algorithme plus lisible.
#Les structures imbriquées sont emboîtées telles des poupées russes. Il est
impossible qu'elles se chevauchent.
Cela est valable pour les structures conditionnelles et pour toutes les autres structures.
Dans ce cas, le premier FinSi rencontré dans l'algorithme indique toujours la fin de la
structure la plus imbriquée. Il est donc inutile de numéroter les structures pour
reconnaître où elles se terminent.
Représentation schématique:
La plupart du temps, la structure Selon va permettre d'éviter l'imbrication des
structures Si. Pourtant, il est indispensable de savoir les utiliser pour deux raisons:
- dans le langages C++ et dans d'autres langages, la Structure équivalente à Selon
ne permet pas d'utiliser des intervalles de valeur (voir le cours de C++).
- il est parfois impossible d'utiliser la structure Selon, en particulier lorsque les
conditions portent sur plusieurs variables.
III. L'imbrication des boucles
Comme les structures conditionnelles, les boucles peuvent être imbriquées.
Cette partie n'apporte pas de notion nouvelle mais permet de souligner certains aspects
délicats.
Le morceau d'algorithme suivant permet simplement d'afficher 5 étoiles. Il n'y a pas
d'imbrication pour l'instant.
Pour i de 1 jusqu'à 5 Faire
Afficher "*"
FinPour
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
5
Si on inclut cette séquence à l'intérieur d'une boucle qui se répète 3 fois, on va effectuer 3
fois l'affichage de 5 étoiles donc on va obtenir l'affichage de 15 étoiles.
$ L'imbrication des boucles multiplie les tours de boucles
Pour j de 1 jusqu'à 3 Faire
Pour i de 1 jusqu'à 5 Faire
Afficher "*"
FinPour * * * * * * * * * * * * * * *
FinPour
# Remarque TRES importante:
Lorsque l'on imbrique des boucles, IL FAUT UTILISER DES COMPTEURS
DIFFERENTS pour chaque boucle.
Pour pouvoir afficher 3 lignes de 5 étoiles, au lieu de 15 étoiles à la suite, il suffit
d'ajouter un saut de ligne après le Pour le plus imbriqué.
*****
*****
*****
Pour j de 1 jusqu'à 3 Faire
Pour i de 1 jusqu'à 5 Faire
Afficher "*"
FinPour
Afficher "\n"
FinPour
La boucle la plus imbriquée s'exécute alors que la "grande" boucle s'exécute seulement 3
fois. Le compteur i varie 5 fois plus vite que le compteur j.
Trace
j = 1 j = 2 j = 3
i = 1 i = 2 i = 3 i = 4 i = 5 i = 1 i = 2 i = 3 i = 4 i = 5 i = 1 i = 2 i = 3 i = 4 i = 5
* * * * * * * * * * * * * * *
saut de ligne saut de ligne saut de ligne
Tous les types de boucles peuvent s'imbriquer entre eux. La seule règle à respecter est
que les boucles ne doivent pas se chevaucher: elles doivent s'emboîter. Si vous
respectez bien la règle des décalages, vous ne pouvez pas vous tromper.
OK IMPOSSIBLE
Tantque a > b Faire Tantque a > b Faire
Pour i de 1 jusqu'à n Faire Pour i de 1 jusqu'à n Faire
… …
FinPour FinTantque
FinTantque FinPour
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
6
" Exemple d'imbrication de boucles différentes
Voilà un programme qui calcule le chiffre d'affaire annuel d'un représentant à partir de
la saisie des 12 chiffres d'affaire mensuels. Le programme permet de recommencer le
calcul avec un autre représentant si l'utilisateur tape le caractère 'o' (pour oui).
Programme CA
Var
CAM : réel //chiffre d'affaire mensuel
CAA : réel //chiffre d'affaire annuel
mois : entier //compteur de la boucle qui calcule le CA annuel
réponse : caractère
Début
Répéter
Afficher "Veuillez entrer les 12 chiffres d'affaire mensuels d'un représentant"
CAA ! 0 //réinitialisation du CA annuel pour chaque représentant.
Pour mois de 1 jusqu'à 12 Faire
Saisir CAM
CAA ! CAA + CAM //cumul
FinPour
Afficher "Chiffre d'affaire annuel :" , CAA
Afficher "Voulez-vous calculer le chiffre d'affaire annuel d'un autre représentant?"
Saisir réponse
Jusqu'à réponse ≠ 'o'
Fin
L'imbrication des boucles n'est pas compliquée si on pense à bien décomposer les
problèmes, du général au particulier (c'est l'approche descendante). Pour cela, il faut
procéder à une analyse du problème sans rentrer dans les détails de l'algorithme. On
réfléchit d'abord à QUOI faire avant de réfléchir à COMMENT faire.
Le quoi faire de l'algorithme précédent pourrait s'exprimer ainsi.
Répéter
calculer le chiffre d'affaire d'un représentant et l'afficher
demander à l'utilisateur s'il veut continuer
Jusqu'à ce qu'il ne réponde pas 'o' (recommencer tant qu'il répond 'o')
A l'issue de cette étape d'analyse, on réfléchit au COMMENT. On se rend compte alors
que pour calculer le chiffre d'affaire d'un représentant, il faut utiliser une boucle Pour.
Cette boucle vient donc naturellement s'imbriquer dans la boucle Répéter.
% Application de la démarche descendante : les tables de multiplication
On veut écrire un algorithme qui calcule et affiche les 10 tables de multiplication (de 1 à
10).
Chaque table doit être présentée comme exemple de la table du 7 ci-dessous:
La table du 7 est:
1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
7
6 * 7 = 42
7 * 7 = 49
8 * 7 = 56
9 * 7 = 63
10 * 7 = 70
Plutôt que d'essayer d'écrire immédiatement l'algorithme complet, il est préférable de
faire une approche descendante du problème. Cela consiste à décomposer le problème
en sous-problèmes plus simples à résoudre. Si certains sous-problèmes sont
décomposables en problèmes plus petits , on les décompose encore. Ensuite, chaque sousproblème
est résolu séparément et enfin, ils sont ré-assemblés pour composer la solution
complète.
Dans notre problème, nous constatons qu'il s'agit d'afficher 10 tables de multiplication, le
numéro de la table augmentant d'un à chaque fois: on va donc utiliser une boucle Pour.
Pour n de 1 jusqu'à 10 Faire
afficher la table numéro n
FinPour
Le traitement décrit en italique doit être précisé.
Pour écrire la table des n, on affiche d'abord le libellé, puis on utilise une boucle pour
chaque nombre de 1 à 10.
# ATTENTION : n est le numéro de la table, donc on ne peut pas l'utiliser comme
compteur dans la boucle des 10 nombres. On va plutôt utiliser l comme ligne
Afficher "La table du", n, "est :"
Pour l de 1 jusqu'à 10 Faire
Afficher la ligne l de la table n
FinPour
Le traitement décrit en italique doit encore être précisé.
Pour afficher une ligne, il suffit d'utiliser l'instruction:
Afficher l, " * ", n, " = ", l *n
On va maintenant recomposer le programme entier en ajoutant les déclarations
habituelles:
Programme tables
Var
n: entier //numéro de la table
l : entier // ligne de la table
Début
Pour n de 1 jusqu'à 10 Faire
Afficher "La table du", n, "est :"
Pour l de 1 jusqu'à 10 Faire
Afficher l, " * ", n, " = ", l *n
FinPour
FinPour
Fin
Stéphanie Laporte Algo: Chap 3 Lycée Louise Michel BTS 1 IG
8
TANT QUE
TANT QUE FAIRE

FINTANTQUE
&'Le corps de la boucle n'est exécuté que si la
condition est vraie. Il peut ne jamais être
exécuté.
&'La valeur de l'expression évaluée dans la
condition d'exécution doit devenir fausse
pour sortir de la boucle.
Programme exemple
Var
n, cpt :entiers /* n est la valeur pour laquelle la boucle
doit s'arrêter et cpt est le compteur*/
Début
/*initialisations*/
Saisir n
cpt ! 1
/* boucle*/
Tantque cpt <= n Faire
Afficher cpt
cpt ! cpt + 1
Fintantque
Fin
REPETER
REPETER

JUSQU'A
&'Le corps de la boucle est exécuté au moins
une fois
&'La valeur de l'expression évaluée dans la
condition d'exécution doit devenir vraie
pour sortir de la boucle.
Programme exemple
Var
n, cpt :entier /* n est la valeur pour laquelle la boucle
doit s'arrêter et cpt est le compteur*/
Début
/* initialisations*/
Saisir n
cpt ! 0
/*boucle*/
Répéter
cpt ! cpt + 1
Afficher cpt
Jusqu'à cpt = n
Fin
POUR
POUR DE
JUSQU'A PAS DE
FAIRE

FINPOUR
&'Le nombre de fois où la boucle sera exécuté
est connu d'avance
&' est augmentée de l'incrément à
chaque tour de boucle
Programme exemple
Var
n, cpt :entiers /* n est la valeur pour laquelle la boucle
doit s'arrêter et cpt est le compteur*/
Début
/* initialisations*/
Saisir n
/*boucle*/
Pour cpt de 1 jqà n Faire
Afficher cpt
Finpour
Fin
r=darkblue][/color]

_________________
cheers cheers cheers اهلا وسهلا king king

Admin
Admin

عدد المساهمات : 207
تاريخ التسجيل : 02/11/2011
العمر : 26

http://3arab3alam.a7larab.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى