Campus-Booster ID : 159 www.supinfo.com Copyright © SUPINFO. All rights reserved Structure algorithmique avancée
Campus-Booster ID : 159
www.supinfo.com
Copyright © SUPINFO. All rights reserved
Structure algorithmique avancée
Votre formateur…
Titre: Professeur Référent en Algorithmique, Théorie des Graphes et Intelligence Artificielle.
Distinction: Mastère en Recherche Opérationnelle et Intelligence Artificielle.
Formation: Ingénieur en Informatique, Conception et Développement, (modélisation, optimisation, simulation, complexité et algorithmique).
Qualifié en Gestion des Risques (spécialisé en modélisation et Systèmes d'Information)
Publication: « La simulation des flux de transports de marchandises en agglomération » (2002).
Contact:[email protected] SUPINFONE: 1 50087
Arnaud CUEILLE
Structure algorithmique avancée
Objectifs de ce module
Aborder, à l'aide d'exemples concrets, la construction méthodique d'un algorithme.
Mettre en adéquation le type des données avec l'objectif imposé.
Réviser les différentes formes d'exploitation des données.
Maîtriser les différentes structures algorithmiques, leurs contraintes d'utilisation et leurs limites.
Aborder quasi-exhaustivement des constructions algorithmiques évoluées.
En suivant ce module vous allez:
Structure algorithmique avancée
Plan du module
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes).
Instructions répétitives : TANTQUE et REPETER (et variantes).
Instructions répétitives : POUR.
Instructions de rupture de séquences imbriquées.
Voici les parties que nous allons aborder:
Structure algorithmique avancée
Nous
utiliserons, en
paralèlle avec
ce cours, le
document:
Algorithmique
Annexes
Structure algorithmique avancée
Remarque importante :
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Structure algorithmique avancée
Plan de la partie
Imbrication : SI..ALORS
Imbrication : SI..ALORS..SINON
Imbrication : CAS..PARMI
Imbrication : CAS..PARMI..PARDEFAUT
Imbrication diverse
Voici les chapitres que nous allons aborder:
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
La filiation, la relation via les groupes sanguins (critères d’impossibilité) :
Deux parents O ne peuvent avoir d'enfant d'un autre type que O,
Deux parents A, ou un parent A et un parent O, ne peuvent avoir d'enfant B, ni AB,
Deux parents B, ou un parent B et un parent O, ne peuvent avoir d'enfant A, ni AB,
Si l'un des parents est AB, l'enfant ne peut être O.
*ATTENTION, ces critères ne sont valables que pour 95% de la population, voire moins !
EXEMPLE, Groupe sanguin et filiation* (énoncé):
Imbrication : SI..ALORSInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Tableau des filiations* probables et impossibilités à l'aide des groupes sanguins :
Parent (1) Parent (2)
O
A
O
B
O
… peuvent avoir …
O
A, O
A, O
B, O
B, O
… ne peuvent pas avoir …
A, B, AB
B, AB
B, AB
A, AB
A, AB
O
A
A
B
B
? A, B, AB OAB
Imbrication : SI..ALORSInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Tableau complet des filiations* probables et impossibilités à l'aide des groupes sanguins :
Parent (1) Parent (2)
OAB
ABO
… peuvent avoir …
OA, OB, O
A, B, ABA, O
… ne peuvent pas avoir …
A, B, ABB, ABA, AB
OB, AB
OOOOA
A A, O B, ABAB
ABOAB
?A, B, AB
B, O?
B, O
?O
A, AB?
A, AB
AABBB
AB A, B, AB OBO A, B, AB OABA A, B, AB OABB A, B, AB OAB
AB A, B, AB OAB
Imbrication : SI..ALORSInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Algorithmique
Annexes :
(références)
Sous chapitre
2-2-1
Test de
filiation
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Imbrication : SI..ALORS
IMC, présentation :
L'indice de masse corporelle permet d'estimer la quantité de masse grasse de l'organisme à partir de deux paramètres : le poids et la taille. Il permet d'évaluer la relation entre le poids et la santé en déterminant la corpulence de la personne, de voir s'il y a obésité ou maigreur et il en détermine la sévérité. L'IMC ne doit pas être utilisé comme seule mesure de la composition corporelle et/ou de la condition physique.
*ATTENTION, ces critères ne sont valables que pour estimation générale et nécessitent une interprétation élaborée par des spécialistes !
EXEMPLE, Indice de Masse Corporelle* (énoncé):
Imbrication : SI..ALORS..SINONInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
IMC, présentation (Suite) :
ATTENTION : Bien que l'IMC fournisse des points de repère indicatifs des niveaux de poids chez les adultes (de 18 à 65 ans), il ne s'applique pas aux nourrissons, aux enfants, aux femmes enceintes ou celles qui allaitent, aux personnes gravement malades, aux athlètes, ni aux adultes de plus de 65 ans.
*ATTENTION, ces critères ne sont valables que pour estimation générale et nécessitent une interprétation élaborée par des spécialistes !
EXEMPLE, Indice de Masse Corporelle* (énoncé):
Imbrication : SI..ALORS..SINONInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
IMC, calcul :
L'indice de masse corporelle est le rapport du poids (exprimé en Kilogrammes) sur le carré de la taille (exprimée en mètre). Il se calcule donc avec une formule mathématique simple :
IMC = poids / (taille x taille)
EXEMPLE, Indice de Masse Corporelle* (énoncé):
Imbrication : SI..ALORS..SINONInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
IMC, interprétation possible des résultats :
inférieur à 25 : NORMAL
de 25 à 30 : SURPOIDS
de 30 à 35 : OBESITE MODEREE
de 35 à 40 : OBESITE SEVERE
Plus de 40 : OBESITE MASSIVE
[Enoncé élaboré et adapté à partir des sources suivantes : Magazine de la santé, France5 - 2006]
EXEMPLE, Indice de Masse Corporelle* (énoncé):
Imbrication : SI..ALORS..SINONInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Tableau des bornes inférieures et supérieures d'une interprétation possible de l'IMC :
IMC borne inférieure
-
26
31
36
41
borne supérieure
25
30
35
40
-
normal
surpoids
modéré
sévère
massive
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Imbrication : SI..ALORS..SINON
Algorithmique
Annexes :
(références)
Sous chapitre
2-2-2
IMC simplifié
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Imbrication : SI..ALORS..SINON
Afin de comparer le déroulement des instructions conditionnelles SI..ALORS et CAS..PARMI, l'exemple traité dans ce chapitre est identique au premier exemple vu dans ce module.
EXEMPLE, Groupe sanguin et filiation :
Imbrication : CAS..PARMIInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Algorithmique
Annexes :
(références)
Sous chapitre
2-2-3
Test de
filiation
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Imbrication : CAS..PARMI
La structure du CAS..PARMI..PARDEFAUT possède l'avantage de donner une alternative non formalisée en fin de structure conditionnelle.
Cependant, les langages évolués possèdent des modes propres de fonctionnement pour cette instruction !
Lors de la traduction du langage algorithmique au langage évolué, il sera nécessaire, parfois, d'adapter l'écriture algorithmique aux particularités du langage de développement utilisé.
EXEMPLE, Groupe sanguin et filiation :
Imbrication : CAS..PARMI..PARDEFAUTInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Algorithmique
Annexes :
(références)
Sous chapitre
2-2-4
Test de
filiation
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Imbrication : CAS..PARMI..PARDEFAUT
Calcul de l'indice de tendance à l'obésité :
Prise de mesure au tour de taille.
Pour un homme, tendance à l'obésité lorsque la mesure dépasse 100 cm.
Pour une femme, tendance à l'obésité lorsque la mesure dépasse 90 cm.
EXEMPLE, Tendance à l'obésité (énoncé) :
Imbrication diverseInstructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Algorithmique
Annexes :
(références)
Sous chapitre
2-2-5
Tendance à
l'obésité
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Imbrication diverse
Pause-réflexion sur cette 1ère partie
Avez-vous des questions ?
Instructions conditionnelles : SI..ALORS et CAS..PARMI (et variantes)
Instructions répétitives : TANTQUE et REPETER (et variantes)
Structure algorithmique avancée
Plan de la partie
Présentation
Instruction : TANTQUE
Instruction : REPETER..JUSQU’A
Instruction : REPETER..TANTQUE
Sortie de boucle prématurée
Persistance dans une boucle
Boucles imbriquées
Voici les chapitres que nous allons aborder :
Instructions répétitives : TANTQUE et REPETER (et variantes)
Problèmes liés aux instructions répétitives (ou boucles)
PrésentationInstructions répétitives : TANTQUE et REPETER (et variantes)
Il est parfois nécessaire, en fonction d'une condition particulière, de traiter un certain nombre de fois une opération ou suite d'opérations.
Pour réaliser cela, une structure répétitive peut être employée afin d'éviter une écriture séquentielle de structures conditionnelles bien trop lourde à mettre en place.
Les structures répétitives ou boucles
PrésentationInstructions répétitives : TANTQUE et REPETER (et variantes)
Puisqu'il est impératif de définir une condition pour "rentrer" dans la boucle ou "effectuer la répétition", il peut arriver que celle-ci ne soit pas "VRAI" lors du traitement de l'instruction répétitive ! Dans ce cas, l'instruction suivante est prise en compte et ainsi de suite …, en revanche, dans le cas contraire, où la répétition s'opère normalement, il faut impérativement "sortir" de cette boucle ! (Sinon, le programme ne se termine jamais).
Conclusion : les opérations répétitives nécessiteront un examen minutieux des conditions de sortie de la boucle.
EXEMPLE, Agenda journalier (énoncé) :
Instruction : TANTQUEInstructions répétitives : TANTQUE et REPETER (et variantes)
L'objectif de ce programme est de faire afficher (ou imprimer) une liste d'heures successives dans une tranche de 8h00 à 18h00, par créneau d'une heure, en dessous du nom du jour choisi par l'utilisateur.
Algorithmique
Annexes :
(références)
Sous chapitre
2-3-2
Agenda
journalier
Instructions répétitives : TANTQUE et REPETER (et variantes)
Instruction : TANTQUE
EXEMPLE, Agenda journalier (énoncé) :
Instruction : REPETER..JUSQU’AInstructions répétitives : TANTQUE et REPETER (et variantes)
Afin de comparer le déroulement des instructions répétitives TANTQUE et REPETER, l'exemple traité dans ce chapitre est identique au premier exemple vu dans ce module.
Algorithmique
Annexes :
(références)
Sous chapitre
2-3-3
Agenda
journalier
Instructions répétitives : TANTQUE et REPETER (et variantes)
Instruction : REPETER..JUSQU’A
EXEMPLE, Agenda journalier (énoncé) :
Instruction : REPETER..TANTQUEInstructions répétitives : TANTQUE et REPETER (et variantes)
Il existe deux variantes à l'écriture de l'instruction répétitive REPETER.
Ses variantes sont complémentaires.
Certains langages n'implémentent qu'une seule de ces instructions.
Lors de la traduction du langage algorithmique au langage évolué, il sera nécessaire, parfois, d'adapter l'écriture algorithmique aux particularités du langage de développement utilisé.
Algorithmique
Annexes :
(références)
Sous chapitre
2-3-4
Agenda
journalier
Instructions répétitives : TANTQUE et REPETER (et variantes)
Instruction : REPETER..TANTQUE
EXEMPLE, Calendrier mensuel (énoncé) :
Sortie de boucle prématuréeInstructions répétitives : TANTQUE et REPETER (et variantes)
L'objectif de ce programme est de faire afficher toutes les dates d'un mois choisi par l'utilisateur en dessous du nom du mois.
Algorithmique
Annexes :
(références)
Sous chapitre
2-3-5
Calendrier
mensuel
Instructions répétitives : TANTQUE et REPETER (et variantes)
Sortie de boucle prématurée
EXEMPLE, Machine à sous (énoncé) :
Persistance dans une boucleInstructions répétitives : TANTQUE et REPETER (et variantes)
L'objectif de ce programme est de simuler le comportement aléatoire d'une machine à sous.
Algorithmique
Annexes :
(références)
Sous chapitre
2-3-6
Machine à
sous
Instructions répétitives : TANTQUE et REPETER (et variantes)
Persistance dans une boucle
EXEMPLE, Agenda journalier évolué (énoncé) :
Boucles imbriquéesInstructions répétitives : TANTQUE et REPETER (et variantes)
L'objectif de ce programme est de faire évoluer le programme d'affichage de l'agenda vu précédemment.
L'utilisateur a maintenant le choix du nombre de jours à afficher.
Algorithmique
Annexes :
(références)
Sous chapitre
2-3-7
Agenda
journalier
évolué
Instructions répétitives : TANTQUE et REPETER (et variantes)
Boucles imbriquées
Pause-réflexion sur cette 2ème partie
Avez-vous des questions ?
Instructions répétitives : TANTQUE et REPETER (et variantes)
Instructions répétitives : POUR
Structure algorithmique avancée
Plan de la partie
Présentation
Instruction : POUR
Sortie de boucle prématurée
Persistance dans une boucle
Boucle à bornes variables
Boucle à pas variable
Boucles à bornes fixes
Boucles à bornes imbriquées
Voici les chapitres que nous allons aborder:
Instructions répétitives : POUR
Les structures répétitives ou boucles
PrésentationInstructions répétitives : POUR
A l'identique des autres instructions répétitives, l'instruction POUR risque de boucler indéfiniment !
L'instruction POUR est une instruction répétitive "tout en un". C'est à dire qu'elle a la possibilité d'intégrer une déclaration avec initialisation, la définition de la borne de sortie, ainsi que la valeur du pas (et de son signe).
Les structures répétitives ou boucles (suite)
PrésentationInstructions répétitives : POUR
Conclusion : les opérations répétitives à l'aide de POUR nécessiteront un examen minutieux des conditions de sortie de la boucle et dans le cas d'une utilisation de variables à la place des éléments : initialisation, borne de sortie et pas; la cohérence de l'ensemble doit être validée avant toute traduction dans un langage quelconque.
EXEMPLE, Agenda journalier (énoncé) :
Instructions répétitives : POUR
L'objectif de ce programme (identique aux exercices vus précédemment) est de faire afficher (ou imprimer) une liste d'heures successives dans une tranche de 8h00 à 18h00, par créneau d'une heure, en dessous du nom du jour choisi par l'utilisateur.
Instruction : POUR
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-2
Agenda
journalier
Instructions répétitives : POUR
Instruction : POUR
EXEMPLE, Calendrier mensuel (énoncé) :
Instructions répétitives : POUR
L'objectif de ce programme (identique aux exercices vus précédemment) est de faire afficher toutes les dates d'un mois choisi par l'utilisateur en dessous du nom du mois.
Sortie de boucle prématurée
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-3
Calendrier
mensuel
Instructions répétitives : POUR
Sortie de boucle prématurée
EXEMPLE, Machine à sous (énoncé) :
Persistance dans une boucleInstructions répétitives : POUR
L'objectif de ce programme (identique aux exercices vus précédemment) est de simuler le comportement aléatoire d'une machine à sous.
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-4
Machine à
sous
Instructions répétitives : POUR
Persistance dans une boucle
EXEMPLE, Agenda journalier plusieurs jours (énoncé) :
Boucle à bornes variablesInstructions répétitives : POUR
L'objectif de ce programme (évolution de l'exercice vu précédemment) est de faire afficher (ou imprimer) une liste d'heures successives dans une tranche de 8h00 à 18h00, par créneau d'une heure, pour un certain nombre de jours déterminé par l'utilisateur.
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-5
Agenda
journalier
plusieurs jours
Instructions répétitives : POUR
Boucle à bornes variables
EXEMPLE, Calcul de la monnaie en euro (énoncé) :
Boucle à pas variableInstructions répétitives : POUR
L'objectif de ce programme est de déterminer le nombre de billets pour chacune des valeurs suivantes : 5 euro, 10, 20, 50 et 100 euro ; en fonction du prix d'un produit renseigné par l'utilisateur.
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-6
Calcul de la
monnaie en
euro
Instructions répétitives : POUR
Boucle à pas variable
EXEMPLE, Tables de multiplication complètes (énoncé) :
Boucles à bornes fixesInstructions répétitives : POUR
L'objectif de ce programme est d'afficher les tables de multiplication de 0 à 10.
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-7
Tables de
multiplication
Instructions répétitives : POUR
Boucles à bornes fixes
EXEMPLE, Affichage d'une droite en diagonale (énoncé) :
Boucles à bornes imbriquéesInstructions répétitives : POUR
L'objectif de ce programme est d'afficher une droite à l'écran, dans un pavé de 50 sur 50, en diagonale.
Algorithmique
Annexes :
(références)
Sous chapitre
2-4-8
Droite en
diagonale
Instructions répétitives : POUR
Boucles à bornes imbriquées
Pause-réflexion sur cette 3ème partie
Avez-vous des questions ?
Instructions répétitives : POUR
Instructions de rupture de séquences imbriquées
Structure algorithmique avancée
Plan de la partie
Problème résolu 1
Problème résolu 2
Problème résolu 3
Problème résolu 4
Voici les chapitres que nous allons aborder :
Instructions de rupture de séquences imbriquées
EXEMPLE, Nombre de jours par mois (énoncé) :
Problème résolu 1Instructions de rupture de séquences imbriquées
L'objectif de ce programme est de déterminer, en fonction du mois et de l'année, le nombre de jours en prenant en compte les années bissextiles.
Une année est bissextile si le millésime correspondant vérifie l'une des 2 propriétés suivantes : soit il est divisible par 4 et n'est pas divisible par 100, soit il est divisible par 400.
Algorithmique
Annexes :
(références)
Sous chapitre
2-5-1
Nombre de
jours par mois
Instructions de rupture de séquences imbriquées
Problème résolu 1
EXEMPLE, Extraction de la valeur entière (énoncé) :
Problème résolu 2Instructions de rupture de séquences imbriquées
L'objectif de ce programme est de réaliser une fonction mathématique utile et généralement déjà présente dans les bibliothèques de développement en informatique : Extraction de la valeur entière d'un nombre décimal.
Le principe retenu est une décrémentation répétitive si le nombre décimal est positif, ou bien une incrémentation répétitive s'il est négatif, jusqu'à ce que la valeur soit nulle. Un compteur tourne pour chaque itération afin de fournir la valeur entière correspondante.
Algorithmique
Annexes :
(références)
Sous chapitre
2-5-2
Extraction de
la valeur
entière
Instructions de rupture de séquences imbriquées
Problème résolu 2
EXEMPLE, Points d'un mot au Scrabble (énoncé) :
Problème résolu 3Instructions de rupture de séquences imbriquées
L'objectif de ce programme est de calculer le nombre de points qu'un mot peut rapporter au Scrabble. Ce mot n'a pas encore été posé sur la grille du jeu, et par conséquent, les coefficients multiplicateurs du jeu (impactant la valeur des lettres ou du mot) ne sont pas pris en compte.
k, w, x, y, z : 10 points
j, q : 8 points
f, h, v : 4 points
b, c, p : 3 points
d, g, m : 2 points
a, e, i, l, n, o, r, s, t, u : 1 point
Algorithmique
Annexes :
(références)
Sous chapitre
2-5-3
Points d'un
mot au
Scrabble
Instructions de rupture de séquences imbriquées
Problème résolu 3
EXEMPLE, Temps de remontée d'un plongeur (énoncé) :
Problème résolu 4Instructions de rupture de séquences imbriquées
L'objectif de ce programme est de déterminer, pour une profondeur donnée, le temps de remontée d'un plongeur en prenant en compte les arrêts obligatoires à chaque palier.
Pour une profondeur inférieure ou égale à 100 m, sachant qu’il faut faire un palier de 100 secondes à 30 m, puis de 30 m à 0, des paliers tous les 3 m, le temps diminuant de 10 secondes à chaque fois. Les paliers au dessus de 30 m sont augmentés de 25 secondes tous les 10 m, (ainsi p.ex. : 150 s à 50 m). La vitesse de remontée est estimée à 1 m/s et sera considérée constante.
Algorithmique
Annexes:
(références)
Sous chapitre
2-5-4
Temps de
remontée d'un
plongeur
Instructions de rupture de séquences imbriquées
Problème résolu 4
Pause-réflexion sur cette 4ème partie
Avez-vous des questions ?
Instructions de rupture de séquences imbriquées
TANTQUE et REPETERrépétition
TANTQUE et REPETERrépétition
POURrépétition avec
déclaration, initialisation, borne et pas
POURrépétition avec
déclaration, initialisation, borne et pas
SI..ALORS simple
sélection (ou filtre)
SI..ALORS simple
sélection (ou filtre)
ATTENTION !imbrications de sélections (ou filtres) et
sorties de boucles
ATTENTION !imbrications de sélections (ou filtres) et
sorties de boucles
Résumé du module
SI..ALORS..SINONsélection
avec alternative
SI..ALORS..SINONsélection
avec alternative
Structure algorithmique avancée
Pour aller plus loin…
Publications
Introduction à l'algorithmique :
Cours et exercices (Broché) de Cormen, Leiserson, Rivest
Exercices et problèmes d'algorithmique : 144 énoncés avec solutions détaillées
(Broché) de Baynat, Chrétienne
Si vous voulez approfondir vos connaissances:
Structure algorithmique avancée
Félicitations
Vous avez suivi avec succès le module de cours n°2
Structure algorithmique avancée
Fin
Relisez attentivement tous les exemples de ce cours, essayez d'y apporter des améliorations, des ajouts, …
Choisissez un nouveau sujet simple, non encore traité dans ce cours, et écrivez l'algorithme correspondant.
Structure algorithmique avancée