56
8PRO107 Éléments de programmation ent répéter plusieurs fois une séquence d’instructi

8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Embed Size (px)

Citation preview

Page 1: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

8PRO107

Éléments de programmation

Comment répéter plusieurs fois une séquence d’instructions

Page 2: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Additionner une série d’entiers

Description du problème: Calculer et imprimer la somme d’une série d’entiers donnée en entrée.

Spécification de l’entrée: Une liste d’entiers

Sortie: Un entier

Page 3: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principalequatre entiers: n1, n2, n3, n4un entier : somme

LIRE n1, n2, n3, n4somme n1 + n2 + n3 + n4ÉCRIRE somme

Page 4: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principaleentier n1, n2, n3, n4entier somme

LIRE n1, n2, n3, n4somme n1 + n2 + n3 + n4AFFICHER somme

Remarque: Fonctionne si la liste ne contient que 4 entiers.

Page 5: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principaleentier n1, n2, n3, n4entier somme

LIRE n1, n2, n3, n4somme n1 + n2 + n3 + n4AFFICHER somme

Remarque: Fonctionne si la liste ne contient que 4 entiers.

// fichier : c5ex1_0.cpp#include <iostream>

int main (){

int n1, n2, n3, n4 ;int somme ;

std::cout << "Entrez quatre entiers : " ;std::cin >> n1 >> n2 >> n3 >> n4 ;somme = n1 + n2 + n3 + n4 ;std::cout << "La somme est " << somme << std::endl ;return 0 ;

}

Page 6: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principale

entier somme, nombre

somme 0TANT QUE ( il y a encore des entiers à lire) FAIRE

LIRE nombresomme somme + nombre

ÉCRIRE somme

Page 7: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principaleentier : somme

somme total()ÉCRIRE somme

En utilisant un sous-programme

Page 8: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction total

En-tête:entier total()

Corps:2 entiers : somme, nombre

somme 0TANT QUE ( il y a encore des entiers à lire) FAIRE

LIRE nombresomme somme + nombre

RETOURNER somme

Page 9: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Forme générale

TANT QUE condition FAIRE instruction

En C/C++

while ( condition ) instruction ;

Page 10: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principale

entier somme, nombre

somme 0TANT QUE ( il y a encore des entiers à lire) FAIRE

LIRE nombresomme somme + nombre

ÉCRIRE somme

Page 11: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principale

entier somme, nombre

somme 0TANT QUE ( il y a encore des entiers à lire) FAIRE

LIRE nombresomme somme + nombre

ÉCRIRE somme

Comment spécifiercette condition?

Page 12: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction total

En-tête:entier total()

Corps:entier somme, nombre

somme 0TANT QUE ( il y a encore des entiers à lire) FAIRE

LIRE nombresomme somme + nombre

RETOURNER somme

Avec sous-programme

Page 13: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction total

En-tête:entier total()

Corps:entier somme, nombre

somme 0TANT QUE ( il y a encore des entiers à lire) FAIRE

LIRE nombresomme somme + nombre

RETOURNER somme

Comment spécifiercette condition?

Avec sous-programme

Page 14: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

3 méthodes

• Mettre le nombre d’entiers à lire au début de la liste

• Mettre une valeur spéciale à la fin de la liste

• Utiliser la valeur de retour de la fonction de lecture

Page 15: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principale entiers n, somme, nombre, compteur

LIRE nsomme 0compteur 0TANT QUE (compteur < n) FAIRE

LIRE nombresomme somme + nombrecompteur compteur + 1

AFFICHER somme

Méthode 1

Page 16: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principale entiers n, somme, nombre, compteur

LIRE nsomme 0compteur 0TANT QUE (compteur < n) FAIRE

LIRE nombresomme somme + nombrecompteur compteur + 1

AFFICHER somme

Méthode 1

#include <iostream>

int main (){

int n, somme, nombre, compteur ;

somme = 0 ;compteur = 0 ;std::cout << "Entrez combien de nombres à additionner: " ;std::cin >> n ;std::cout << "Entrez vos " << n << " nombres:" << std::endl ;while ( compteur < n ){

std::cin >> nombre ;somme = somme + nombre ;compteur = compteur + 1 ;

}std::cout << "La somme de vos " << n << " nombres est "<< somme << std::endl ;return 0 ;

}

Page 17: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principale deux entiers : somme, n

LIRE nsomme total(n)AFFICHER somme

où total satisfait le prototype

total(entier) retourne un entier

Méthode 1

Avec sous-programme

Page 18: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

En-tête:total(entier n) retourne un entier

