Sie sind auf Seite 1von 17

Analyse et programmation 1

Techniques algorithmiques

Thmes abords
Comment concevoir un algorithme Q l Quelques techniques algorithmiques usuelles t h i l ith i ll

Analyse et programmation 1 - Techniques algorithmiques

Comment concevoir un algorithme


Mthodologies Q l Quelques techniques d conception t h i de ti
Les organigrammes Les structogrammes Le pseudo code

Analyse et programmation 1 - Techniques algorithmiques

Mthodologies
Nature du problme

Les acteurs de la ralisation dun programme


Lutilisateur : connat le besoin, de faon informelle L utilisateur besoin informelle. Le programmeur : connat (plus ou moins) la programmation. Besoin dun outil de communication entre les deux.

Les cahiers des charges


Sont en gnral de haut niveau. Exemple : piloter une machine de production.

Les instructions disposition


Sont de trs bas niveau. Exemple : if, for, i++

Problme du programmeur dapplication


Comment passer du cahier des charges aux instructions en C.

Analyse et programmation 1 - Techniques algorithmiques

Mthodologies
Prsentation

Solution : utiliser une mthodologie


Dfinir des notations
Si possible comprhensibles par le programmeur et lutilisateur.

Proposer une dmarche


Cheminement pour la rsolution des problmes.

Constat
Il existe des dizaines de mthodologies. Les mthodologies ne savent pas programmer notre place. La programmation reste un art difficile difficile.
Ncessite de la pratique.

Une mthodologie
Peut vous proposer un cadre formel. Ne peut pas rflchir votre place.

Analyse et programmation 1 - Techniques algorithmiques

Comment trouver un algorithme ?


Pour analyser un problme
Commencer par le rsoudre la main rso dre main.
Papier, crayon.

Une fois quune dmarche est trouve, analyser tape par tape ce que vous faites. Identifier ensuite les structures de contrle. Et noter les grandes lignes de lalgorithme.

Est-ce efficace de perdre du temps rflchir ? Est ce


Une fois que le bon algorithme est trouv, la programmation devient un simple problme de traduction. Une fois les bases du langage assimiles, la programmation prend peu de temps.
Analyse et programmation 1 - Techniques algorithmiques 5

Les organigrammes
Prsentation

dbut dbut

Reprsentation graphique d un dun algorithme


Rectangle : instruction. Losange : dcision. Flches : saut

Mot

Gauche := 1 ; Droite := N ;

vrai Gauche >Droite? faux Milieu := (Gauche + Droite) / 2 "PAS TROUVE" fin

vrai Dico (Milieu) = Mot? faux Dico (Milieu) < Mot? faux Droite:= Milieu - 1 Milieu fin

vrai Gauche:= Milieu + 1

Analyse et programmation 1 - Techniques algorithmiques

Les organigrammes
Symboles

squence action 1 action 2 action 3

alternatives condition vrai action 1 action 2 faux

itrations action 2

condition

Analyse et programmation 1 - Techniques algorithmiques

Les organigrammes
Analyse

Permettent de reprsenter des algorithmes simples


E emple : reprsenter le fonctionnement dune instr ction Exemple d ne instruction. Devient vite difficile lire sur des problmes rels.

Encore utiliss en assembleur


Traduit bien les instructions machine

Traduisent mal la programmation structure


Les branchements traduisent goto Pas de symbole reprsentant 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) - Prsentation Reprsentation graphique des structures de contrle, invente en 1972.
Limbrication graphique traduit limbrication logique. L imbrication l imbrication logique Diffrents symboles pour les structures de contrle habituelles.
squence
1er bloc structurel oui 2me bloc structurel 3me bloc structurel THEN - bloc ELSE - bloc

Alternative
Condition non

itration
DO WHILE (condition)

imbrication
1er bloc structurel 2me bloc structurel 3me bloc structurel

Bloc rptitif

Analyse et programmation 1 - Techniques algorithmiques

Les structogrammes
Illustration
DO WHILE (condition) ( )

Condition oui non

1er bloc structurel

1er bloc structurel

2me bloc structurel

2me bloc structurel

3me bloc structurel

3me bloc structurel

