Full Transcript

Bases de la programmation Boucles « While » Julien Henriet [email protected] http://dept-info.univ-fcomte.fr Structures de contrôle Dans un programme, il est possible d’utiliser des structures de contrôle pour gérer l’enchaînement des instructions. Elle...

Bases de la programmation Boucles « While » Julien Henriet [email protected] http://dept-info.univ-fcomte.fr Structures de contrôle Dans un programme, il est possible d’utiliser des structures de contrôle pour gérer l’enchaînement des instructions. Elles permettent des traitements : séquentiels conditionnels (alternatifs) répétitifs (itératifs) -> 3 façons de combiner les instructions : Séquentielle Alternatives simple ou multiple Itérative 2 Structures de contrôle itératives Pour exécuter plusieurs fois un même traitement on utilise une structure de contrôle répétitive dite aussi structure de contrôle itérative. On dit aussi qu’on programme une « boucle ». Existence de trois structures de contrôle itératives : 1. tant que … 2. faire … tant que 3. pour … 3 Trois façon de répéter un traitement Exemple : programmer la marche d’un robot à partir de cette action élémentaire : faire un pas en avant dans sa direction. Traitement à répéter : avancer d’un pas 4 Critère de sélection d’une des trois structures Quel est le nombre d’itérations? (i.e. nombre de fois où le même traitement est répété). Traitement : avancer d’un pas Trois façons pour le robot d’avancer si le parcours comprend des obstacles : 1. Avancer jusqu’à rencontrer un obstacle sachant que le robot n’est pas placé déjà face à un obstacle : Une à plusieurs répétitions du traitement 2. Avancer jusqu’à rencontrer un obstacle sachant que le robot peut être déjà placé face à un obstacle : Zéro à plusieurs répétitions du traitement 3. Avancer de 5 pas sans se poser de question 5 Nombre de répétitions du traitement connu a priori Critère de sélection d’une des trois structures 1. Avancer jusqu’à rencontrer un obstacle sachant que le robot n’est pas déjà placé devant un obstacle Une à plusieurs répétitions faire avancer d’un pas tantQue (pas d’obstacle) Le nombre de répétitions de l’exécution de la séquence dépend de la valeur de condition et de l’évolution de celle-ci. 6 Critère de sélection d’une des trois structures 2. Avancer jusqu’à rencontrer un obstacle sachant que le robot peut être déjà placé un obstacle : Zéro à plusieurs répétitions tantQue (pas d’obstacle) faire avancer d’un pas finTantQue Le nombre de répétitions de l’exécution de la séquence dépend de la valeur de condition et de l’évolution de celle-ci. 7 Critère de sélection d’une des trois structures 3. Avancer de 5 pas sans se poser de question 5 répétitions entier compteur pour compteur variant de 1 à 5 pas de 1 faire avancer d’un pas finPour 8 Critère de sélection d’une des trois structures Une itération est un traitement composé d’une « boucle » qui a pour but de répéter l’exécution d’une séquence d’instructions. Une itération se code à l’aide une structure de contrôle itérative. Il existe trois structures de contrôle itératives : « tant que... » « faire... tant que » « pour … » 9 Tant que (while) while (condition) { La condition est une expression séquence logique booléenne. } Son évaluation a pour résultat la valeur vrai ou la valeur faux. Si condition a pour valeur faux avant l’instruction tant que, alors la séquence n’est pas exécutée. Par contre si condition a pour valeur vrai avant l’instruction tant que, alors la séquence est exécutée une fois puis condition est réévaluée avec pour conséquence la sortie ou non de la boucle. L’exécution de la séquence est répétée ainsi de suite tant que condition a pour valeur vrai (donc jusqu’à ce que condition ait pour valeur faux). 10 Règles d’usage while (condition) faire séquence } // condition est fausse Règle 1 : L’exécution de la séquence est répétée un nombre de fois non déterminé a priori. Règle 2 : La séquence est exécutée de zéro à plusieurs fois selon la valeur de condition. Règle 3 : la boucle prend fin lorsque la condition prend la valeur faux. 11 Règles d’usage while (condition) { séquence } // condition est fausse Règle 4 : Pour éviter une boucle infinie, lors des évaluations successives de la condition, celle-ci doit inéluctablement prendre la valeur faux. -> Au moins l’un des items sur lesquels porte la condition doit être modifié par l’exécution de la séquence. 12 Syntaxe JAVA for (initialisation ; condition de poursuite ; progression ) { } La boucle for est équivalente à : initialisation; while(condition de poursuite) { progression; } 13 Exemple Enoncé: Concevoir et coder un programme qui permet de saisir un chiffre (nombre entier compris entre 0 et 9 inclus) au clavier. On vérifie la validité de la saisie: En cas de saisie incorrecte, un message d’erreur est affiché et une nouvelle saisie est réalisée. 14 Analyse Concevoir et coder un programme qui permet de saisir un chiffre (nombre entier compris entre 0 et 9 inclus) au clavier. On vérifie la validité de la saisie: En cas de saisie incorrecte, un message d’erreur est affiché et une nouvelle saisie est réalisée. Effet à l’écran : Entrez la valeur d’un chiffre : 4 Effet à l’écran : Entrez la valeur d’un chiffre : 30 ERREUR de saisie! Ce n’est pas un chiffre Entrez la valeur d’un chiffre : 15 ERREUR de saisie! Ce n’est pas un chiffre Entrez la valeur d’un chiffre : 7 15 Analyse Donnée(s) : Identificateur Type Valeur chiffre entier Saisie dans [0 ; 9] Résultat(s) : Identificateur Type On ne stocke pas de résultat 16 Analyse pour itération Analyse en trois questions : 1. Quel est le traitement répété? 2. Combien d’itérations (répétitions)? 3. Condition de poursuite de l’itération? Question annexe : initialiser l’itération? 17 Exemple - analyse Analyse en trois questions: 1. Quel est le traitement répété? Traitement d’une erreur de saisie En cas de saisie incorrecte, un message d’erreur est affiché et une nouvelle saisie est demandée. 2. Combien d’itérations? De zéro à plusieurs => tant que 3. Condition de poursuite de l’itération? On arrête l’itération quand la saisie est correcte : saisie >= 0 ET saisie 9 Question annexe : Comment initialiser l’itération? Une première saisie est réalisée. 18 Programme en Java public class ErreurSaisie { public static void main(String [] args) { // déclaration des données int chiffre ; // Saisie des données Ecran.afficher ("Entrez la valeur d’un chiffre : ") ; chiffre = Clavier.saisirInt() ; while ((chiffre < 0) || (chiffre > 9)) { Ecran.afficher ("ERREUR de saisie! Ce n’est pas un chiffre") ; Ecran.afficher ("Entrez la valeur d’un chiffre : ") ; chiffre = Clavier.saisirInt() ; } // NON ((chiffre < 0) OU (chiffre > 9)) Ecran.afficher ("Vous avez saisi le chiffre ",chiffre) ; } } Remarque: La condition de poursuite de l’itération est la négation de la condition d'arrêt de l’itération (lois de Morgan). 19 Faire … tant que do { séquence } while (condition) ; La séquence est exécutée une fois puis tant que la condition « est vraie ». La séquence est donc exécutée une ou plusieurs fois. La condition est une expression logique booléenne. Son évaluation a pour résultat la valeur vrai ou la valeur faux. 20 Notation en Java do { La condition est une expression séquence logique booléenne. } while (condition) ; Son évaluation a pour résultat la valeur vrai ou la valeur faux. La séquence est exécutée une première fois. Ensuite si condition a pour valeur vrai la séquence est exécutée une deuxième fois puis condition est réévaluée. L’exécution se poursuit ainsi de suite tant que condition a pour valeur vrai (jusqu’à ce que condition ait pour valeur faux). 21 Règles d’usage do { séquence } while (condition) ; // condition a pour valeur faux Règle 1 : L’exécution de la séquence est répétée un nombre de fois non déterminé a priori. Règle 2 : La séquence est exécutée de une à plusieurs fois. Règle 3 : La boucle prend fin lorsque la condition prend la valeur faux. 22 Règles d’usage do { séquence } while (condition) ; // condition a pour valeur faux Règle 4 : Pour éviter une boucle infinie, lors des évaluations successives de la condition, celle-ci doit inéluctablement prendre la valeur faux. Par conséquent, au moins l’un des items sur lesquels porte la condition doit être modifié par l’exécution de la séquence. 23 Exemple Enoncé: Concevoir et coder un programme qui permet de calculer et d’afficher le premier nombre entier dont le cube est supérieur ou égal à une limite. La valeur de la limite est saisie (entier > 0). Analyse en trois questions : 1. Quel est le traitement répété? 2. Combien d’itérations? 3. Condition de poursuite de l’itération? Question annexe : initialiser l’itération? 24 Analyse Enoncé: Concevoir et coder un programme qui permet de calculer et d’afficher le premier nombre entier dont le cube est supérieur ou égal à une limite. La valeur de la limite est saisie (entier > 0). Effet à l’écran : Entrez la limite (entier >0): 30 Premier nombre entier dont le cube est >= à 30 : 4 Effet à l’écran : Entrez la limite (entier >0): 27 Premier nombre entier dont le cube est >= à 27 : 3 25 Analyse Donnée(s) : Identificateur Type Valeur limite entier Saisie >0 Résultat(s) : Identificateur Type nombre entier 26 Analyse du traitement Idée : Considérer successivement les entiers : nombre = 1, 2, 3, … jusqu’à ce que le cube de nombre soit supérieur ou égal à limite. Analyse en trois questions : 1. Quel est le traitement répété ? 2. Combien d’itérations ? 3. Condition de poursuite de l’itération ? Question annexe: initialiser l’itération? 27 Exemple - analyse Analyse en trois questions: 1. Quel est le traitement répété? nombre ← nombre + 1 2. Combien d’itérations? De une à plusieurs => faire … tant que 3. Condition de poursuite de l’itération? On arrête quand : nombre3 >= limite Condition de poursuite est la négation de la condition d’arrêt de l’itération : nombre3 < limite Question annexe: initialiser l’itération? nombre ← 0 28 Programme en Java public class Cube { public static void main (String [] args) { // déclaration des données int limite; // déclaration du résultat int nombre; // saisie des données Ecran.afficher("Entrez la limite (entier > 0): "); limite = Clavier.saisirInt(); // calculs nombre = 0; do { nombre = nombre + 1; } while (Math.pow(nombre,3) < limite); // affichage du résultat Ecran.afficherln ("Premier nombre entier dont le cube est supérieur ou égal à ",limite," : ",nombre); } 29 } Exercice Concevoir et coder un programme qui demande à l’utilisateur de saisir un chiffre (compris entre 2 et 9), et qui affiche ensuite la table de multiplication de ce chiffre. On suppose que l’utilisateur effectue une saisie du chiffre correcte. La table de multiplication est affichée selon le format donné dans l’exemple ci-dessous. Cas où l'utilisateur entre le nombre 7 : 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 … 7 x 10 = 70 30 Analyse Effet à l’écran : Entrez un chiffre entre 2 et 9 : 7 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 … 7 x 10 = 70 31 Exercice (suite) Compléter l’exercice précédent en vérifiant la validité du chiffre saisi. Chaque fois que la saisie est erronée, un message d’erreur est affiché et une nouvelle saisie est demandée. Message d’erreur : « Erreur! : Nouvelle saisie : » 32 Exercice (suite de la suite) Tant que l’utilisateur saisit un chiffre entre 2 et 9, le programme affiche la table du chiffre saisi, Dès que l’utilisateur saisit 0, le programme s’arrête. MERCI de votre attention 34

Use Quizgecko on...
Browser
Browser