Corps:deux entiers : somme, nombre un entier : compteur

somme 0compteur 0TANT QUE (compteur < n) FAIRE

LIRE nombresomme somme + nombrecompteur compteur + 1

RETOURNER somme

Étude de cas 6.1

compte le nombre d’itérations

Méthode 1

Avec sous-programme

Page 19: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

En-tête:total(entier n) retourne un entier

Corps:deux entiers : somme, nombre un entier : compteur

somme 0compteur 0TANT QUE (compteur < n) FAIRE

LIRE nombresomme somme + nombrecompteur compteur + 1

RETOURNER somme

Étude de cas 6.1

compte le nombre d’itérations

Méthode 1

Avec sous-programme// fichier : c5ex1_1.cpp#include <iostream>

int total ( int n ){

int somme, nombre ;int compteur ;

somme = 0 ;compteur = 0 ;std::cout << "Entrez vos " << n << " nombres:" << std::endl ;while ( compteur < n ){

std::cin >> nombre ;somme = somme + nombre ;compteur = compteur + 1 ;

}return somme ;

}

int main (){

int somme, n ;

std::cout << "Entrez combien de nombres … additionner: " ;std::cin >> n ;somme = total(n) ;std::cout << "La somme de vos " << n << " nombres est "<< somme << std::endl ;return 0 ;

}

Page 20: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fonction principaleentiers somme, nombreentier fini

somme 0fini 1TANT QUE (fini 0) FAIRE

LIRE nombreSI (nombre = valeur_spéciale) ALORS

fini 0SINON

somme somme + nombreAFFICHER somme

Mis à 0 après avoir lu la valeur spéciale

Méthode 2Étude de cas 6.1

Page 21: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fonction principaleentiers somme, nombreentier fini

somme 0fini 1TANT QUE (fini 0) FAIRE

LIRE nombreSI (nombre = valeur_spéciale) ALORS

fini 0SINON

somme somme + nombreAFFICHER somme

Mis à 0 après avoir lu la valeur spéciale

valeur indiquant la fin de la liste

Méthode 2Étude de cas 6.1

drapeau

Page 22: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.1

Fonction principaleentier : somme

somme total()ÉCRIRE somme

Avec sous-programme

Page 23: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

En-tête:total() retourne un entier

Corps:deux entiers : somme nombre un entier : fini

somme 0fini 1TANT QUE (fini 0) FAIRE

LIRE nombreSI (nombre = valeur_spéciale) ALORS

fini 0SINON

somme somme + nombreRETOURNER somme

Étude de cas 6.1

Mis à 0 après avoir lu la valeur spéciale

Méthode 2Avec sous-programme

Page 24: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

En-tête:total() retourne un entier

Corps:deux entiers : somme nombre un entier : fini

somme 0fini 1TANT QUE (fini 0) FAIRE

LIRE nombreSI (nombre = valeur_spéciale) ALORS

fini 0SINON

somme somme + nombreRETOURNER somme

Mis à 0 après avoir lu la valeur spéciale

valeur indiquant la fin de la liste

pas d’argument

Méthode 2Étude de cas 6.1

drapeau

Page 25: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fin de fichier

Un programme peut lire des données en provenance• du terminal (programme interactif)• d’un fichier (programme non interactif)

Étude de cas 6.1

Page 26: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fin de fichier

Un programme peut lire des données en provenance• du terminal (programme interactif)• d’un fichier (programme non interactif)

Étude de cas 6.1

Dans un fichier : Lorsqu’il n’y a plus de données à lire, on dit que c’est la fin du fichier.La plupart des fonctions de lecture retournent une valeur spéciale lorsqu’elles rencontrent la fin d’un fichier.Nous dénoterons cette valeur par FDF (Fin De Fichier).

Page 27: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fin de fichier

Un programme peut lire des données en provenance• du terminal (programme interactif)• d’un fichier (programme non interactif)

Étude de cas 6.1

Au terminal : Lorsqu’un programme lit au terminal, comment sait-il qu’il a atteint la fin du fichier?L’utilisateur doit envoyer un signal de fin de fichier en appuyant sur ^d (sur Unix) ou ^z (sur Windows).

Dans un fichier : Lorsqu’il n’y a plus de données à lire, on dit que c’est la fin du fichier.La plupart des fonctions de lecture retournent une valeur spéciale lorsqu’elles rencontrent la fin d’un fichier.Nous dénoterons cette valeur par FDF (Fin De Fichier).

Page 28: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fonction principaleentiers somme, nombre entier fini

somme 0fini 1TANT QUE (fini 0) FAIRE

SI (LIRE nombre = FDF) ALORSfini 0

