GEF 243B Programmation informatique appliquée Boucles §6.1 - 6.5.

Slides:



Advertisements
Présentations similaires
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Architecture du logiciel I.
Advertisements

GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
GEF 243B Programmation informatique appliquée
Machines séquentielles
Initiation à la programmation et algorithmique cours 2
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
Systèmes en temps réel Modélisation du comportement en temps réel avec UML.
GEF 435 Principes des systèmes d’exploitation
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Considération de temps.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Tests.
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Modélisation II.
GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Flot de contrôle et énoncés de sélection §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Génie logiciel avec composantes.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
Les Structures de contrôles itératives
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
5. Les structures répétitives
Qu’est-ce qu’un ordinateur ?
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.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Sémantique axiomatique
Automates Programmables Industriels Automates Programmables
Python La structure itérative
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
Introduction à l’algorithmique
Les itérations (boucle) Les routines Les Fonctions
Semaine #1 INF130 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
CSI3525: Concepts des Languages de Programmation
IFT 6800 Atelier en Technologies d’information
Chapitre 8 Structure de contrôle.
CSI 1502 Principes fondamentaux de conception de logiciels
Instructions de contrôle
Répéter dans un programme avec une Instruction itérative
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.
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Algorithmique Les structures Rappel L'enchaînement séquentiel
La Boucle Repeat Cours LCS N°1 Présenté par Mr: LALLALI.
Boucles et Tests For( in ) { } While( ) { } Les exécutions conditionnelles (if.. else) peuvent être évitées avec des indexations logiques. Exemples: y=numeric(length(x));
Les structures répétitives en PHP Réfs : manuel p 317.
Algorithmique et programmation (1)‏
Cours n° 3 Traitements en Java
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
Introduction à la programmation (420-PK2-SL) cours 8
Scripts et fonctions Instructions de contrôle
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.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
O UTILS DE P ROGRAMMATION P OUR LES M ATHÉMATIQUES Mr. BENDIB. I MAA, LAMIS Laboratory, Université Larbi Tébessi - Tébessa.
Transcription de la présentation:

GEF 243B Programmation informatique appliquée Boucles §

21-Jan-14 2 JGA Beaulieu Revue Quand devriez-vous utiliser un énoncé else-if au lieu dun switch Donnez une expression ternaire pour incrémenter a si b > 0, sinon, décrémentez a et assigné la vielle valeur de a à c

21-Jan-14 3 JGA Beaulieu Synopsis Le concept des boucles Boucle for Boucle while Boucle do-while Les énoncés continue et break Optimization du code avec les expressions logiques court-circuit

21-Jan-14 4 JGA Beaulieu Boucles Quest ce quun ordinateur peut faire très bien Opérations répétitives … (vous comprenez) Les répétitions pour accomplir une tâche sont partout dans la programmation Ces répétitions sappelles boucles et sont dautres abstractions dun langage de haut niveau

21-Jan-14 5 JGA Beaulieu Boucles – le concept Cette boucle représente une machine à actions perpétuelles (il ny a pas de sortie … laissez-moi sortir !!!). Un action ou une série dactions

21-Jan-14 6 JGA Beaulieu Boucles – le concept Si nous ne voulons pas une machine perpétuelle (et pour la plus part du temps on nen veut pas), nous devons imposer quelques genres de conditions sur la boucle pour quelle termine. Ces conditions sont des expressions logiques qui sont évaluées pour déterminer si il y a eu assez de travail de fait Ou dans certain cas si nous avons même besoin dentrer dans la boucle Il y a deux sortes de tests qui nous permettent de terminer des boucles: Pré-test Post-test

21-Jan-14 7 JGA Beaulieu Boucles – le concept Pré-test: Lexpression logique est évaluée en premier. Si Lexpression évalue à vrai, alors les actions dedans la boucle sont exécutées; si faux, la boucle termine. Post-test: Les actions sont exécutées en premier et lexpression est évaluée après. On utilise ce genre de boucle si on veut que le code dans la boucle exécute au moins une fois

21-Jan-14 8 JGA Beaulieu Boucles – le concept

21-Jan-14 9 JGA Beaulieu Boucles – le concept

21-Jan JGA Beaulieu Boucles – le concept Il y a des questions qui se posent par rapport à lévaluation des expressions logiques: Quelles sont les conditions initiales de lexpression? Comment est-ce que les conditions changent pour permettre à la boucle de terminer? Est-ce que jattend pour un événement ou simplement un nombre donné ditérations? Est-ce que la boucle va se terminer un jour?

