Vous êtes sur la page 1sur 17
Analyse et programmation 1 Techniques algorithmiques
Analyse et programmation 1
Techniques algorithmiques
Thèmes abordés • Comment concevoir un algorithme • Quelques techniques algorithmiques usuelles Analyse et
Thèmes abordés
• Comment concevoir un algorithme
• Quelques techniques algorithmiques usuelles
Analyse et programmation 1 - Techniques algorithmiques
1
Comment concevoir un algorithme • Méthodologies • Quelques techniques de conception – Les organigrammes –
Comment concevoir un algorithme
• Méthodologies
• Quelques techniques de conception
– Les organigrammes
– Les structogrammes
– Le pseudo code
Analyse et programmation 1 - Techniques algorithmiques
2
Méthodologies Nature du problème • Les acteurs de la réalisation d’un programme – L’utilisateur :
Méthodologies
Nature du problème
• Les acteurs de la réalisation d’un programme
– L’utilisateur : connaît le besoin, de façon informelle.
– Le programmeur : connaît (plus ou moins) la programmation.
– Besoin d’un outil de communication entre les deux.
• Les cahiers des charges
– Sont en général de haut niveau.
– Exemple : piloter une machine de production.
• Les instructions à disposition
– Sont de très bas niveau.
– Exemple : if, for, i++
• Problème du programmeur d’application
Comment passer du cahier des charges aux instructions en C.
Analyse et programmation 1 - Techniques algorithmiques
3
Méthodologies Présentation • Solution : utiliser une méthodologie – Définir des notations • Si possible
Méthodologies
Présentation
• Solution : utiliser une méthodologie
– Définir des notations
Si possible compréhensibles par le programmeur et l’utilisateur.
– Proposer une démarche
Cheminement pour la résolution des problèmes.
• Constat
– Il existe des dizaines de méthodologies.
– Les méthodologies ne savent pas programmer à notre place.
– La programmation reste un art difficile.
Nécessite de la pratique.
– Une méthodologie
• Peut vous proposer un cadre formel.
• Ne peut pas réfléchir à votre place.
Analyse et programmation 1 - Techniques algorithmiques
4
Comment trouver un algorithme ? • Pour analyser un problème – Commencer par le résoudre
Comment trouver un algorithme ?
• Pour analyser un problème
– Commencer par le résoudre à la main.
Papier, crayon.
– Une fois qu’une démarche est trouvée, analyser étape par étape
ce que vous faites.
– Identifier ensuite les structures de contrôle.
– Et noter les grandes lignes de l’algorithme.
• Est-ce efficace de perdre du temps à réfléchir ?
– Une fois que le bon algorithme est trouvé, la programmation
devient un simple problème de traduction.
– Une fois les bases du langage assimilées, la programmation prend
peu de temps.
Analyse et programmation 1 - Techniques algorithmiques
5
Les organigrammes début début Présentation Mot • Représentation graphique d un algorithme ’ Gauche :=
Les organigrammes
début
début
Présentation
Mot
• Représentation graphique
d un algorithme
Gauche := 1
;
Droite
:= N ;
– Rectangle : instruction.
– Losange : décision.
vrai
Gauche >Droite?
"PAS TROUVE"
fin
– Flèches : saut
faux
Milieu := (Gauche +Droite) / 2
vrai
Dico (Milieu) = Mot?
Milieu
fin
faux
vrai
Gauche:=
Milieu + 1
Dico (Milieu) < Mot?
faux
Droite:= Milieu - 1
Analyse et programmation 1 - Techniques algorithmiques
6
Les organigrammes Symboles séquence alternatives itérations action 1 faux condition action 2 action 2 vrai
Les organigrammes
Symboles
séquence
alternatives
itérations
action 1
faux
condition
action 2
action 2
vrai
condition
action 3
action 1
action 2
Analyse et programmation 1 - Techniques algorithmiques
7
Les organigrammes Analyse • Permettent de représenter des algorithmes simples – Exemple : représenter le
Les organigrammes
Analyse
• Permettent de représenter des algorithmes simples
– Exemple : représenter le fonctionnement d’une instruction.
– Devient vite difficile à lire sur des problèmes réels.
• Encore utilisés en assembleur
Traduit bien les instructions machine
• Traduisent mal la programmation structurée
– Les branchements traduisent « goto »
– Pas de symbole représentant for, while, do while
• Pratique industrielle en langage évolué
Peu rencontré sur des projets professionnels.
• Donc…
Analyse et programmation 1 - Techniques algorithmiques
8
Les structogrammes Nassi Shneiderman Diagram (NSD) - Présentation • Représentation graphique des structures de
Les structogrammes
Nassi Shneiderman Diagram (NSD) - Présentation
• Représentation graphique des structures de contrôle, inventée en 1972.
– L’imbrication graphique traduit l’imbrication logique.
– Différents symboles pour les structures de contrôle habituelles.
séquence
Alternative
1er bloc structurel
Condition
oui
non
2ème bloc structurel
THEN - bloc
ELSE - bloc
3ème bloc structurel
itération
imbrication
DO WHILE (condition)
1er bloc structurel
2ème bloc structurel
Bloc répétitif
3ème bloc structurel
Analyse et programmation 1 - Techniques algorithmiques
9
Les structogrammes Illustration DO WHILE (condition) Condition oui non 1er bloc structurel 1er bloc structurel
Les structogrammes
Illustration
DO WHILE (condition)
Condition
oui
non
1er bloc structurel
1er bloc structurel
2ème bloc structurel
2ème bloc structurel
3ème bloc structurel
3ème bloc structurel
Analyse et programmation 1 - Techniques algorithmiques
10
Les structogrammes Analyse • Permettent de représenter des algorithmes structurés • Traduisent bien la
Les structogrammes
Analyse
• Permettent de représenter des algorithmes structurés
• Traduisent bien la programmation structurée
– Montrent la décomposition hiérarchique.
– Bonne façon de réfléchir.
• Limitations
– Des niveaux d’imbrication multiples deviennent peu lisibles.
– Un outil d’édition est indispensable (ou alors une bonne gomme).
• Pratique industrielle en langage évolué
Peu rencontré sur des projets professionnels.
• Donc…
Analyse et programmation 1 - Techniques algorithmiques
11
Le pseudo code Présentation • Principe du pseudo code – Pseudos instructions traduisant les structures
Le pseudo code
Présentation
• Principe du pseudo code
– Pseudos instructions traduisant les structures de contrôle.
• SI
.
.
.
ALORS
SINON
• SELECTION SUR I
1 =>
2=>
• FAIRE
TANT QUE
• TANT QUE
FAIRE
– Indépendance par rapport à la syntaxe réelle du langage cible.
– On laisse de côté l’aspect déclaration des variables.
– Moyen rapide et simple de structurer ses idées.
• Exemple
FAIRE
Saisir X
SI X < 0 ALORS
Afficher un message d’erreur
TANT QUE X < 0
Analyse et programmation 1 - Techniques algorithmiques
12
Le pseudo code Table de symboles • Variables utilisées dans le pseudo code – Dans
Le pseudo code
Table de symboles
• Variables utilisées dans le pseudo code
– Dans les cas simples, le type et le rôle d’une variable sont évidents.
– Dans les autres cas, il faut écrire une table de symboles.
• Table de symboles
– Elle précède le pseudo code
– Elle précise
• Le nom de l’objet : X
• Sa nature (variable, constante) :
• Son type de données : réel, entier, …
• Un descriptif quand le nom n’est pas assez explicite.
– Correspond aux déclarations de variable
• Exemple
Somme : réel, accumulateur pour la somme des réels saisis
Analyse et programmation 1 - Techniques algorithmiques
13
Le pseudo code Analyse • Avantages – Très similaire au code final – Donc, pas
Le pseudo code
Analyse
• Avantages
– Très similaire au code final
– Donc, pas d’effort de traduction particulier.
– Très efficace, on ignore les exigences syntaxiques du langage cible.
– Structuré.
– Documente l’algorithme pour les évolutions futures.
– Ne nécessite aucun outil particulier.
• nconvén ents
I
i
– Laisse beaucoup (trop) de liberté.
– Textuel : permet certaines ambiguïtés.
Analyse et programmation 1 - Techniques algorithmiques
14
Méthodologie Quelle approche choisir • Lorsque le problème est compliqué – Préférer l’approche basée sur
Méthodologie
Quelle approche choisir
• Lorsque le problème est compliqué
– Préférer l’approche basée sur le pseudo code.
– Utiliser d’autres formalismes
• Lorsqu’ils contribuent vraiment à la compréhension.
• Ou comme outil de communication.
• Lorsque le problème est assez simple
– L’algorithme peut être conçu directement au niveau du code.
– Prati ue industrielle : c’est le cas courant
q
.
• Un algorithme doit être clair avant d’être programmé.
La programmation directe d’un algorithme devient possible avec
la pratique.
Analyse et programmation 1 - Techniques algorithmiques
15
Méthogologie Comment choisir la structure de contrôle adaptée Liste d’instructions Solution générale

