Chapitre 3 Les structures de contrôle: approfondissements

Documents pareils
Algorithmique avec Algobox

Algorithmique avec Algobox

Algorithmique et structures de données I

Cours d Informatique

1. Introduction Création d'une requête...2

Initiation à la programmation en Python

CORRECTION EXERCICES ALGORITHME 1

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.


Correction TD algorithmique

Trier les ventes (sales order) avec Vtiger CRM

I. Introduction aux fonctions : les fonctions standards

Algorithmique et programmation : les bases (VBA) Corrigé

Propagation sur réseau statique et dynamique

PARCOURS COMPLET AU COURS MOYEN

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Navigation dans Windows

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Organigramme / Algorigramme Dossier élève 1 SI

Programmation Objet - Cours II

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Comment se connecter au VPN ECE sous vista

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Chapitre 2 Devine mon nombre!

alg - Classes, instances, objets [oo] Exercices résolus

SOMMAIRE. Travailler avec les requêtes... 3

Algorithme. Table des matières

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

modélisation solide et dessin technique

Feuille TD n 1 Exercices d algorithmique éléments de correction

Programmation C++ (débutant)/instructions for, while et do...while

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Examen Médian - 1 heure 30

Rappels sur les suites - Algorithme

De l automatisme à la domotique...

5 semaines pour apprendre à bien jouer un morceau de piano

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Traitement de texte : Quelques rappels de quelques notions de base

Création d'un questionnaire (sondage)

Cours d Algorithmique et de Langage C v 3.0

Compte-rendu de projet de Système de gestion de base de données

MÉTHODES NUMERIQUES. Cours. Licence de Physique Année Universitaire : Licence Chimie, parcours Physique. Semestre S3

Tutorial Ophcrack. I) Ophcrack en API. (ou comment utiliser Ophcrack pour recouvrir un mot de passe sous Windows XP et Windows Vista)

Recueil des réponses au questionnaire confié aux Professeurs de Ecoles Stagiaires (PES) lors de leur stage de janvier à l'iufm

Championnat de France de Grilles Logiques Finale 7 juin Livret d'instructions

AGRÉGATION «ÉCONOMIE ET GESTION»

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Cours Informatique Master STEP

Méthodes de développement. Analyse des exigences (spécification)

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

Partie 1 : la construction du nombre chez l'enfant. Page 2. Partie 2 : Des jeux et des nombres Page 8

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Créer une base de données

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

LES DÉTERMINANTS DE MATRICES

C++ - Classes, instances, objets [oo] Exercices résolus

1. Structure d'un programme FORTRAN 95

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1. Utilisation du logiciel Keepass

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Recherche dans un tableau

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Cours 1 : Qu est-ce que la programmation?

La magie de SVN. Découverte & usage du logiciel

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

STAGE IREM 0- Premiers pas en Python

Algorithmique et Programmation, IMA

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Créer et gérer ses abonnements dans Citédoc bibli

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

3 Les premiers résultats des plans d'actions

1.6- Génération de nombres aléatoires

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

C f tracée ci- contre est la représentation graphique d une

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Sauvegarde et restauration d'un système d'exploitation Clonezilla

EVOLUTIONS suite à mise à jour

TRANSMETTEUR TELEPHONIQUE TTX = SINTEL X

Algorithmes récursifs

Suite dossier d appel

KeePass - Mise en œuvre et utilisation

Uniformiser la mise en forme du document. Accélère les mises à jour. Permets de générer des tables de matières automatiquement.

Le chiffre est le signe, le nombre est la valeur.

Modules Prestashop - ExportCatalogue / EXPORT IMPORT POUR MODIFICATIONS EN MASSE DANS PRESTASHOP VERSION Optim'Informatique

MODE OPERATOIRE OPENOFFICE BASE

Les diagrammes de modélisation

Importer les fichiers élèves - professeurs du secrétariat

Comptabilité - USR. Logiciel : Comptabilité USR - Version 2,16 Documentation réalisée par JJ Gorge Trésorier Tir à l'arc le 04/04/ / 15

Utiliser les supports d'exemplaires

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

Comment utiliser le lecteur MP3?

Transcription:

Chapitre 3 Les 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 SelonFaire (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 SiAlors. 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] selon 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" selon 1

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 Selon montant! montant * ( 1 taux/100) B. La boucle Jusqu'à Cette boucle sert à répéter une instruction jusqu'à ce qu'une condition (expression booléenne) soit vraie. Son formalisme est le suivant: 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 rayon : réel réponse : chaîne Afficher "Calcul de l'aire d'un cercle" 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!" La boucle 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. 2

Différences entre la boucle et Tantque Tant quefaire Condition vérifiée avant le traitement: le traitement peut ne pas être exécuté condition de continuation : le traitement est répété si la condition est vraie Jusqu'à Condition vérifiée après le traitement: le traitement est forcément exécuté une fois condition d'arrêt : le traitement est répété si la condition est fausse Faux test Vrai traitement traitement test Faux suite Vrai suite 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 montant, taux: entiers 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 si //(3) si //(2) si //(1) Montant! montant - montant * taux/100 Afficher montant 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. 3

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 Si 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 "*" 4

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 "*" * * * * * * * * * * * * * * * # 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 "*" Afficher "\n" 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 Tantque a > b Faire Pour i de 1 jusqu'à n Faire Tantque IMPOSSIBLE Tantque a > b Faire Pour i de 1 jusqu'à n Faire Tantque 5

" 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 CAM : réel CAA : réel mois : entier réponse : caractère //chiffre d'affaire mensuel //chiffre d'affaire annuel //compteur de la boucle qui calcule le CA annuel 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 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' 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. 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. % 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 6

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 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 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 n: entier //numéro de la table l : entier // ligne de la table 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 7

TANT QUE TANT QUE <condition d'exécution> FAIRE <traitement (corps de la boucle)> 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. REPETER REPETER <traitement (corps de la boucle)> JUSQU'A <condition d'arrêt> &'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. POUR POUR <variable> DE <valeur intiale> JUSQU'A <valeur finale> PAS DE <incrément> FAIRE FINPOUR <traitement (corps de la boucle)> &'Le nombre de fois où la boucle sera exécuté est connu d'avance &'<variable> est augmentée de l'incrément à chaque tour de boucle Programme exemple n, cpt :entiers /* n est la valeur pour laquelle la boucle doit s'arrêter et cpt est le compteur*/ /*initialisations*/ Saisir n cpt! 1 /* boucle*/ Tantque cpt <= n Faire Afficher cpt cpt! cpt + 1 tantque Programme exemple n, cpt :entier /* n est la valeur pour laquelle la boucle doit s'arrêter et cpt est le compteur*/ /* initialisations*/ Saisir n cpt! 0 /*boucle*/ cpt! cpt + 1 Afficher cpt Jusqu'à cpt = n Programme exemple n, cpt :entiers /* n est la valeur pour laquelle la boucle doit s'arrêter et cpt est le compteur*/ /* initialisations*/ Saisir n /*boucle*/ Pour cpt de 1 jqà n Faire Afficher cpt pour 8