21-Jan JGA Beaulieu Boucles – le concept Changement des conditions: Pour quune boucle se termine, une ou des conditions doivent changer Ce changement de condition est due aux actions dans la boucle (compteur, EOF, EOL,…) ou Comme résultat de stimuli externes (interruption qui change létat du senseur IR de notre robot). Si vos conditions ne changent pas, ou quelles changent de la mauvaise façon vous pouvez avoir une boucle infinie!!!

21-Jan JGA Beaulieu Boucles – le concept changement de condition

21-Jan JGA Beaulieu Boucles – le concept changement de condition

21-Jan JGA Beaulieu Boucle for Lénoncé for … Cest une boucle avec pré-test! La boucle for contient trois expressions: expr1: établie la condition initiale pour la boucle expr2: contient la condition limite pour la boucle expr3: contient linformation de mise à jour for (expr1; expr2; expr3) énoncé

21-Jan JGA Beaulieu Boucle for - exemples for (i=1; i<=maxIteration; i++) factoriel *= i; //notez où le ; est for (j=10; j>0; j--) //boucle qui décrémente { som += j; cputs(Fini); //vous allez utiliser cette fctn }

21-Jan JGA Beaulieu Boucle while Lénoncé while est une autre boucle avec pré- test. Si lexpression évalue à faux avec les conditions initiales, la boucle termine sans quaucun énoncé dans la boucle exécute Un contrôle de boucle simple. … while (expression) énoncé Est-ce que ça pourrait être plus simple?

21-Jan JGA Beaulieu Boucle while - exemples while (i++ < n) factoriel *= i; //cest tout!! while ((c = getchar()) != EOF) //End of File { if(c>=a && c<= z) minusculesCompte++; nombreTotalDeCaractères++; }

21-Jan JGA Beaulieu Boucle do-while Et vous lavez deviné, do-while est la boucle avec post-test. do énoncé while (expression); Remarquez le ; Comme vous le voyez, lexpression logique est à la fin de la boucle. Donc lénoncé VA exécuter Soyez prudent, vous devez vous assurer que lénoncé peut exécuter même si la condition initiale évalue à faux

21-Jan JGA Beaulieu Boucle do-while - exemples //Ici on compte des Smarties dans une //boite, on suppose que le singulier de //Smarties est Smarty et que la boite //nest pas vide quand on commence do { if (couleurDuSmarty == "rouge") smartiesRouges++; else autresSmarties++; boite -= 1; } while (boite != vide);

21-Jan JGA Beaulieu Énoncés continue et break Lénoncé continue narrête pas une boucle, il fait seulement arrêter litération en cours et recommence la boucle Pour les boucles do-while et while, continue transfert le contrôle pour réévaluer la condition limite Pour la boucle for, continue met à jour lexpression logique (i.e. i++ ) et vérifie la condition limite

21-Jan JGA Beaulieu Énoncés continue while (expression) { … if (condition) continue; … }

