Vous êtes sur la page 1sur 39

Michel Murgulescu

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Donnes de catalogage avant publication (Canada) Murgulescu, Michel Algorithme et langage Turbo-Pascal 7.0 Comprend des rf. bibliogr. et un index isbn 2-921180-63-4 1. Turbo Pascal (Langage de Programmation) 2. Pascal (Langage de programmation). 3. Programmation structure. 1.Titre QA76.73.P38M87 2000 005.133 C99-941154-2

Copyright Loze-Dion diteur inc. Loze-Dion diteur C.P. 47510, comptoir postal Plateau Mont-Royal Montral (Qubec) H2H 3S8 Tlphone : (514) 953-6877 Tlcopieur : (514) 953-8703 courriel lde@qc.aira.com Tous droits rservs. On ne peut reproduire, enregistrer, ni diffuser aucune partie du prsent ouvrage sous quelque forme ou par quelque procd que ce soit sans avoir une autorisation crite de lditeur. Dpt lgal troisime trimestre 2000 BNQ BNC ISBN 2-921180-63-4 1234567890 UCI 9876543210

Table des matires

Chapitre 1

Introduction
1.1 1.2 Critres gnraux Critres techniques

7
8 11

Chapitre 2

lments danalyse et de rsolution de problmes


2.1 2.2 2.3 2.4 Gnralits et dfinitions des termes Rsolution de problmes tapes danalyse et implantation dun programme informatique Exemples dalgorithmes

16
16 21 23 30

Chapitre 3

Ordinogramme et pseudo-code
3.1 3.2 3.3 Ordinogramme : gnralits Ordinogrammes et algorithmes : exemples Pseudo-code et algorithme : exemples

40
40 43

Chapitre 4

Algorithmes : les structures fondamentales


4.1 Les structures de contrle

51
51

Chapitre 5

Turbo-Pascal 7.0
5.1 5.2 5.3 Lenvironnement de travail de Turbo-Pascal 7.0 Menus de lEDI Turbo-Pascal 7.0 Processus de cration dun programme dans lEDI Turbo-Pascal

67
67 73 118

Chapitre 6

Structure dun programme en langage Pascal


6.1 6.2 6.3 6.4 6.5 6.6 6.7 Les diagrammes de syntaxe Les identificateurs Les sparateurs Les commentaires Les dclarations Oprations dentre/sortie criture de donnes

127
131 134 136 137 138 141 148

Chapitre 7

Les types de donnes en Pascal


7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 Le type Entier (Integer) Reprsentation des nombres rels Le type Rel (Real) Le type Caractre (Char) Le type Chane de caractres (String) Le type Boolean Le type numr Le type Intervalle Le type Tableau Compatibilit et conversion de type

156
158 161 163 168 170 173 175 177 180 183

Chapitre 8

Oprateurs et structures de contrle


8.1 8.2 Expressions et oprateurs Les structures de contrle en Pascal 187 196

Chapitre 9

Tableaux, procdures et fonctions


9.1 9.2 9.3 Les tableaux Les procdures Les fonctions

230
230 237 253

9.4 9.5 9.6 9.7

Procdures imbriques Les effets de bord Les fonctions standards Procdures et fonctions de traitement de chanes de caractres

258 261 263 273

Chapitre 10

Les fichiers de type texte


10.1 10.2 10.3 10.4 10.5 Les supports de fichiers Procdures de traitement de fichiers 292 Priphriques Les fonctions EOF et EOLN Fichiers de type TEXT

289
290

302 305 305

Annexe A Annexe B Annexe C

Fonctions et procdures Turbo-Pascal Messages derreurs Table de caractres ASCII INDEX

320 331 336 337

INTRODUCTION
La dernire chose quon trouve en faisant un ouvrage, est de savoir celle quil faut mettre la premire. PASCAL(Pense) Aprs avoir rflchi cette phrase, jai dcid de commencer par une question. Si nous voulons rsoudre un problme par des moyennes informatiques, quel est le chemin suivre du problme la solution programme ? Avant dcrire apprenez penser a crit le pote Nicolas Boileau. Cette citation doit servir de rgle dor aux programmeurs, car combien sontils rflchir dabord au problme avant de commencer pitonner lordinateur Avant dallumer lordinateur, un bon programmeur doit faire une analyse dtaille du problme rsoudre. Cette faon de procder peut tre appele apprendre ds le dbut les bonnes habitudes de travail , par opposition aux mauvaises habitudes qui consistent commencer par introduire un programme et rflchir ensuite. Les bonnes habitudes de travail permettent : une programmation structure et modulaire ; de rduire considrablement les risques derreur ; dacclrer la phase de mise au point du programme ; de faire facilement la mise jour du programme ultrieurement.

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Les programmes crits de cette faon seront plus lisibles, plus facilement modifiables, et leurs performances seront meilleures. Donc, avant de rsoudre un problme lordinateur, il faut tre capable de le solutionner soi-mme, ou sinon de connatre un algorithme de rsolution. Pour toutes ces raisons, ce livre commence par ltude de laspect algorithmique de la rsolution de problmes et ensuite par la prsentation d'un langage de programmation. Le langage PASCAL a t conu par Niklaus Wirth, professeur lcole Polytechnique fdrale de Zurich en 1969. Le but tait de crer un langage capable de supporter la programmation structure et la conception descendante de logiciels.

Pourquoi PASCAL ?
Voil une question qui peut nous venir lesprit aujourdhui quand on sait qu'il y a tellement de langages de programmation. Donc la question est pertinente et justifie. Sans vouloir crer une polmique, pour donner une rponse cette question, nous allons simplement passer en revue deux catgories de critres : 1. Critres gnraux ; 2. Critres techniques.

1.1

CRITRES GNRAUX

Gnralit
Un langage de programmation doit tre le moins possible li un type de matriel ou a une catgorie dapplications pour satisfaire au critre doffrir une bonne gnralit, ce qui est le propre d'un langage universel. Lindpendance vis--vis du matriel signifie que le langage doit tre disponible chez diffrents constructeurs et que limplmentation ne doit pas poser trop de contraintes par rapport la taille des machines. En dautres termes, la gnralit implique une plus grande varit dordinateurs supportant le langage.

1 Introduction

