La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

GEF 243B Programmation informatique appliquée Boucles.

Présentations similaires


Présentation au sujet: "GEF 243B Programmation informatique appliquée Boucles."— Transcription de la présentation:

1 GEF 243B Programmation informatique appliquée Boucles

2 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

3 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

4 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

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

6 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

7 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

8 Boucles – le concept

9

10 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?

11 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 pare choc de notre robot Lego). Si vos conditions ne changent pas, ou quelles changent de la mauvaise façon vous pouvez avoir une boucle infinie!!!

12 Boucles – le concept changement de condition

13

14 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é

15 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 }

16 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?

17 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++; }

18 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

19 Boucle do-while - exemples //Ici on compte des Smarties dans une //boite, on assume 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);

20 É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 Énoncés continue while (expression) { … if (condition) continue; … }

22 É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; … }

23 É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); }

24 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

25 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!!!

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

27 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(); }

28 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

29 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?");

30 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

31 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

32 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

33 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

34 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

35 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) < ) {…}

36 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

37 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 }

38 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?


Télécharger ppt "GEF 243B Programmation informatique appliquée Boucles."

Présentations similaires


Annonces Google