Vous êtes sur la page 1sur 44

Algorithmique et

Programmation C:
Les Structures de
Contrôle
Pr. SALL Ousmane
Enseignant-Chercheur
UFR Sciences et Technologies
Université de THIES
https://www.youtube.com/watch?v=qWyzrCZrQio
https://www.youtube.com/watch?v=gGO9TEEMP8k
Sommaire (Première partie)
⚫ Introduction Générale
⚫ Notions de base en Algorithmique
⚫ Saisie et Affichage en algorithmique
⚫ Les Structures de Contrôle
⚫ Les tableaux
⚫ Sous-algorithmes/Fonctions

2019-2020 Algorithmique et Programmation 62


Besoin de nouveaux concepts
de ruptures de séquence
Algorithme Calcul_Aire Rare les algorithmes qui peuvent se
décrire uniquement par un
enchaînement séquentiel
Constantes Pi ← 3,14159; d’opérations élémentaires
Variables
Rayon, Surface : réels;
On a besoin de concepts de rupture de
Début séquence comme les tests et les
boucles
Lire(Rayon);
Exemples:
Surface ← Pi * (Rayon)²; ⚫ un algorithme qui résout une

afficher(Surface); équation de deuxième degré


⚫ un algorithme qui calcule une
Fin série numérique

2019-2020 Algorithmique et Programmation 63


Structures de contrôle: structures
conditionnelles et les boucles

⚫ Les instructions conditionnelles : avec des tests simples


permettant de réaliser un choix parmi deux possibilités (Ex:
booléenne : vrai ou faux) c’est un concept de tests multiples,
permet de comparer un objet à une série de valeurs, et
exécuter si la condition est vérifier (Ex : recherche des
nombres premier dans une ensemble)
⚫ Les itérations : consiste à exécuter un bloc d’instructions un
certain nombre de fois (Ex : calcul d’une suite numérique)
⚫ Les boucles conditionnelles : consiste à exécuter un bloc
d’instructions un certain nombre de fois si la condition est
vérifiée (Ex : On veut afficher le 100 premiers nombres :. Tant
que i est plus petit que 100, afficher la valeur de i).

2019-2020 Algorithmique et Programmation 64


Traitement à faire si…
Algorithme SimpleOuDouble
{Cet algorithme saisit une valeur entière et affiche son double si cette
donnée est inférieure à un seuil donné.}
constante SEUIL ←10 ;
variable val : entier ;
début
afficher("Donnez-moi un entier : "); { saisie de la valeur entière}
Lire(val);
si (val < SEUIL) { comparaison avec le seuil}
alors afficher ("Voici son double :" , val * 2);
sinon afficher ("Voici la valeur inchangée :" , val);
fsi
fin
2019-2020 Algorithmique et Programmation 65
L’instruction conditionnelle en
algorithmique

⚫ Si l’expression logique (la condition) prend


⚫ la valeur vrai, le premier bloc d’instructions est
exécuté;
⚫ si elle prend la valeur faux, le second bloc est
exécuté (s’il est présent, sinon, rien).
2019-2020 Algorithmique et Programmation 66
Structures conditionnelles en
C
⚫ Test : if (expression) instructions
[else if (expression) instructions]
[else instructions]

⚫ Ex. if (a>b) printf("A > B");


if (a>b) { // Plusieurs instructions
printf("A > B");
b = a;
}
2019-2020 Algorithmique et Programmation 67
Une autre écriture
Algorithme SimpleOuDouble
{Cet algorithme saisit une valeur entière et affiche son double si cette
donnée est inférieure à un seuil donné.}
constante SEUIL ←10 ;
variable val : entier ;
début
afficher("Donnez-moi un entier : "); { saisie de la valeur entière}
Lire(val);
si (val < SEUIL) { comparaison avec le seuil}
alors val ← val * 2;
fsi
afficher ("Voici la valeur finale :" , val);

2019-2020 Algorithmique et Programmation 68


fin
Exemple (Si…Alors…Sinon)
Algorithme AffichageValeurAbsolue (version1)
variable x : réel ;
début
afficher(" Entrez un réel : ") ;
Lire(x);
si (x < 0) alors
afficher ("la valeur absolue de ", x, "est:",-x);
Sinon
afficher ("la valeur absolue de ", x, "est:",x);
fsi
fin
2019-2020 Algorithmique et Programmation 69
Exemple (Si…Alors)
Algorithme AffichageValeurAbsolue (version2)
Variable x,y : réel ;
Début
afficher (" Entrez un réel : ");
Lire(x);
y← x;
si (x < 0) alors
y ← -x;
fsi
afficher ("la valeur absolue de ", x, "est:",y);
Fin
2019-2020 Algorithmique et Programmation 70
Conditions composées
⚫ Une condition composée est une condition formée de plusieurs
conditions simples reliées par des opérateurs logiques:
ET, OU, OU exclusif (XOR) et NON