Lindpendance vis--vis des applications signifie quun langage doit tre utilisable pour dcrire des algorithmes varis. Cette qualit implique la possibilit de manipuler des objets de type vari : valeurs numriques, caractres, ensembles, structures, etc., et ce, sans recourir des astuces de programmation. PASCAL satisfait trs bien ce critre.

Simplicit
La simplicit dun langage de programmation concerne deux aspects : L'apprentissage et l'utilisation ; L'implmentation.

Un langage doit tre simple apprendre et utiliser, accessible une grande masse de programmeurs sans tre rserv une lite. La simplicit dimplmentation signifie que le dveloppement dun compilateur ne doit pas comporter un travail norme et que la gamme de matriel pouvant supporter un compilateur doit tre assez grande. PASCAL est un langage simple parce que le nombre de concepts et de rgles nest pas norme, ce qui permet un apprentissage assez rapide des bases du langage.

Portabilit
La notion de portabilit est lie plutt la notion de logiciel, donc indirectement au langage de programmation utilis pour crire le logiciel. Nous parlons de portabilit du langage, mais il sagit en ralit de la portabilit dun logiciel crit laide du langage en question. Un logiciel est dit portable si leffort ncessaire pour le rendre oprationnel sur un matriel diffrent de celui sur lequel il a t dvelopp nest pas trs grand. La plupart des langages de haut niveau permettent une certaine portabilit que les langages machine (de bas niveau) ne possdent pas. La portabilit du logiciel crit en langage volu est lie au niveau de normalisation du langage, la prcision de sa dfinition et la faon de faire limplmentation du compilateur.

10

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Les programmes crits en PASCAL ont un bon niveau de portabilit, car les diffrentes implmentations du langage ne divergent pas trop et demeurent relativement fidles au langage tel quil fut cr par Wirth. Le PASCAL UCSD et le TURBO-PASCAL offrent des extensions, mais par ladjonction de fonctions et de procdures prdfinies plutt que par des modifications de la dfinition du langage lui-mme.

Fiabilit
La fiabilit est la qualit (du logiciel) qui permet lutilisateur davoir confiance dans les performances du logiciel en question. Elle se traduit par la probabilit de bon fonctionnement du systme informatique. Cette qualit est lie indirectement au langage de programmation par les contraintes et les interdictions imposes par le langage. PASCAL oblige le programmeur une certaine rigueur concernant par exemple le type de donnes que peut manipuler un algorithme. Les consquences sont que : La dtection derreurs de programmation lors de la compilation est rendue possible ; Les possibilits dastuces de programmation se trouvent fortement rduites sinon totalement limines ; Certaines anomalies sont dtectables au moment de lexcution de faon automatique.

Ainsi, la fiabilit du logiciel crit en PASCAL se trouve renforce.

Maintenance
Avec laccroissement de la complexit des systmes informatiques, leur maintenance devient de plus en plus primordiale. Le financement tant important, on s'attend une dure de vie proportionnelle des systmes. La maintenabilit dun programme est directement lie sa lisibilit. La lisibilit du programme dpend directement du programmeur et des obligations imposes par le langage.

1 Introduction

11

PASCAL est un langage qui facilite la maintenabilit des programmes par les possibilits disponibles de structuration des donnes et des actions, et par les contraintes dcriture et les interdictions imposes.

Efficacit
Actuellement, lefficacit signifie davantage de productivit des quipes de programmeurs que de consommation des ressources (temps dutilisation de lunit centrale, espace mmoire utilis). Cest la consquence de lamlioration des performances des ordinateurs et de la baisse de leur cot. Le PASCAL a t conu pour permettre la programmation structure, ce que Wirth a appel la programmation systmatique, cest--dire une activit discipline avec des rgles et des contraintes. La programmation structure est une technique de programmation consistant crire un code source partir dune hirarchie de modules, la programmation modulaire. Cela vite le recours des branchements, car le programme est labor partir des structures fondamentales : enchanements, slections et rptitions. Les programmes structurs sont plus lisibles et ils prsentent dautres avantages en matire de tests, de documentation et de rvision, ce qui permet une maintenance plus facile des programmes. En ce sens, PASCAL tant reconnu comme un langage trs structur, il contient des caractristiques facilitant la programmation modulaire.

1.2

CRITRES TECHNIQUES Les types


Dans un langage de programmation le type dune variable dsigne : Un ensemble de valeurs que la variable peut prendre, c'est--dire son domaine de variation ; Un ensemble doprations permises avec le type, les oprateurs applicables aux variables.

12

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Le langage PASCAL est considr comme un langage fortement typ parce quil oblige le programmeur dsigner explicitement le type des variables manipul par lalgorithme, et il permet de dfinir des types particuliers aux problmes.
Les types amliorent la fiabilit

dans la mesure o ils autorisent, pendant la compilation, les vrifications sur la validit de laffectation de certaines valeurs aux variables, et aussi sur lutilisation des oprateurs dans le but dviter des affectations de valeurs incohrentes avec le type de la variable. On dispose ainsi dun mcanisme de dtection automatique des erreurs. cause de leur effet sur la lisibilit du programme. Lobligation dassocier un type chaque variable, et la possibilit de dfinir des types spcifiques aux problmes constituent deux lments importants dans la documentation des programmes. parce quils servent dfinir explicitement la plus grande et la plus petite valeur dune variable. Le transfert dun programme sur une machine dont la prcision est diffrente sera plus simple car les problmes apparatront plus clairement. directement parce qu'un langage fortement typ permet aux compilateurs de produire facilement des programmes efficaces, car optimiss.

Les types amliorent la maintenabilit

Les types facilitent la portabilit

Les types affectent lefficacit

Dclarations et rgles de visibilit


Un programme informatique dcrit des actions sur des objets en conformit avec un algorithme pour rsoudre un problme donn.

1 Introduction

13