SINONsomme somme + nombre

AFFICHER somme

Étude de cas 6.1 Méthode 3

Page 29: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

En-tête:total() retourne un entier

Corps:deux entiers : somme nombre un entier : fini

somme 0fini 1TANT QUE (fini 0) FAIRE

SI (LIRE nombre = FDF) ALORSfini 0

SINONsomme somme + nombre

RETOURNER somme

Étude de cas 6.1 Méthode 3

Avec sous-programme

Page 30: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Fonction principaleentier somme, nombre

somme 0TANT QUE (LIRE nombre 0) FAIRE

somme somme + nombreRETOURNER somme

Étude de cas 6.1

Méthode 3 (version2)

Page 31: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

En-tête:total() retourne un entier

Corps:entier somme, nombre

somme 0TANT QUE (LIRE nombre 0) FAIRE

somme somme + nombreRETOURNER somme

Étude de cas 6.1

Méthode 3 (version2)

Avec sous-programme

Page 32: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

int total (){

int somme, nombre;

somme = 0;while (cin>>nombre)

somme = somme + nombre;return somme;

}

Étude de cas 6.1

En C/C++

Page 33: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

Additionner les n premiers entiers pairs

Description du problème: Calculer et afficher la somme des n premiers nombres entiers pairs.

Spécification de l’entrée: Un nombre entier n 1

Page 34: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2 Fonction principale (1)

deux entiers : n, sommeLIRE nSI (n < 0) ALORS

AFFICHER “Erreur dans les données”SINON

AFFICHER “La somme des ” n “premiers entiers pairs est ” sommepair(n)

où sommepair est une fonction satisfaisant le prototype

sommepair(entier) retourne un entier

Page 35: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2 Fonction principale

deux entiers : n, sommeLIRE nSI (sommepair(n, somme) < 0) ALORS

ÉCRIRE “Erreur dans les données”SINON

ÉCRIRE “La somme des ” n “premiers entiers pairs est ” somme

où sommepair est une fonction satisfaisant le prototype

sommepair(entier, entier référence) retourne un entier

Page 36: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

Fonction sommepair (version 1)

En-tête:sommepair(entier n, entier référence somme) retourne un entierCorps:

entier : compteurSI (n < 1) ALORS retourner -1somme 0compteur 1TANT QUE (compteur n) FAIRE

somme somme + 2*compteurcompteur compteur + 1

RETOURNER 0

Page 37: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

Fonction sommepair (version 1)

En-tête:sommepair(entier n, entier référence somme) retourne un entier Corps:

entier : compteurSI (n < 1) ALORS retourner -1somme 0compteur 2TANT QUE (compteur n) FAIRE

somme somme + compteurcompteur compteur + 1

RETOURNER 0

1n)

2*compteur1

Page 38: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

Fonction sommepair (version 2)

En-tête:sommepair(entier n, entier référence somme) retourne un entier Corps:

entier : compteurSI (n < 1) ALORS retourner -1somme 0compteur 2TANT QUE (compteur 2*n) FAIRE

somme somme + compteurcompteur compteur + 1

RETOURNER 0

22*n)

compteur2

Page 39: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

POUR i allant de k à n avec pas de s faireinstruction

i = kTANT QUE (i n) FAIRE

instructioni i + s

Les boucles avec incrémentation automatique

équivalent à

Page 40: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

for (i=k; i<=n; i=i+s) instruction ;

i = k;while (i n){ instruction i = i + s;

}

En C/C++

équivalent à

Page 41: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.2

Fonction sommepair (version 3)

En-tête:sommepair(entier n, entier référence somme) retourne un entierCorps:

entier : compteurSI (n < 1) RETOURNER -1somme 0POUR compteur allant de 1 à n avec pas de 1 faire

somme somme + 2 * compteurRETOURNER 0

Page 42: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3

Calculer la moyenne des notes

Description du problème: Calculer la moyenne de chacun des étudiants d’une classe où chaque étudiant a exactement n notes. La moyenne de la classe doit aussi être calculée.

Spécification de l’entrée: La première ligne d’entrée contient la valeur n. Il y a ensuite autant de lignes que d’étudiants dans la classe, chacune contenant un numéro d’identification suivi des n notes.

Page 43: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3

Exemple

375332 78 80 8675761 95 100 10075730 67 61 7575810 23 16 5675831 88 85 90

Page 44: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3

Fonction principale deux entiers: nbnotes moyenne

LIRE nbnotesmoyenne moyenne_groupe(nbnotes)AFFICHER “La moyenne du groupe est”, moyenne