⚫ Exemples :
⚫ x compris entre 2 et 6 : (x > 2) ET (x < 6)

⚫ n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)

⚫ deux valeurs et deux seulement sont identiques parmi a, b et c :


(a=b) XOR (a=c) XOR (b=c)

⚫ L'évaluation d'une condition composée se fait selon des règles


présentées généralement dans ce qu'on appelle tables de vérité
2019-2020 Algorithmique et Programmation 71
Tables de vérité
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX

C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX

2019-2020 Algorithmique et Programmation 72


Exercice 41 (tests)
Ecrire un algorithme puis le programme C qui demande un nombre
entier à l'utilisateur, puis qui teste et affiche s'il est divisible par 3
Algorithme Divsible_par3
Variable n : entier ;
Début
afficher (" Entrez un entier : " );
Lire(n);
Si (n%3=0) alors
afficher (n," est divisible par 3");
Sinon
afficher (n," n'est pas divisible par 3");
fsi
Fin
2019-2020 Algorithmique et Programmation 73
Quand la condition se complique:
les conditionnelles emboîtées
⚫ Problème: afficher "Reçu avec mention" si la moyenne
est supérieure ou égale à 12, "Passable" si elle est
supérieure à 10 et inférieure à 12, et "Insuffisant" dans
tous les autres cas.
si (moyenne ≥ 12)
alors afficher( "Reçu avec mention" );
sinon si (moyenne ≥ 10)
alors afficher( "Passable" );
sinon afficher("Insuffisant");
fsi
fsi
2019-2020 Algorithmique et Programmation 74
Conditionnelles emboîtées :
exemple (version 1)
Variable n : entier;
Début
afficher ("entrez un nombre : ");
Lire(n);
Si (n < 0) alors
afficher ("Ce nombre est négatif");
Sinon Si (n = 0) alors afficher ("Ce nombre est nul");
Sinon afficher ("Ce nombre est positif");
fsi
fsi
fin

2019-2020 Algorithmique et Programmation 75


Tests imbriqués: exemple
(version 2)
Variable n : entier; Remarque : dans la
Début version 2 on fait 3
afficher ("entrez un nombre : "); tests
Lire(n) ; systématiquement
Si (n < 0) alors que dans la
version 1, si le
alors afficher ("Ce nombre est négatif"); nombre est négatif on
Fsi ne fait qu'un seul test
Si (n = 0)
alors afficher ("Ce nombre est nul"); Conseil : utiliser les
tests imbriqués pour
Fsi
limiter le nombre de
Si (n > 0)
tests et placer
alors afficher ("Ce nombre est positif"); d'abord les conditions
Fsi les plus probables
Fin (minimiser la
complexité).
2019-2020 Algorithmique et Programmation 76
Tests imbriqués: exercice 42
⚫ Le prix des photocopies dans une
reprographie varie selon le nombre demandé:
50 FCFA la copie pour un nombre de copies
inférieur à 10, 25 FCFA pour un nombre
compris entre 10 et 20 et 15 FCFA au-delà.
Ecrivez un algorithme puis un programme C
qui demande à l’utilisateur le nombre de
photocopies effectué et qui calcule et affiche
le prix à payer.
2019-2020 Algorithmique et Programmation 77
Tests imbriqués: corrigé de
l'exercice en Algo
Variables copies : entier;
prix : réel;
Début
afficher ("Nombre de photocopies : ") ;
Lire(copies);
Si (copies < 10) alors prix ← copies*50 ;
Sinon Si (copies < 20) alors prix ← copies*25;
Sinon prix ← copies*15;
Fsi
Fsi
afficher (“Le prix à payer est : ”, prix) ;
Fin

2019-2020 Algorithmique et Programmation 78


Tests imbriqués: Exercice 43
⚫ Écrire le programme C qui calcule le
discriminant DELTA d’un trinôme du second
degré AX2 + BX + C et qui, en fonction de
son signe, calcule la ou les racines réelles du
trinôme ou affiche, si besoin est qu’il n’y a
pas de racine réelle.
⚫ Les trois coefficients A, B et C seront saisies
au clavier avant traitement.

2019-2020 Algorithmique et Programmation 79