Lexcution du programme se fait gnralement de faon squentielle, donc un endroit du texte du programme o seules interviennent quelques actions qui portent sur quelques objets. Cette observation a conduit lide de dcouper le texte du programme en parties correspondant chacune une action. La consquence est que lensemble des objets manipuls par lalgorithme ne sera pas visible ou accessible. Seul un sous-ensemble regroupant tous les objets concerns par laction laquelle la partie du programme correspond sera visible. Chaque partie du programme na besoin, et n'a le droit (par mesure de scurit), daccder, cest--dire de voir, que les objets qui la concernent. On appelle cela les rgles de visibilit. Il y a des langages de programmation tels que BASIC, COBOL, FORTRAN o toutes les variables (objets) sont visibles, et accessibles, partir de nimporte quel endroit du programme. De plus, BASIC et FORTRAN nobligent pas le programmeur dfinir les variables simples de faon explicite. Les consquences de labsence de dclarations explicites et de rgles de visibilit sont trs importantes en regard de certains critres globaux : La fiabilit des programmes est affecte par le danger derreurs difficiles dtecter. En labsence de dclaration explicite il nest pas possible au compilateur de signaler certaines erreurs.

La maintenance est difficile et coteuse car la lisibilit des programmes est mauvaise. Lutilit dune variable en termes de dure de vie est impossible dterminer sans consulter tout le programme pour relever toutes les utilisations de la variable en question. Lefficacit se trouve affecte par labsence de rgles permettant de rduire la dure de vie dune variable lexcution de la partie de programme la concernant, parce que lespace mmoire est rserv en permanence.

PASCAL prsente deux caractristiques importantes pour renforcer la fiabilit, la maintenabilit et lefficacit des programmes : Une variable ne peut pas tre utilise dans une instruction si elle na pas t dclare au pralable. Le compilateur va signaler une erreur si cette rgle nest pas respecte.

14

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Le texte du programme peut tre dcoup en units dexcution, les procdures, avec leurs propres variables, les objets, qui seront inaccessibles de lextrieur.

Alors, juste en lisant le texte d'un programme, on pourra connatre la dure de vie de chaque variable et la maintenance sera plus facile. tant donn que la dure de vie dune variable est infrieure la dure de vie du programme tout entier, il devient possible de mettre en uvre des mcanismes simples dallocation et de libration dynamique de lespace mmoire. Lefficacit des programmes sen trouve grandement amliore en termes d'utilisation des ressources mmoire.

Possibilits de structuration
Il est fondamental pour un langage de programmation doffrir des possibilits de structuration des programmes et de faciliter la conception descendante (Top Down Design) des algorithmes. PASCAL permet la conception descendante, notamment par le concept procdure qui favorise, de faon naturelle, le dcoupage de lalgorithme parties distinctes pour excuter des tches particulires. Pour lcriture programmes structurs, Pascal possde les principales structures contrle de la programmation structure. de en de de

La conclusion qui se dgage aprs avoir examin les diffrents critres prcdents est quil ne peut pas exister un langage de programmation idal, unique, qui satisfasse tous les critres, tant donn les diffrentes contradictions dont il compos. Il y aura toujours un compromis faire entre les diffrents objectifs recherchs. tant donn notre objectif principal, apprendre la programmation de la meilleure faon et surtout apprendre la bonne mthode de travail, le choix du PASCAL comme premier langage de programmation est certainement trs appropri. Ce langage peut tre qualifi d'universel, car il est utilis dans diffrents types dapplications : Apprentissage de la programmation ; Programmation scientifique (calculs numriques) ; Informatique de gestion ;

1 Introduction

15

Informatique industrielle ; Programmation de jeux.

Lapprentissage du PASCAL constitue une approche saine de la programmation, surtout dans lenseignement, car il est important dacqurir ds le dpart une mthodologie de conception des programmes et un bon style. Ce langage permet justement dviter les mauvaises habitudes qui, une fois instaures, sont difficiles corriger. Lapproche utilise dans ce livre est la suivant : tablir lalgorithme de rsolution en langage naturel ; Formaliser lalgorithme sous forme de pseudo-code ; Traduire le pseudo-code en langage de haut niveau PASCAL.

Pour tablir lalgorithme final en pseudo-code, nous allons utiliser lordinogramme comme outil complmentaire afin de faciliter la comprhension de la logique de programmation par une reprsentation visuelle. Cette approche prsente lavantage non ngligeable de pouvoir rutiliser le pseudo-code ultrieurement dans un autre environnement de programmation, donc avec un autre langage. Nous suivront toujours la squence suivante :
algorithme pseudo-code Langage de programmation

et ce, pour deux raisons. 1. Parce que cest une squence logique. 2. Pour crer le bon rflexe et imposer une discipline de travail (au programmeur). Une fois ce rflexe et cette discipline de travail installs, on peut facilement passer lapprentissage dun autre langage de programmation, parce qu'une base solide existe et que les notions fondamentales sont connues.

lments d'analyse et de rsolution de problmes


En programmation, il ne suffit pas dtre inventif et ingnieux. Il faut savoir se discipliner et se contrler pour ne pas tre touff par ses propres complexits. Henry F. Ledgard Proverbes de programmation, Paris, Bordas

2.1

GNRALITS ET DFINITIONS DES TERMES La notion dalgorithme


La rsolution de problmes lordinateur est devenue de nos jours chose courante tant donn linformatisation de plusieurs activits humaines. Afin d'utiliser lordinateur comme instrument de travail, le programmeur a comme tche essentielle dexprimer les problmes rsoudre sous forme dalgorithmes partir desquels on obtient les programmes dans le langage dsir.
Dfinition gnrale de l'algorithme(mathmatique)

C'est un ensemble de rgles prcises qui dfinit un procd de calcul destin obtenir un rsultat partir de donnes initiales. Cette dfinition a t donne par le mathmaticien Markov. Cest la premire dfinition du mot algorithme, dans son sens actuel.

2 lments d'analyse et de rsolution de problmes

17

La notion dalgorithme peut tre assimile des notions plus communes, par exemple : mthode (de calcul) ; technique (de calcul) ; instructions (de calcul) ; processus (de calcul) ; recette, etc.

En informatique, on dfinit lalgorithme comme tant la description dune suite doprations effectuer avec un nombre fini de donnes, dans un ordre prcis, et la suite doprations doit conduire la solution du problme donn. Il faut prciser que dans un algorithme : Lordre des oprations est important (excution squentielle) ; Un algorithme doit conduire lexcution dun nombre fini doprations ; Chaque opration doit tre dfinie avec prcision, sans aucune ambigut ; Certaines oprations peuvent tre raffines (dcomposes) ; Lalgorithme nest pas ncessairement unique ; Lalgorithme doit produire le rsultat dsir !

