PLAN PLAN CHAPITRE III PROGRAMMATION C LES ACTIONS ITÉRATIVES. Généralités. Généralités. La boucle while do. La boucle for.

Documents pareils
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)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Bases de programmation. Cours 5. Structurer les données

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

Introduction au langage C

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)


Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

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

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

Java Licence Professionnelle CISII,

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Informatique

Initiation à la programmation en Python

Algorithmique et Programmation, IMA

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

UE C avancé cours 1: introduction et révisions

Notions fondamentales du langage C# Version 1.0

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

Cours d Algorithmique et de Langage C v 3.0

SUPPORT DE COURS. Langage C

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Algorithmique et structures de données I

Programmation en langage C

V- Manipulations de nombres en binaire

Cours d algorithmique pour la classe de 2nde

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Recherche dans un tableau

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours Informatique Master STEP

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Rappels Entrées -Sorties

ALGORITHMIQUE ET PROGRAMMATION En C

Programmation Classique en langage C

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Le langage C. Séance n 4

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmer en JAVA. par Tama

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Les structures de données. Rajae El Ouazzani

Chap III : Les tableaux

Les processus légers : threads. Système L3, /31

Organigramme / Algorigramme Dossier élève 1 SI

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Examen Médian - 1 heure 30

INITIATION A LA PROGRAMMATION

Représentation d un entier en base b

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

Introduction à MATLAB R

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Conventions d écriture et outils de mise au point

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Correction TD algorithmique

Introduction au Langage de Programmation C

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Les structures. Chapitre 3

CORRECTION EXERCICES ALGORITHME 1

Corrigé des TD 1 à 5

INF 321 : mémento de la syntaxe de Java

Initiation à LabView : Les exemples d applications :

Plan du cours. Historique du langage Nouveautés de Java 7

Propagation sur réseau statique et dynamique

Application 1- VBA : Test de comportements d'investissements

Guide de référence rapide sur la messagerie vocale d'avaya Distributed Office

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Introduction à l algorithmique et à la programmation M1102 CM n 3

Conception de circuits numériques et architecture des ordinateurs

Les chaînes de caractères

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

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation C. J.-F. Lalande. 15 novembre 2012

STAGE IREM 0- Premiers pas en Python

Cours d initiation à la programmation en C++ Johann Cuenin

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Temps Réel. Jérôme Pouiller Septembre 2011

LES NOMBRES DECIMAUX. I. Les programmes

as Architecture des Systèmes d Information

Claude Delannoy. 3 e édition C++

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Chapitre 2. Classes et objets

Initiation à l algorithmique

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

La programmation des PIC en C. Les fonctions, les interruptions.

Cours 1 : Qu est-ce que la programmation?

I. Introduction aux fonctions : les fonctions standards

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Chapitre 2 Devine mon nombre!

Notions de Langage C

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

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

Transcription:

CHAPITRE III PROGRAMMATION C LES ACTIONS ITÉRATIVES Par : Khaled Hassine Khaled.hassine@fsg.rnu.tn Khaled Hassine 1 Khaled Hassine 2 Khaled Hassine 3 Khaled Hassine 4 LFSI 1 LARI 1 1

Besoin des boucles Boucle en C Pour des nombreux problèmes, il est nécessaire de pouvoir exprimer qu'une action simple ou composée doit être exécutée plusieurs fois. Or, les actions simples (affectation, lecture et écriture) et conditionnelles (si, selon, etc.) ne permettent pas d'exprimer ceci, alors que les actions itératives (dites aussi répétitives) permettent de contrôler la répétition d'une même action. On parle de boucle. L'exemple trivial qu'on peut traiter avec des telles structures est les traitements des suites. Avant de détailler les structures itératives, signalons que tout programme peut être exprimé par l'une (ou une combinaison) des trois structures : séquences, conditionnelles, itératives. Ce sont donc les structures de base pour l'écriture d'un programme. C dispose de deux déclarations possibles des traitements itératifs : la déclaration for et la déclaration while. Pour le contrôle du flux de programme dans une boucle, on peut utiliser les déclarations. Khaled Hassine 5 Khaled Hassine 6 Boucles en C Qui dit contrôle de la boucle, dit qu'il faut pouvoir s'arrêter!!! Plusieurs cas sont possibles : Le nombre de répétitions (itérations) est connu à l'avance : répéter un traitement 100 fois. Ceci peut être exprimée par la structure itérative Pour (ou for en C). Le nombre de répétitions n'est pas connu à l'avance. Il dépend d'une condition logique. Ceci peut être exprimé par la structure tant que (ou while... do en C) ou aussi dans certains cas par Répéter... Jusqu'à (ou do... while en C). Khaled Hassine 7 Khaled Hassine 8 LFSI 1 LARI 1 2