Méthogologie

Comment choisir la structure de contrôle adaptée

Liste d’instructions Solution générale
Liste d’instructions
Solution
générale
Séquence Enchaîner des Opérateur « , » traitements Dans une expression if Conditions booléennes switch
Séquence
Enchaîner des
Opérateur « , »
traitements
Dans une
expression
if
Conditions
booléennes
switch
Valeur d’un
Algorithme
Sélection
Choisir un
entier
traitement
Opérateur « ? : »
Evaluation selon
condition
for
Nombre connu
de fois
Itération
while
Répéter un
Selon condition
traitement
do while

Au moins une fois, puis selon condition

de fois Itération while Répéter un Selon condition traitement do while Au moins une fois, puis

Analyse et programmation 1 - Techniques algorithmiques

16

Quelques techniques algorithmiques usuelles • Le comptage • L’accumulation • La recherche d’extremum • Les
Quelques techniques algorithmiques usuelles
• Le comptage
• L’accumulation
• La recherche d’extremum
• Les répétitions imbriquées
Analyse et programmation 1 - Techniques algorithmiques
17
Techniques algorithmiques usuelles L’échange de variables • Contexte – 2 variables contiennent des valeurs
Techniques algorithmiques usuelles
L’échange de variables
• Contexte
– 2 variables contiennent des valeurs différentes.
– On veut échanger leurs valeurs.
• But
– Utile pour de nombreux algorithmes.
– Exemples
• Ordonner 2 nombres.
• Rétablir les bornes d’un intervalle .
Analyse et programmation 1 - Techniques algorithmiques
18
Techniques algorithmiques usuelles L’échange de variables • Implémentation naïve int main() { int i, j;
Techniques algorithmiques usuelles
L’échange de variables
Implémentation naïve
int main()
{
int i, j;
printf("Saisir 2 entier :");
scanf("%d%d", &i, &j);
if (i > j)
{
i = j;
i et j contiennent finalement la même valeur.
La valeur initiale de i est perdue !!!
j = i;
}
printf("Dans l’ordre croissant : %d, %d\n", i, j);
_getch();
return 0;
}
Analyse et programmation 1 - Techniques algorithmiques
19
Techniques algorithmiques usuelles L’échange de variables • Implémentation fonctionnelle int main() { int i,
Techniques algorithmiques usuelles
L’échange de variables
Implémentation fonctionnelle
int main()
{
int i, j, tmp;
printf("Saisir 2 entier :");
scanf("%d%d", &i, &j);
if (i > j)
{
tmp =
i;
1.
i = j ;
2
.
On conserve la valeur initiale de i dans tmp.
.
On co ie la valeur de j dans i
p
j =
tmp;
3.
On copie la valeur initiale de i dans j.
}
printf("Dans l'ordre croissant : %d, %d\n", i, j);
_getch();
return 0;
}
Analyse et programmation 1 - Techniques algorithmiques
20
Techniques algorithmiques usuelles Le comptage • But : compter un nombre d’éléments par programme. •
Techniques algorithmiques usuelles
Le comptage
• But : compter un nombre d’éléments par programme.
• Exemples
– Protocole de communication :
• le nombre de caractères d’un message.
• le nombre de messages reçus.
– Caisse enregistreuse : nombre d’articles.
• Le comptage peut être
– Systématique : prend en compte tous les objets.
– Sélectif : teste une condition sur l’objet avant de le comptabiliser.
Analyse et programmation 1 - Techniques algorithmiques
21
Techniques algorithmiques usuelles Le comptage - illustration int nombre_e; char c; printf("Saisissez une ligne de
Techniques algorithmiques usuelles
Le comptage - illustration
int nombre_e;
char c;
printf("Saisissez une ligne de texte:\n");
nombre_e = 0;
do
{
scanf("%c", &c);
if ((c == 'e') || (c == 'E'))
b
nom re_e
++
;
}
while (c != '\n');
printf("Cette ligne contient %d caracteres e ou E.\n",
nombre_e);
Analyse et programmation 1 - Techniques algorithmiques
22
Techniques algorithmiques usuelles L’accumulation • But : faire la somme d’éléments par programme. • Exemples
Techniques algorithmiques usuelles
L’accumulation
• But : faire la somme d’éléments par programme.
• Exemples
– Caisse de parking :
• somme des pièces de monnaie introduites par un client.
• somme des pièces de monnaie dans la caisse.
– Machine d’assemblage
Quantité totale de colle déjà utilisée
– Calcul de moyenne
En combinaison avec un comptage
• L’accumulation peut être
– Systématique : prend en compte tous les objets.
– Sélective : teste une condition sur l’objet avant de le comptabiliser.
Analyse et programmation 1 - Techniques algorithmiques
23
Techniques algorithmiques usuelles L’accumulation - illustration int valeur_piece; int i; int somme; const int
Techniques algorithmiques usuelles
L’accumulation - illustration
int valeur_piece;
int i;
int somme;
const int PRIX_PLACE = 200; // 2 Francs
somme = 0;
while (somme < PRIX_PLACE)
{
printf("Valeur de la piece de monnaie en centimes :");
scanf("%d", &valeur_piece);
i
somme += valeur_piece;
i
f (valeur_p ece >= 10)
else
printf("piece refusee\n");
}
printf("Prenez votre ticket\n");
Analyse et programmation 1 - Techniques algorithmiques
24
Techniques algorithmiques usuelles Recherche d’extremum • But : rechercher le plus petit ou le plus
Techniques algorithmiques usuelles
Recherche d’extremum
• But : rechercher le plus petit ou le plus grand élément
d’une collection par programme.
• Exemples
– Station météo, thermomètre électronique de congélateur :
Mémoriser les températures minimales et maximales.
– Système d’information de l’école
Trouver l’étudiant le plus méritant
Analyse et programmation 1 - Techniques algorithmiques
25
Techniques algorithmiques usuelles Recherche d’extremum - illustration int valeur; int i; int minimum, maximum; for
Techniques algorithmiques usuelles
Recherche d’extremum - illustration
int valeur;
int i;
int minimum, maximum;
for (i = 1; i <= 10; i++)
{
printf("Mesure de temperature n° %d :", i);
scanf("%d", &valeur);
if (i == 1)
{
minimum = valeur;
maximum = valeur;
}
else if (valeur < minimum)
minimum = valeur;
else if (valeur > maximum)
maximum = valeur;
}
printf("Temperature minimum: %d\n", minimum);
printf("Temperature maximum: %d\n", maximum);
Analyse et programmation 1 - Techniques algorithmiques
26
Techniques algorithmiques usuelles Répétitions imbriquées • But : – Répéter plusieurs fois un traitement, lui
Techniques algorithmiques usuelles
Répétitions imbriquées
• But :
Répéter plusieurs fois un traitement, lui même constitué d’une
répétition.
• Exemples
– Machine de soudage :
• Produire 100 pièces
• Pour chaque pièce, effectuer 15 points de soudure.
– Afficher les tables de multiplication
• 10 tables de multiplication
• Pour chaque table, 10 multiplications.
Analyse et programmation 1 - Techniques algorithmiques
27
Techniques algorithmiques usuelles Répétitions imbriquées - illustration int i, j; for (i = 1; i
Techniques algorithmiques usuelles
Répétitions imbriquées - illustration
int i, j;
for (i = 1; i <= 10; i++)
{
printf("Table de %d\n", i);
for (j = 1; j <= 10; j++)
printf("%d x %d = %d\n", i, j, i * j);
printf("\n");
}
Analyse et programmation 1 - Techniques algorithmiques
28
Techniques algorithmiques usuelles Répétitions imbriquées – piège classique • Utilisation de la même variable
Techniques algorithmiques usuelles
Répétitions imbriquées – piège classique
• Utilisation de la même variable pour 2 boucles imbriquées
for (i = 1; i <= 10; i++)
for (i = 1; i <= 5; i++) // Probleme !
{
.
.
.
.
}
• Ne pas confondre avec deux boucles consécutives
for (i = 1; i <= 5; i++) // pas de probleme
{
.
.
.
.
}
for (i = 1; i <= 5; i++) // pas de probleme
{
.
.
.
.
}
Analyse et programmation 1 - Techniques algorithmiques
29
Qu’avons-nous appris ? • Comment formaliser un algorithme – Graphiquement : organigramme, structogramme. –
Qu’avons-nous appris ?
• Comment formaliser un algorithme
– Graphiquement : organigramme, structogramme.
– Textuellement : pseudo code
• Technique algorithmiques courantes
– Comptage
– Accumulation
– Recherche d’extremum
– Répétitions imbriquées
Analyse et programmation 1 - Techniques algorithmiques
30
Vos questions Analyse et programmation 1 - Techniques algorithmiques 31
Vos questions
Analyse et programmation 1 - Techniques algorithmiques
31
Analyse et programmation 1 - Techniques algorithmiques 32
Analyse et programmation 1 - Techniques algorithmiques
32