Le rle de lalgorithme est fondamental, parce que sans algorithme, il ny aurait pas de programme (qui nest que sa traduction dans un langage comprhensible par lordinateur). Les algorithmes sont fondamentaux, en un autre sens : ils sont indpendants la fois de lordinateur qui les excute et des langages dans lesquels ils sont traduits. Malheureusement, il nexiste pas de mthodes pour tablir un algorithme pour un problme non encore rsolu. La dcouverte dun algorithme est un travail cratif qui fait appel lintelligence, lintuition et mme, dans une certaine mesure, lexprience du programmeur. Il faut prciser qu'un mme problme peut tre rsolu selon plusieurs types dalgorithmes. On en arrive se demander : Quel est le meilleur algorithme ? Pour faire le choix entre plusieurs algorithmes possibles, il faut dfinir diffrents critres de choix. On peut fixer des critres de performance pour choisir entre plusieurs algorithmes possibles :

18

Algorithmique et programmation Turbo-Pascal (v. 7.0)

1. La prcision, qui est lie directement au cot de production de lalgorithme. 2. La vitesse dexcution. Par exemple, les algorithmes de calcul rapide apportent des gains tels quils permettent de faire des oprations en temps rel dans de nombreuses applications (le traitement numrique des signaux par exemple). 3. Lefficacit, cest--dire lutilisation conomiquement optimale des ressources, essentiellement du temps (de lunit centrale) et de lespace (en mmoire interne dabord, en mmoire externe ensuite). 4. La complexit de lalgorithme, fonction qui donne le temps dexcution et/ou lespace ncessaire en fonction de la taille des donnes dentre. La complexit implique un compromis espacetemps parce quon est souvent oblig de choisir entre une amlioration de la complexit spatiale et une amlioration de la complexit temporelle, lune se faisant au dtriment de lautre. Il y a diffrents niveaux de complexit des algorithmes, en voici une classification en fonction de leur complexit : 1. La formule unique Il sagit de lalgorithme le plus simple quand une seule formule de calcul rsume lalgorithme.
Exemple____________________________________________________________________________

Calculer le salaire brut dun employ partir de son salaire horaire et du nombre dheures de travail.
SalH H SalB SalB = = = = salaire horaire nombre dheures de travail salaire brut SalH multipli par h SalB = SalH * h RSULTAT: SalB

Lalgorithme est le suivant : DONNES : SalH, h nombres rels

2. Plusieurs formules en squence avec rsultats intermdiaires Il sagit dun algorithme simple mais qui implique une squence de formules et des rsultats intermdiaires.

2 lments d'analyse et de rsolution de problmes

19

Exemple____________________________________________________________________________

Calculer le salaire net dun employ partir du salaire horaire, du nombre dheures de travail et de la retenue la source de lassurance-chmage.
SalH H SalB R = = = = salaire horaire nombre dheures de travail salaire brut retenue la source

Si P est le pourcentage de retenue sur le salaire brut pour lassurancechmage, alors la retenue est :
R = SalB * P SalN = SalB R

et le salaire net :

Lalgorithme est le suivant : DONNES : SalH, h, P nombres rels


SalB = SalH * h R = SalB * P SalN = SalB R RSULTAT : SalN

Lalgorithme dans ce cas est une squence de formules avec des rsultats intermdiaires : le salaire brut SalB et la retenue R. Dans cet exemple, lordre des oprations est important : Le salaire brut SalB doit tre calcul en premier, avant la retenue R et avant le salaire net SalN. Cest la raison pour laquelle dans tout algorithme il faut numroter les oprations : 1. Pour tablir lordre dexcution des oprations (qui est imortant) ; 2. Pour pouvoir faire rfrence chaque opration lors la trace de lalgorithme. 3. Algorithme conditionnel Si, dans lalgorithme prcdent, on introduit une condition, par exemple fixer un plafond pour lassurance-emploi au-dessus duquel il ny a plus de retenue, alors il faut utiliser dans lalgorithme une structure de slection. Alors lalgorithme deviendra :
DONNES : SalH, h, P, MAX nombres rels SalB = SalH * h R = SalB * P SI R > MAX ALORS R = MAX

20

Algorithmique et programmation Turbo-Pascal (v. 7.0)

SalN = SalB R RSULTAT : SalN

Dans cet algorithme il y un test sur une condition. On appelle ce test une structure de slection binaire parce quil y a juste deux possibilits : VRAI ou FAUX. 4. Algorithme itratif Si on veut obtenir le calcul de la paie pour plusieurs personnes, lalgorithme devient un algorithme itratif . Lalgorithme est itratif sil est rpt un certain nombre de fois. Si on considre une variable k pour prciser le numro de squence des individus, et si on arrte les itrations quand une donne SalH(k) gale 0, on obtient la version itrative de lalgorithme :
DONNES : SalH, h, P, MAX - nombres rels K=1 RPTER LIRE donne : SalH(k), h(k) SalB(k) = SalH(k) * h(k) R(k) = SalB(k) * P SI R(k) > MAX ALORS R(k) = MAX SalN(k) = SalB(k) R(k) RSULTAT : SalN(k) AJOUTER 1 A k JUSQU' h(k) = 0

Donc, lalgorithme itratif utilise une structure rptitive. Il y a diffrentes structures rptitives, appeles boucles, qui seront tudies plus tard. 5. Algorithme rcursif Les algorithmes rcursifs utilisent comme mthode de calcul la rcursivit. La rcursivit est une forme de calcul qui consiste constituer une squence de rsultats, de sorte que la valeur suivante soit obtenue partir de la valeur calcule prcdemment en appliquant le mme algorithme que celui utilis pour le calcul de la toute premire valeur. La dfinition de la notion de rcursivit est similaire la dfinition de fonctions mathmatiques dans lesquelles la fonction sert se dfinir ellemme.

2 lments d'analyse et de rsolution de problmes

21

Lexemple classique de fonction rcursive est la fonction factorielle : N! = N * (N-1)! avec 0! = 1 et 1! = 1

2.2

RSOLUTION DE PROBLMES
Indpendamment de sa complexit, le but ultime qui doit nous guider pour tablir lalgorithme permettant la rsolution dun problme est dobtenir le rsultat dsir. Pour atteindre ce but il faut passer par les tapes de rsolution dun problme : TAPE 1 : TAPE 2 : TAPE 3 : Comprhension du problme rsoudre et identification des rsultats escompts. Identification des donnes de base ncessaires. Identification du traitement excuter sur les donnes pour obtenir les rsultats ce qui implique dtablir lalgorithme de rsolution.

