Gef 243b programmation informatique appliqu e
This presentation is the property of its rightful owner.
Sponsored Links
1 / 38

GEF 243B Programmation informatique appliquée PowerPoint PPT Presentation


  • 83 Views
  • Uploaded on
  • Presentation posted in: General

GEF 243B Programmation informatique appliquée. Boucles §6.1 - 6.5. Revue. Quand devriez-vous utiliser un énoncé else-if au lieu d’un 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. Synopsis.

Download Presentation

GEF 243B Programmation informatique appliquée

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Gef 243b programmation informatique appliqu e

GEF 243BProgrammation informatique appliquée

Boucles

§6.1 - 6.5


Revue

Revue

  • Quand devriez-vous utiliser un énoncé else-ifau lieu d’un 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

JGA Beaulieu


Synopsis

Synopsis

  • Le concept des boucles

  • Boucle for

  • Bouclewhile

  • Boucledo-while

  • Les énoncés continue et break

  • Optimization du code avec les expressions logiques

    • court-circuit

JGA Beaulieu


Boucles

Boucles

  • Qu’est ce qu’un ordinateur peut faire très bien

  • Qu’est ce qu’un ordinateur peut faire très bien

  • Qu’est ce qu’un 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 s’appelles boucles et sont d’autres abstractions d’un langage de haut niveau

JGA Beaulieu


Boucles le concept

Boucles – le concept

Un action ou une

série d’actions

Cette boucle représente une machine à actions perpétuelles (il n’y a pas de sortie … laissez-moi sortir !!!).

JGA Beaulieu


Boucles le concept1

Boucles – le concept

  • Si nous ne voulons pas une machine perpétuelle (et pour la plus part du temps on n’en veut pas), nous devons imposer quelques genres de conditions sur la boucle pour qu’elle 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 d’entrer dans la boucle

  • Il y a deux sortes de tests qui nous permettent de terminer des boucles:

    • Pré-test

    • Post-test

JGA Beaulieu


Boucles le concept2

Boucles – le concept

  • Pré-test: L’expression logique est évaluée en premier. Si L’expression é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 l’expression 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

JGA Beaulieu


Boucles le concept3

Boucles – le concept

JGA Beaulieu


Boucles le concept4

Boucles – le concept

JGA Beaulieu


Boucles le concept5

Boucles – le concept

  • Il y a des questions qui se posent par rapport à l’évaluation des expressions logiques:

    • Quelles sont les conditions initiales de l’expression?

    • Comment est-ce que les conditions changent pour permettre à la boucle de terminer?

    • Est-ce que j’attend pour un événement ou simplement un nombre donné d’itérations?

    • Est-ce que la boucle va se terminer un jour?

JGA Beaulieu


Boucles le concept6

Boucles – le concept

  • Changement des conditions:

    • Pour qu’une 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 qu’elles changent de la mauvaise façon vous pouvez avoir une boucle infinie!!!

JGA Beaulieu


Boucles le concept changement de condition

Boucles – le concept changement de condition

JGA Beaulieu


Boucles le concept changement de condition1

Boucles – le concept changement de condition

JGA Beaulieu


Boucle for

Bouclefor

  • L’énoncé for…

  • C’est 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 l’information de mise à jour

      for (expr1; expr2; expr3)

      énoncé

JGA Beaulieu


Boucle for exemples

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

}

JGA Beaulieu


Boucle while

Boucle while

  • L’énoncé whileest une autre boucle avec pré-test. Si l’expression évalue à faux avec les conditions initiales, la boucle termine sans qu’aucun énoncé dans la boucle exécute

  • Un contrôle de boucle simple. …

    while (expression)

    énoncé

  • Est-ce que ça pourrait être plus simple?

JGA Beaulieu


Boucle while exemples

Boucle while - exemples

while (i++ < n)

factoriel *= i; //c’est tout!!

while ((c = getchar()) != EOF) //End of File

{

if(c>=‘a’ && c<= ‘z’)

minusculesCompte++;

nombreTotalDeCaractères++;

}

JGA Beaulieu


Boucle do while

Boucle do-while

  • Et vous l’avez deviné, do-whileest la boucle avec post-test.

    do

    énoncé

    while (expression);

  • Remarquez le ;

  • Comme vous le voyez, l’expression 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

