You are on page 1of 8

1AB

Langage C

2013-2014

Algorithmique : algorigrammes et pseudo-code


Introduction
La chane de dveloppement de programmes est synthtise par le schma de la page 13 du polycopi. Elle commence bien entendu par la position dun problme quon traduit gnralement par un cahier des charges. Lanalyse de ce cahier conduit au dveloppement dun algorithme. Ce nest quune fois celui-ci termin quon commence la phase de codage et enfin la phase de tests. Ainsi, il est important de noter que la construction dun algorithme - vient AVANT le codage (programmation dans un langage spcifique). - constitue une tape aussi, voire plus, importante que celle du codage. Un algorithme est une procdure de calcul bien dfinie qui prend en entre une valeur, ou un ensemble de valeurs, et qui donne en sortie une valeur, ou un ensemble de valeurs. Il est le fruit dune mthode logique de rsolution dun problme nonc, en vue dtre dvelopp dans un langage de programmation. Cest la suite logique des actions entreprendre pour aboutir la solution finale et donc construire un programme. La construction dun algorithme se fait indpendamment du langage de programmation, seules la logique et lefficacit du programme sont privilgies. Lalgorithme peut de reprsenter sous plusieurs formes : - graphique, on dispose dun algorigramme ou logigramme. - textuelle, on a alors un pseudo-code. Lobjectif de ce TD est de vous aider apprhender ces deux outils avant de vous lancer dans la programmation.

1/8

1AB A. Algorigrammes

Langage C

2013-2014

Limportance du dveloppement dun algorithme est telle quune norme a t dveloppe pour normaliser la faon de reprsenter un algorithme sous forme de logigramme (ou algorigramme). Il sagit de la norme ISO 5807. Elle permet de dcrire en dtail les diffrents symboles utiliser pour reprsenter un algorithme de manire normalise. Quiconque connat cette norme reconnatra aisment les symboles et comprendra lalgorithme. A.I. Structure basique dun algorigramme A la lecture de la dfinition dun algorithme, on comprend quun algorigramme a un dbut et une fin spars par une multitude dinstructions. Une instruction excute une opration ou un ensemble doprations visant modifier la valeur dune variable par exemple, ou encore la forme ou la place dune information. La norme ISO 5807 propose les lments graphiques visibles la figure 1.

Figure 1 : Algorigramme structure linaire

Tip 1 : Le dbut et la fin dun algorigramme sont tous deux reprsents par un rectangle aux coins arrondis. Il ne peut y avoir quun seul dbut, mais plusieurs fins sont possibles. Tip 2 : Une instruction se trouve lintrieur dun rectangle. Tip 3 : Les tapes de lalgorithme sont relies entre elles par des flches. Ces flches indiquent le sens dexcution du programme. Pour un lment considr comme une entre (exemple : lecture de la saisie dun clavier) ou une sortie (impression lcran), le symbole est un paralllogramme.

Figure 2 : Symbole pour une entre / sortie

Do it 1 : Convertir un algorithme simple en algorigramme


Construire lalgorigramme lalgorithme suivant. correspondant Un lve arrive lENSEA. Il consulte son emploi du temps, puis il cherche la salle de TD. Il entre et salue son professeur. Il sassoit, soulag de ne pas tre retard.

A.II.

Dfinition de variables

Une difficult essentielle dans llaboration dun algorithme est la dfinition des variables ncessaires et utiles au traitement. Les variables sont des zones rserves dans la mmoire de lordinateur. Leur taille et le codage binaire utilis pour lire ou crire les donnes dpendent du type de la variable. Toutes les donnes traites dans un programme sont localises dans des variables.

2/8

1AB

Langage C

2013-2014