En rsum, les tapes de rsolution dun problme peuvent tre formules en trois questions. tape 1 Il faut rpondre la question : POURQUOI ? , QUOI FAIRE ? tape 2 Il faut rpondre la question : AVEC QUOI ? tape 3 La question sera : COMMENT FAIRE ? Pour montrer le processus de rsolution dun problme jusqu' lalgorithme, nous allons reprendre lexemple du calcul du salaire net dun employ quand les seuls prlvements la source sont : Un taux dimposition constant de % ; Un montant fixe de pour lassurance-emploi. Nous devons calculer le salaire brut et soustraire les deux prlvements la source pour obtenir le salaire net. Donnes de base ncessaires : le le le le nombre dheures travailles ; taux horaire de lemploy ; taux dimposition ; montant dassurance-emploi.

Dans ce cas voil les tapes de rsolutions : tape 1 : tape 2 :

22

Algorithmique et programmation Turbo-Pascal (v. 7.0)

tape 3 :

Le traitement excuter : 1. Obtenir la valeur du nombre dheures travailles. 2. Obtenir la valeur du taux horaire. 3. Multiplier le nombre dheures par le taux horaire pour obtenir le salaire brut. 4. Multiplier le salaire brut par la valeur du pourcentage dimpt pour obtenir le montant dimpt payer. 5. Soustraire du salaire brut le montant dimpt payer et le montant de lassurance-emploi afin dobtenir le salaire net. 6. Afficher le rsultat du salaire net.

Lalgorithme (tape 3) dcrit la manipulation de linformation pour obtenir le rsultat dsir. Les informations manipules sont les suivantes : Les donnes en entre le nombre dheures travailles le taux horaire le salaire brut le montant dimpt le salaire net

Les valeurs intermdiaires calcules

Le rsultat dsir Nous avons obtenu lalgorithme en langage naturel, donc une premire version qui explique les oprations qui doivent tre excutes pour obtenir le rsultat dsir. Malheureusement, sous cette forme, lalgorithme nest pas utilisable par l'ordinateur. Il faut trouver un moyen de communiquer toutes ces informations lordinateur sous une forme exploitable par celui ci. Pour ce faire, nous allons donner des noms aux variables en utilisant des identificateurs de variables.
Dfinition

L'identificateur de variable est un nom symbolique qui sert dsigner une valeur (donne en entre, valeur intermdiaire calcule ou un rsultat). Voici le tableau des identificateurs de variable avec leur signification :

2 lments d'analyse et de rsolution de problmes

23

Signification

Identificateurs

Le nombre dheures travailles Le taux horaire de lemploy Le salaire brut de lemploy Le montant dimpt Le salaire net de lemploy

NbHrs TauxHoraire SalaireBrut Impot SalaireNet

Aprs avoir dfini les identificateurs de variables, nous allons, rcrire lalgorithme. Pour placer une valeur dans une variable nous allons utiliser le symbole flche ! pour dsigner loprateur daffectation : tape tape tape tape tape tape 1 2 3 4 5 6 Obtenir la valeur de NbHrs Obtenir la valeur de TauxHoraire SalaireBrut ! NbHrs * TauxHoraire Impt ! SalaireBrut * 0.25 SalaireNet ! SalaireBrut Impt 15 AFFICHER SalaireNet

Nous avons obtenu ainsi une version plus compacte de lalgorithme, toujours en langage naturel, o nous avons utilis des identificateurs de variables.

2.3

TAPES D'ANALYSE ET IMPLANTATION D'UN


PROGRAMME INFORMATIQUE
Aprs avoir analys les tapes de rsolution dun problme qui nous ont permis dtablir lalgorithme, nous allons analyser les tapes qui nous permettront de passer de lalgorithme au programme informatique pour rsoudre notre problme. Pour obtenir des rsultats partir de lnonc du problme et des donnes, nous devons parcourir trois tapes : tape 1 : Analyse du problme pour tablir lalgorithme de rsolution. tape 2 : Algorithme du problme crit en pseudo-code. tape 3 : Implantation du programme dans un langage de programmation (Pascal).

24

Algorithmique et programmation Turbo-Pascal (v. 7.0) Problme rsoudre (nonc) Donnes ORDINATEUR (excution du programme) Rsultats Analyse Algorithme Programme informatique

Nous allons analyser, tape par tape, les oprations qui permettent la rsolution du problme de calcul du salaire net dun employ dans le but dobtenir un programme informatique. tape 1 : Analyse du problme Ltape danalyse commence par lidentification des donnes du problme, des rsultats escompts et de la dtermination des variables et des constantes. Cette tape est dcompose en quatre sections : a) Description du programme Dans cette section, il faut faire une brve description avec des termes simples du fonctionnement du programme. Exemple : Le programme DIVISION calcule la division entire de deux nombres A et B et donne comme rsultat le quotient Q et le reste R. Le programme utilise la technique des soustractions successives. b) Tableau des donnes du programme (les variables) Dans cette section, il faut faire, sous forme de tableau, la description des donnes utilises par le programme. On peut faire la distinction entre deux catgories de variables : Variables en entre Ce sont les variables utilises par le programme pour recevoir les informations communiques par lusager. Le tableau doit conserver cinq informations : Identificateur de la variable pour donner un nom la variable. Usage de la variable pour prciser la signification de chacune des variables.

2 lments d'analyse et de rsolution de problmes

25

Type de la variable pour prciser le type de donnes utilis. Valeurs possibles pour prciser le domaine de variation de la variable. Validation pour prciser si la variable doit tre valid.
Exemple Variables en entre
NOM IDENTIFICATEUR USAGE TYPE VALEURS POSSIBLES VALIDATION

NbHrs TauxHoraire

Nombre d'heures Rel de travail Taux horaire du salaire Rel

Les rels positifs Plus grand ou gal au salaire minimum

Aucune Oui