21-Jan JGA Beaulieu Énoncés continue et break Nous avons vue lénoncé break avec lénoncé switch. Le break peut être utilisé dans nimporte quelle boucle pour terminer si une autre condition se produit. Si il y a des boucles imbriquées, seulement la boucle courante se termine. while (condition) { … for (…;…;…;) { … if (autreCondition) break; //for arrête, while arrête pas … } x = x + y; … }

21-Jan JGA Beaulieu Énoncés continue et break Quelle est le résultat de ce code? for (cnt=0; cnt<10; cnt++) { if (cnt==4) //boucle for loop termine, continue; if (cnt==6) break; printf("cnt=%d\n",cnt); }

21-Jan JGA Beaulieu Optimisations du code avec les expressions logiques Dans certains langages, lexpression logique entière dune boucle ou une sélection est évaluée avant que la décision soit prise (Pascal, Ada, Cobol,…) En C, lexpression est évaluée de la gauche vers la droite et aussitôt que la condition nécessaire est évaluée, et le reste de lexpression ne lest pas On nomme cela un court circuit

21-Jan JGA Beaulieu Optimisations du code avec les expressions logiques Conditions nécessaires utilisées pour court-circuit Si le premier terme dans une expression && est fausse Si le premier terme dans une expression || est vraie Le reste de lexpression na pas besoin dêtre évaluée, pcq la décision a été faite Ceci est plus vite, mais programmeur fait attention!!!

21-Jan JGA Beaulieu Court-circuit dans une expression logique if(numAttacks++ 0) { victim=ChooseOpponent(); AttackCountry(victim, soldiers); } return numAttacks;

21-Jan JGA Beaulieu Court-circuit dans une expression logique #include void main(void) { int test1=0, test2=0; int rouge=1, bleue=2; if( (test1=rouge)==0 && (test2=bleue)==0 ) printf("Le test évalue à faux"); printf("La valeur test1 est %d et test2 est %d", test1, test2); getch(); }

21-Jan JGA Beaulieu Optimisations du code avec les expressions logiques Côté positif: Ceci peut vous permettre doptimiser votre code si vous placez les conditions en ordre dans lequel elles sont le plus probables Côté négatif: Si vous avez des effets secondaires dans une condition (++, --), et que cette condition nest pas évaluée, alors les effets secondaires ne seront pas exécutés. Dans une expression avec || mettez la condition qui est le plus susceptible dêtre vrai en premier Dans une expression avec && mettez la condition qui est le plus susceptible dêtre fausse en premier

21-Jan JGA Beaulieu Court-circuit dans une expression logique Dernier test, que ce passe-t-il ici? int a=0, b=1, c=2; if(a && b++ <= c) printf("What did this do?");

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Comme vous pouvez le voir sur la dernière diapo, il y a un potentiel pour des erreurs de logique dans les expressions logiques. En déboguant, le plus difficile est de trouver les erreurs de logique. Pourquoi? Et bien cest parce que vous êtes déjà convaincu que vous aviez raison en premier lieu! Dans un cours nous allons discuter des organigrammes (flowcharts) comme une façon de voir votre logique Aujourdhui nous discutons des erreurs de logique communes

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot La boucle brisée: Une condition que vous voulez qui se produise narrivera jamais. Par exemple si a ne peut jamais être plus grand que z alors vous avez une boucle infinie: while (a < z) {…} Une erreur de logique grossière. Une idée brisée: while (a > b && a == b) //exécute jamais for (i = 1; i < 20; i--) //arrête jamais

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Une erreur en ponctuation: for (i = 1; i <= 100; i++); {…} La boucle roule sur un énoncé vide Ensuite le code dans les accolades exécute exactement une fois if (a < b); {…} if exécute (ou pas) un énoncé vide encore Le bloc entre les accolades exécute peu importe le résultat du test Lénoncé composé ne fait pas parti du if

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Une erreur dans lutilisation de lopérateur (erreur logique) = au lieu de == for (i = 1; i = 10; i++) {…} Le i=10 dans la boucle va assigner la valeur 10 à i Le compilateur va générer un attention dans ce cas, et cest pourquoi vous devriez toujours lire les attentions et essayer de les corriger

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Une erreur dans lutilisation de lopérateur (erreur logique) Utilisation des opérateur logique sur les bits & et | au lieu de && et || while (a & b | c) {…} Cest permi par le compilateur Ne génére pas dattention ou erreur Ne vous donnera pas les résultats attendus

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Une erreur dans la comparaison des floats ( a et b sont floats: if (a == b) {…} Exactement égale est trop exacte pour la comparaison de floats if (fabs(a-b) < ) {…}

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Loublie dune mise à jour dans une condition de boucle: while (a < b) {… //a ne change jamais dans la boucle } Pas assez … je voulais faire dix itérations: for (i=1; i <10; i++) //9 itérations

21-Jan JGA Beaulieu Erreurs communes dans les structures de contrôle de flot Mettre trop souvent à jour une condition : While (i != 13) {… i++; //met i to 1, 3, 5, …, 13 … i++; //met i to 2, 4, 6, …, 14 …// (13 ne se produira jamais) } for (i = 1; i <= 10; i++) {… i++; //Probablement une erreur }

21-Jan JGA Beaulieu Quiz Time Je lit un fichier, mais je ne sait pas si il est vide ou combien ditems il y a dedans. Quelle genre de boucle est-ce que je devrait utiliser? Quand jappelle ma fonction, je sais combien ditérations je veux prendre. Quelle genre de boucle? Je veut lire un senseur au moins une fois même si il ny a pas durgence. Quelle boucle? Quelle boucle(s) utilise un pré-test?