La dclaration dune variable rserve un espace mmoire auquel on accde par le nom de cette variable. La valeur dune variable aprs sa dclaration est indfinie. En effet, lespace mmoire allou nest pas nettoy , et la variable rcupre ce qui tranait en mmoire . Il est donc important dinitialiser une variable aprs sa dclaration. DANS TOUTE LA SUITE, CHAQUE ALGORIGRAMME QUE VOUS CONSTRUIREZ DEVRA OBLIGATOIREMENT AVOIR POUR PREMIERE INSTRUCTION DEFINITION ET INITIALISATION DES VARIABLES . IL VOUS APPARTIENDRA EGALEMENT DE REFLECHIR SUR LES VARIABLES DONT VOUS AUREZ BESOIN. A.III. Branchements conditionnels : test et dcision

Llve prcdent a de la chance : il est arriv lheure. Mais que se passe-t-il si lenseignant a une montre qui avance de cinq minutes ? Le fait mme de poser la question introduit un branchement conditionnel ou un test : SI. Selon la valeur de lexpression logique (ou condition) teste (VRAI ou FAUX), le programme excute un groupe dinstructions donn. Comment construit-on cette condition ? En utilisant des oprateurs de comparaison coupls des oprateurs logiques. A.III.1. Apart sur la logique boolenne La logique boolenne est au cur du dispositif des tests. Une mauvaise valuation de la condition est la cause principale de dysfonctionnement des tests et donc du programme. A.III.1.1. Oprateurs de comparaison Les ordinateurs tant capables dinterprter exclusivement des 0 et des 1, les oprateurs de comparaison travaillent sur des nombres (entiers ou rels). Deux nombres A et B peuvent tre : - gaux - diffrents - A est suprieur (strictement ou gal) B - A est infrieur (strictement ou gal) B A.III.1.2. Oprateurs logiques Les trois oprateurs boolens couramment employs sont le ET, le OU et le NON. Le ET utilise deux oprandes. Son rsultat est VRAI quand les deux oprandes sont VRAI, FAUX sinon. A linverse, le OU est VRAI ds quun seul des deux oprandes est VRAI, et donc FAUX si les deux oprandes sont FAUX. Le NON donne le rsultat inverse de son oprande (et donc utilise un seul oprande). Dans le cas dun test sur des intervalles (valeur comprise entre deux bornes), il est ncessaire de combiner lutilisation des oprateurs de comparaison et des oprateurs logiques en crivant que la variable doit tre suprieure la borne infrieure et que la variable doit tre infrieure la borne suprieure. Do it 2 : Etablir des expressions logiques.
x suprieur ou gal 3 y compris strictement entre 1 et 8. Le contraire du test prcdent en utilisant le NON, puis sans utiliser le NON.

A.III.2. Symbole dun branchement conditionnel Le test, reprsent par un losange, possde une entre et deux sorties correspondant des alternatives, mais une et une seule sera active, dpendant de lvaluation de la condition.

3/8

1AB

Langage C

2013-2014


Figure 3 : Symbole d'une structure conditionnelle

Quelques rgles simples de graphisme sont respecter : - les traits des flches sont horizontaux ou verticaux ; pas de diagonale. - Les directions des alternatives VRAI doivent toutes tre identiques. On ne peut pas mettre le cas VRAI vers le bas pour une condition 1, puis vers la droite pour une condition 2. Do it 3 : Construire des algorigrammes avec branchement conditionnel.
Noubliez pas de rflchir sur les variables utiles. Etudier le signe dun nombre. Etudier la parit dun nombre. Etudier la responsabilit du port de ceinture. Rappelons les rgles suivantes concernant le port obligatoire de la ceinture : - Le conducteur ne portant pas la ceinture se voit retirer 3 points de permis et cope une me amende de 4 classe. - La personne ne portant pas la ceinture est mineure. Le conducteur cope dune amende me de 4 classe. - La personne ne portant pas la ceinture est me majeure. Celle-ci cope dune amende de 4 classe.

A.IV.

Boucles et rptitions

Supposons maintenant que lenseignant veut pointer les lves. Il dispose dune liste quil aura pris soin dimprimer avant le TD qui lui indique le nombre et les noms des lves. Do it 4 : Effectuer un pointage des lves.
Supposons pour une question de simplicit que les lves soient au nombre de 4, appels A, B, C et D. En utilisant uniquement des structures conditionnelles, dessiner lalgorigramme permettant de pointer les lves.

