Algorithmique et Programmation I - Séance 5

Page 1 sur 25Lecteur de document UniversityLib

Algorithmique et Programmation I - Séance 5

Computer Science · notes

Voir tous les documents en programmation

Algorithmique et Programmation I

Séance 5

Ça continue…

Année universitaire 2020/2021 – Semestre 1

1

Ça, on sait déjà

Calculer la moyenne d’un étudiant.

#include<stdio.h> void main() {

float Note1, Note2, Moyenne;

printf ("Donner la note 1: "); scanf ("%f", &Note1); printf ("Donner la note 2: "); scanf ("%f", &Note2);

Moyenne = (Note1 * 0.8) + (Note2 * 0.2);

printf (“Moyenne de l’étudiant: %f", Moyenne);

}

2

Ça aussi on sait

Calculer la moyenne de 50 étudiants.

#include <stdio.h> void main () {

float Note1, Note2, Moyenne; int i;

for (i = 1; i<=50; i++) {

printf ("Donner la note 1: "); scanf ("%f", &Note1); printf ("Donner la note 2: "); scanf ("%f", &Note2);

Moyenne = (Note1 * 0.8) + (Note2 * 0.2);

printf (“Moyenne de l’étudiant: %f", Moyenne);

} }

3

Et ça ?

Comment calculer la moyenne de plusieurs étudiants sachant qu’on n’en connaît pas le nombre ?

4

La structure while (tant que)

Tant qu’une condition est vérifiée, répéter un bloc d’instructions.

Expression logique (booléenne) simple ou combinée. Cette expression est testée avant chaque itération.

while (expression) {

… suite d'instructions …

}

bloc d’instructions exécuté à chaque itération si l’expression est vraie.

Si la boucle ne comporte qu’une instruction, les accolades sont superflues.

5

La structure while

Tant que l'expression fournit une valeur différente de zéro (vrai), le bloc d'instructions est exécuté.

Si l'expression fournit la valeur zéro (faux), l'exécution continue avec l'instruction qui suit le bloc d'instructions.

Pour que le traitement itératif se termine, l’une des instructions doit contribuer à rendre la condition (expression) fausse (sa valeur devient zéro).

Le bloc d'instructions est exécuté zéro ou plusieurs fois.

6

Exemple

Calculer la moyenne de plusieurs étudiants.

#include <stdio.h> void main() {

float Note1, Note2, Moyenne; char Continuer = 'O';

while (Continuer == 'O') {

printf ("Donner la note 1: "); scanf ("%f", &Note1); printf ("Donner la note 2: "); scanf ("%f", &Note2); Moyenne = (Note1 * 0.8) + (Note2 * 0.2); printf (“Moyenne de l’étudiant: %f", Moyenne);

printf ("Voulez-vous calculer la moyenne d’un autre étudiant (O/N)"); scanf ("%c", &Continuer);

}

}

7

Que fait ce programme ?

#include <stdio.h> void main () {

Publicité

int n = 2; while ( (n%2) == 0) && (n != 0) ) {

printf (“Donner un entier : “); scanf (“%d”, &n);

}

}

On ne veut accepter que les entiers pairs et non nuls. On sort de la boucle quand l’utilisateur saisit un entier impair ou nul.

8

On préfèrera . . .

#include <stdio.h> void main () {

int n, stop = 0; while (stop == 0) {

printf (“Donner un entier: “); scanf (“%d”, &n); if ((n%2) != 0) || (n == 0))

stop = 1;

}

}

9

Usage général

Si on ne connaît pas à l’avance le nombre de fois que le traitement sera répété

Si on connaît à l’avance le nombre de fois que le traitement sera répété

Boucle while

Boucle for

En fait, la boucle while peut également être utilisée alors qu’on connaît à l’avance le nombre d’itérations !

10

Exemple

(1)

Affichage du mot “Bonjour” 5 fois.

#include<stdio.h> void main() {

int i = 0; while (i < 5) {

#include<stdio.h> void main() {

int i = 1; while (i <= 5) {

printf (“Bonjour \n”); i++;

printf(“Bonjour \n”); i++;

}

}

}

}

11

Exemple

(2)

Affichage des nombres entiers de 1 à 10.