Variables de travail et variables en sortie Les variables de travail sont des variables utilises pour faire des calculs intermdiaires ou pour garder des valeurs. Les variables de sortie sont utilises pour afficher ou crire des rsultats.
Exemple Variables de travail (sortie)
NOM IDENTIFICATEUR USAGE TYPE VALEURS POSSIBLES VALIDATION

SalaireNet

Montant final du salaire net

Rel

Les nombres positifs

Aucune

c) Tableau des constantes Dans cette section sont expliques brivement les constantes utilises dans le programme avec les spcifications suivantes : Identificateur qui reprsente le nom utilis pour la constante. Usage de la constante pour prciser sa signification dans le programme.

26

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Type de la constante. Valeur pour prciser la valeur effective de la constante. Pour illustrer lutilisation des constantes dans un programme nous allons prendre un autre exemple : un programme pour simuler une calculatrice.
NOM IDENTIFICATEUR USAGE TYPE VALEUR

Addition Soustraction Multiplication Division

Caractre de l'addition Caractre de la soustraction Caractre de la multiplication Caractre de la division

Caractre Caractre Caractre Caractre

+ * /

d) Les oprations effectuer par le programme Dans cette section seront indiques brivement quelles sont les oprations ou les tches que doit accomplir le programme pour rpondre au problme. Nous allons prendre lexemple de la calculatrice pour illustrer comment il faut complter le tableau des oprations effectuer.
OPRATION EFFECTUER

Lecture du caractre qui reprsente lopration arithmtique Lecture du premier oprande Lecture du deuxime oprande Validation des oprandes Effectuer le calcul Affichage du rsultat de lopration arithmtique

2 lments d'analyse et de rsolution de problmes

27