Question 1 : Quel test avez-vous effectu aprs chaque lve ? En existe-t-il au moins un autre possible ? Votre algorigramme ainsi dfini comporte certainement des squences qui se rptent. Afin de simplifier la visibilit, et parce que la plupart des langages de programmation le permettent, on peut introduire une boucle. Dans un algorigramme, cela consiste simplement rediriger une flche vers une tape antrieure. Bien entendu, pour que lalgorithme puisse atteindre son tat final, la boucle doit pouvoir sarrter et donc valider (ou ne plus valider) une condition. Il est trs important de noter que lvolution de la variable teste par la boucle sapproche (et non sloigne) de la condition darrt. Chaque passage dans la boucle sappelle une itration.

4/8

1AB

Langage C

2013-2014

Figure 4 : Boucle

Do it 5 : Effectuer un pointage des lves (2).


Simplifier lalgorigramme prcdent avec une boucle.

Question 2 : Quels sont les changements, autres que la suppression des passages redondantes et lintroduction de la boucle, que vous avez d apporter votre algorigramme, en particulier au niveau des tests ? Considrons maintenant que lenseignant soit suffisamment tte-en-lair pour oublier la liste quil a imprime. Il ne connat ni les noms des lves, ni leur nombre. Question 3 : Quel test lui permettrait alors de savoir sil a termin le pointage ? Ainsi, comme on peut le voir dans cet exemple, on peut distinguer deux types de boucles : - dterministe : on connat lavance le nombre ditrations, et donc sen servir comme condition darrt ; - non dterministe : on ne connat pas a priori le nombre ditrations. Certes, un test permettra de sortir de la boucle, mais le nombre ditrations peut varier selon les donnes dentre. Tip 4 : Dans le cas dune boucle dterministe, on peut tablir une condition sans faire appel au nombre ditrations. La connaissance du nombre ditrations permet de rendre le test plus simple. Do it 6 : Construire des algorigrammes avec boucles.
Dans chaque cas qui suit, rflchir aux variables utiles, dire sil sagit dune boucle dterministe ou non et tablir un lalgorigramme correspondant. Additionner les cent premiers entiers. Calculer x puissance y, x et y tant deux entiers donns. Calculer la factorielle de lentier n. Trouver les puissances de 2 encadrant un nombre entier. Dcomposer un nombre entier en facteurs premiers. Soient x la variable contenant lentier donn et n une variable initialise 2. Tant que x est diffrent de 1, - si le nombre x est divisible par n, affecter x la valeur x divise par n et afficher n ; - sinon, incrmenter n de 1 ; Calculer le PGCD de deux nombres. Algorithme dEuclide : Lalgorithme continue tant que le reste est diffrent de zro, et le PGCD est le dernier reste non nul.

5/8

1AB
A.V. Sous-programmes : modularit

Langage C

2013-2014

A.V.1. Fonctionnement dun sous-programme Un sous-programme possde la mme structure quun programme. Il dclare des variables (dites locales), que lui seul connat, et effectue des traitements dans sa partie instructions. Chaque sous-programme implmente un calcul et participe au traitement gnral du programme. Les autres sous-programmes ignorent son mode de fonctionnement interne. Seule linformation change via les arguments dentre et de retour des modules de traitement est connue. Cette segmentation des traitements amliore le fonctionnement global du programme en ddiant des modules de traitement des tches particulires, et facilite ainsi le dveloppement qui se fait par modules. De plus, il devient possible doptimiser le fonctionnement interne dun module dans intervenir sur le reste du programme. Dans la phase de conception de lalgorithme global, le dveloppeur doit dfinir clairement la liste des modules de traitement, leur rle respectif et leurs interactions rciproques.


Figure 5 : Structure d'un sous-programme et appel du sous-programme dans le programme principal