JGA Beaulieu


Boucle do while exemples

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

//n’est pas vide quand on commence

do

{

if (couleurDuSmarty == "rouge") smartiesRouges++;

else

autresSmarties++;

boite -= 1;

} while (boite != vide);

JGA Beaulieu


Nonc s continue et break

Énoncés continueetbreak

  • L’énoncé continuen’arrête pas une boucle, il fait seulement arrêter l’itération en cours et recommence la boucle

  • Pour les boucles do-whileet while, continuetransfert le contrôle pour réévaluer la condition limite

  • Pour la boucle for,continuemet à jour l’expression logique (i.e. i++) et vérifie la condition limite

JGA Beaulieu


Nonc s continue

Énoncés continue

while (expression)

{

if (condition)

continue;

}

JGA Beaulieu


Nonc s continue et break1

Énoncéscontinueetbreak

  • Nous avons vue l’énoncé break avec l’énoncé switch. Le break peut être utilisé dans n’importe 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;

    }

JGA Beaulieu


Nonc s continue et break2

Énoncéscontinueetbreak

  • 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);

    }

JGA Beaulieu


Optimisations du code avec les expressions logiques

Optimisations du code avec les expressions logiques

  • Dans certains langages, l’expression logique entière d’une boucle ou une sélection est évaluée avant que la décision soit prise (Pascal, Ada, Cobol,…)

  • En C, l’expression est évaluée de la gauche vers la droite et aussitôt que la condition nécessaire est évaluée, et le reste de l’expression ne l’est pas

    • On nomme cela un court circuit

JGA Beaulieu


Optimisations du code avec les expressions logiques1

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 l’expression n’a pas besoin d’être évaluée, pcq la décision a été faite

  • Ceci est plus vite, mais programmeur fait attention!!!

JGA Beaulieu


Court circuit dans une expression logique

Court-circuit dans une expression logique

if(numAttacks++ < maxAttacks && soldiers > 0)

{

victim=ChooseOpponent();

AttackCountry(victim, soldiers);

}

return numAttacks;

JGA Beaulieu


Court circuit dans une expression logique1

Court-circuit dans une expression logique

#include <stdio.h>

#include <conio.h>

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

}

JGA Beaulieu


Optimisations du code avec les expressions logiques2

Optimisations du code avec les expressions logiques

  • Côté positif: Ceci peut vous permettre d’optimiser 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 n’est 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

JGA Beaulieu


Court circuit dans une expression logique2

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

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot

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 c’est 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

  • Aujourd’hui nous discutons des erreurs de logique communes

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot1

Erreurs communes dans les structures de contrôle de flot

  • La boucle brisée:

    • Une condition que vous voulez qui se produise n’arrivera 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

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot2

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é n’e fait pas parti du if

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot3

Erreurs communes dans les structures de contrôle de flot

  • Une erreur dans l’utilisation de l’opé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 c’est pourquoi vous devriez toujours lire les attentions et essayer de les corriger

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot4

Erreurs communes dans les structures de contrôle de flot

  • Une erreur dans l’utilisation de l’opérateur (erreur logique)

  • Utilisation des opérateur logique sur les bits & et | au lieu de && et ||

    while (a & b | c) {…}

  • C’est permi par le compilateur

    • Ne génére pas d’attention ou erreur

    • Ne vous donnera pas les résultats attendus

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot5

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) < 0.00001)

    {…}

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot6

Erreurs communes dans les structures de contrôle de flot

  • L’oublie d’une 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

JGA Beaulieu


Erreurs communes dans les structures de contr le de flot7

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

    }

JGA Beaulieu


Quiz time

Quiz Time

  • Je lit un fichier, mais je ne sait pas si il est vide ou combien d’items il y a dedans. Quelle genre de boucle est-ce que je devrait utiliser?

  • Quand j’appelle ma fonction, je sais combien d’itérations je veux prendre. Quelle genre de boucle?

  • Je veut lire un senseur au moins une fois même si il n’y a pas d’urgence. Quelle boucle?

  • Quelle boucle(s) utilise un pré-test?

JGA Beaulieu


  • Login