5. Les structures répétitives

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Introduction a L’algorithme
Tris.
Chapitre annexe. Récursivité
1.Introduction à la programmation
Initiation à la programmation et algorithmique cours 2
Calculs de complexité d'algorithmes
EXERCICE 2.1 : APRES AVOIR DEMANDE LA SAISIE DUN NOMBRE POSITIF (ERREUR DE SAISIE A TRAITER). AFFICHER LE DECOMPTE EN PARTANT DE CE NOMBRE JUSQUÀ ARRIVER.
DECLARATION DE VARIABLES
Algorithmique Résume.
Calcul numérique (avec Maple)
4. Les structures de tests
6. Les sous-programmes P. Costamagna – ISEN N1.
8. Les tableaux P. Costamagna – ISEN N1.
3.Premiers pas en programmation
2.Les bases de lalgorithmique P. Costamagna – ISEN N1.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Section VI Structures répétitives (suite)
Les bases de l’Algorithmique
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Semaine #1 INF155 par Frédérick Henri.
Langage C Révision.
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Algorithmique et Programmation
Les éléments de base de l’algorithmique
Les structures de contrôle conditionnelles
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Python La structure itérative
Les structure d’un programme :
Algorithme de Bellman-Ford
Introduction à l’algorithmique
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
Semaine #1 INF135 par Frédérick Henri.
Points importants de la semaine Les constantes. Les boucles. Les opérateurs relationnels Les opérateurs logiques.
Instruction sélective switch-case Instruction répétitive do-while For
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Plan troisième cours Instruction sélective Instruction répétitive
Répéter dans un programme avec une Instruction itérative
Procédures et fonctions
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
L’essentiel du langage C
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
La Boucle Repeat Cours LCS N°1 Présenté par Mr: LALLALI.
Un survol du language C.
Les tests.
Structures de contrôle
Cours n° 3 Traitements en Java
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
Programmation en C.
Module algorithmique et programmation
Introduction à la programmation (420-PK2-SL) cours 8
Tutorat en bio-informatique Le 31 octobre Exercice 3 et 4 (MAT1400) Chapitre 9.3, Analyse - concepts et contextes vol. 2 25) Quel est le vecteur.
La pile de crêpes.
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
02/10/2015Les structures de contrôle1 COURS A2I12 Initiation à l'algorithmique illustrée par le langage C Guillaume BOURLET Département GEII IUT Sénart/Fontainebleau.
Algorithmique Algorithmique  Pascal
Philippe Gandy – 6 octobre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Algorithmique Boucles et Itérations
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
Philippe Gandy – 13 octobre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

5. Les structures répétitives P. Costamagna – ISEN N1

A. A quoi sert une boucle ? = structures itératives ou boucles. 2ème méthode permettant de rompre l’ordre séquentiel d’un programme. = structures itératives ou boucles. Les boucles permettent de faire exécuter plusieurs fois certaines phases de programme sans qu'il soit nécessaire à chaque fois de réécrire les instructions correspondantes. Il existe 3 types de boucles qu’il faut apprendre à choisir judicieusement. P. Costamagna

B. La boucle TANT QUE … Fonctionnement : Tant que booléen faire Langage intermédiaire Fonctionnement : Tant que booléen faire instructions (1) ... Ftq instructions (2) … évaluation du booléen si sa valeur est vraie, alors le bloc instructions (1) est exécuté le booléen est à nouveau évalué si sa valeur ... arrêt de la boucle quand le booléen devient faux le programme continue en séquence avec les instructions(2). le booléen est évalué. C’ est le test de continuité (booléen vrai) ou test d'arrêt (booléen faux). Instructions (1) est appelé corps de la boucle P. Costamagna

B. La boucle TANT QUE … (suite1) Remarques : Langage C Cette boucle peut ne jamais être parcourue si le booléen est faux dès le début. while (expression) { instructions (1) ... } instructions (2) … Inversement le nombre d’itérations peut être infini si le booléen reste toujours vrai. Il est possible d’imbriquer des boucles TANT QUE. Pas de ; à la fin de l’instruction while. P. Costamagna

B. La boucle TANT QUE … (suite2) Exercice Ecrire en langage C largement commenté, un algorithme qui affiche la valeur inverse du code octal d’un entier positif. Exemple : 611 en base 10 devient 1 143 en base 8 En effet 611 = 3 x 80 + 4 x 81 + 1 x82 + 1 x 83 Notre algorithme affichera donc 3 411. Pour obtenir ce résultat, on utilise la méthode des divisions successives par 8 : Chaque carré en pointillés représente une division par 8. Les restes successifs donnent le code octal de l’entier. Ce calcul ne sera effectué que dans le cas où le nombre à convertir est positif. P. Costamagna

