Vous êtes sur la page 1sur 14

e1 Ch ap itr c

Environnement algorithmique et conventions


Un algorithme est un maillon de la chane de dveloppement dune application. Il est le lien indispensable entre lanalyse et le dveloppement nal. Ce chapitre prsente le rle dun algorithme dans cette chane de production, et les conventions syntaxiques utilises pour son criture. Il aborde galement les notions de performances et de gnie logiciel, qui servent souvent de guides dans la phase de conception algorithmique.

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Algorithmique

1. L tapes de dveloppement Les dune application d


Lcriture dun programme dans un langage de programmation nest que ltape finale dun dveloppement qui se droule en trois phases : lanalyse, lalgorithme et la programmation.

1.1. Lanalyse
Le but de tout dveloppement est de fournir une solution informatique un problme donn. La premire tape est lanalyse du problme. Elle consiste, explorer le domaine dapplication pour en dduire les contraintes et les limites de ltude, dfinir les principales fonctionnalits qui devront tre couvertes par le logiciel, mettre en vidence les problmes connexes, faire linventaire des acteurs (utilisateurs, gestionnaires, etc.) et en dduire linterface dexploitation du produit, etc. Lanalyse tend cerner compltement le sujet et apporter des solutions aux problmes dvoils par ltude. Lanalyse se termine gnralement sur des considrations plus techniques qui font le lien avec lalgorithme. Il sagit de lanalyse des donnes qui aboutit leur modlisation, de la dfinition des modules de traitement, ainsi que leurs interactions rciproques qui dbouchent sur la cration des sous-programmes. Lanalyse conditionne le dveloppement futur, car ce sont les solutions proposes cette tape qui seront programmes. Une mauvaise analyse produira un logiciel mdiocre ou qui ne rpondra pas aux attentes initiales, quelle que soit la qualit de lalgorithme ou de la programmation. Voici deux exemples danalyses partielles. Le premier montre lincidence de ltude du domaine dapplication sur le rsultat de lanalyse. Le second propose une analyse des donnes et montre comment les structurer en fonction des traitements effectuer. Lanalyse du premier exemple va voluer au fur et mesure que les bonnes questions seront souleves. Elle produira au final un programme trs diffrent dans sa complexit. Prenons le problme de linterprtation du numro de Scurit sociale (sans la cl finale). La signification des champs de ce numro est indique la figure 1.1.
Figure 1.1 Linterprtation dun numro de Scurit sociale. Anne de naissance Dpartement de naissance Numro d'ordre

2 60 07 75 028 090
Sexe Mois de naissance Commune de naissance

Une premire analyse de ce numro montre quil sagit dune femme, ne en 1960, au mois de juillet, Paris. Or, linterprtation du quatrime lment de cet exemple est fausse ! Cette personne est ne dans le dpartement de la Seine qui, en 1960, regroupait Paris et les dpartements limitrophes (Val-de-Marne, Val dOise, etc.). Cette remarque soulve dautres questions qui vont compliquer lanalyse, en intgrant un volet historique : Comment le dcoupage des dpartements a-t-il volu (Ile-de-France, Corse, etc.) ?
2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Comment le problme des centenaires est-il rgl ?