En rsum, ltape danalyse du problme est dcompose en quatre sections : 1. Description du programme 2. Tableau des donnes du programme a) Variables en entre b) Variables de travail et variables en sortie 3. Tableau des constantes 4. Les oprations effectuer par le programme tape 2 : Algorithme et pseudo-code de l'algorithme Nous allons anticiper une notion qui sera traite en dtail dans le prochain chapitre. Il sagit de la notion de pseudo-code. En utilisant un langage naturel, des termes simples et une notation particulire, on peut dcrire un algorithme avec un langage universel appel pseudo-code. On utilise ce nom parce que ce n'est pas du vrai code de langage de programmation. Nous allons reprendre lexemple de la calculatrice pour illustrer lutilisation du pseudo-code pour crire lalgorithme. Prcisons que lutilisation du pseudocode est trs importante. Aprs avoir crit le pseudo-code, la logique du programme est dj formalise. Ltape finale sera la traduction du pseudo-code dans un langage de programmation, opration appele traduction en code. Le grand avantage de disposer du pseudo-code est que la traduction peut tre faite dans nimporte quel langage de programmation. Voici le pseudo-code de lalgorithme de la calculatrice :
1.DBUT 2. C ! Lire caractre (clavier) 3. SI NON((C = +) OU (C = -) OU (C = *) OU (C = /)) ALORS 4. crire message derreur (cran) 5. SINON DBUT 6. Nb1 ! Lire nombre rel (clavier) 7. Nb2 ! Lire nombre rel (clavier) 8. SI (C = /) ET (Nb2 = 0) ALORS crire message derreur (cran) 9. SINON DBUT 10. SI (C = +) ALORS Rponse Nb1 + Nb2 11. SINON 12. SI (C = -0 ALORS Rponse Nb1 Nb2 13. SINON 14. SI (C = *) ALORS Rponse Nb1 * Nb2

28

Algorithmique et programmation Turbo-Pascal (v. 7.0) 15. 16. 17. 18. 19. 20.FIN SINON SI (C = /) ALORS Rponse Nb1 / Nb2 crire Rponse (cran) FIN FIN

Explications Tout pseudo-code commence par le mot cl DBUT et se termine par le mot cl FIN qui correspondent respectivement lentre et la sortie du programme. Toutes les instructions du pseudo-code doivent tre numrotes pour y faire rfrence par la suite au moment de la trace (simulation manuelle de lexcution). Nous allons analyser le pseudo-code ligne par ligne. 1. Dbut du programme. 2. Lecture dun caractre partir du clavier et dpt de ce caractre dans la variable C. 3. Test de validation du caractre reprsentant lopration arithmtique. 4. Envoi dun message derreur lcran en cas derreur faite par lusager. 5. Sil ny a pas derreur, on commence lacquisition des oprandes. 6. Lecture du premier oprande qui sera dpos dans la variable Nb1. 7. Lecture du deuxime oprande qui sera dpos dans la variable Nb2. 8. Test de validation pour lopration de division par zro. 9. Sil ny a pas derreur de division par zro, on commence le traitement. 10. Test : si lopration est une addition, on calcule la somme de deux variables. 11. Si lopration nest pas laddition. 12. Test : si lopration est une diffrence, on calcule la diffrence de deux variables. 13. Si lopration nest pas une diffrence.

2 lments d'analyse et de rsolution de problmes

29

14. Test : si lopration est la multiplication, on calcule le produit de deux variables. 15. Si lopration nest pas une multiplication. 16. Test : si lopration est la division, on calcule le quotient de deux variables. 17. Affichage du rsultat (la variable Rponse) lcran. 18. Fin du bloc de traitement. 19. Fin du bloc dacquisition. 20. Fin du programme. tape 3 : Implantation du programme (PASCAL) La dernire tape du processus danalyse et dimplantation dun programme informatique est lcriture, le test et la mise au point du programme dans le langage de programmation de notre choix, le PASCAL. Donc, en utilisant lenvironnement TURBO-PASCAL, on procde limplantation du programme en respectant la syntaxe du langage.

Limplantation du programme dans le langage utilis, Pascal, est la dernire tape du processus de rsolution dun problme avec des moyens informatiques. Cette tape sera dveloppe plus tard, aprs avoir introduit les notions ncessaires du langage. En rsum : Ltape danalyse permet dobtenir lalgorithme de rsolution du problme. Ltape du pseudo-code signifie lcriture de lalgorithme dans un langage universel qui servira faire des tests, vrifier et ventuellement, faire des modifications. Le pseudo-code permet la comprhension de la logique de lalgorithme, et par consquence une mise jour facile. Ltape dimplantation du pseudo-code en code (PASCAL) est ltape finale qui permet lutilisation de lordinateur pour obtenir les rsultats.

30

Algorithmique et programmation Turbo-Pascal (v. 7.0)

2.4

EXEMPLES D'ALGORITHMES Algorithme de la multiplication


Pour tablir lalgorithme de la multiplication, nous allons analyser lopration de multiplication pour dduire la rgle appliquer pour obtenir le rsultat. Soit A = 5 et B = 3, deux nombres entiers. Pour multiplier A par B, nous procdons de la manire suivante : 53=5+5+5 53=3+3+3+3+3 Donc, pour obtenir le produit P, il suffit soit dadditionner A, un nombre B de fois, soit dadditionner B, un nombre A de fois. Algorithme initial
P!0 RPTER B fois P!P+A Initialisation

Algorithme plus raffin


P ! 0 TANT QUE B > 0 P ! P + A B ! B - 1

Lalgorithme final
DBUT LIRE A, B P ! 0 TANT QUE B > 0 P ! P + A dans la boucle B ! B 1 dans la boucle AFFICHER P la sortie de la boucle FIN

Observation Si les deux valeurs multiplier, A et B, sont trs diffrentes, cette version de lalgorithme n'est pas satisfaisante.

2 lments d'analyse et de rsolution de problmes

31

Si A = 5 et B = 10 000, on peut crire : Soit P = 5 + 5 + 5 + + 5 10 000 fois Soit P = 10 000 + 10 000 + 10 000 + 10 000 + 10 000 5 fois Si A = 10 000 et B = 5, on peut crire : P = 10 000 + 10 000 + 10 000 + 10 000 + 10 000 5 fois Il faut que lalgorithme permette le choix de la possibilit la plus conomique, celle qui ncessite le moins doprations. Alors, nous allons donner une version finale de lalgorithme encore plus gnrale qui tienne compte de cette possibilit. Algorithme final plus gnral de la multiplication
DBUT 1. LIRE A, B 2. P ! 0 3. SI A < B ALORS 4. TANT QUE A > 0 FAIRE 5. P ! P + B 6. A ! A 1 7. SINON TANT QUE B > 0 FAIRE 8. P ! P + A 9. B ! B 1 10. AFFICHER P FIN

Remarques Lalgorithme est compos de 10 oprations lmentaires numrotes de 1 10 afin de pouvoir les rfrencer. A, B et P sont des variables. En programmation, une variable est le nom qui sert identifier un emplacement donn dans la mmoire centrale, c'est la raison pour laquelle on lappelle identificateur de variable. Le symbole flche ! dsigne loprateur daffectation : son rle consiste placer une valeur dans une variable.

Trace de l'algorithme
Aprs avoir tabli la version finale de lalgorithme, il faut faire une trace de lalgorithme pour sassurer de son bon fonctionnement.

32

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Faire la trace de lalgorithme signifie simuler manuellement son excution avec une paire de valeurs donne afin de vrifier si lalgorithme fonctionne correctement. Pour vrifier le bon fonctionnement de lalgorithme, nous allons faire la trace avec deux paires de valeurs : A = 5 et B = 7 A = 7 et B = 5 Nous avons invers les valeurs pour vrifier le fonctionnement des deux alternatives dans lalgorithme SI SINON : A < B et B < A.

Trace de l'algorithme de multiplication


Nombre de tours Opration numro 1 2 3 4 1 5 6 4 2 5 6 4 3 5 6 4 4 5 6 4 5 Affichage 5 6 10 11 A 5 5 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 B 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ARRT 35 Affichage 35 5 28 4 21 3 14 2 7 1 0 P Nombre de tours Opration numro 1 2 3 7 8 9 7 8 9 7 8 9 7 8 9 7 8 9 9 11 A 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 B 7 5 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 ARRT 35 35 28 21 14 7 0 P

2 lments d'analyse et de rsolution de problmes

33

Algorithme de la division
Pour tablir lalgorithme de la division, nous allons analyser lopration de division entire pour dduire la rgle appliquer pour obtenir le rsultat. Soit A = 25 et B = 4, deux nombres entiers. Pour diviser A par B, nous procdons de la manire suivante : 25 4 = 21 21 4 = 17 17 4 = 13 13 4 = 9 94= 5 54= 1 R= 1 1 fois 2 fois 3 fois 4 fois 5 fois 6 fois Q=6

Le quotient Q = 6 reprsente le nombre de fois que lon peut soustraire B (4) de A (25). Le reste R = 1 Problme initial Lire 2 nombres, A et B, et trouver le quotient Q et le reste R de la division entire de A par B. Aprs avoir analys lopration de division, nous pouvons dduire quon procde par soustractions successives pour arriver au rsultat. Alors, la premire forme de lalgorithme sera la suivante : Algorithme initial
LIRE 2 nombres A et B Soustraire B de A autant de fois que possible Le quotient Q = le nombre de soustractions effectues Le reste R = le rsultat de la dernire soustraction

est le rsultat de la dernire soustraction.

Nous allons procder par raffinements successifs pour arriver lalgorithme final. Algorithme plus raffin
LIRE A , B Q ! 0 (initialisation) TANT QUE A >= B FAIRE

34

Algorithmique et programmation Turbo-Pascal (v. 7.0) A ! A - B Q ! Q + 1 R ! A (le rsultat de la dernire soustraction)

Algorithme final
DBUT LIRE A, B Q ! 0 TANT QUE A >= B A ! A B Q ! Q + 1 R ! A AFFICHER FIN Q, R FAIRE

Les noncs en retrait (Poser A = A B et Poser Q = Q +1) reprsentent les actions qui seront excutes plusieurs fois (tant que A >= B). Lnonc Poser R = A se trouve en dehors de la boucle rptitive. Dans lalgorithme final, nous pouvons identifier 3 oprations :
1. Poser Q = 0 2. TANT QUE A >= B Poser A = A - B Poser Q = Q + 1 3. Poser R = A

Les oprations 1 et 3 sont effectues une seule fois. Lopration 2 est une rptition de deux oprations lmentaires :
Poser A = A B Poser Q = Q + 1

sont excutes tant que la condition A >= B est VRAIE. Aprs avoir modifi plusieurs reprises lalgorithme de la division pour tenir compte de toutes les particularits, nous pouvons donner la version finale de lalgorithme. Il faut prciser quen gnral on procde de la mme faon pour obtenir la version finale dun algorithme, cest--dire par raffinements successifs .

2 lments d'analyse et de rsolution de problmes

35

La version finale de lalgorithme de division (division de A par B)


DBUT 1. LIRE A, B 2. Q ! 0 3. TANT QUE A >= B 4. A ! A - B 5. Q ! Q + 1 6. R ! A 7. Afficher Q, R FIN

Remarques A B Lalgorithme est compos de sept oprations lmentaires numrotes de 1 7 afin de pouvoir les rfrencer. Lalgorithme devrait fonctionner pour tout couple de nombres positifs. A, B, Q et R sont des identificateurs de variables. Le symbole flche ! dsigne loprateur daffectation. 25 4 21 4 A B valeurs diffrentes valeurs identiques

Limage mmoire aprs laffectation : A ! A B est la suivante :

Le contenu de la case mmoire dsigne la variable A est chang (21 au lieu de 25), tandis que le contenu de la case mmoire dsign la variable B reste le mme (4).

Trace de l'algorithme
Pour faire la trace de lalgorithme de la division il faut remplir un tableau : 1. Le numro de lopration en premire colonne. 2. Les variables en entre : A et B. 3. Les variables en sortie : Q et R. Nous allons faire la trace de lalgorithme de la division par soustractions successives pour A = 17 et B = 7 afin de valider lalgorithme (sassurer de son fonctionnement correct).

36

Algorithmique et programmation Turbo-Pascal (v. 7.0)

Trace de l'algorithme de Division


Opration

1 2 3 4 5 3 4 5 3 6 7 8

17 7 17 7 17 7 10 7 10 7 10 7 3 7 3 7 3 7 3 7 3 7 ARRT

0 0 0 1 1 1 2 2 2 2

3 3

Q = 2 R = 3 valeurs affiches l'cran

Observation Nous devons tre conscients que la trace permet la validation dun algorithme (dans certaines conditions), mais elle ne permet pas de prouver rigoureusement (mathmatiquement parlant) que lalgorithme fonctionnera pour tout couple de valeurs A et B. La question est difficile, peut-tre une des plus difficiles de la programmation. Daprs Dijkstra (mathmaticien et informaticien clbre), les tests peuvent servir montrer la prsence derreurs non leur absence . Nous reviendrons sur la question dautres occasions.

Rsum
Algorithme C'est la description dune suite doprations effectuer avec un nombre fini de donnes, dans un ordre prcis, avec le but dobtenir la solution d'un problme donn.

2 lments d'analyse et de rsolution de problmes

37

tapes de rsolution dun problme 1. Comprhension du problme et identification des rsultats obtenir. 2. Identification des donnes de base ncessaires. 3. Identification du traitement ncessaire pour obtenir les rsultats.

Identificateur de variable Nom symbolique qui sert identifier une donne. Cette donne peut tre : Une donne primaire (en entre) ; Une valeur intermdiaire (calcul) ; Un rsultat (en sortie).

Affectation Oprateur, symbolis par une flche vers la gauche (!), qui permet de placer une valeur ou le rsultat dune expression qui se trouve droite de la flche dans une variable qui se trouve gauche de la flche. Trace de lalgorithme Simulation manuelle de lexcution dun algorithme avec des valeurs fictives dans le but de vrifier si lalgorithme fonctionne correctement.

Exercices
1. crivez lalgorithme de la division entire de X par Y avec le quotient Q et le reste R. Faites la trace de lalgorithme pour les valeurs suivantes : a) b) c) d) X X X X = = = = 9 36 28 15 Y= 2 Y= 9 Y= 3 Y = 17