Analyse et programmation 1 - Techniques algorithmiques

10

Les structogrammes
Analyse

Permettent de reprsenter des algorithmes structurs T d i t bien l programmation structure Traduisent bi la ti t t


Montrent la dcomposition hirarchique. Bonne faon de rflchir.

Limitations
Des niveaux dimbrication multiples deviennent peu lisibles. Un outil ddition 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
Prsentation Principe du pseudo code
Pseudos instructions traduisant les structures de contrle.
SI . . . ALORS . . . SINON . . . SELECTION SUR I . . . 1 => . . . 2=> FAIRE . . . TANT QUE . . . TANT QUE . . . FAIRE

Indpendance par rapport la syntaxe relle du langage cible. On laisse de ct laspect dclaration des variables. Moyen rapide et simple de structurer ses ides.

Exemple
FAIRE Saisir X SI X < 0 ALORS Afficher un message derreur TANT QUE X < 0

Analyse et programmation 1 - Techniques algorithmiques

12

Le pseudo code
Table de symboles

Variables utilises dans le pseudo code


Dans les cas simples le type et le rle dune variable sont vidents. simples, d une vidents Dans les autres cas, il faut crire une table de symboles.

Table de symboles
Elle prcde le pseudo code Elle prcise
Le nom de lobjet : X Sa nature (variable, constante) : Son type de donnes : rel, entier rel entier, Un descriptif quand le nom nest pas assez explicite.

Correspond aux dclarations de variable

Exemple
Somme : rel, accumulateur pour la somme des rels saisis
Analyse et programmation 1 - Techniques algorithmiques 13

Le pseudo code
Analyse

Avantages
Trs similaire a code final au Donc, pas deffort de traduction particulier. Trs efficace, on ignore les exigences syntaxiques du langage cible. Structur. Documente lalgorithme pour les volutions futures. Ne ncessite aucun outil particulier.

Inconvnients
Laisse beaucoup (trop) de libert. Textuel : permet certaines ambiguts.

Analyse et programmation 1 - Techniques algorithmiques

14

Mthodologie
Quelle approche choisir

Lorsque le problme est compliqu


Prfrer lapproche base sur le pseudo code s r pse do code. Utiliser dautres formalismes
Lorsquils contribuent vraiment la comprhension. Ou comme outil de communication.

Lorsque le problme est assez simple


Lalgorithme peut tre conu directement au niveau du code. Pratique industrielle : cest le cas courant. c est courant

Un algorithme doit tre clair avant dtre programm.


La programmation directe dun algorithme devient possible avec la pratique.

Analyse et programmation 1 - Techniques algorithmiques

15

Mthogologie
Comment choisir la structure de contrle adapte
Squence
Solution gnrale Dans une expression Conditions boolennes

Liste dinstructions Oprateur , if switch Oprateur ? : for while do while

Enchaner des traitements

Algorithme

Choisir un traitement

Slection

Valeur dun entier Evaluation selon condition Nombre connu de fois

Rpter un traitement

Itration

Selon condition Au moins une fois, puis selon condition

Analyse et programmation 1 - Techniques algorithmiques

16

Quelques techniques algorithmiques usuelles


Le comptage Laccumulation L l ti La recherche dextremum Les rptitions imbriques

Analyse et programmation 1 - Techniques algorithmiques

17

Techniques algorithmiques usuelles


Lchange de variables

Contexte
2 variables contiennent des valeurs diffrentes ariables ale rs diffrentes. On veut changer leurs valeurs.

But
Utile pour de nombreux algorithmes. Exemples
Ordonner 2 nombres. Rtablir les bornes d un intervalle. dun intervalle

Analyse et programmation 1 - Techniques algorithmiques

18

Techniques algorithmiques usuelles


Lchange de variables Implmentation nave
int main() { int i, j; printf("Saisir 2 entier :"); scanf("%d%d", &i, &j); if (i > j) { i et j contiennent finalement la mme valeur. i = j; La valeur initiale de i est perdue !!! j = i i; } printf("Dans lordre croissant : %d, %d\n", i, j); _getch(); return 0; }
Analyse et programmation 1 - Techniques algorithmiques 19

10

Techniques algorithmiques usuelles