Forme algorithmique générale Boucle while do La structure algorithmique générale d'une boucle Tant que est la suivante : Tant que <Condition > Faire /*Condition est à Vrai*/ <Traitement> /* Condition est mise à jours dans traitement*/ FinFaire La sémantique : refaire <Traitement>, dit aussi corps de la boucle, tant que <Condition> est évaluée à Vrai. Ceci sous-entend que <condition> peut-être une expression logique ou une variable Booléenne. Si Condition est évaluée à faux avant d'entrer dans la boucle, la partie <Traitement> n'est jamais exécutée. Remarquons que la structure tant que est la plus générale. En effet, toutes les structures itératives peuvent être exprimées sous forme de while. Syntaxe : while <Expression> <Traitement> Comme c est le cas pour le traitement conditionnel, <Expression> est une expression logique, arithmétique, qui retourne une valeur. Si cette valeur est non nulle, on refait le corps de la boucle. Si la valeur retournée est nulle, on passe à la déclaration qui suit le while. Comme dans le cas des actions conditionnelles, si <Traitement> est composé de plusieurs actions (simples, itératives, conditionnelles, etc. ), il faut le délimiter par { et. Khaled Hassine 9 Khaled Hassine 10 Exemple 1: Puissance de 2 On veut afficher les 10 premières puissances de 2. Le format d'affichage est le suivant : 0 1 1 2 2 4 3 8 etc. Exemple 1 { int i=0, P2 = 1; /* Respectivement un Compteur et la puissance de 2 */ printf("table des Puissances de 2\n"); /* Partie initialisation des variables de la boucle */ while (i<10) { printf ("%d%20d\n", i, P2); i++; P2 *= 2; /* A ce niveau I = 10 > 9 */ Khaled Hassine 11 Khaled Hassine 12 LFSI 1 LARI 1 3

Exemple 2 : Lecture / Écriture répétitifs Attention aux boucles Infinies main () { int A, B; /* Les variables du calcul */ char Rep = 'O'; /*'O' pour continuer, 'N' pour s'arrêter*/ while (Rep == 'O') { printf("donnez deux entiers : "); scanf("%d %d", &A, &B) ; printf("%d + %d = %d", A, B, A+B); printf("%d x %d = %d", A, B, A*B); printf("continuer (O/N) : "); scanf("%c",&c); /* A ce niveau Rep 'O' */ main () { int A, B; /* Les variables du calcul */ char Rep = 'O'; /*'O' pour continuer, 'N' pour s'arrêter*/ while (Rep = 'O') { printf("donnez deux entiers : "); scanf("%d %d", &A, &B) ; printf("%d + %d = %d", A, B, A+B); printf("%d x %d = %d", A, B, A*B); printf("continuer (O/N) : "); scanf("%c",&c); /* A ce niveau Rep 'O' */ Khaled Hassine 13 Khaled Hassine 14 Condition générale d application de la boucle Pour On peut se trouver devant le cas où le nombre d'itérations est connu à l'avance : refaire une action N fois. Ceci est exprimé facilement par la boucle POUR. C'est en, effet, une forme d'actions répétitives qui correspond au cas où la condition de boucle ne porte que sur le contrôle d'une variable simple (généralement entière, appelée compteur) incrémentée ou décrémentée d'un pas (généralement ± 1). Khaled Hassine 15 Khaled Hassine 16 LFSI 1 LARI 1 4

Forme algorithmique générale Equivalent algorithmique de la boucle Pour La forme la plus générale de la structure Pour est la suivante : Pour <Compteur> de <VI> à <VF> Par Pas de <Pas> Faire <Traitement> FinFaire. Avec VI est la Valeur Initiale et VF est la Valeur Finale. On répète ainsi <Traitement> (VF-VI + 1) fois si <Pas> est égal à 1. Compteur = VI Tant que Compteur VF Faire <Traitement> Compteur = Compteur + <Pas> FinFaire Ainsi, si VF > VI, la partie Traitement n'est exécutée aucune fois. Khaled Hassine 17 Khaled Hassine 18 Syntaxe C de la boucle for for ([<Initialisations>;] [<Condition>;][<incrément>]) <Traitement> où <Initialisations> est la condition de départ. Plusieurs initialisations sont possibles séparées par des virgules. <Condition> : la boucle est effectuée tant que cette condition est vérifiée. L'évaluation de la condition se fait avant l'entrée dans la boucle. <expression d incrément> : c'est qu'il faut faire après chaque itération. Plusieurs instructions sont possibles séparées par des virgules. <Traitement> : corps de la boucle Ordre de traitement de la boucle for 1. <expression initiale> : initialise toutes les valeurs nécessaires à la déclaration de la boucle. 2. <condition> : Si elle est vraie, on passe à l'étape suivante. Sinon, on passe à la déclaration suit la boucle. 3. <expression d'incrément> : met à jour les variables utilisées dans le contrôle de la boucle. 4. <Traitement> est exécuté à moins de rencontrer une déclaration : break : on quitte la boucle Continue : on revient à l'étape 2. Khaled Hassine 19 Khaled Hassine 20 LFSI 1 LARI 1 5

Remarque Comme pour les structures conditionnelles et la structure while, si <Traitement> est composé de plusieurs actions, il faut le délimiter par { et. Exemple puissance de 2 : 1 ère version Dans l'exemple de puissance de 2, on répète le même traitement 10 Fois et ceci est connu à l'avance. Le programme correspondant s'écrit alors aisément avec la structure for. { int i,p2; /* Respectivement un Compteur et la puissance de 2 */ printf("table des Puissances de 2"); /* Partie initialisation des variables de la boucle */ for (i=0, P2=1; i<10; i++) { printf (" %d \t \t %d\n", i, P2); P2 *= 2; /* A ce niveau I = 11 > 10 */ Khaled Hassine 21 Khaled Hassine 22 Exemple puissance de 2 : 2 ème version Autre exemple { int i,p2; /* Respectivement un Compteur et la puissance de 2 */ printf("table des Puissances de 2"); /* Partie initialisation des variables de la boucle */ for (i=1, P2=1; i<10; i++, P2 *=2) printf (" %d \t \t %d\n", i, P2); { int i,j; Résultat de l exécution : i : 2 - j : 4 i : 3 - j : 3 for (i=2, j = 4; (i<5) && (j>2); i++, j--) printf ("i : %d - j : %d\n", i, j); Khaled Hassine 23 Khaled Hassine 24 LFSI 1 LARI 1 6

Forme générale Dans certains cas, on est sûr d'exécuter le corps de la boucle au moins une fois. Dans ces conditions, il est préférable, voire meilleur, en C d'employer la structure do... while. Cette structure provoque l exécution de la première itération indépendamment de la condition puis la répétition de Traitement tant que Condition est évaluée à vrai. Khaled Hassine 25 Khaled Hassine 26 Syntaxe do { /*Quelque soit l'état de Condition pour la première fois, pour les autres Expression est évaluée à vrai */ <Traitement> {Corps de la boucle /*Mise à jour de <Expression> * while <Expression >; Equivalent algorithmique de do while Forcer <Expression> à une valeur positive. Tant que <Expression> Faire <Traitement> FinFaire Khaled Hassine 27 Khaled Hassine 28 LFSI 1 LARI 1 7

Exemple : lecture contrôlée Lecture contrôlée : traduction en C La structure do... while est très utile pour les lectures contrôlées. Par exemple; on peut exprimer le fait que OP doit appartenir à {'+', '- ','*' comme suit : Faire Lire (op) Tant que OP ['+', '-','*'] { char C; do scanf("%c", &op) ; while ((op!= '+') && (op!= '-') && (op!= '*')); Khaled Hassine 29 Khaled Hassine 30 Autre exemple de lecture contrôlée { char Rep; do printf("continuer (O/N) : "); scanf("%c", &Rep) ; while ((Rep!= 'O') && (Rep!= 'o') && (Rep!= 'N') && (Rep!= 'n')); Khaled Hassine 31 Khaled Hassine 32 LFSI 1 LARI 1 8

Sortie des boucles : Pour le contrôle du flux de programme dans une boucle, on peut utiliser les instructions. L instruction break termine une boucle (for, while, do while) après on passe à l instruction qui suit le corps de la boucle. L'instruction continue permet de passer directement à l'itération suivante. On interrompe ainsi l'exécution de l'itération en cours mais on ne sort pas de la boucle. On reprend selon le type de la boucle, au niveau de la condition pour une boucle while et au niveau de la l'incrément au niveau de la boucle for. Exemple { int i,j; scanf("%d %d", &i,&j Le résultat est si on introduit 2 3 : i : 2 - j : 3 i : 1 - j : 2 for (; (i>0) && (j>0); i--, j--) { if (i==5) continue ; printf ("i : %d - j : %d\n", i, j); if (j==5) break ; Le résultat est si on introduit 6 3 : i : 6 - j : 3 i : 4 - j : 1 Le résultat est si on introduit 3 5 : i : 3 - j : 5 Khaled Hassine 33 Khaled Hassine 34 Autre exemple { int i=0; while (i < 10) { printf("\nau début de la boucle i : %d",i); if (i == 3) break; i++; printf("\na la fin de la boucle i : %d",i); Quel est le résultat de l exécution de ce programme? boucle infinie { int i=0; while (i < 10) { printf("\nau début de la boucle i : %d",i); if (i == 3) continue; i++; printf("\na la fin de la boucle i : %d",i); Khaled Hassine 35 Khaled Hassine 36 LFSI 1 LARI 1 9

Autre exemple { int i=3; while (1) /* condition toujours vrai */ { if (!--i) break ; printf ("i : %d \n", i); if (!--i) est équivalent à if (--i ==0) puisque l'opérateur -- est prioritaire par rapport à ==. Le résultat est alors : i : 2 i : 1 i : 0 Remarque for ( ; ; ) est une instruction syntaxiquement correcte mais donne lieu à une boucle infinie sans l'instruction break. Khaled Hassine 37 Khaled Hassine 38 Khaled Hassine 39 LFSI 1 LARI 1 10