#include <stdio.h> void main() {

int i = 1; while (i <= 10) {

printf (“%d \n”, i); i++;

}

}

12

for / while

En C, les structures for et while sont équivalentes.

for (initialisation; condition; compteur) {

Bloc d’instructions

}

initialisation; while (condition) {

Bloc d’instructions compteur;

}

Le mieux est de choisir le type de boucle en fonction de chaque cas concret.

13

Publicité

Exemple

Affichage du mot “Bonjour” 5 fois.

#include<stdio.h> void main() {

int i = 0; while (i < 5) {

printf(“Bonjour \n”); i++;

}

}

}

#include<stdio.h> void main() {

int i; for (i=0 ; i < 5; i++)

printf(“Bonjour \n”);

14

Devinons …

int i = 1; while (i == 1)

Boucle infinie

printf (“Que pensez vous de ma boucle ?”);

Boucle infinie

for ( ; ;)

printf (“Et là, que pensez vous de ma boucle ?”);

for ( ; 8 ;)

printf (“Et celle-ci ?”);

Boucle infinie

15

Attention !

i = 1; while (i < 3) {

;

i++;

}

Attention aux points virgules excessifs

Le programme suivant est syntaxiquement correct, mais n’en finira pas de boucler !

16

Qu’en pensez-vous ?

#include<stdio.h> void main() {

int i = 1; while (i < 5) printf(“%d \n”, i); i++;

}

Boucle infinie

Ce programme n’affiche que la valeur 1, sans jamais s’arrêter.

17

Comment le corriger?

#include<stdio.h> void main() {

int i = 1;

while (i < 5) {

printf (“%d \n”, i); i++;

}

}

Attention aux Accolades !!

Il affiche maintenant les valeurs 1, 2, 3, 4

18

La structure do..while (répéter…tant que)

do {

}

bloc d'instructions

while (expression) ;

Attention c’est différent de répéter..jusqu’à

Publicité

La structure do..while ressemble à la structure while, sauf que…

La structure while évalue la condition avant d’exécuter le bloc d’instructions, alors que la structure do..while évalue la condition après avoir exécuté le bloc d’instructions (à la fin de l’itération).

Avec la structure do..while le bloc d’instructions est exécutéau moins une fois. 19

Exemple

#include<stdio.h> void main() {

int x = 5; do {

printf(“La valeur de x est %d”, x ); x--;

} while (x > 0);

}

20

L’équivalent en while

#include<stdio.h> void main() {

int x = 5; while (x > 0) {

printf(“La valeur de x est %d”, x ); x--;

}

}

21

while ou do..while ?

(1)

int i; printf(“Combien il vous reste de séances de cours aujourd’hui?” ); scanf(“%d”, &i); do {

printf(“Il reste %d séances ”, i ); i--;

} while (i > 0);

while

int i; printf(“Combien il vous reste de séances de cours aujourd’hui?” ); scanf(“%d”, &i); while (i > 0) {

printf(“Il reste %d séances ”, i ); i--;

}

22

while ou do..while

(2)

char c; do {

printf(“Entrer un caractère (s pour stop)” ); scanf(“%c”, &c);

} while (c !=‘s’);

printf(“Entrer un caractère (s pour stop)” ); scanf(“%c”, &c); while (c !=‘s’) {

printf(“Entrer un caractère (s pour stop)” ); scanf(“%c”, &c);

}

do..while

23

while ou do..while int n, i=0; printf(“Donner un entier: “); scanf(“%d”, &n); while ( (n%2) != 0 ) {

printf(“L’entier impair est %d: “, n); printf(“Donner un entier: “); scanf(“%d”, &n); i++;

} printf(“Le nombre d’entiers impairs saisis est %d”, i); }

int n, i=0; do {

printf(“Donner un entier: “); scanf(“%d”, &n); printf(“L’entier impair est %d: “, n); i++;

(3)

while

} while ( (n%2) != 0); printf(“Le nombre d’entiers impairs saisis est %d”, i); }

24

Nos outils de travail

Les instructions simples (saisie, affichage, affectation,…).

Les structures conditionnelles (if, switch).

Les structures itératives (for, while, do..while).

Bienvenue au monde de la programmation

25