Lchange de variables
Implmentation fonctionnelle
int main() { int i, j, tmp; printf("Saisir 2 entier :"); scanf("%d%d", &i, &j); if (i > j) { tmp = i; 1. On conserve la valeur initiale de i dans tmp. i = j; 2. On copie la valeur de j dans i 2 i. 3. On copie la valeur initiale de i dans j. j = tmp; } 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 dlments par programme. E Exemples l


Protocole de communication :
le nombre de caractres dun message. le nombre de messages reus.

Caisse enregistreuse : nombre darticles.

Le comptage peut tre


Systmatique : prend en compte tous les objets objets. Slectif : teste une condition sur lobjet avant de le comptabiliser.

Analyse et programmation 1 - Techniques algorithmiques

21

11

Techniques algorithmiques usuelles


Le comptage - illustration int nombre_e; c a char c; printf("Saisissez une ligne de texte:\n"); nombre_e = 0; do { scanf("%c", &c); if ((c == 'e') || (c == 'E')) nombre_e++; nombre 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


Laccumulation

But : faire la somme dlments par programme. E Exemples l


Caisse de parking :
somme des pices de monnaie introduites par un client. somme des pices de monnaie dans la caisse.

Machine dassemblage
Quantit totale de colle dj utilise

Calcul de moyenne
En combinaison avec un comptage

Laccumulation peut tre


Systmatique : prend en compte tous les objets. Slective : teste une condition sur lobjet avant de le comptabiliser.
Analyse et programmation 1 - Techniques algorithmiques 23

12

Techniques algorithmiques usuelles


Laccumulation - 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); if (valeur piece >= 10) (valeur_piece somme += valeur_piece; else printf("piece refusee\n"); } printf("Prenez votre ticket\n");
Analyse et programmation 1 - Techniques algorithmiques 24

Techniques algorithmiques usuelles


Recherche dextremum

But : rechercher le plus petit ou le plus grand lment d une dune collection par programme. programme Exemples
Station mto, thermomtre lectronique de conglateur :
Mmoriser les tempratures minimales et maximales.

Systme dinformation de lcole


Trouver ltudiant le plus mritant

Analyse et programmation 1 - Techniques algorithmiques

25

13

Techniques algorithmiques usuelles


Recherche dextremum - illustration
int int int for { valeur; i; minimum, maximum; minim m ma im m (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


Rptitions imbriques

But :
Rpter plusieurs fois un traitement l i mme constit d ne pl sie rs n traitement, lui constitu dune rptition.

Exemples
Machine de soudage :
Produire 100 pices Pour chaque pice, effectuer 15 points de soudure.

Afficher les tables de multiplication p


10 tables de multiplication Pour chaque table, 10 multiplications.

Analyse et programmation 1 - Techniques algorithmiques

27

14

Techniques algorithmiques usuelles


Rptitions imbriques - illustration int i, j; for (i = 1; i <= 10; { printf("Table de for (j = 1; j <= printf("%d x printf("\n"); }

i++) %d\n", i); 10; j++) %d = %d\n", i, j, i * j);

Analyse et programmation 1 - Techniques algorithmiques

28

Techniques algorithmiques usuelles


Rptitions imbriques pige classique Utilisation de la mme variable pour 2 boucles imbriques
for (i = 1; i <= 10; i++) ( ; ; ) for (i = 1; i <= 5; i++) // Probleme ! { . . . . }

Ne pas confondre avec deux boucles conscutives


for (i = { . } for (i = { . } 1; i <= 5; i++) // pas de probleme . . . 1; i <= 5; i++) // pas de probleme . . .

Analyse et programmation 1 - Techniques algorithmiques

29

15

Quavons-nous appris ?
Comment formaliser un algorithme
Graphiq ement : organigramme str ctogramme Graphiquement organigramme, structogramme. Textuellement : pseudo code

Technique algorithmiques courantes


Comptage Accumulation Recherche dextremum Rptitions imbriques

Analyse et programmation 1 - Techniques algorithmiques

30

Vos questions

Analyse et programmation 1 - Techniques algorithmiques

31

16

Analyse et programmation 1 - Techniques algorithmiques

32

17