Lanalyse simpliste du dbut aurait conduit crire un programme ne traitant quune partie de la problmatique. Le problme est en ralit beaucoup plus complexe quil ny parat. Lerreur quil ne faut pas faire pendant la phase danalyse est dapporter des solutions bases sur ses certitudes, au lieu de se poser dabord des questions. Le second exemple montre comment, partir de lanalyse des donnes, on peut aboutir leur modlisation. Lexemple tudi est celui dune course hippique. La premire question se poser est quest-ce quun cheval ? . La rponse nest pas lie la nature de lanimal, mais aux actions entreprendre pour grer une course. On peut les rsumer : indiquer la liste des chevaux au dpart de la course ; affecter le temps de chaque cheval la fin de la course ; afficher lordre darrive. On peut dduire quune donne reprsentant un cheval doit contenir : le nom du cheval ; le numro du dossard ; le temps darrive ; le classement. On peut galement ajouter le nom du jockey, celui du propritaire, et le montant des gains si on dsire ajouter un volet financier la gestion de la course. La figure 1.2 prsente une modlisation des donnes de la course hippique. Les chevaux sont grs comme une liste, o chaque lment est une structure contenant le nom du cheval, le numro du dossard, le temps effectu durant la course et le classement final. La liste peut tre reprsente sous la forme dun tableau, o chaque case contient toute linformation dun cheval, ou bien sous la forme dlments distincts lis entre eux par la connaissance de llment prcdent et suivant (liste chane de structures). La modlisation des donnes est ensuite suivie par la description de leurs traitements, ce qui est le but de lalgorithme.
Figure 1.2 Modlisation des donnes dune course hippique.
Liste des chevaux

Structure Cheval Nom Dossard Temps Classement

Flche d'argent 21 1' 32" 5


3

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Chapitre 1 Environnement algorithmique et conventions

Quen est-il des personnes nes dans les colonies franaises avant leur indpendance ?

Algorithmique