Lappel du sous-programme se fait en utilisant le symbole de deux rectangles encastrs. Do it 7 : Dterminer les N premiers nombres premiers. Pour ce faire, on construit un sous-programme qui teste si un nombre est premier, puis on lutilise pour afficher ces N premiers nombres premiers.
Tester si un nombre est premier. Reprendre lalgorigramme qui dcompose un nombre entier en facteurs premiers. Le nommer Premier. Le modifier pour quil retourne 1 si le nombre dcomposer est premier et 0 sinon. Ecrire lalgorigramme du programme principal qui affiche les N premiers nombres premiers en utilisant le sous-programme Premier.

A.V.2. Un saut dans la complexit algorithmique Le but de tout algorithme est de proposer une solution un problme pos en minimisant le temps de traitement. Celui-ci dpend directement du nombre de calculs mis en uvre. La complexit algorithmique informe sur le nombre de calculs, et donc sur la performance dun programme. Un cours dalgorithmique avanc traitera de ces problmes dans une anne ultrieure pour les intresss. Pour lheure, il est intressant et important de noter que la modularit dun programme permet damliorer la complexit algorithmique de faon indpendante pour chaque module, contribuant grandement amliorer la complexit de lensemble.

6/8

1AB

Langage C

2013-2014

Do it 8 : Dterminer les N premiers nombres premiers (2). Pour ce faire, on construit un sous-programme qui teste si un nombre est premier, puis on lutilise pour afficher ces N premiers nombres premiers.
Amliorer le sous-programme Premier. Pour ce faire, il est important de remarquer que 2 est le seul nombre premier pair. Il est donc inutile, lorsquon cherche les facteurs premiers de sintresser aux nombres pairs. Amliorer le programme principal. La remarque est identique, le nombre 2 est le seul nombre premier pair. Reprendre lalgorigramme Premier et le modifier afin de diminuer les calculs. Reprendre lalgorigramme principal et le modifier afin de diminuer les calculs.

Question 4 : Combien de calculs ont t pargns ? Quel est le gain en temps ?

B. Pseudo-code ou mtalangage
Le pseudo-code ou mtalangage permet la description crite dun algorithme sans rfrence un langage de programmation en particulier. Ainsi, de mme que pour un algorigramme, le mtalangage saffranchit des contraintes de programmation pour sintresser lalgorithme. Bien entendu, il utilise les mmes structures que celles dcrites dans la partie algorigramme. Nous allons les passer en revue, puis donner un exemple dalgorithme en pseudo-code. B.I. Traitements logiques en pseudo-code Affectation dune variable : Variable x initialise 5 Entre dun nombre x partir du clavier Sortie dun nombre x sur lcran Branchement conditionnel SI x 5

SAISIR x AFFICHER x SI <expression du test> ALORS instruction(s) FINSI Branchement conditionnel SISINON SI <expression du test> ALORS instruction(s) SINON instruction(s) FINSI Branchement conditionnel CAS OU : CAS OU x EGAL La variable x prend un nombre fini de valeurs valeur 1 : instruction(s) discrtes. finValeur valeur 2 : instruction(s) finValeur valeur k : instruction(s) finValeur valeur n : instruction(s) finValeur FINCASOU Boucle dterministe POUR x VARIANT DE val_initial A val_finale instruction(s) FINPOUR Boucle non dterministe TANT QUE <expression du test> FAIRE instruction(s) FINTANTQUE

7/8

1AB
B.II. Exercices

Langage C

2013-2014

Do it 9 : Convertir un algorigramme en pseudo-code.


Convertir lalgorigramme tudiant la parit dun nombre. Convertir lalgorigramme du PGCD. Convertir lalgorigramme amlior des N premiers nombres premiers.

Conclusion
Dfinir correctement un algorithme est donc primordial, car ce sont les solutions quil propose qui seront programmes. La qualit et la rapidit du programme final dcoulent directement de lalgorithme. Des outils tels que les algorigrammes et le pseudo-code permettent den faciliter la construction en saffranchissant des problmes de code.

8/8

You might also like