2. crivez lalgorithme de la multiplication de deux entiers X et Y. Faites la trace de lalgorithme pour les valeurs suivantes : a) b) c) d) X X X X = = = = 8 4 5 12 Y= Y= Y= Y= 4 9 5 0

38

Algorithmique et programmation Turbo-Pascal (v. 7.0)

3. Nous avons vu un exemple dalgorithme pour calculer le salaire net dun salari partir du nombre dheures travailles et du taux horaire. crivez une nouvelle version de lalgorithme qui tient compte dun nouveau calcul dimpt plus raliste. Limpt est calcul selon la table ci-dessous partir du salaire brut : Pour un revenu de 0 29 590 $ Pour un revenu de 29 590 59 180 $ Pour un revenu qui dpasse 59 180 $ Les donnes en entre sont : le nombre de jours de consommation, la consommation totale en Kwh, le tarif pour les 30 premiers Kwh par jour est de 0.047 4 $ par Kwh, pour le reste de la consommation, le tarif de 0.059 7 $ par Kwh. la redevance dabonnement est de 0.39 $ par jour, les taxes sont de 7.0 % (TPS) et 7.50 % (TVQ). le montant total de la facture. impt de 17 % impt de 26 % impt de 29 %

4. crivez lalgorithme permettant le calcul de la facture dlectricit.

Les donnes de calcul sont :

Le rsultat calculer est :

5. crivez lalgorithme pour faire la lecture de deux nombres entiers et les afficher dans lordre croissant. 6. Connaissant le premier terme a et la raison r dune progression arithmtique de n termes, crivez lalgorithme pour calculer le dernier terme l et la somme s des termes de la progression par les formules l = a + (n-1)r et s = n(2a + (n-1)r)/2

7. Connaissant le premier terme a et la raison q dune progression gomtrique de n termes, crivez lalgorithme pour calculer le dernier terme l par la formule suivante :

l = a * q n 1
8. crivez lalgorithme pour calculer la surface dun cercle de rayon R pour diffrentes valeurs du rayon.

2 lments d'analyse et de rsolution de problmes

39

9. crivez lalgorithme pour calculer la surface dun terrain de forme rectangulaire de longueur L et de largeur H. Les dimensions sont exprimes en mtres et la surface doit tre affiche en mtres carrs et en pieds carrs. 10. crivez lalgorithme pour calculer le prix dun voyage la ville de Qubec en voiture. Les donnes de calcul : La distance Montral Qubec est de 250 km. Le prix de lessence est de 0.62 $ le litre La consommation dessence est de 8.5 litres par 100 km. Il faut calculer une surconsommation de 15 % pour 50 km en zone urbaine. Le montant total ncessaire pour couvrir les dpenses du voyage.

Le rsultat calculer :