1.2. Lalgorithme
Le rle de lalgorithme est avant tout dorganiser et de structurer lensemble des solutions apportes par lanalyse pour aboutir la solution globale. Il doit surtout prsenter la logique aboutissant au rsultat final et tre dissoci de laspect technique des langages informatiques. Il est gnralement prsent en pseudo-langage (langage simplifi), ce qui facilite sa traduction dans un langage de programmation. Voici lalgorithme interprtant le numro de Scurit sociale, correspondant une analyse (sans laspect historique).
Programme Num_Sec_Soc Dclarations Variables Num_Sec, Dpt, Libell, Nom_Mois en Chanes_de_Caractres Variables Sexe, Anne, Mois, Commune, Num_Ordre en Entier Dbut crire (Entrez votre numro de Scurit sociale :) Lire(Num_Sec) Sexe Conversion_En_Entier(sous_chane(Num_Sec,1,1) Si (Sexe = 1) alors Libell "Monsieur" Sinon Libell "Madame" Finsi Anne Conversion_En_Entier(sous_chane(Num_Sec,2,2)) Anne Anne + 1900 Mois Conversion_En_Entier(sous_chane(Num_Sec,4,2)) Selon Mois Faire Cas 1 : Nom_Mois "Janvier" Cas 2 : Nom_Mois "Fvrier" Cas 3 : Nom_Mois "Mars" Cas 4 : Nom_Mois "Avril" Cas 5 : Nom_Mois "Mai" Cas 6 : Nom_Mois "Juin" Cas 7 : Nom_Mois "Juillet" Cas 8 : Nom_Mois "Aot" Cas 9 : Nom_Mois "Septembre" Cas 10 : Nom_Mois "Octobre" Cas 11 : Nom_Mois "Novembre" Cas 12 : Nom_Mois "Dcembre" FinSelon Dpt sous_chane(Num_Sec,6,2) Commune Conversion_En_Entier(sous_chane(Num_Sec,8,3)) Num-Ordre Conversion_En_Entier(sous_chane(Num_Sec,11,3)) crire ("Bonjour : ", Libell) crire ("Vous tes n en : ", Anne) crire ("Au mois de : ", Nom_Mois) crire ("Dans le dpartement : ", Dpt) crire ("Dans la commune : ", Commune) crire ("Avec le numro d'ordre : ", Num_Ordre) Fin

La syntaxe du pseudo-langage est librement choisie par le dveloppeur. Cependant, elle respecte certaines rgles et conventions usuelles qui sont dcrites dans ce chapitre.

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

1.3. Lcriture du programme dans un langage de programmation


Une fois lalgorithme crit, il faut le traduire en un programme source. Cela consiste crire un fichier texte contenant la traduction de lalgorithme dans un langage de programmation. Le programme source est ensuite traduit en langage binaire du processeur grce au compilateur. Le fichier rsultat de cette opration est le programme excutable. Dans labsolu, le dveloppeur doit choisir le langage de programmation le plus adapt au domaine dapplication et aux contraintes lies lalgorithme. En effet, les langages de programmation ont t crs pour rpondre des besoins spcifiques. Par exemple, le langage Fortran est ddi au calcul scientifique, le langage C est polyvalent et il excelle dans les applications systmes et rseaux, le langage Java est conu pour les dveloppements lis au Web, etc. En ralit, le dveloppeur choisit le langage quil connat le mieux ou, de manire plus pragmatique, pour lequel il possde un compilateur. Ce nest donc pas toujours le langage le mieux adapt aux spcificits du dveloppement qui est utilis. Voici le programme source numsecsoc.c crit en langage C qui correspond lalgorithme du numro de Scurit sociale. La syntaxe du langage C nadmet aucun caractre accentu dans le nom des variables. La variable Libell de lalgorithmique est ainsi crite Libelle dans le programme C.

C
/* numsecsoc.c */ #include <stdio.h> main() {/* --- dclarations des variables --- */ char Num_Sec[14], Libelle[9], Nom_Mois[10], Dept[3] ; int Sexe, Annee, Mois, Commune, Num_Ordre ; /* --- instructions --- */ /* saisie du numro sous la forme dune chane */ printf(Entrez votre numro de Scurit sociale : ) ; scanf(%s,Num_Sec) ; /* rcupration du numro 1 ou 2 du Sexe */ Sexe = Num_Sec[0]-48 ; /* Affectation du Libell */ if (Sexe == 1) strcpy(Libelle,Monsieur) ; else strcpy(Libelle,Madame) ; /* rcupration de lanne de naissance */ Annee = ((Num_Sec[1]-48)*10) + (Num_Sec[2]-48) ; Annee = Annee + 1900 ; /* rcupration du mois de naissance */ Mois = ((Num_Sec[3]-48)*10) + (Num_Sec[4]-48) ; switch (Mois) { case 1 : strcpy(Nom_Mois,Janvier) ; break ; case 2 : strcpy(Nom_Mois,Fvrier) ; break ; case 3 : strcpy(Nom_Mois,Mars) ; break ; case 4 : strcpy(Nom_Mois,Avril) ; break ; case 5 : strcpy(Nom_Mois,Mai) ; break ;

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Chapitre 1 Environnement algorithmique et conventions

Algorithmique

case 6

: strcpy(Nom_Mois,Juin) ; break ; case 7 : strcpy(Nom_Mois,Juillet) ; break ; case 8 : strcpy(Nom_Mois,Aot) ; break ; case 9 : strcpy(Nom_Mois,Septembre) ; break ; case 10 : strcpy(Nom_Mois,Octobre) ; break ; case 11 : strcpy(Nom_Mois,Novembre) ; break ; case 12 : strcpy(Nom_Mois,Dcembre) ; break ; } /* rcupration du dpartement */ Dept[0]=Num_Sec[5] ; Dept[1]=Num_Sec[6] ; Dept[2]=\0 ; /* rcupration de la Commune */ Commune=((Num_Sec[7]-48)*100)+((Num_Sec[8]-48)*10)+(Num_Sec[9]-48) ; /* rcupration du numro dordre */ Num_Ordre=((Num_Sec[10]-48)*100)+((Num_Sec[11]-48)*10)+(Num_Sec[12]-48); /* Afchage des rsultats */ printf(Bonjour %s\n,Libelle) ; printf(Vous tes n en : %d\n,Annee) ; printf(Au mois de : %s\n,Nom_Mois) ; printf(Dans le dpartement : %s\n,Dept) ; printf(Dans la commune : %d\n,Commune) ; printf(Avec le numro dordre : %d\n,Num_Ordre) ; }

La compilation de ce programme est obtenue par la commande suivante :


$ make numsecsoc

