21
Algorithmique, Programmation et structures de données I Structures de contrôle

Algorithmique, Programmation et structures de données Isylvain.tisserant.perso.luminy.univ-amu.fr/algo_1/cours/Cours2.pdf · Existe uniquement en C++ Valeurs : true ou false N’existe

Embed Size (px)

Citation preview

Algorithmique,

Programmation et

structures de données I

Structures de contrôle

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structures de contrôle

� Contrôle de l’exécution du programme

� Le traitement peut dépendre de conditions

� Les nombre et nature des racines d’une équation du second degré dépendent du discriminant

� Le traitement peut devoir être répété

� Calculer le produit scalaire de deux vecteurs

� Tant qu’il y a des données à traiter

� Le traitement doit pouvoir être interrompu

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structure conditionnelle

� Lorsque l’exécution dépend d’une condition booléenne (vraie ou fausse)

� Permet de faire un choix simple :Si condition alors

traitement

Finsi

� alternatif :Si condition alors

traitement1

Sinon

traitement2

Finsi

Exemple de pseudo-code à

utiliser pendant l’analyse du

problème et la conception

d’une solution.

Utiliser l’indentation.

Ensuite passage au C ou

tout autre langage.

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structure conditionnelle (2)

� ou multiple :Si condition1 faire

traitement1

Sinon si condition2 faire

traitement2

Finsi

Sinon si condition3 faire

traitement3

Finsi

.

.

.

Sinon si conditionN faire

traitementN

Finsi

Finsi

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structure conditionnelle (3)

� En C : la structure if [else]

� Test simple :

if (condition) {

instructions

}

� Test alternatif :

if (condition) {

instructions 1

} else {

instructions 2

}

� Si une seule instruction :

if (condition) instruction [else instruction]

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structure conditionnelle (4)

� Test multiple : la structure else if

if (condition 1) {

instructions 1

}

else if (condition 2) {

instructions 2

}

else if (condition 3) {

instructions 3

}

else {

instructions

}

� Le dernier else est facultatif

Algorithmique I - Polytech Marseille / INFO3 - 2017

Condition en C

� La condition est une expression booléenne

� Opérateurs de comparaison :

== égalité

!= inégalité

< infériorité

> supériorité

<= infériorité ou égalité

>= supériorité ou égalité

� Opérateurs logiques :

&& et logique

|| ou logique

! négation logique

Algorithmique I - Polytech Marseille / INFO3 - 2017

Exemples simples

� Exemple 1 (test simple) :if (a != 0) c = b/a ;

� Exemple 2 (test alternatif) :if (a > b) c = a ;

else c = b ;

� Exemple 3 (test multiple) :if (delta > 0.) {

// calcul de deux racines réelles

} else if (delta < 0.) {

// calcul de deux racines complexes

} else {

// calcul d’une racine réelle double

}

Algorithmique I - Polytech Marseille / INFO3 - 2017

Exemples simples

� Exemple 4 :

if ((a != 0) && (a>b)) {

c = b/a ;

b = b/2 ;

}

Algorithmique I - Polytech Marseille / INFO3 - 2017

Tests imbriqués

� else toujours associé au if incomplet le

plus proche :if (n > 0)

if (a > b)

c = a ;

else

c = b ;

� Risque important d’ambigüité ⇒ utiliser des

blocs délimités par { … } et indentation

Variables logiques

� Type booléen :

� Existe uniquement en C++

� Valeurs : true ou false

� N’existe pas en C

� Toute valeur nulle (0) représente FAUX et toute valeur non nulle représente VRAI

� En C standard :

� Une variable booléenne est déclarée comme un entier qui peut prendre les

valeurs 0 ou 1

unsigned int test = 0 ;

unsigned char OK = 1 ;

� Instruction conditionnelle :

if (test != 0) instruction ;

if(test) instruction ;

if (test == 0) instruction ;

if(!test) instruction ;

� Redéfinition de type

Algorithmique I - Polytech Marseille / INFO3 - 2017

Redéfinition de type

� Mot clef : typedef

typedef type nouveau_type ;

� type : type existant

� Exemple :

typedef int indice ;

indice i, j ; // remplace int i, j ;

� Définition d’un type booléen en C :

#define VRAI (0 == 0)

#define FAUX (0 != 0)

typedef unsigned int bool ;

bool test = VRAI ;

if (test) instruction ;

