Contrôle du code: les branchements

Sommaire

Index

if-then

Diagramme

Code

pseudo-code

VARIABLE
ENTIER a
DEBUT
    a <-- LIRE
    SI a == 0 ALORS
        ECRIRE "a est nul"
    FIN SI
FIN

Noter l’indentation (décalage de la marge gauche avec des espaces/tabulations)

C

int a = -1;
printf("Saisir un nombre: ");
scanf("%d", &a);
if(a == 0){
  printf("a est nul\n");
}

if-then-else

Diagramme

Code

Pseudo-code

VARIABLE
ENTIER a
DEBUT
    a <-- LIRE
    SI a == 0 ALORS
        ECRIRE "a est nul"
    SINON
        ECRIRE "a est différent de zéro"
    FIN SI
FIN

Exercices

Exercice 1

On cherche à créer un algorithme qui demande un nombre à l’utilisateur et qui affiche la racine carrée de ce nombre s’il est positif. Compléter la ligne 6 dans l’algorithme ci-dessous pour qu’il réponde au problème.

VARIABLES
x EST_DU_TYPE NOMBRE
racine EST_DU_TYPE NOMBRE
DEBUT
LIRE x
SI (.........) ALORS
DEBUT_SI
    racine PREND_LA_VALEUR sqrt(x)
    AFFICHER racine
FIN_SI
FIN

Exercice 2

On cherche à créer un algorithme qui demande à l’utilisateur d’entrer deux nombres (stockés dans les variables x et y) et qui affiche le plus grand des deux. Compléter les ligne 9 et 13 dans l’algorithme ci-dessous pour qu’il réponde au problème.

VARIABLES
x EST_DU_TYPE NOMBRE
y EST_DU_TYPE NOMBRE
DEBUT
    LIRE x
    LIRE y
    SI (x > y) ALORS
    DEBUT_SI
        AFFICHER .......
    SINON
        AFFICHER ......
    FIN_SI
FIN

C

int a = -1;
printf("Saisir un nombre: ");
scanf("%d", &a);
if(a == 0){
  printf("a est nul\n");
}
else {
  printf("a est différent de zéro\n");
}

Tests imbriqués

Quand deux branches sont insuffisantes

Observons cet algorithme:

VARIABLES
  ENTIER temp
DEBUT
  AFFICHER "Entrez la température de l’eau :"
  temp <-- LIRE
  SI Temp <= 0 ALORS
    AFFICHER "C’est de la glace"
  FIN_SI
  SI Temp > 0 ET Temp < 100 ALORS
    AFFICHER "C’est du liquide"
  FIN_SI
  SI Temp > 100 ALORS
    AFFICHER "C’est de la vapeur"
  FIN_SI
FIN

Imbrication de tests

Et maintenant celui-ci qui donne a priori le même résultat:

VARIABLES
ENTIER temp
Début
  Ecrire "Entrez la température de l’eau :"
  temp <-- LIRE
  SI Temp <= 0 ALORS
    AFFICHER "C’est de la glace"
  SINON
    SI Temp < 100 ALORS
      AFFICHER "C’est du liquide"
    SINON
      AFFICHER "C’est de la vapeur"
    FIN_SI
  FIN_SI
FIN

Observons ce qu’est devenu l’opération logique ET de la première version

Test successifs

On aurait aussi pu écrire cet algorithme:

VARIABLES
ENTIER temp
Début
  Ecrire "Entrez la température de l’eau :"
  temp <-- LIRE
  SI Temp <= 0 ALORS
    AFFICHER "C’est de la glace"
  SINON_SI Temp < 100 ALORS
    AFFICHER "C’est du liquide"
  SINON
    AFFICHER "C’est de la vapeur"
  FIN_SI
FIN

Exercice

Représenter sous la forme d’un logigramme (ou algorigramme) ces trois versions.

Observer les différences

switch ou selon

Diagramme

Code

Pseudo-code

VARIABLE
ENTIER a
DEBUT
    ECRIRE "Saisir un nombre"
    a <-- LIRE
    SELON a
        CAS 1:
            ECRIRE "a"
            ALLER À LA FIN DU SELON
        CAS 2:
            ECRIRE "b"
            ALLER À LA FIN DU SELON
        CAS 3:
            ECRIRE "c"
            ALLER À LA FIN DU SELON
        DEFAUT:
            ECRIRE "-"
    FIN SELON
FIN

Exécution du programme si a vaut 2

Saisir un nombre: 2
b

C

int a = -1;
printf("Saisir un nombre: ");
scanf("%d", &a);
switch(a){
case 1:
  printf(" a\n");
      break;
case 2:
  printf("  b\n");
      break;
case 3:
  printf("   c\n");
      break;
default:
  printf("-\n");
}

Sortie

La sortie du code précédent, si le premier argument vaut “2”:

 b

Alternative (sans break / aller à la fin du selon)

Diagramme

Sortie

La sortie est ici très différente si le premier argument vaut “2”:

  b
   c
-

Pseudo-code

VARIABLE
ENTIER a
DEBUT
    ECRIRE "Saisir un nombre"
    a <-- LIRE
    SELON a
        CAS 1:
            ECRIRE "a"
        CAS 2:
            ECRIRE "b"
        CAS 3:
            ECRIRE "c"
        DEFAUT:
            ECRIRE "-"
    FIN SELON
FIN

Exécution du programme si a vaut 2

Saisir un nombre: 2
b
c
-

Code

Attention, le mot clé break ne doit pas être oublié (sauf si c’est voulu).

C

int a = -1;
printf("Saisir un nombre: ");
scanf("%d", &a);

switch(a){
case 1:
  printf(" a\n");
case 2:
  printf("  b\n");
case 3:
  printf("   c\n");
default:
  printf("-\n");
}

Exercices

Faire les exercices de cette série : série d’exercices

Exercices à faire

Exercices sur les structures de contrôle