B. La boucle TANT QUE … (suite3) Correction #include "ESLib.h" int main () { int n; /* nombre a convertir */ int q; /* quotient de la division entiere */ int r; /* reste de la division entiere */ /* saisie du nombre a convertir */ ecrisChaine ("Saisir un entier positif "); n = lisEntier(); sautDeLigne(); P. Costamagna

B. La boucle TANT QUE … (suite4) /* Conversion effectuee uniquement si le nbre saisi est positif */ if (n >0) { q = n; /* initialisation du 1er diviseur avec la valeur à convertir */ /* Arret des divisions successives des que le quotient devient nul */ while (q > 0) /* calcul du nouveau quotient */ q = n / 8; /* calcul du reste */ r = n % 8; /* affichage du résultat au fur et a mesure des divisions */ ecrisEntier(r); /* initialisation du nouveau diviseur a considerer */ n = q; } Initialisation de la variable q La variable q doit être déterminée en arrivant sur cette instruction La variable q doit être modifiée dans le corps de la boucle pour permettre une sortie de boucle P. Costamagna

B. La boucle TANT QUE … (suite5) else ecrisChaine ("Conversion non prevue"); sautDeLigne(); system ("pause"); return 0; } P. Costamagna

C. La boucle REPETER … Fonctionnement : Répéter instructions (1) ... Langage intermédiaire le bloc instructions (1) est exécuté une fois le booléen est évalué si sa valeur est vraie, le bloc d’instructions (1) est à nouveau exécuté le booléen est à nouveau évalué … arrêt de la boucle quand le booléen devient faux le programme continue en séquence avec les instructions(2). Répéter instructions (1) ... Tant que (booléen) instructions (2) … P. Costamagna

C. La boucle REPETER … (suite1) Remarques : Langage C Cette boucle est toujours exécutée au moins une fois. do { instructions (1) ... } while (expression); instructions (2) … Le nombre d’itérations peut être infini si le booléen reste toujours vrai. Il est possible d’imbriquer des boucles REPETER. Pas de ; à la fin de l’instruction do mais un ; à la fin de l’instruction while. P. Costamagna

C. La boucle REPETER … (suite2) Exercice Ecrire en langage C, un algorithme qui oblige un utilisateur à saisir la réponse O(ui) ou N(on)à une question. Correction #include "ESLib.h" int main () { char rep; /* caractere a saisir pour la reponse */ do ecrisChaine ("Voulez vous saisir qlqchose ? (O/N)" ); rep = lisCaractere(); } while (rep != 'O' && rep != 'N'); sautDeLigne(); system ("pause"); return 0; } Initialisation de la variable rep lors du 1er passage dans la boucle, puis modification de cette variable lors des passages suivants P. Costamagna