Algorithmique I - Polytech Marseille / INFO3 - 2017

Algorithmique I - Polytech Marseille / INFO3 - 2017

Aiguillage

� En C l’instruction switch permet un choix multiple basé sur une variable du type int ou char

� Syntaxe :switch (variable) {

case valeur1 :

instructions 1

case valeur2 :

instructions 2

.

.

.

case valeurN :

instructions N

default :

instructions

}

Algorithmique I - Polytech Marseille / INFO3 - 2017

Aiguillage (2)

� Si lors de l’exécution la valeur de la variable est égale à valeur1 le code est exécuté à partir du début de instructions 1

� Si la variable est égale à valeur2 le code est exécuté à partir du début de instructions 2

� Etc.

� Par exemple si la variable vaut valeur2 on exécute instructions 2, puis instructions 3, etc.

� En général il faut prévoir des ruptures de séquence (break ou return) si les traitements sont différents.

� Le code est exécuté à partir de default si la variable n’est égale à aucune des valeurs prévues

� L’alternative default est optionnelle

Algorithmique I - Polytech Marseille / INFO3 - 2017

Aiguillage (3)

� Exemple : un menu simplechar choix ;

printf ("Liste par groupe taper 1\n");

printf ("Liste alphabétique taper 2\n");

printf ("Pour sortir taper S\n");

printf ("\nVotre choix : ");

choix = getchar();

switch (choix) {

case '1':

// Traitement liste par groupe

break ;

case '2':

// Traitement liste alphabétique

break ;

case 'S':

printf("\nFin du programme\n") ;

break ;

default:

printf("\nChoix non autorise\n ") ;

}

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structures itératives : boucles

� Structure de base : Tant que … faireTant que condition faire

traitement

Fintq

� En C : while

while (condition) {

corps de la boucle

}

� Exemple :i = 0 ;

s = 0 ;

while (i < 10) {

s = s+i ;

i = i+1 ;

}

conditionfausse

corps de

la boucle

suite du programme

vraie

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structures itératives : boucles (2)

� Structure dérivée : for

for (initialisation ; condition ; itération) {

instructions

}

� équivalente à :

initialisation

while (condition) {

instructions

itération

}

� Exemple précédent :

s = 0 ;

for (i = 0 ; i < 10 ; i = i+1) s = s+i ;

conditionfausse

corps de

la boucle

suite du programme

vraie

initialisation

itération

Algorithmique I - Polytech Marseille / INFO3 - 2017

Structures itératives : boucles (3)

� Autre structure : Faire … tant queFaire

traitement

Tant que condition

� En C : do while

do {

instructions

} while (condition) ;

� Exemple :p = 1 ;

i = 1 ;

do {

p = p*i ;

i = i+1 ;

} while (i != 10) ;

conditionfausse

corps de

la boucle

suite du programme

vraie

Algorithmique I - Polytech Marseille / INFO3 - 2017

Choix de la structure itérative

� Instructions à exécuter au moins une fois : do while

� Instructions à n’exécuter que si la condition est vraie : while ou for

� Condition basée sur une (ou plusieurs) variable(s) modifiée(s) à chaque itération : for

� Condition indépendante du corps de la boucle (acquisition de données, etc.) : while

� La structure de base while se retrouve dans de nombreux langages

� La structure for : initialisation, itération et condition rassemblées au début de la boucle

Algorithmique I - Polytech Marseille / INFO3 - 2017

Ruptures de séquence

� return [expression] ;� Uniquement dans une fonction

� Termine l’exécution de la fonction, en renvoyant éventuellement la valeur de l’expression comme résultat

� Reprise derrière l’appel de la fonction

� break ;� Uniquement dans le corps d’une boucle ou une instruction

d’aiguillage

� Interrompt l’exécution en cours

� Reprise à la suite de la structure répétitive ou de l’aiguillage

� continue ;� Uniquement dans le corps d’une boucle

� Interrompt l’itération en cours d’exécution

� Démarre l’itération suivante (et l’évaluation de l’expression de modification des variables de contrôle dans le cas d’une boucle for) .

Saut

� Permet de poursuivre l’exécution en un autre

endroit du programme

� A éviter mais parfois indispensable (souvent

dans le cas de gestion d’erreurs

� Syntaxe :

goto label

� Avec quelque part dans le code source :

label :

Algorithmique I - Polytech Marseille / INFO3 - 2017