où moyenne_groupe est une fonction respectant le prototype

moyenne_groupe(entier) retourne un entier

Page 45: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3

Fonction moyenne_groupe

En-tête: moyenne_groupe(entier n) retourne un entier

Corps:

POUR chaque étudiant dans la liste FAIREcalculer la moyenne des n notesafficher la moyenne

RETOURNER la moyenne du groupe

Page 46: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3Fonction moyenne_groupe

En-tête: moyenne_groupe(entier n) retourne un entier

Corps:trois entiers : mgroupe, metudiants, nbetudiantsun entier : id

TANT QUE (LIRE(id) FDF) FAIREmetudiants total(n) / nÉCRIRE “La moyenne de l’étudiant ” id “est ” metudiants

RETOURNER la moyenne du groupe

Page 47: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3Fonction moyenne_groupe

En-tête: moyenne_groupe(entier n) retourne un entier

Corps:trois entiers : mgroupe, metudiants, nbetudiantsun entier : id

TANT QUE (LIRE(id) FDF) FAIREmetudiants total(n) / nÉCRIRE “La moyenne de l’étudiant ” id “est ” metudiants

RETOURNER la moyenne du groupe

fonction vue précédemment

Page 48: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.3Fonction moyenne_groupe

En-tête: entier moyenne_groupe(entier n)

Corps:entier mgroupe, metudiants, nbetudiantsentier id

nbetudiants = 0TANT QUE (LIRE(id) FDF) FAIRE

metudiants total(n) / nÉCRIRE “La moyenne de l’étudiant ” id “est ” metudiants

RETOURNER mgroupe

nbetudiants nbetudiants + 1mgroupe mgroupe + metudiants

mgroupe / nbetudiants

nbetudiant 0

Page 49: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4

Accumulation d’intérêts

Description du problème:Étant donné un investissement initial et un taux d’intérêt annuel, déterminer le nombre d’années nécessaire pour atteindre un objectif spécifié en entrée. Faire ceci pour des intérêts simples et composés.

Spécification de l’entrée: Trois valeurs réelles 0: l’investissement initial, le taux d’intérêt annuel et l’objectif.

Page 50: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4 Fonction principale

trois réels: initial, taux_annuel, objectifdeux entiers: nbsimple, nbcompose

LIRE initial, taux_annuel, objectifSI (initial0 ou taux_annuel0 ou objectifinitial ) ALORS

ÉCRIRE “Erreur dans les données” SINON

nbsimple simple(initial, taux, annuel, objectif)nbcomp compose(initial, taux, annuel, objectif)AFFICHER “nombre d’années (simple): ” nbsimpleAFFICHER “nombre d’années (composé): ” nbcom

où simple et compose sont des fonctions respectant les prototypes:

simple(réel, réel, réel) retourne un entiercompose( réel, réel, réel) retourne un entier

Page 51: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4Fonction simple

En-tête: simple(réel initial, réel taux, réel objectif) retourne un entierCorps:

réel: cumulentier: annees

cumul initialannees 0TANT QUE (cumul < objectif) FAIRE

cumul cumul + initial*taux/100annees annees + 1

RETOURNER annees

Page 52: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4Fonction compose

En-tête: compose(réel initial, réel taux, réel objectif) retourne un entierCorps:

réel: cumulentier: annees

cumul initialannees 0TANT QUE (cumul < objectif) FAIRE

cumul cumul + cumul*taux/100annees annees + 1

RETOURNER annees

Page 53: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4

TANT QUE (condition) FAIREinstruction

FAIREinstruction

TANT QUE (condition)

Autre type de boucle

Utilisé lorsque le corps de la boucle doit être exécuté au moins une fois

Pour s’assurer que le corps de la boucle ne soit jamais exécuté si la condition est fausse.

Page 54: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4Fonction simple

En-tête: simple(réel initial, réel taux, réel objectif) retourne un entierCorps:

réel: cumulentier: annees

cumul initialannees 0FAIRE

cumul cumul + initial*taux/100annees annees + 1

TANT QUE (cumul < objectif) RETOURNER annees

Page 55: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4Fonction compose

En-tête: compose(réel initial, réel taux, réel objectif) retourne un entierCorps:

réel: cumulentier: annees

cumul initialannees 0FAIRE

cumul cumul + cumul*taux/100annees annees + 1

TANT QUE (cumul < objectif) RETOURNER annees

Page 56: 8PRO107 Éléments de programmation Comment répéter plusieurs fois une séquence dinstructions

Étude de cas 6.4

Pseudo-codeFAIRE instructionTANT QUE (condition)

En C/C++do instructionwhile (expression);