Algorithmes et résolution de problèmes FGE

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

Algorithmes et résolution de problèmes 18279 FGE Section V Structure de contrôle Itération TANTQUE/FINTANTQUE POUR/FINPOUR REPETER/JUSQU’À Algorithmes et résolution de problèmes 18279 FGE

Contenu Introduction Structure TANTQUE/FINTANTQUE Exemples & exercice Dans l’organigramme Dans le pseudo-code Exemples & exercice Autres structures d’itération Devoir #4

Introduction Les algorithmes présentés auparavant contenaient des structures de type : Séquence simple d’opérations Sélection d’opérations Souvent, certaines opérations à accomplir peuvent être répétées dans un algorithme Considérez le problème suivant : Concevoir un algorithme qui doit Accepter six(6) nombres Et Afficher la somme de ces nombres

Exemple #1 Six nombres sont lus dans des variables N1, N2, N3, N4, N5, N6 On accumule la somme de N1..N6 dans la variable SOMME On écrit la valeur de SOMME Début Début Lire N1, N2, N3, N4, N5, N6 Somme = N1+N2+N3+N4+N5+ N6 Ecrire Somme Fin Lire N1,N2, N3 N4, N5, N6 Somme = N1+N2+N3+N4+N5+N6 Ecrire Somme Fin

Exemple #1 - Suite Si on voudrait changer l’algorithme pour lire 100 nombres il faudrait ajouter à la solution précédente 94 nouvelles variables (N7, N8, N9, …N100) pour la lecture Inclure les nouvelles variables dans le calcul de la somme Ce n’est pas une approche désirable à prendre Certaines étapes pourraient être répétées L’ITÉRATION!!!

Structure TANTQUE-FINTANTQUE Pour représenter une itération (répétition) dans l’organigramme La condition est satisfaite? Oui Non On utilise le losange On utilise le cercle

Structure TANTQUE-FINTANTQUE Notes sur la structure conditionnelle La condition doit être clairement stipulée dans le symbole conditionnel Le flux sortant identifié avec Oui/Non indique la fin de l’itération Le flux de l’itération indiqué avec Non/Oui doit éventuellement rejoindre le cercle de convergence La condition Non (oui) Oui (Non) Itération

Exemple #1 – Nouvelle approche Accum = 0 Ctr = 0 Début Ctr < 6 Lire Donnée Écrire Accum Fin Accum = Accum + Donnée Ctr = Ctr + 1 Itération Séquence Lire N1,N2, N3 N4, N5, N6 Somme = N1+N2+N3+N4+N5+N6 Ecrire Somme Fin Non Oui

Exemple #1 – Ordinogramme et Pseudocode Début Pseudocode Accum = 0 Ctr = 0 Ordinogramme Début Accum = 0 Ctr = 0 TantQue Ctr < 6 Faire Lire Donnée Accum = Accum + Donnée Ctr = Ctr + 1 FinTantQue Écrire Accum Fin Ctr < 6 FinTantQue Écrire Accum TantQue Lire Donnée Fin Accum = Accum + Donnée Ctr = Ctr + 1

Exemple #2 – Rapport de paie Spécifications : On doit produire un rapport listant tous les employés (10) ayant travaillé durant la semaine et leur paie Pour chaque employé, on doit déterminer si l’employé a des heures supplémentaires. Si l’employé n’a pas excédé 40 heures de travail, la paie est calculée en multipliant les heures par le taux. Si des heures supplémentaires existent, on doit calculer la paie en multipliant les heures supplémentaires par le taux à temps et demi (1.5) Le rapport doit écrire son nom, son numéro d’employé et sa paie totale

Exemple #2 – l’algorithme Nous devons écrire l’algorithme produisant une ligne de rapport pour chaque employé Entrée Données à lire Nom de l’employé, son numéro, ses heures travaillées et son taux Processus Calculer la paie Calculer la paie basée sur le nombre d’heures Sortie Résultats Le rapport doit écrire son nom, son numéro d’employé et sa paie totale On répète l’algorithme pour tous les employés (10)

Exemple #2 – Les variables Définition des variables de données d’entrée Nom nom de l’employé Numero numéro de l’employé Heures nombre d’heures travaillées Taux Taux horaire Variables intermédiaires Paie paie totale PaieReg paie régulière PaieSup paie supplémentaire Cmtr compteur d’employé

L’ordinogramme du rapport de paie

L’ordinogramme du rapport de paie Partie d’algorithme dans l’itération

Pseudocode de l’exemple #2 Début Cmtr = 0 TantQue Cmtr < 10 Faire Read Nom, Nemp, Hrs, Taux SI Hrs > 40 Alors PaieReg = 40 * Taux PaieSup = (Hrs-40) * (1.5*Taux) Paie = PaieReg + PaieSup Sinon Paie = Hrs * Taux FinSi Ecrire Nom, Nemp, Paie FinTantQue Fin Pseudocode de l’exemple #2