Voici lexcution du logiciel (fichier excutable) numsecsoc produit par la compilation prcdente (le caractre $ reprsente le prompt du systme UNIX) :
$ numsecsoc Entrez votre numro de Bonjour Vous tes n en Au mois de Dans le dpartement Dans la commune Avec le numro dordre Scurit sociale : 1650475110019 Monsieur : 1965 : Avril : 75 : 110 : 19

2. Le pseudo-langage L
6

Le pseudo-la pseudo-langage nest pas un langage normalis. Chaque dveloppeur peut dfinir son propre langage et ses conventions syntaxiques. Il est important de prciser son rle et les conventions habituellement rencontres.

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

2.1. Son rle


Le but de ce langage est de simplifier lcriture du programme en saffranchissant des contraintes syntaxiques lies aux langages de programmation, et den souligner sa logique. Si le pseudo-langage, par sa simplicit, aide prsenter lalgorithme, il sert aussi formaliser plus clairement la structure du programme. Le pseudo-langage doit reflter, le plus possible, les instructions couramment rencontres dans les diffrents langages de programmation. Sans tre limage dun langage spcifique, il doit nanmoins tre facilement traduisible dans diffrents langages, ce qui suppose lutilisation dune syntaxe proche de ce que les langages de programmation proposent gnralement.

2.2. Conventions syntaxiques


Mme si chaque dveloppeur dfinit son propre pseudo-langage, certaines conventions sont couramment employes. Nous en dtaillons quelques-unes, partir de lexemple prsent prcdemment. Les autres conventions utilises dans cet ouvrage seront dcrites au fur et mesure de leur emploi.

La structure du programme
Un programme est structur en une partie dclaration et une partie instruction. Mme si tous les langages ne proposent pas une structure rigoureuse, il est prfrable de la prsenter dans lalgorithme. Les mots cls sont Programme pour le dbut du programme, Dclarations pour la dclaration des variables, et Dbut puis Fin pour la partie instruction.
Programme Num_Sec_Soc Dclarations Variables Num_Sec, Dpt, Libell, Nom_Mois en Chanes_de_Caractres Variables Sexe, Anne, Mois, Commune, Num_Ordre en Entier Dbut crire (Entrez votre numro de Scurit sociale :) ... Fin

Les entres/sorties
Les instructions qui effectuent laffichage lcran et la saisie au clavier sont respectivement crire() et Lire() . La premire instruction affiche un message lcran, la seconde saisit une valeur quelle range dans la variable Num_Sec.
crire (Entrez votre numro de Scurit sociale :) Lire(Num_Sec)

Laffectation
Laffectation dune valeur ou du rsultat dun calcul dans une variable est reprsente par la flche . Le calcul droite de la flche est affect la variable situe gauche.
Anne Anne + 1900

Les instructions composes


Les instructions composes se terminent gnralement par un mot cl qui dpend de linstruction. Ainsi, le test Si se termine par FinSi , et la boucle Tant que par FinTantQue .
2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Chapitre 1 Environnement algorithmique et conventions

Algorithmique

Si (Sexe = 1) alors Libell "Monsieur" Sinon Libell "Madame" FinSi

