Algorithmique, Programmation et structures de données...
Transcript of Algorithmique, Programmation et structures de données...
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) .