Tests imbriqués: corrigé de
l'exercice 2 en Algo
Algorithme Solution_Equation
Variables A, B, C, Delta, X1, X2 : réels;
Début
Lire(A, B, C);
Delta ← B2 – 4 AC;
Si (Delta < 0) Alors afficher (" le trinome n’a pas de racine réelle ");
Sinon Si (Delta > 0) Alors
X1 ← (-B + racine(delta)) / 2A;
X2 ← (-B - racine(delta)) / 2A;
afficher (" le trinome possède deux racines réelles : ", X1, X2);
Sinon
X1 ← (-B ) / 2A;
afficher (" le trinome possède une racine réelle : ", X1);
Fsi
Fsi

Fin

2019-2020 Algorithmique et Programmation 80


Quand il faut répéter un
traitement ... Les boucles
Algorithme FaitLeTotal {Cet algorithme fait la somme des nbVal données qu'il saisit}
variables nbVal, cpt :entiers;
valeur, totalValeurs: réels;
début
{initialisation du traitement}
afficher("Combien de valeurs voulez-vous Lire ?");
Lire(nbVal);
{initialisation du total à 0 avant cumul}
totalValeurs ← 0;
{traitement qui se répète nbVal fois}
pour cpt ← 1à nbVal faire
afficher("Donnez une valeur :");
Lire(valeur);
totalValeurs ← totalValeurs + valeur; {cumul}
fpour
{édition des résultats}
afficher("Le total des ", nbVal, "valeurs est " , totalValeurs);
fin
2019-2020 Algorithmique et Programmation 81
La boucle «pour »

⚫ Fonction:
⚫ répéter une suite d’instructions un certain nombre
de fois

2019-2020 Algorithmique et Programmation 82


Les champs de la boucle pour

2019-2020 Algorithmique et Programmation 83


Sémantique de la boucle pour
⚫ Implicitement, l’instruction pour:
⚫ initialise une variable de boucle (le compteur)
⚫ incrémente cette variable à chaque pas
⚫ vérifie que cette variable ne dépasse pas la borne
supérieure
⚫ Attention :
⚫ le traitement ne doit pas modifier la variable de boucle

2019-2020 Algorithmique et Programmation 84


Quand le nombre d'itérations
n’est pas connu...
Algorithme FaitLeTotal
{Cet algorithme fait la somme des données qu’il saisit, arrêt à la lecture de -1)
Constante STOP ← -1;
variables val, totalValeurs: entiers;
début
totalValeurs ← 0;
afficher("Donnez une valeur,", STOP, " pour finir."); {amorçage}
Lire(val);
tant que val  STOP faire
totalValeurs ← totalValeurs + val; {traitement}
afficher("Donnez une autre valeur,", STOP, " pour finir.")
Lire(val); {relance}
ftq
afficher("La somme des valeurs saisies est", totalValeurs);
fin
2019-2020 Algorithmique et Programmation 85
La boucle «tant que … faire»

⚫ Fonction: répéter une suite d’instructions tant qu’une


condition est remplie
⚫ Remarque: si la condition est fausse dès le départ, le
traitement n’est jamais exécuté
2019-2020 Algorithmique et Programmation 86
Sémantique de la boucle tant
que

;
;
;

2019-2020 Algorithmique et Programmation 87


Comparaison boucles pour et
tant que

;
;
;

;
;
;
;
;

2019-2020 Algorithmique et Programmation 88


Comparaison boucles pour et
tant que(suite)
⚫ Implicitement, l’instruction pour:
⚫ initialise un compteur
⚫ incrémente le compteur à chaque pas
⚫ vérifie que le compteur ne dépasse pas la borne
supérieure
⚫ Explicitement, l’instruction tant que doit
⚫ initialiser un compteur {amorçage}
⚫ incrémenter le compteur à chaque pas {relance}
⚫ vérifier que le compteur ne dépasse pas la borne
supérieure {test de boucle}
2019-2020 Algorithmique et Programmation 89
Choisir pour... Choisir tant
que...
⚫ si le nombre d’itérations est connu
à l’avance,
⚫ choisir la boucle pour

⚫ si la boucle doit s'arrêter quand


survient un évènement ,
⚫ choisir la boucle tant que
2019-2020 Algorithmique et Programmation 90
La boucle répéter : un exemple
Algorithme Essai
{Cet algorithme a besoin d’une valeur positive paire}
variables valeur : entier;
début
répéter
afficher("Donnez une valeur positive non nulle : ");
Lire(valeur);
tant que (valeur ≤ 0);
afficher("La valeur positive non nulle que vous avez saisie est ");
afficher( valeur );
… {traitement de la valeur saisie}
fin
2019-2020 Algorithmique et Programmation 91
La boucle «répéter ...tant que»

⚫ Fonction:
⚫ exécuter une suite d’instructions au moins une fois
et la répéter tant qu’une condition est remplie
⚫ Remarque: le traitement dans l’exemple précédent se
limite à la ré-affectation de la variable de condition
2019-2020 Algorithmique et Programmation 92
Comparaison boucles répéter
et tant que
;
;
;
⚫ Equivaut à :
;
;

;
;

2019-2020 Algorithmique et Programmation 93


Comparaison boucles répéter
et tant que (suite)
⚫ boucle tant que
⚫ condition vérifiée avant chaque exécution du traitement
⚫ le traitement peut donc ne pas être exécuté
⚫ de plus : la condition porte surtout sur la saisie de nouvelles
variables (relance)
⚫ boucle répéter tant que
⚫ condition vérifiée après chaque exécution du traitement
⚫ le traitement est exécuté au moins une fois
⚫ de plus : la condition porte surtout sur le résultat du traitement
⚫ Remarque: la boucle répéter est typique pour les saisies
avec vérification.

2019-2020 Algorithmique et Programmation 94


Choisir pour... tant que…
répéter…

2019-2020 Algorithmique et Programmation 95


Remarque
⚫ fsi, ftq et fpour peuvent être omis si le
corps se limite à une seule instruction

⚫ Exemples:
⚫ si (val >0) alors afficher("fini!") ;
⚫ pour i ← 1 à MAX faire afficher(i * val) ;

2019-2020 Algorithmique et Programmation 96


Le problème d’une boucle : il
faut en sortir!
tant que A faire B
répéter B tant que A

2019-2020 Algorithmique et Programmation 97


De l’énoncé à la boucle
;

;
;

;
;

;
;

2019-2020 Algorithmique et Programmation 98


De l’énoncé à la boucle(suite)

;
;
;

2019-2020 Algorithmique et Programmation 99


Exemple d’un mauvais choix
de boucle
Algorithme Somme
{Cet algorithme fait la somme d’une suite de nombres tant que cette somme ne
dépasse un seuil donné}
constante SEUIL ← 1000;
variables val, somme : entiers;
Début
somme← 0;
répéter
afficher("Entrez un nombre") ;
Lire(val);
somme ← somme + val;
tant que (somme ≤ SEUIL) ;
afficher( "La somme atteinte est" , somme -val) ;
fin
2019-2020 Algorithmique et Programmation 100
Quand utiliser la boucle tant
que ?
⚫ Structure itérative "universelle" n'importe
quel contrôle d'itération peut se traduire par
le "tant que "

⚫ Structure itérative irremplaçable dès que


la condition d'itération devient complexe
⚫ Exemple: Lire des valeurs, les traiter, et s’arrêter
à la saisie de la valeur d’arrêt –1 ou après avoir
saisi 5 données
2019-2020 Algorithmique et Programmation 101
Conclusion: Quelques leçons à
retenir
⚫ Le moule d'un algorithme
AlgorithmeAuNomEvocateur
{Cet algorithme fait..............en utilisant telle et telle donnée.........}
constantes
variables
début
{préparation du traitement : saisies,....}
{traitements, si itération, la décrire }
{présentation des résultats: affichages,... }
Fin

⚫ Il faut avoir une écriture rigoureuse


Il faut avoir une écriture soignée : respecter l’indentation
Il est nécessaire de commenter les algorithmes
⚫ Il existe plusieurs solutions algorithmiques à un
problème posé : Il faut rechercher l’efficacité de ce que l’on écrit
2019-2020 Algorithmique et Programmation 102
Pour aller plus loin…
⚫ Tapez "cours langage c" sur GOOGLE
http://www.google.sn/
⚫ Le site http://developpez.com
⚫ Algorithmique,…
⚫ http://www.siteduzero.com/tutoriel-3-51781-
algorithmique-pour-l-apprenti-programmeur.html
⚫ http://www.siteduzero.com/tutoriel-3-14668-concevez-
votre-site-web-avec-C-et-mysql.html
⚫ Tapez "cours Algorithmique" sur GOOGLE
http://www.google.sn/
⚫ …
2019-2020 Algorithmique et Programmation 103
Dans tous les cas…

2019-2020 Algorithmique et Programmation 104

Vous aimerez peut-être aussi