Les sous-programmes
Les sous-programmes sont les modules de traitement. Leur nom reflte gnralement leur rle, et leurs arguments indiquent sur quelles donnes ils travaillent. La fonction sous_chane() donne en exemple extrait une partie de la chane Num_sec, partir du caractre 1, sur 1 caractre. La fonction Conversion_En_Entier() convertit un caractre (par exemple 2) en son quivalent entier (2).
Sexe Conversion_En_Entier(sous_chane(Num_Sec,1,1)

3. Le gnie logiciel L
Le gnie logi logiciel est un concept complexe qui regroupe des notions et des mthodes permettant de concevoir un logiciel de qualit. Nous nallons pas dtailler ici ses concepts, mais rappeler quelques rgles de bon sens qui en guident la pratique.

3.1. La modlisation des donnes


Tout dveloppement doit commencer par ltude des donnes. Cest le rle de lanalyse des donnes. La gestion dune base de noms de personnes dpend, par exemple, de la nature des noms et de leur taille maximale. Une tude qui porterait uniquement sur des noms simples comme Dupont dboucherait sur un logiciel incapable de grer les noms composs comme De la Fontaine (lespace est un sparateur gnrique entre les mots). Dautre part, la structure des donnes est souvent dduite des traitements. Cest lexemple de la course hippique, o la modlisation dun cheval dpend des actions effectuer pour grer la course (voir figure 1.2). Une mauvaise analyse des donnes aboutit un logiciel incomplet, ou sa rcriture partielle si la structure des donnes doit tre modifie.

3.2. La modularit du programme


Un programme doit organiser le traitement global en sappuyant sur des modules de traitement autonomes. Chaque module est une bote noire ; son fonctionnement interne est invisible aux autres modules. Il travaille sur les donnes fournies au moment de lappel, et retourne le rsultat du traitement. Lavantage de cette modularit est la possibilit de modifier le traitement interne dun des modules par un algorithme plus performant, sans intervenir sur le reste du programme. Ainsi, les diffrents modules de traitement possibles dans le cas de la course hippique sont par exemple : saisie_chevaux() qui met jour le nom et le dossard des chevaux, saisie_des_temps() qui renseigne le champ Temps de chaque cheval larrive, tri_chevaux() qui tablit le classement, et affichage_chevaux() qui affiche les informations des chevaux.

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

3.3. La lisibilit du programme


Un programme doit tre lisible pour vous, mais aussi pour les autres. Il nest pas rare quun dveloppement initial soit modifi par dautres personnes. Un moyen simple dassurer une bonne lisibilit est dutiliser abondamment les commentaires, et de choisir avec soin les noms des variables et des procdures afin quils refltent leur rle. Indiquez galement en haut du programme les diffrentes volutions du logiciel avec le nom du programmeur, la date de modification et la modification apporte. Enfin, la structure du programme doit tre visible au premier coup dil. Il faut prsenter le programme avec indentation, cest--dire dcaler de quelques espaces le dbut des instructions internes une boucle ou un test pour faire apparatre leur niveau dimbrication.

3.4. Privilgier les solutions simples


Les solutions les plus simples sont les meilleures. Nous aurons loccasion dans cet ouvrage de dmontrer quen rflchissant plus longtemps sur les donnes, on trouve souvent un algorithme plus simple et plus efficace. Malheureusement, les solutions simples sont plus difficiles trouver car elles ncessitent une rflexion approfondie. Ce nest quune fois trouves quelles deviennent simples voire mme videntes. Le principal dfaut des programmeurs dbutants est de se jeter sur des solutions bases sur des techniques de programmation, plutt que de privilgier la rflexion, et donc lalgorithmique.

3.5. Lutilisation de conventions dcriture


Le dveloppement dun programme peut devenir fastidieux si aucune mthode nest utilise. Pour gagner du temps et obtenir une meilleure lisibilit, il faut dfinir des conventions dcriture. On peut par exemple crire les noms des constantes en majuscules, comme PI, ou utiliser des libells de variables plus clairs, comme nombre_de_mois ou NombreDeMois.

4. La performance algorithmique L
Un algorithme doit proposer une solution logique un problme donn, mais ce nest algorithm pas sa seule finalit. Il doit galement fournir le rsultat rapidement. Il est possible de concevoir une solution qui savre catastrophique en temps de calcul. Or, quoi sert un algorithme qui donne le rsultat au bout dun temps interminable ? Cest lune des principales diffrences entre les mathmatiques et linformatique ; en informatique, on effectue rellement les calculs, do limportance de contrler leur nombre et leur temps dexcution. Cet aspect performance est lobjectif principal des algorithmes prsents en deuxime partie de cet ouvrage : trouver des traitements optimiss. La performance dun algorithme porte sur deux aspects, le temps de calcul et lespace mmoire. Dans les deux cas, on tente de minimiser le volume du traitement. Malheureusement, ces deux points sopposent. Il faut souvent utiliser plus de mmoire

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Chapitre 1 Environnement algorithmique et conventions

Algorithmique

pour gagner en temps de calcul, ou crire plus dinstructions, et donc faire plus de calculs, pour aboutir une gestion mmoire optimale.

Rsum
Un algorithme organise les solutions prconises dans la phase danalyse. Il est souvent crit en pseudo-langage car il doit prsenter la logique du programme sans intgrer les aspects techniques des langages de programmation. Lanalyse, est primordiale, car ce sont les solutions prconises ce niveau qui seront programmes. La modlisation des donnes dbouche sur le dbut de lalgorithme qui formalise les donnes et les traitements associs. La phase finale dcriture dans un langage spcifique nest quune tape technique. Lcriture de lalgorithme requiert une mthodologie que lon retrouve dans le concept de gnie logiciel. Il faut dfinir clairement les modules de traitement et sastreindre une certaine rigueur de dveloppement pour aboutir un programme lisible et volutif. Dautre part, la conception dalgorithmes doit tendre optimiser le temps de calcul, ou lespace mmoire, pour produire des programmes performants.

10

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Problmes et exercices
Le premier exercice montre comment utiliser le pseudo-langage. Le second exercice porte sur la modlisation des donnes et sur la conception de modules autonomes.

Exercice 1 : Syntaxe algorithmique


1. crivez lalgorithme qui calcule la mensualit dun crdit immobilier taux fixe. Il demandera le montant du capital emprunt, le nombre dannes et le taux annuel. La formule de calcul est la suivante : N (1 + T) M = C T N (1 + T) 1 O M est la mensualit, C, le capital emprunt, T, le taux mensuel/(taux annuel/12), N, le nombre de mois/(nombre dannes/12). 2. crivez le programme C qui implmente cet algorithme.

Solution
1 L l ith emprunt montre comment utiliser le pseudo-langage pour crire un pro1. Lalgorithme gramme. Le calcul de la mensualit le dcompose en trois calculs plus simples.
Calcul1 = CT Calcul2 = (1+T)N Calcul3 = (1+T)N 1

La syntaxe ** reprsente le calcul de la puissance. Les commentaires sont nots comme dans le langage C /* */ .
Programme emprunt Dclarations Variables Mensualit, Capital en Variables TauxMensuel, TauxAnnuel en Variables Calcul1, Calcul2, Calcul3 en Variables NbAN, NbMois en Dbut /* Saisie des donnes initiales */ crire (Montant du capital emprunt :) Lire(Capital) crire (Nombre dannes :) Lire(NbAn) crire (Taux Annuel (exemple 5,5 %):) Lire(TauxAnnuel) /* Calculs */ NbMois NbAn*12 TauxMensuel (TauxAnnuel/100)/12 Rel Rel Rel Entier

11

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

calcul1 Capital*TauxMensuel calcul2 (1+TauxMensuel)**NbMois calcul3 calcul2-1 Mensualit calcul1*(calcul2/calcul3) /* Afchage du rsultat */ crire ("Mensualit :",Mensualit) Fin

2. Le programme emprunt.c utilise la fonction pow() qui calcule la puissance, ce qui implique lutilisation du fichier den-tte math.h et la compilation avec loption lm.

C
/* emprunt.c */ #include <stdio.h> #include <math.h> main() { oat Mensualite,Capital ; int NbAn,NbMois ; oat TauxMensuel,TauxAnnuel ; oat calcul1,calcul2,calcul3 ; /* Saisie des donnes initiales */ printf(Capital :) ; scanf(%f,&Capital) ; printf(Nombre dannes :) ; scanf(%d,&NbAn) ; printf(Taux Annuel (5.5) :) ; scanf(%f,&TauxAnnuel) ; /* Calculs */ NbMois = NbAn*12 ; TauxMensuel = (TauxAnnuel/100)/12 ; calcul1 = Capital*TauxMensuel ; calcul2 = pow((1+TauxMensuel),NbMois); calcul3 = calcul2-1; Mensualite = calcul1*(calcul2/calcul3) ; /* Afchage du rsultat */ printf(Mensualit : %8.2f\n,Mensualite); }

La commande de compilation est :


$ cc -o emprunt emprunt.c -lm

Le rsultat de ce programme est :


$ emprunt Capital :100000 Nombre dannes :10 Taux Annuel (5.5) :4.65 Mensualit : 1043.63

12

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

Exercice 2 : Modlisation de donnes


Faites la modlisation des donnes dun programme de gestion du stock dun magasin darticles de sport. 1. Faites linventaire des actions courantes de gestion. 2. Dduisez-en la structure dun article de sport.

Solution
C t Cet exercice na pas pour objet de rsoudre le problme complexe de la gestion de stock i dans sa totalit, mais de montrer comment faire une modlisation des donnes selon une liste dactions entreprendre. La modlisation prsente peut donc tre complte. 1. Rsumons la gestion dun stock darticles de sport six grandes actions : lajout dun nouvel article, la suppression dun article, la modification dun article, la vente dun article, la commande dun article, laffichage du stock. La premire action correspond au rfrencement dun nouvel article au catalogue du magasin. La deuxime action correspond son retrait. La troisime action permet de modifier les informations de larticle, soit son libell sil est erron, son prix de vente pour les priodes de soldes, ou le nombre dexemplaires de cet article. Cette dernire action correspond linventaire. La modification dun article suppose de pouvoir le trouver grce sa rfrence, donc de disposer dun module de recherche qui travaille partir du numro de larticle, et qui retourne ladresse en mmoire o est rang larticle. La vente dun article consiste trouver larticle dans le stock, extraire son prix de vente, et diminuer le stock du nombre dexemplaires vendus. La commande dun article peut tre manuelle ou automatique. La commande manuelle est calque sur le module de modification appliqu la quantit. La commande automatique est dclenche quand la quantit en stock est infrieure un certain seuil prdfini. Enfin, laffichage du stock peut tre slectif (par article recherch), ou selon un critre comme un prix minimal ou maximal. Dans cette tude, certaines informations connexes ne sont pas traites, comme la base des fournisseurs ou la gestion des vendeurs. Enfin, le stock est conserv dans un fichier, ce qui suppose quau lancement du logiciel, le fichier contenant le stock est totalement charg en mmoire, et qu larrt du logiciel, le stock qui se trouve en mmoire est sauvegard dans le fichier dorigine. Les modules de chargement et de sauvegarde ne sont pas prsents, car ils nont pas dincidence sur la modlisation de la donne article . La figure 1.3 prsente lorganisation des diffrents modules de traitement, autour du stock du magasin. Le module recherche_article() est utilis par la majorit des modules, il doit tre optimis. Les algorithmes de tris et de recherches sont tudis
2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry

13

aux chapitres 6 et 7. Tous les modules partagent une mme donne, le stock du magasin, mais chaque module travaille de manire autonome.
Figure 1.3 Gestion du stock dun magasin.
Poste de gestion

commande_article() Commande d'un article

ajout_articles() Boucle de saisie des nouveaux articles

retrait_articles() Boucle de retrait des articles

modif_article() Modification d'un article

affichage() Affichage d'un article. Affichage du stock

Stock des articles

vente_article() Boucle de vente d'articles

recherche_article() Recherche d'un article

Caisse

2. Selon les actions qui viennent dtre prsentes, la structure dun article de sport doit contenir au minimum les lments (champs) suivants : rfrence de larticle (numro), libell de larticle (chane de caractres), prix dachat (rel), prix de vente (rel), quantit en stock (entier), seuil de commande automatique (entier), quantit prdfinie pour une commande automatique (entier), rfrence du fournisseur (entier). Le stock sera une collection darticles grs en mmoire sous la forme dun tableau ou dune liste dlments. Ces types de donnes sont tudis au chapitre 3.

14

2010 Pearson Education France Algorithmique en C, 2e d Jean-Michel Lry