Structure POUR pour l’ordinogramme Structure répétitive TANTQUE employant une variable compteur pour identifier le nombre d’itérations à effectuer Syntaxe alternative, plus simple On indique explicitement l’incrémentation de la variable compteur Incrémentation : augmenter de 1

Structure POUR en pseudo-code Structure répétitive TANTQUE employant une variable compteur pour identifier le nombre d’itérations à effectuer Syntaxe alternative, plus simple On n’indique pas explicitement l’incrémentation de la variable compteur Incrémentation : augmenter de 1 Variable = 1 TANTQUE Variable < 100 FAIRE ... Variable = Variable + 1 FINTANTQUE POUR Variable = 1 JUSQU’À 100 FAIRE ... FINPOUR

Structure POUR (suite) Exemple : identifier la valeur maximum parmi des valeurs positives fournies par l’utilisateur ÉCRIRE "Combien de valeurs?"  LIRE Nombre Maximum = 0 POUR Compte = 1 JUSQU’À Nombre FAIRE ÉCRIRE "Valeur #", Compte, "?" LIRE Valeur SI Valeur > Maximum ALORS Maximum = Valeur FINSI FINPOUR ÉCRIRE Maximum Exemple d’exécution Nombre de valeurs? 4 Valeur #1? 18 Valeur #2? 32 Valeur #3? 11 Valeur #4? 26 Valeur maximum = 32

Structure POUR (suite) La valeur initiale et/ou la valeur terminale de la variable compteur n’ont pas à être des constantes Par contre la variable compteur et la valeur terminale ne doivent pas être modifiées pendant l’itération LIRE Départ, Fin POUR Compte = Départ JUSQU’À Fin FAIRE ÉCRIRE "Compte = ", Compte FINPOUR LIRE Départ, Fin POUR Compte = Départ JUSQU’À Fin FAIRE LIRE Compte Fin = Fin - 1 FINPOUR

Structure RÉPÉTER-JUSQU’À La structure répétitive TANTQUE peut ne pas faire d’itération si la condition est fausse avant la première itération ÉCRIRE "Nombre positif?"  LIRE Nombre TANTQUE Nombre  0 FAIRE ÉCRIRE "Le nombre doit être positif" FINTANTQUE ÉCRIRE "Log(", Nombre, ")=", Log(Nombre) Exemple d’exécution Nombre positif? 100 Log(100) = 2

Structure RÉPÉTER-JUSQU’À (suite) Dans certaines solutions, il est parfois requis qu’une structure répétitive effectue au moins une itération Dans cet exemple, l’initialisation de la variable Nombre est essentielle afin qu’un itération soit effectuée par la boucle Nombre = 0 TANTQUE Nombre  0 FAIRE ÉCRIRE "Nombre positif?" LIRE Nombre FINTANTQUE

Structure RÉPÉTER-JUSQU’À (suite) La structure répétitive répond à ce besoin en plaçant la condition d’itération à la fin de la boucle Au moins une itération est garantie afin que le flux d’exécution se rendre à la condition d’itération RÉPÉTER ÉCRIRE "Nombre positif?" LIRE Nombre JUSQU’À Nombre > 0

Structure RÉPÉTER-JUSQU’À (suite) Formulation Notez que les itérations se poursuivent tant que la condition n’est pas satisfaite Non Condition? Séquence d’opérations Oui RÉPÉTER Séquence d’opérations JUSQU’À Condition

Structure RÉPÉTER-JUSQU’À (suite) La condition de la structure RÉPÉTER-JUSQU’À est inversée par rapport à la structure TANTQUE équivalente Nombre = 0 TANTQUE Nombre  0 FAIRE ÉCRIRE "Nombre positif?" LIRE Nombre FINTANTQUE RÉPÉTER ÉCRIRE "Nombre positif?" LIRE Nombre JUSQU’À Nombre > 0

Structure RÉPÉTER-JUSQU’À (suite) En algorithmie, il n’y a pas de structure RÉPÉTER-TANTQUE C’est-à-dire répéter tant que la condition est vraie On utilise plutôt une structure RÉPÉTER-JUSQU’À avec une condition négative RÉPÉTER ÉCRIRE "Nombre positif?" LIRE Nombre JUSQU’À Nombre > 0 RÉPÉTER ÉCRIRE "Nombre positif?" LIRE Nombre TANTQUE Nombre  0

Quelle structure utiliser? Trois structures répétitives sont disponibles Laquelle utiliser dans un algorithme? Voici quelques règles à considérer Si le nombre d’itérations est déterminé par une variable compteur Utiliser la structure POUR Si au moins une itération est requise Utiliser la structure RÉPÉTER-JUSQU’À Dans les autres circonstances Utiliser la structure TANTQUE

Exercice #1 (à remettre) Proposez un algorithme calculant la factorielle d’un nombre entier positif fourni par l’utilisateur Votre algorithme doit redemander le nombre jusqu’à ce qu’une valeur de 0 (zéro) soit fournie Exemple de calcul de la factorielle Factorielle(6) = 1 x 2 x 3 x 4 x 5 x 6 = 720 Écrivez le pseudo-code et l’organigramme Vous devez me remettre votre solution