D. Notion de compteur de boucle Les 2 structures de boucles étudiées (TANT QUE et REPETER, sont utilisées dans des situations où l’on ne sait pas par avance combien de tours seront nécessaires. Possibilité néanmoins de compter les tours de boucle effectués à l’aide d’une variable entière, initialisée à 0 et dont on augmente de un la valeur à chaque tour. C’est le compteur de boucle. Ce compteur peut alors servir à comptabiliser les passages dans la boucle (compteur passif) ou servir à limiter le nombre de tours de boucles (compteur actif) P. Costamagna

D. Notion de compteur de boucle (suite1) Exercice A partir de l’exercice précédent, écrire en langage C, un algorithme qui affiche le nombre d’essais nécessaire à l’utilisateur pour effectuer la bonne saisie. do { ecrisChaine ("Voulez vous saisir qlqchose ? (O/N)" ); rep = lisCaractere(); /* incrémentation du nombre de passages */ cpt = cpt +1; } while (rep != 'O' && rep != 'N'); ecrisChaine ("Nombre d'essais = "); ecrisEntier (cpt); sautDeLigne(); system ("pause"); return 0; Correction #include "ESLib.h" int main () { char rep; /* caractere a saisir pour la reponse */ int cpt ; /* compteur de boucle */ /* initialisation du compteur de passages */ cpt = 0; P. Costamagna

D. Notion de compteur de boucle (suite2) Exercice A partir de l’exercice précédent, écrire en langage C, un algorithme qui limite le nombre d’essais à 3 pour effectuer une saisie correcte. do { ecrisChaine ("Voulez vous saisir qlqchose ? (O/N)" ); rep = lisCaractere(); /* incrémentation du nombre de passages */ cpt = cpt +1; } while (rep != 'O' && rep != 'N' && cpt <3); if (cpt == 3) ecrisChaine ("Nombre d'essais depasse "); sautDeLigne(); system ("pause"); return 0; Correction #include "ESLib.h" int main () { char rep; /* caractere a saisir pour la reponse */ int cpt ; /* compteur de boucle */ /* initialisation du compteur de passages */ cpt = 0; P. Costamagna

E. La boucle POUR … Pour cpt = depart à arret pas val instructions (1) Langage intermédiaire valeur initiale de la boucle variable correspondant au compteur de boucle. pas d’incrémentation de la boucle Pour cpt = depart à arret pas val instructions (1) Fpour instructions (2) … valeur de sortie de la boucle P. Costamagna

E. La boucle POUR … (suite1) Fonctionnement : Lors du 1er passage, le compteur est initialisé avec la valeur de départ et est comparé avec la valeur d’arrêt Si départ <= arrêt alors le bloc instructions (1) est exécuté une fois Lors des passages suivants, le compteur est incrémenté à chaque nouveau passage de la valeur du pas Si la nouvelle valeur du compteur est <= arrêt, le bloc d’instructions (1) est à nouveau exécuté le compteur est à nouveau incrémenté … arrêt de la boucle quand le compteur devient > arrêt. le programme continue en séquence avec les instructions(2). Ce déroulement est donné pour un pas positif. Dans le cas d’un pas négatif, les comparaisons sont inversées. P. Costamagna

E. La boucle POUR … (suite2) Remarques : Il est inutile d’initialiser le compteur de boucle avant la boucle POUR. La valeur du compteur ainsi que les valeurs de départ et d’arrêt de la boucle ne doivent pas être modifiées à l’intérieur de la boucle. depart et arret peuvent être des valeurs fixées ou des expressions. Cette structure de boucle est à privilégier dans les situations où l’on connaît d’avance le nombre de passages à effectuer dans la boucle. Cette structure de boucle n’est pas du tout indispensable. Son grand intérêt est d’épargner un peu de fatigue au programmeur, en lui évitant de gérer lui-même la progression du compteur de boucle. P. Costamagna

E. La boucle POUR … (suite3) Langage C for (expr1 ; expr2 ; expr3) { instructions (1) ... } instructions (2) … expr1: initialisation du compteur de boucle expr2: test d’arrêt de la boucle expr3: incrémentation du compteur de boucle Exemple for (i=1 ; i <=8 ; i= i+2) ecrisEntier (i) Pas de ; à la fin de l’instruction. P. Costamagna

E. La boucle POUR … (suite4) Exercice Ecrire en langage C, un algorithme qui affiche la table de multiplication de 1 à 10 d’un nombre choisi par l’utilisateur. for (cpt=1; cpt <=10; cpt = cpt+1) { ecrisEntier(cpt); ecrisChaine (" x "); ecrisEntier(n); ecrisChaine (" = "); ecrisEntier (n * cpt); sautDeLigne(); } system ("pause"); return 0; Correction #include "ESLib.h" int main () { int n; /* valeur de la table de multiplication */ int cpt; /* cpt de boucle pour les 10 multiplications */ ecrisChaine ("Saisir un nombre "); n = lisEntier(); sautDeLigne(); P. Costamagna

F. Choisir la bonne boucle En réalité une seule boucle aurait pu suffire. Suivant la nature du pb à résoudre telle ou telle forme de boucle s’avérera plus adaptée en conduisant à des formulations plus simples. Questions à se poser Le nombre de tours de boucle est il connu ? OUI  utiliser la boucle POUR NON  Peut on commencer l'action avant de tester une situation? OUI  utiliser la boucle REPETER NON  utiliser la boucle TANT QUE P. Costamagna

G. Quelques erreurs à éviter Le compteur de la boucle TANT QUE n’est pas initialisé: ….. i = 0; while( i < 10 ) { ecrisChaine ("hello world !"); i = i + 1; } ….. while( i < 10 ) { ecrisChaine ("hello world !"); i = i + 1; } Erreur dans la comparaison  la condition ne sera jamais vraie, donc la boucle ne sera pas exécutée : i = 0; while( i > 10 ) { ecrisChaine ("hello world !"); i = i + 1; } i = 0; while( i < 10 ) { ecrisChaine ("hello world !"); i = i + 1; } P. Costamagna

G. Quelques erreurs à éviter (suite1) Le compteur de la boucle TANT QUE n’est pas incrémenté  boucle infinie: i = 0; while( i < 10 ) { ecrisChaine ("hello world !"); } i = 0; while( i < 10 ) { ecrisChaine ("hello world !"); i = i + 1; } Attention aux ; en trop. La boucle suivante ne fait rien pendant 10 fois puis affiche la phrase hello world ! une seule fois : for ( i = 0; i < 10; i = i+1 ); ecrisChaine ("hello world !"); for ( i = 0; i < 10; i = i+1 ) ecrisChaine ("hello world !"); P. Costamagna