You are on page 1of 226

Initiation la programmation algorithmique

Anne Acadmique 2007-2008

Plan du cours
Introduction linformatique Architecture dun ordinateur Dcomposition fonctionnelle Concepts cls

ENSA Safi

Introduction

Introduction

Quest-ce quun ordinateur ? Quest-ce quun langage de programmation ? Que signifie faire de linformatique ? A quoi sert la programmation ? Quest-ce que la complexit algorithmique ?

ENSA Safi

Quest-ce quun ordinateur ?


Machine automatique de traitement de linformation obissant des programmes forms par des suites doprations arithmtiques et logiques (Larousse 2002) Diffrents niveaux dapproche : utilisateur, programmeur machine, concepteur de circuits logiques

ENSA Safi

Des 0 et des 1
Le hardware de lordinateur comprend essentiellement : diverses mmoires, un processeur, une horloge, des units dentre/sortie Lordinateur excute la cadence de son horloge des instructions (de niveau machine ) contenue en mmoire et utilisant des donnes contenue dans une autre partie de la mmoire. Les donnes et les instructions, sont codes, au plus bas niveaux en une suite de 0 et de 1. Ces 0 et ces 1 correspondent des tensions des circuits lectroniques. Le cadencement est essentiellement fonction du temps de stabilisation des circuits et de leur chauffement.
ENSA Safi 6

Codage binaire
Le langage des ordinateurs Toutes communications l'intrieur de l'ordinateur sont faites avec des signaux lectriques 0: teint (absence de signal lectrique) 1: allum (prsence de signal lectrique)

ENSA Safi

Un mme nombre peut tre reprsent dans plusieurs bases 123 en base 10 (dcimal) 1111011 en base 2 (binaire) 173 en base 8 (octale) 7B en base 16 (hexadcimale)

ENSA Safi

ENSA Safi

Codage et adressage
On peut exprimer autant avec une suite de 0 et de 1, qu laide dun alphabet complet (a,b,c,d,e ). Il suffit de saccorder sur la faon dont on code linformation. Certains codages peuvent tre plus efficaces que dautres (cf thorie de Shannon) Toute donne code se trouve une certaine adresse en mmoire. Cette adresse en mmoire est elle-mme code sous forme de 0 et de 1.

ENSA Safi

10

Quest-ce quun langage de programmation ?


Langage cd ensemble de mots (vocabulaire) et syntaxe (grammaire) stricte (non ambigu) permettant dcrire un programme Ensemble de structures de donnes, doprations sur ces structures & ensemble de structures de contrle : squencement, branchement conditionnel, itration

ENSA Safi

11

Niveau dun langage


Haut niveau : proche de lhomme, instructions plus complexes, vocabulaire et syntaxe plus riches C++, Java Pascal C, Fortran Assembleur Langage machine

Bas niveau : proche de la machine, instructions lmentaires

ENSA Safi

12

Que signifie faire de linformatique ?


Passer du temps proximit dun ordinateur ? Il est essentiel de prciser le niveau auquel cet outil complexe est utilis Ces niveaux sont relativement indpendants Le plus souvent : Utiliser des fonctionnalits offertes par certains logiciels pour acclrer, rendre plus efficace, le traitement de certains types de donnes
ENSA Safi 13

A quoi sert la programmation ?


A faire excuter par lordinateur une squence dinstructions Habituellement , cette squence dinstructions ralise effectivement un algorithme Un algorithme est une squence finie dinstructions qui permet dobtenir la solution dun problme en un temps fini. La programmation sert rsoudre des catgories de problmes de faon systmatique

ENSA Safi

14

Mais encore
Tous les problmes nont pas de solutions algorithmiques La programmation permet dadapter le comportement de logiciels des catgories spcifiques de problmes. Elle savre souvent indispensable. Dans la description de Turing et Von Neumann, lordinateur est une machine universelle.

ENSA Safi

15

La machine de Turing
Unit de commande
Ruban= entre, sortie et mmoire
tats internes: Etat0, Etat1, Etat2, ...

Lecture/criture + + + +

Etat de la machine Etat0 Etat0

Contenu de Ecrit sur le Dplacement Etat suivant la cellule ruban ruban vide D Etat0 + D Etat1

Le Programme

ENSA Safi

16

Complexit algorithmique
Donne une estimation du nombre doprations lmentaires ncessaires lexcution de lalgorithme, et ce en fonction de la taille des donnes. Lestimation ne tient pas compte de la vitesse dexcution. En gnral la complexit est value dans le pire des cas (worst case analysis)

ENSA Safi

17

Exemples
Recherche dun mot dans un dictionnaire : parcours linaire VS parcours dichotomique Tri dune liste dlments Problmes NP-complets

ENSA Safi

18

Graphique : complexit algorithmique


linaire Nbre dinstructions

logarithmique

Taille des donnes (N)


ENSA Safi 19

Bon ou mauvais programme ?


Aisment lisible donc bien spcifi, bien document Clair, donc bien structur Aisment modifiable Facile tester, dbugger Robuste (erreurs de lutilisateur) Correct Efficace

ENSA Safi

20

Vrai ou faux ?
Lutilisation dun ordinateur permet de raliser un travail plus efficacement et plus rapidement Lordinateur fait ce quon lui dit de faire Le concepteur dun programme connat toujours le rsultat du programme quil a conu

ENSA Safi

21

Architecture dun ordinateur

Architecture dun ordinateur


La mmoire centrale Lunit centrale de traitement (Central Processing Unit) Les units dentre/sorties Les units priphriques

Illustrations

ENSA Safi

23

Diagramme fonctionnel dune architecture de Von Neumann

Data Memory
Input Interface

Arithmetic Unit Control Unit Program Memory Program Interface

Illustration reprise de Tib[2002]


ENSA Safi 24

Output Interface

Ordres de grandeur
K =Kilo M= Mga G= Giga T=Tra 2^10 = 1 024 2^20 =1 048 576 2^30 =1 073 741 824 2^40 =1 099 511 627 776

ENSA Safi

25

La mmoire centrale
Les bits (binary digits) / octets (bytes) Les cellules mmoire (mots) typiquement 32 ou 64 bits Registre dadresse et registre de donnes Lecture et criture

ENSA Safi

26

Schma de principe
Connecteurs donnes

Memoire centrale

Registre donnes L/E Registre adresse

Connecteurs adresse
ENSA Safi 27

Lunit centrale de traitement (CPU)

Les instructions Les adresses Unit de contrle / unit arithmtique et logique Les registres

ENSA Safi

28

Les instructions

Trois informations ncessaires la CPU en contact avec la mmoire RAM. 1. 2. 3. Quelle information traiter ? Quel traitement effectuer ? O ranger le rsultat ?

Architecture RISC et CISC

ENSA Safi

29

Les adresses
La suite des instructions excuter est elle-mme range en mmoire. LA CPU ne communique avec lextrieur que via la mmoire et naccde aux informations que par leur adresse.

ENSA Safi

30

Unit de contrle et ALU


Les circuits qui ralisent les oprations lmentaires (additions, multiplications, oprations logique ) sont regroups dans lALU. Lunit de contrle met en place les donnes et positionne les circuits lectroniques pour que lALU excute effectivement lopration Oprations unaires : mise zro, complmentation logique, dcalage, incrmentation Oprations binaires : ET, OU, XOR
ENSA Safi 31

Circuit additionneur
Additionneur 2 bits

OU ET

ET

ENSA Safi

32

Les registres
Cellules mmoires trs rapides et ddicaces dans la CPU Le compteur ordinal contient ladresse de la prochaine instruction excuter Le registre dinstruction contient linstruction en cours dexcution Laccumulateur Autres registres : gnraux, dindice, de base, dtat (PSW), registre de pile, registre spcialiss (dcalage, virgule flottante, )

ENSA Safi

33

Ordres de grandeurs (2005)


Processeur 32 - 64 bits Mmoire RAM = 1 Go Mmoire dure = 200 Go Vitesse du processeur = 3 GHz

+ Loi de Moore : cf article du Pour La Science


ENSA Safi 34

Illustrations des composants

Carte mre (mother board)

ENSA Safi

36

CPU

ENSA Safi

37

Carte Graphique

ENSA Safi

38

Carte Son

ENSA Safi

39

Carte rseau

ENSA Safi

40

Les Bus

ENSA Safi

41

Connecteurs dentre/sortie

ENSA Safi

42

Hirarchie mmoire

Dans un ordinateur, le processeur accde aux instructions du programme excuter ainsi qu'aux donnes ncessaires son excution depuis la mmoire.
ENSA Safi 43

Programmation Procdurale

Bien distinguer !
Spcification d un algorithme : ce que fait lalgorithme cahier des charges du problme rsoudre Expression d un algorithme : comment il le fait texte dans un langage de type Pascal / C Implmentation d un algorithme : traduction du texte prcdent dans un langage de programmation rel
ENSA Safi 45

Programmation Procdurale
Notion didentificateur et de type Notion de fonction Instructions de contrle du flux dexcution Comment concevoir un programme ? Quelques exemples de code Le traitement des donnes avant tout

ENSA Safi

46

Notion didentificateur et de type


Identificateur : symbole sans signification universelle permettant de dsigner des objets qui nont pas dexistence en dehors du programme. Dclaration : fixe la signification dun identificateur Porte dun identificateur : bloc dinstructions pour lequel la dclaration est valable. Les langages de programmation peuvent tre typs ou non
ENSA Safi 47

Notion de variable
Une variable est un lment de donne dsigne par un identificateur. Dans un langage typ , chaque variable a un type (int, float, boolean, String, ) chaque identificateur a une porte (portion du code dans laquelle lidentificateur est reconnu; en gnral, le bloc dinstructions dans lequel la variable est dclare). Une variable est un endroit de la mmoire laquelle on a donn un nom de sorte que lon puisse y faire facilement rfrence dans le programme. Une variable a une valeur, correspondant un certain type. La valeur dune variable peut changer au cours de lexcution du programme ( do son nom ;-) )
ENSA Safi 48

dclaration et assignation dune variable


Variables i : integer ;
type entier (entier : type prdifini integer : mot cl du langage) identificateur

i:=4;

ENSA Safi

49

Notion de fonction
Une fonction est un morceau de code qui permet de rsoudre un sous-problme du problme trait La dcomposition du code en tches et sous- tches, le rend plus modulaire. Le programme est plus clair, plus lisible, plus aisment modifiable Les fonctions cachent les dtails dimplmentation : il suffit de savoir ce quelles font et non comment elles le font

ENSA Safi

50

Notion de fonction

ENSA Safi

51

Dclaration dune fonction


Comprend essentiellement trois lments: 1. Le nom de la fonction 2. La liste des types darguments 3. Le type de retour de la fonction
Exemples : Function exposant ( i , j : integer ) : integer ;

ENSA Safi

52

Corps dune fonction


Function exposant ( i , j : integer ) : integer ; variablesi2 , a : integer ; Begin i2 := 1 ; For a := 1 To j Do i2 := i2 * i ; exposant := i2 ; End ;

ENSA Safi

53

Exemple : un pseudo-code
Programme Principal
// Ce programme permet de lire deux entiers lcran et dafficher ensuite leur somme

BEGIN variablesunEntier , unAutreEntier : integer ;


// dclaration de variable entire

unEntier=lisAlEcranUnEntier(); unAutreEntier=lisAlEcranUnEntier();
// utilisation de la fonction lisAlEcranUnEntier()()

ecrisAlEcran(calculeSomme(unEntier,unAutreEntier));
// utilisation des fonctions calculeSomme(int,int) et ecrisAlEcran(int)

END
ENSA Safi 54

Instructions de Contrle
Branchement conditionnel : if then else ( si alors aussinon) switch case Boucle conditionnelle : while do ou do while ( fait tant que ) Boucle inconditionnelle For

ENSA Safi

55

Exemple de code
Function calculeSomme( i , j : integer ) : integer ;
// cette fonction donne la somme de deux entiers, si elle est positive, // et renvoie 0 aussinon.

begin EXERCICE end

ENSA Safi

56

Solution 1
Function calculeSomme ( i , j : integer ) : integer ; Begin somme := i+j ; End ;

ENSA Safi

57

Solution 2
Function somme ( i , j : integer ) : integer ; Begin somme := i+j ; If somme <0 then somme:=0 ; End ;

ENSA Safi

58

Comment concevoir un programme ?


Identifier prcisment le problme que le programme se doit de rsoudre Dcomposer le problme en sous-problme Dfinir les fonctions correspondantes crire le programme principal en pseudo-code, en valuant les critres de qualit. Implmenter, compiler, excuter sur diffrents cas dutilisation, dbugger
ENSA Safi 59

Le traitement des donnes avant tout


La conception du programme se fait essentiellement par abstraction procdurale , dcomposition en sous-problme Vision trs top-down de la programmation, tendance cartsienne analytique Danger du Code spaghetti Critres de qualit facilement viols : modularit, lisibilit, robustesse, exactitude

ENSA Safi

60

Premiers algorithmes

Anne Acadmique 2007-2008

Plan :Premiers algorithmes


Les Variables Instruction daffectation Les instructions de lecture et dcriture Les Tests Les Boucles Les Tableaux Procdures et Fonctions Les Fichiers

algorithmique ?
Encyclopedia Universalis : Spcification dun schma de calcul sous forme dune suite finie doprations lmentaires obissant un enchanement dtermin. DONNES RSULTATS, ACTIONS Composition d un nombre fini doprations dont chacune est : dfinie de faon rigoureuse et non ambigu effective sur les donnes adquates (excution en temps fini)
ENSA Safi 63

Pourquoi un cours dalgorithmique ?


Objectif: obtenir de la machine quelle effectue un travail notre place Problme: expliquer la machine comment elle doit s'y prendre Mais... comment le lui dire ? Comment le lui apprendre ? Comment s'assurer qu'elle fait ce travail aussi bien que nous ? Mieux que nous?

ENSA Safi

64

Pourquoi un cours dalgorithmique ?


concevoir une solution

rflchir

ENSA Safi

65

bon en algorithmique ?
La matrise de lalgorithmique requiert deux qualits, trs complmentaires dailleurs : il faut avoir une certaine intuition, car aucune recette ne permet de savoir a priori quelles instructions permettront dobtenir le rsultat voulu. Cest l, si lon y tient, quintervient la forme dintelligence requise pour lalgorithmique. Alors, cest certain, il y a des gens qui possdent au dpart davantage cette intuition que les autres. Cependant, et jinsiste sur ce point, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalement que de lexprience tellement rpte que le raisonnement, au dpart laborieux, finit par devenir spontan . il faut tre mthodique et rigoureux. En effet, chaque fois quon crit une srie dinstructions quon croit justes, il faut systmatiquement se mettre mentalement la place de la machine qui va les excuter, arm d'un papier et d'un crayon, afin de vrifier si le rsultat obtenu est bien celui que lon voulait. Cette opration ne requiert pas la moindre once dintelligence. Mais elle reste nanmoins indispensable, si lon ne veut pas crire laveuglette. Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plus souvent lconomie de cette dernire tape : lexprience fera que vous verrez le rsultat produit par vos instructions, au fur et mesure que vous les crirez. Naturellement, cet apprentissage est long, et demande des heures de travail patient. Aussi, dans un premier temps, vitez de sauter les tapes : la vrification mthodique, pas pas, de chacun de vos algorithmes reprsente plus de la moiti du travail accomplir... et le gage de vos progrs.

ENSA Safi

66

se mettre mentalement la place de la machine qui va les excuter ?


les ordinateurs, quels quils soient, ne sont fondamentalement capables de comprendre que quatre catgories d'ordres (en programmation, on n'emploiera pas le terme d'ordre, mais plutt celui d'instructions). Ces quatre familles d'instructions sont : laffectation de variables la lecture / criture les tests les boucles Un algorithme informatique se ramne donc toujours au bout du compte la combinaison de ces quatre petites briques de base.
ENSA Safi 67

Avec quelles conventions crit-on un algorithme ?


Historiquement, plusieurs types de notations ont reprsent des algorithmes. Il y a eu notamment une reprsentation graphique, avec des carrs, des losanges, etc. quon appelait des organigrammes. Aujourdhui, cette reprsentation est quasiment abandonne. Cest pourquoi on utilise gnralement une srie de conventions appele pseudo-code , qui ressemble un langage de programmation authentique dont on aurait vacu la plupart des problmes de syntaxe. Ce pseudo-code est susceptible de varier lgrement dun livre (ou dun enseignant) un autre.
ENSA Safi 68

Structure de base dun programme


Dclaration de variables et fonctions Programme principale Dbut .. fin

Variables
La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de lui coller une etiquette (identificateur). Ceci se fait tout au dbut de lalgorithme, avant mme les instructions proprement dites. Cest ce quon appelle la dclaration des variables Il y a trois type: Type Numrique Type alphanumrique Type boolen En pseudo-code, une dclaration de variables aura ainsi cette tte : variables g en entier
identificateur

En informatique, une variable possde un moment donn une valeur et une seule valeur Dans un programme une variable a un identificateur unique un identificateur est un mot : - commenant obligatoirement par une lettre - ne comportant aucun espace
ENSA Safi 70

Type variable
Type Numrique Type caractre Type chane Type boolen

ENSA Safi

71

Type variable numrique


Tous les langages, quels quils soient offrent un bouquet de types numriques, dont le dtail est susceptible de varier lgrement dun langage lautre. On retrouve cependant les types suivants : type entier rel ensemble nom_typ caractres e autoriss de valeurs ent 09 [-32768..+32767] entier rel 0 9, . exemples de valeurs -152 +4560 ou 4560 -12.3652 +0.186 ou 0.186

ENSA Safi

72

Instruction daffectation
Cette seule chose quon puisse faire avec une variable, cest laffecter, cest--dire lui attribuer une valeur En pseudo-code, l'instruction d'affectation se note avec le signe

ENSA Safi

73

Expressions et oprateurs
Oprateurs numriques : + : addition - : soustraction * : multiplication / : division Parenthses * et / + et 12 * 3 + 5 et (12 * 3) + 5 valent strictement la mme chose. En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96 Oprateur alphanumrique : & concatner Oprateurs logiques (ou boolens) ET, du OU, du NON

ENSA Safi

74

Instruction daffectation
A la rigueur, elle peut ne pas avoir de valeur du tout (une fois quelle a t dclare, et tant quon ne la pas affecte. A signaler que dans certains langages, les variables non encore affectes sont considres comme valant automatiquement zro). Mais ce qui est important, cest que cette valeur justement, ne varie pas proprement parler. Du moins ne varie-t-elle que lorsquelle est lobjet dune instruction daffectation. La deuxime remarque concerne le signe de laffectation. En algorithmique, comme on la vu, cest le signe . Mais en pratique, la quasi totalit des langages emploient le signe gal. Et l, pour les dbutants, la confusion avec les maths est galement facile. En maths, A = B et B = A sont deux propositions strictement quivalentes. En informatique, absolument pas, puisque cela revient crire A B et B A, deux choses bien diffrentes. De mme, A = A + 1, qui en mathmatiques, constitue une quation sans solution, reprsente en programmation une action tout fait licite (et de surcrot extrmement courante). Donc, attention ! ! ! La meilleure des vaccinations contre cette confusion consiste bien employer le signe en pseudo-code, signe qui a le mrite de ne pas laisser place lambigut. Une fois acquis les bons rflexes avec ce signe, vous naurez plus aucune difficult passer au = des langages de programmation.
ENSA Safi 75

Exercice 1
Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ? variables A, B : Entiers Dbut A1 BA+3 A3 Fin

ENSA Safi

76

Solution
Aprs La valeur des variables est : A1 A=1 B=? BA+3 A=1 B=4 A3 A=3 B=4

ENSA Safi

77

Exercice 2
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ? Variables A, B, C : Entier Dbut A5 B3 CA+B A2 CBA Fin

ENSA Safi

78

Solution
Aprs A5 B3 CA+B A2 CBA La valeur des variables est : A=5 B=? C=? A=5 B=3 C=? A=5 B=3 C=8 A=2 B=3 C=8 A=2 B=3 C=1

ENSA Safi

79

Exercice 3
Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ? Variables A, B : Entier Dbut A5 BA+4 AA+1 BA4 Fin

ENSA Safi

80

Solution
Aprs La valeur des variables est : A5 A=5 B=? BA+4 A=5 B=9 AA+1 A=6 B=9 BA4 A=6 B=2

ENSA Safi

81

Exercice 4
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ? Variables A, B, C :Entier Dbut A3 B 10 CA+B BA+B AC Fin

ENSA Safi

82

Solution
Aprs A3 B 10 CA+B BA+B AC La valeur des variables est : A=3 B=? C=? A=3 B = 10 C=? A=3 B = 10 C = 13 A=3 B = 13 C = 13 A = 13 B = 13 C = 13

ENSA Safi

83

Exercice 5
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ? variablesA, B, C :Entier Dbut A3 B 10 CA+B BA+B AC Fin

ENSA Safi

84

Solution
Aprs A5 B2 AB BA La valeur des variables est : A=5 B=? A=5 B=2 A=2 B=2 A=2 B=2

Les deux dernires instructions ne permettent donc pas dchanger les deux valeurs de B et A, puisque lune des deux valeurs (celle de A) est ici crase. Si lon inverse les deux dernires instructions, cela ne changera rien du tout, hormis le fait que cette fois cest la valeur de B qui sera crase.

ENSA Safi

85

Exercice 6
Plus difficile, mais cest un classique absolu, quil faut absolument matriser : crire un algorithme permettant dchanger les valeurs de deux variables A et B, et ce quel que soit leur contenu pralable.

ENSA Safi

86

Solution
Dbut CA AB BC Fin On est oblig de passer par une variable dite temporaire (la variable C).

ENSA Safi

87

Exercice 7
Une variante du prcdent : on dispose de trois variables A, B et C. crivez un algorithme transfrant B la valeur de A, C la valeur de B et A la valeur de C (toujours quels que soient les contenus pralables de ces variables).

ENSA Safi

88

Solution
Dbut DC CB BA AD Fin En fait, quel que soit le nombre de variables, une seule variable temporaire suffit

ENSA Safi

89

Exercice 8
Que produit lalgorithme suivant ? Variables A, B, C : Caractre Dbut A "423" B "12" CA+B Fin

ENSA Safi

90

Solution
Il ne peut produire quune erreur dexcution, puisquon ne peut pas additionner des caractres.

ENSA Safi

91

Exercice 9
Que produit lalgorithme suivant ? Variables A, B, C :Caractre Dbut A "423" B "12" CA&B Fin

ENSA Safi

92

Solution
En revanche, on peut les concatner. A la fin de lalgorithme, C vaudra donc "42312".

ENSA Safi

93

Les instructions de lecture et dcriture (I/O standard: clavier/ecran)


Dans un sens, ces instructions permettent lutilisateur de rentrer des valeurs au clavier pour quelles soient utilises par le programme. Cette opration est la lecture. Dans lautre sens, dautres instructions permettent au programme de communiquer des valeurs lutilisateur en les affichant lcran. Cette opration est lcriture.

ENSA Safi

94

Les instructions de lecture et dcriture: Syntaxe


lire_clavier Titi ou Lire Titi Ds que le programme rencontre une instruction Lire, lexcution sinterrompt, attendant la frappe dune valeur au clavier. Ds lors, aussitt que la touche Entre (Enter) a t frappe, lexcution reprend ecrire_ecran Toto ou Ecrire Toto Dans le sens inverse, pour crire quelque chose lcran. Important: Avant de lire_clavier une variable, il est trs fortement conseill dcrire des libells lcran, afin de prvenir lutilisateur de ce quil doit frapper
ENSA Safi 95

Exercice 1
Quel rsultat produit le programme suivant ? Variables v, double: entier Dbut V 231 Double V * 2 ecrire_ecran V ecrire_ecran le double est ,Double Fin

ENSA Safi

96

Solution
On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)

ENSA Safi

97

Exercice 2
Ecrire un programme qui demande un nombre lutilisateur, puis qui calcule et affiche le carr de ce nombre.

ENSA Safi

98

Solution
variables nb, carr : Entier Dbut ecrire_ecran "Entrez un nombre :" lire_clavier nb carr nb * nb ecrire_ecran "Son carr est : ", carr Fin En fait, on pourrait tout aussi bien conomiser la variable carr en remplaant les deux avant-dernires lignes par : ecrire_ecran "Son carr est : ", nb*nb C'est une question de style ; dans un cas, on privilgie la lisibilit de l'algorithme, dans l'autre, on privilgie l'conomie d'une variable.

ENSA Safi

99

Exercice 3
Ecrire un programme qui lit le prix HT dun article, le nombre darticles et le taux de TVA, et qui fournit le prix total TTC correspondant. Faire en sorte que des libells apparaissent clairement.

ENSA Safi

100

Solution
variables nb, pht, ttva, pttc : entier Dbut ecrire_ecran "Entrez le prix hors taxes :" lire_clavier pht ecrire_ecran "Entrez le nombre darticles :" lire_clavier nb ecrire_ecran "Entrez le taux de TVA ( %):" lire_clavier ttva pttc nb * pht * (1 + (ttva/100)) ecrire_ecran "Le prix toutes taxes est : ", pttc Fin L aussi, on pourrait squeezer une variable et une ligne en crivant directement. : ecrire_ecran "Le prix toutes taxes est : ", nb * pht * (1 + ttva) C'est plus rapide, plus lger en mmoire, mais un peu plus difficile relire (et crire !)

ENSA Safi

101

Les Tests
Si boolen Alors Boolen 1 Instructions Finsi oui Instruction 1 Si boolen Alors Instructions 1 Sinon Instructions 2 Finsi Si boolen1 Alors Instructions 1 Sinon si boolen2 Alors Instructions 2 Instruction suivant Instructions 3 Sinon Instructions 4 Finsi
ENSA Safi

non non

Boolen 2 oui Instruction 2 Instruction 3

Instruction 4

102

Les Tests

Boolen est une condition : gal = diffrent de != strictement plus petit que < strictement plus grand que > plus petit ou gal <= plus grand ou gal >= Conditions composes oprateur logique ET, OU, NON, et XOR
ENSA Safi 103

Exercice 1
crire un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce nombre est positif ou ngatif (on laisse de ct le cas o le nombre vaut zro).

ENSA Safi

104

Solution
variables n : Entier Dbut ecrire_ecran "Entrez un nombre : " lire_clavier n Si n > 0 Alors ecrire_ecran "Ce nombre est positif " Sinon ecrire_ecran "Ce nombre est ngatif" Finsi Fin

ENSA Safi

105

Exercice 2
Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si leur produit est ngatif ou positif (on laisse de ct le cas o le produit est nul). Attention toutefois : on ne doit pas calculer le produit des deux nombres.

ENSA Safi

106

Solution
variables m, n : Entier Dbut ecrire_ecran "Entrez deux nombres diff de 0" lire_clavier m, n Si ((m > 0 ET n > 0) OU (m < 0 ET n < 0)) Alors ecrire_ecran "Leur produit est positif" Sinon ecrire_ecran "Leur produit est ngatif" Finsi Fin

ENSA Safi

107

Exercice 3
Ecrire un algorithme qui demande trois noms lutilisateur et linforme ensuite sils sont rangs ou non dans lordre alphabtique.

ENSA Safi

108

Solution
variables a, b, c : Caractre Dbut ecrire_ecran "Entrez successivement trois noms : " lire_clavier a, b, c Si ((a < b) ET (b < c)) Alors ecrire_ecran "Ces noms sont classs alphabtiquement" Sinon ecrire_ecran "Ces noms ne sont pas classs" Finsi Fin

ENSA Safi

109

Exercice 4
Ecrire un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce nombre est positif ou ngatif (on inclut cette fois le traitement du cas o le nombre vaut zro).

ENSA Safi

110

Solution
variables n : Entier Dbut ecrire_ecran "Entrez un nombre : " lire_clavier n Si n < 0 Alors ecrire_ecran "Ce nombre est ngatif" Sinon si n = 0 Alors ecrire_ecran "Ce nombre est nul" Sinon ecrire_ecran "Ce nombre est positif" Finsi Fin
ENSA Safi 111

Exercice 5
Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si le produit est ngatif ou positif (on inclut cette fois le traitement du cas o le produit peut tre nul). Attention toutefois, on ne doit pas calculer le produit !

ENSA Safi

112

Solution
variables m, n : Entier Dbut ecrire_ecran "Entrez deux nombres : " lire_clavier m, n Si m = 0 OU n = 0 Alors ecrire_ecran "Le produit est nul" Sinon si (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors ecrire_ecran "Le produit est positif" Sinon ecrire_ecran "Le produit est ngatif" Finsi Fin Si on souhaite simplifier lcriture de la condition lourde du SinonSi, on peut toujours passer par des variables boolennes intermdiaires. Une astuce de sioux consiste galement employer un Xor (c'est l'un des rares cas dans lesquels il est pertinent)
ENSA Safi 113

Exercice 5
Ecrire un algorithme qui demande lge dun enfant lutilisateur. Ensuite, il linforme de sa catgorie : "Poussin" de 6 7 ans "Pupille" de 8 9 ans "Minime" de 10 11 ans "Cadet" aprs 12 ans Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?

ENSA Safi

114

Solution
variables age : Entier Dbut ecrire_ecran "Entrez lge de lenfant : " lire_clavier age Si age >= 12 Alors ecrire_ecran "Catgorie Cadet" Sinon si age >= 10 Alors ecrire_ecran "Catgorie Minime" Sinon si age >= 8 Alors ecrire_ecran "Catgorie Pupille" Sinon si age >= 6 Alors ecrire_ecran "Catgorie Poussin" Finsi Fin On peut videmment crire cet algorithme de diffrentes faons, ne seraitce quen commenant par la catgorie la plus jeune.
ENSA Safi 115

Linstruction selon
exemple selon abrviation cas "M" : ecrire_ecran " Monsieur " cas "Mme" : ecrire_ecran " Madame " cas "Mlle" : ecrire_ecran " Mademoiselle " Autres : Comparer: si abrviation = "M alors ecrire_ecran "Monsieur" sinon si abrviation = "Mme alors ecrire_ecran "Madame" sinon si abrviation = "Mlle" alors ecrire_ecran "Mademoiselle" sinon ecrire_ecran "Monsieur,Madame "

ecrire_ecran " Monsieur, Madame finsi " finselon

ENSA Safi

116

Organigrame selon
selon v cas 1: non non

instruction 1
cas 2: instruction 2 Autres : instruction 3iselle Madame " finselon

v=1 ou i 1 Instruction

V=2 oui Instruction 2

Instruction 3

Instruction suivant

Exercice 6
Ecrire un algorithme qui demande loperation et 2 numero lutilisateur. Ensuite, il affiche le resultat : Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?

ENSA Safi

118

Solution
variables nbr1,nbr2: Entier o:charactere Dbut ecrire_ecran "Entrez 1er nbr et nbr2" lire_clavier nbr1, nbr2 ecrire_ecran "Entrez operation" lire_clavier o selon o cas "+" : res <-- nbr1 + nbr2 cas "-" : res <-- nbr1 + nbr2 cas "*" : res <-- nbr1 * nbr2 autres : res <-- nbr1 / nbr2 fin_selon ecrire_ecran res Fin
ENSA Safi 119

On peut videmment crire cet algorithme de diffrentes faons, ne serait-ce quen commenant par la catgorie la plus jeune.

Conditions composes
Si A ET B Alors Instructions 1 Sinon Instructions 2 Finsi quivaut : Si NON A OU NON B Alors Instructions 2 Sinon Instructions 1 Finsi
ENSA Safi 120

Exercice 1
Formulez un algorithme quivalent lalgorithme suivant : Si Tutu > Toto + 4 OU Tata = "OK" Alors Tutu Tutu + 1 Sinon Tutu Tutu 1 Finsi

ENSA Safi

121

Solution
Aucune difficult, il suffit dappliquer la rgle de la transformation du OU en ET vue en cours (loi de Morgan). Attention toutefois la rigueur dans la transformation des conditions en leur contraire... Si Tutu <= Toto + 4 ET Tata <> "OK" Alors Tutu Tutu - 1 Sinon Tutu Tutu + 1 Finsi

ENSA Safi

122

Exercice 2
Cet algorithme est destin prdire l'avenir, et il doit tre infaillible ! Il lira au clavier lheure et les minutes, et il affichera lheure quil sera une minute plus tard. Par exemple, si l'utilisateur tape 21 puis 32, l'algorithme doit rpondre : "Dans une minute, il sera 21 heure(s) 33". NB : on suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vrifier.

ENSA Safi

123

Solution
variables h, m : entier Dbut ecrire_ecran "Entrez les heures, puis les minutes : " lire_clavier h, m mm+1 Si m = 60 Alors m0 hh+1 FinSi Si h = 24 Alors h0 FinSi ecrire_ecran "Dans une minute il sera ", h, "heure(s) ", m, "minute(s)" Fin

ENSA Safi

124

Exercice 3
De mme que le prcdent, cet algorithme doit demander une heure et en afficher une autre. Mais cette fois, il doit grer galement les secondes, et afficher l'heure qu'il sera une seconde plus tard. Par exemple, si l'utilisateur tape 21, puis 32, puis 8, l'algorithme doit rpondre : "Dans une seconde, il sera 21 heure(s), 32 minute(s) et 9 seconde(s)". NB : l encore, on suppose que l'utilisateur entre une date valide.

ENSA Safi

125

Solution
variables h, m, s : entier Dbut ecrire_ecran "Entrez les heures, puis les minutes, puis les secondes : " lire_clavier h, m, s ss+1 Si s = 60 Alors s0 mm+1 FinSi Si m = 60 Alors m0 hh+1 FinSi Si h = 24 Alors h0 FinSi ecrire_ecran "Dans une seconde il sera ", h, "h", m, "m et ", s, "s" Fin
ENSA Safi 126

Exercice 4
Un magasin de reprographie facture 0,10 E les dix premires photocopies, 0,09 E les vingt suivantes et 0,08 E au-del. Ecrivez un algorithme qui demande lutilisateur le nombre de photocopies effectues et qui affiche la facture correspondante.

ENSA Safi

127

Solution
variables n : entier p : reel Dbut ecrire_ecran "Nombre de photocopies : " lire_clavier n Si n <= 10 Alors p n * 0,1 Sinon si n <= 30 Alors p 10 * 0,1 + (n 10) * 0,09 Sinon p 10 * 0,1 + 20 * 0,09 + (n 30) * 0,08 FinSi ecrire_ecran "Le prix total est: ", p Fin
ENSA Safi 128

Exercice 5
Les habitants de Zorglub paient limpt selon les rgles suivantes : les hommes de plus de 20 ans paient limpt les femmes paient limpt si elles ont entre 18 et 35 ans les autres ne paient pas dimpt Le programme demandera donc lge et le sexe du Zorglubien, et se prononcera donc ensuite sur le fait que lhabitant est imposable.

ENSA Safi

129

Solution
variables sex : Caractre age : entier C1, C2 : Boolen Dbut ecrire_ecran "Entrez le sexe (M/F) : " lire_clavier sex ecrire_ecran "Entrez lge: " lire_clavier age C1 sex = "M" ET age > 20 C2 sex = "F" ET (age > 18 ET age < 35) Si C1 ou C2 Alors ecrire_ecran "Imposable" Sinon ecrire_ecran "Non Imposable" FinSi Fin
ENSA Safi 130

Exercice 6
Une compagnie d'assurance automobile propose ses clients quatre familles de tarifs identifiables par une couleur, du moins au plus onreux : tarifs bleu, vert, orange et rouge. Le tarif dpend de la situation du conducteur : un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit attribuer le tarif rouge, si toutefois il n'a jamais t responsable d'accident. Sinon, la compagnie refuse de l'assurer. un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plus de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a jamais provoqu d'accident, au tarif rouge pour un accident, sinon il est refus. un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bnficie du tarif vert s'il n'est l'origine d'aucun accident et du tarif orange pour un accident, du tarif rouge pour deux accidents, et refus au-del De plus, pour encourager la fidlit des clients accepts, la compagnie propose un contrat de la couleur immdiatement la plus avantageuse s'il est entr dans la maison depuis plus d'un an. Ecrire l'algorithme permettant de saisir les donnes ncessaires (sans contrle de saisie) et de traiter ce problme. Avant de se lancer corps perdu dans cet exercice, on pourra rflchir un peu et s'apercevoir qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire une analyse !)

ENSA Safi

131

variables Age,Dperm, NbrACC, Niv : entier AncCI C1,C2,C3 : Booleen DEBUT ecrire_ecran " votre age, Durer permi, NbrACC,AncCI lire_clavier Age,Dperm,NbrACC, AncCl C1 age<25 ET Dperm<2 C2 (age <25 ET Dperm>2) OU (age >25 ET Dperm<2) C3 age >25 ET Dperm>2 Si C1 ET NbrACC!=0 Alors Niv5 Sinon si C1 ET NbrACC=0 alors Niv 4 Finsi si C2 ET NbrACC=0 Alors Niv3 Sinon si C2 ET NbrACC=1 Alors Niv4 Sinon si C2 ET NbrACC>1 alors Niv5 finsi si C3 ET NbrACC=0 Alors Niv2 FIN

Sinon si C3 ET NbrACC=1 Alors Niv3 Sinon si C3 ET NbrACC=2 Alors Niv4 Sinon si C3 ET NbrACC>2 alors Niv5 finsi si AncCl Alors NivNiv-1 finsi si NIV=<1Alors ecrire_ecran " bleu sinonsi NIV =2 Alors ecrire_ecran " vert sinonsi NIV =3 Alors ecrire_ecran " Orange sinonsi NIV =4 Alors ecrire_ecran " rouge Sinon ecrire_ecran " reffuser finsi

Solution 2
Vous trouvez cela compliqu ? Oh, certes oui, a l'est ! Et d'autant plus qu'en lisant entre les lignes, on pouvait s'apercevoir que ce galimatias de tarifs recouvre en fait une logique trs simple : un systme points. Et il suffit de comptabiliser les points pour que tout s'claire... Reprenons juste aprs l'affectation des trois variables boolennes C1, C2, et C3. On crit : P0 Si Non(C1) Alors PP+1 FinSi Si Non(C2) Alors PP+1 FinSi P P + acc Si P < 3 et C3 Alors PP-1 FinSi Si P = -1 Alors situ "Bleu" Sinon si P = 0 Alors situ "Vert" Sinon si P = 1 Alors situ "Orange" Sinon si P = 2 Alors situ "Rouge" Sinon situ "Refus" FinSi ecrire_ecran "Votre situation : ", situ Fin ENSA Safi 133

Exercice 7
Les lections lgislatives, en Guignolerie Septentrionale, obissent la rgle suivante : lorsque l'un des candidats obtient plus de 50% des suffrages, il est lu ds le premier tour. en cas de deuxime tour, peuvent participer uniquement les candidats ayant obtenu au moins 12,5% des voix au premier tour. Vous devez crire un algorithme qui permette la saisie des scores de quatre candidats au premier tour. Cet algorithme traitera ensuite le candidat numro 1 (et uniquement lui) : il dira s'il est lu, battu, s'il se trouve en ballottage favorable (il participe au second tour en tant arriv en tte l'issue du premier tour) ou dfavorable (il participe au second tour sans avoir t en tte au premier tour).

ENSA Safi

134

Solution
Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsente dignement la catgorie des noncs pigs. En effet, rien de plus facile que d'crire : si le candidat a plus de 50%, il est lu, sinon s'il a plus de 12,5 %, il est au deuxime tour, sinon il est limin. H h h... mais il ne faut pas oublier que le candidat peut trs bien avoir eu 20 % mais tre tout de mme limin, tout simplement parce que l'un des autres a fait plus de 50 % et donc qu'il n'y a pas de deuxime tour !... Moralit : ne jamais se jeter sur la programmation avant d'avoir soigneusement men l'analyse du problme traiter. variables A, B, C, D : entier C1,C2,C3,C4 : Boolen Dbut ecrire_ecran "Entrez les scores des quatre prtendants :" lire_clavier A, B, C, D C1 A > 50 C2 B > 50 ou C > 50 ou D > 50 C3 A >= B et A >= C et A >= D C4 A >= 12,5 Si C1 Alors ecrire_ecran "Elu au premier tour" Sinon si C2 ou Non(C4) Alors ecrire_ecran "Battu, limin, sorti !!! Sinon si C3 Alors ecrire_ecran "Ballotage favorable" Sinon ecrire_ecran "Ballotage dfavorable" FinSi
Fin

ENSA Safi

135

Les Boucles
TantQue boolen(vrai) faire Instructions FinTantQue Pour Compteur Initial Final par ValeurDuPas Instructions finpour Ou Pour Compteur Initial Final par ValeurDuPas Instructions Compteur suivant
ENSA Safi 136

Les Boucles

Choisir pour... Choisir tant que... si le nombre ditrations est connu lavance, choisir la boucle pour si la boucle doit s'arrter quand survient un vnement , choisir la boucle tant que

ENSA Safi

137

Les Boucles
A ne pas faire
1- Des boucles peuvent donc tre imbriques ou successives Cependant, elles ne peuvent jamais, au grand jamais, tre croises. Cela naurait aucun sens logique, et de plus, bien peu de langages vous autoriseraient ne serait-ce qu crire cette structure aberrante.

variables Truc, Trac : Entier Pour Truc instructions Pour Trac instructions finpour (Truc Suivant) instructions finpour (Trac Suivant)

2- Vrification de condition d'arrt variables Truc : Entier Dbut Pour Truc 1 15 faire Truc Truc * 2 ecrire_ecran "Passage numro : ", Truc finpour Fin
ENSA Safi

Truc=2,6,14,30,62,126,254,510,, 1022,2046,4094,8190,16382, 32766,-2,-2,-2,,,,,,,,,,,,

138

Les Boucles
La boucle tant que faire amorage {initialisation de la (des) variable(s) de condition} tantque<expression logique (vraie)> faire traitement {suite dinstructions} relance {r-affectation de la (des) variable(s) de condition} FinTantQue Fonction:-rpter une suite dinstructions tant quune condition est remplie remarque: si la condition est fausse ds le dpart, le traitement nest jamais excut si vous oubliez la r-affectation de la (des) variable(s) de condition la condition, le traitement ne sarrtera jamais .
ENSA Safi 139

Organigramme tantque
Tantque boolen(vraie) faire instruction1 relance FinTantQue
Boolen(vraie) oui Instruction 1 relance non

Instruction 2

Exercice 1
Ecrire un algorithme qui demande lutilisateur un nombre compris entre 1 et 3 jusqu ce que la rponse convienne.

ENSA Safi

141

Solution
variables N : Entier Debut N0 ecrire_ecran "Entrez un nombre entre 1 et 3" TantQue N < 1 ou N > 3 faire lire_clavier N Si N < 1 ou N > 3 Alors ecrire_ecran "Saisie errone. Recommencez FinSi FinTantQue Fin

ENSA Safi

142

Exercice 2
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu ce que la rponse convienne. En cas de rponse suprieure 20, on fera apparatre un message : Plus petit ! , et inversement, Plus grand ! si le nombre est infrieur 10.

ENSA Safi

143

Solution
variables N : Entier Debut N0 ecrire_ecran "Entrez un nombre entre 10 et 20" TantQue N < 10 ou N > 20 faire lire_clavier N Si N < 10 Alors ecrire_ecran "Plus grand !" Sinon si N > 20 Alors ecrire_ecran "Plus petit !" FinSi FinTantQue Fin
ENSA Safi 144

Les Boucles
Smantique de la boucle pour Implicitement, linstruction pour: -initialise une variable de boucle (le compteur) -incrmente cette variable chaque pas -vrifie que cette variable ne dpasse pas la borne suprieure Attention : -le traitement ne doit pas modifier le compteur de boucle

ENSA Safi

145

Interprtation boucle pour


Pour compteur 1 fin faire instruction 1 finpour
Compteur1 compteur<=fin oui Instruction 1 Compteur Compteur+1 non

Instruction 2

Exercice 3
Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite affiche les dix nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18 27.

ENSA Safi

147

Solution
variables N, i : Entier Debut ecrire_ecran "Entrez un nombre : " lire_clavier N ecrire_ecran "Les 10 nombres suivants sont : " Pour i N + 1 N + 10 faire ecrire_ecran i finpour Fin

ENSA Safi

148

Exercice 4
Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite crit la table de multiplication de ce nombre, prsente comme suit (cas o l'utilisateur entre le nombre 7) : Table de 7 : 7x1=7 7 x 2 = 14 7 x 3 = 21 7 x 10 = 70

ENSA Safi

149

Solution
variables N, i : Entier Debut ecrire_ecran "Entrez un nombre : " lire_clavier N ecrire_ecran "La table de multiplication de ce nombre est : " Pour i 1 10 faire ecrire_ecran N, " x ", i, " = ", n*i finpour Fin

ENSA Safi

150

Exercice 5
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule la somme des entiers jusqu ce nombre. Par exemple, si lon entre 5, le programme doit calculer : 1 + 2 + 3 + 4 + 5 = 15 NB : on souhaite afficher uniquement le rsultat, pas la dcomposition du calcul.

ENSA Safi

151

Solution
variables N, i, Som : Entier Debut ecrire_ecran "Entrez un nombre : " lire_clavier N Som 0 Pour i 1 N faire Som Som + i finpour ecrire_ecran "La somme est : ", Som Fin

ENSA Safi

152

Exercice 6
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule sa factorielle. NB : la factorielle de 8, note 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

ENSA Safi

153

Solution
variables N, i, F : Entier Debut ecrire_ecran "Entrez un nombre : " lire_clavier N F1 Pour i 2 N faire FF*i finpour ecrire_ecran "La factorielle est : ", F Fin

ENSA Safi

154

Exercice 7
Ecrire un algorithme qui demande successivement 20 nombres lutilisateur, et qui lui dise ensuite quel tait le plus grand parmi ces 20 nombres : Entrez le nombre numro 1 : 12 Entrez le nombre numro 2 : 14 etc. Entrez le nombre numro 20 : 6 Le plus grand de ces nombres est : 14 Modifiez ensuite lalgorithme pour que le programme affiche de surcrot en quelle position avait t saisie ce nombre : Ctait le nombre numro 2
ENSA Safi 155

Solution
variables N, i, PG : Entier Debut PG -32768 Pour i 1 20 faire ecrire_ecran "Entrez un nombre : " lire_clavier N Si i = 1 ou N > PG Alors PG N FinSi finpour ecrire_ecran "Le nombre le plus grand tait : ", PG Fin En ligne 3, on peut mettre nimporte quoi dans PG, il suffit que cette variable soit affecte pour que le premier passage en ligne 7 ne provoque pas d'erreur. Pour la version amliore, cela donne : variables N, i, PG, IPG : Entier Debut PG -32768 Pour i 1 20 faire ecrire_ecran "Entrez un nombre : " lire_clavier N Si i = 1 ou N > PG Alors PG N IPG i FinSi finpour ecrire_ecran "Le nbre le plus grand tait : ", PG ecrire_ecran "Il a t saisi en position ", IPG Fin

ENSA Safi

156

Exercice 8
Rcrire lalgorithme prcdent, mais cette fois-ci on ne connat pas davance combien lutilisateur souhaite saisir de nombres. La saisie des nombres sarrte lorsque lutilisateur entre un zro.

ENSA Safi

157

Solution
variables N, i, PG, IPG : Entier Debut N1 i0 PG -32766 TantQue N <> 0 faire ecrire_ecran "Entrez un nombre : " lire_clavier N ii+1 Si i = 1 ou N > PG Alors PG N IPG i FinSi FinTantQue ecrire_ecran "Le nombre le plus grand tait : ", PG ecrire_ecran "Il a t saisi en position numro ", IPG Fin

ENSA Safi

158

Exercice 9
lire la suite des prix (en euros entiers et termine par zro) des achats dun client. Calculer la somme quil doit, lire la somme quil paye, et simuler la remise de la monnaie en affichant les textes "10 Euros", "5 Euros" et "1 Euro" autant de fois quil y a de coupures de chaque sorte rendre.

ENSA Safi

159

Solution
variables somdue, M,PE, res, Nb10PE, Nb5PE : Entier Debut PE<-- 1 somdue <-- 0 TantQue PE<> 0 faire ecrire_ecran "Entrez le montant : " lire_clavier PE somdue <-- somdue + PE FinTantQue TantQue res >= 10 faire Nb10PE<-- Nb10PE + 1 res <-- res - 10 FinTantQue Nb5PE<-- 0 Si res >= 5 Nb5PE<-- Nb5PE + 1 res <-- res - 5 FinSi

ecrire_ecran "Rendu de la ecrire_ecran "Vous devez :", somdue , monnaie :" " euros" ecrire_ecran "Billets de 10 E : ", ecrire_ecran "Montant vers :" lire_clavier M res <-- M - somdue Nb10PE<-- 0 Nb10PE ecrire_ecran "Billets de 5 E : ", Nb5PE
ENSA Safi

ecrire_ecran "Pices de 1 E : ", 160 res

Fin

Exercice 10
crire un algorithme qui permette de connatre ses chances de gagner au tierc, quart, quint et autres impts volontaires. On demande lutilisateur le nombre de chevaux partants, et le nombre de chevaux jous. Les deux messages affichs devront tre : Dans lordre : une chance sur X de gagner Dans le dsordre : une chance sur Y de gagner X et Y nous sont donns par la formule suivante, si n est le nombre de chevaux partants et p le nombre de chevaux jous (on rappelle que le signe ! signifie "factorielle", comme dans l'exercice 5.6 ci-dessus) : X = n ! / (n - p) ! Y = n ! / (p ! * (n p) !) NB : cet algorithme peut tre crit dune manire simple, mais relativement peu performante. Ses performances peuvent tre singulirement augmentes par une petite astuce. Vous commencerez par crire la manire la plus simple, puis vous identifierez le problme, et crirez une deuxime version permettant de le rsoudre..
ENSA Safi 161

Solution
Spontanment, on est tent d'crire l'algorithme suivant : variables N, P, i, Num, Dno1, Dno2 : Entier Debut ecrire_ecran "Entrez le nombre de chevaux partants : " lire_clavier N ecrire_ecran "Entrez le nombre de chevaux jous : " lire_clavier P Num 1 Pour i 2 N faire Num Num * i finpour Dno1 1 Pour i 2 N-P faire Dno1 Dno1 * i finpour Dno2 1 Pour i 2 P faire Dno2 Dno2 * i finpour ecrire_ecran "Dans lordre, une chance sur ", Num / Dno1 ecrire_ecran "Dans le dsordre, une sur ", Num / (Dno1 * Dno2) Fin Cette version, formellement juste, comporte tout de mme deux faiblesses. La premire, et la plus grave, concerne la manire dont elle calcule le rsultat final. Celui-ci est le quotient d'un nombre par un autre ; or, ces nombres auront rapidement tendance tre trs grands. En calculant, comme on le fait ici, d'abord le numrateur, puis ensuite le dnominateur, on prend le risque de demander la machine de stocker des nombres trop grands pour qu'elle soit capable de les coder (cf. le prambule). C'est d'autant plus bte que rien ne nous oblige procder ainsi : on n'est pas oblig de passer par la division de deux trs grands nombres pour obtenir le rsultat voulu. La deuxime remarque est qu'on a programm ici trois boucles successives. Or, en y regardant bien, on peut voir qu'aprs simplification de la formule, ces trois boucles comportent le mme nombre de tours ! (si vous ne me croyez pas, crivez un exemple de calcul et biffez les nombres identiques au numrateur et au dnominateur). Ce triple calcul (ces trois boucles) peut donc tre ramen(es) un(e) seul(e). Et voil le travail, qui est non seulement bien plus court, mais aussi plus performant : variables N, P, i, O, F : Entier Debut ecrire_ecran "Entrez le nombre de chevaux partants : " lire_clavier N ecrire_ecran "Entrez le nombre de chevaux jous : " lire_clavier P A1 B1 Pour i 1 P faire A A * (i + N - P) BB*i finpour ecrire_ecran "Dans lordre, une chance sur ", A ecrire_ecran "Dans le dsordre, une chance sur ", A / B Fin

ENSA Safi

162

Comparaison boucles pour et tant que


pour cpt 1 nbVal faire ecrire_ecran "Donnez une valeur :" lire_clavier valeur totalValeurstotalValeurs+ valeur {cumul} Finpour . quivaut cpt 0 tant que cpt <nbVal faire ecrire_ecran "Donnez une valeur :" lire_clavier valeur totalValeurstotalValeurs+ valeur{cumul} cpt cpt + 1 {compte le nombre de valeurs traites} ENSA Safi fintantque

163

Les Boucles rpterjusqu (suit)


La boucle rpter ... jusqu Rpter (r)affectation de la (des) variable(s) de condition traitement {suite dinstructions} jusqu <expression logique (faux)> Fonction: -excuter une suite dinstructions au moins une fois et la rpter tant quune condition est pas remplie Remarque: le traitement dans lexemple prcdent se limite la r-affectation de la variable de condition

ENSA Safi

164

Les Boucles rpterjusqu (suit)


Comparaison boucles rpter et tant que (exemple exercice1) Rpter ecrire_ecran "Donnez une valeur positive paire :" lire_clavier valeur jusqu (valeur > 1 ET (valeur < 3) ) quivaut : ecrire_ecran "Donnez une valeur positive paire :" lire_clavier valeur tantque (valeur < 1 ou (valeur > 3) ) faire ecrire_ecran "Donnez une valeur positive paire:" lire_clavier valeur FinTantQue
ENSA Safi 165

Les Boucles rpterjusqu (suit)


Comparaison boucles rpter et tant que (suite) boucle tantque -condition vrifie avant chaque excution du traitement -le traitement peut donc ne pas tre excut -de plus : la condition porte surtout sur la saisie de nouvelles variables (relance) boucle rpter -condition vrifie aprs chaque excution du traitement -le traitement est excut au moins une fois -de plus : la condition porte surtout sur le rsultat du traitement Remarque: la boucle rpter est typique pour les saisies avec vrification.
ENSA Safi 166

Organigramme rpterjusqu
rpter instruction1 relance Jusqu boolen (faux)
Instruction 1 relance Boolen(vraie) non Instruction 2 oui

Choisir pour... tant que rpter


NON Traitement excut au moins une fois ? Boucle tant que

OUI

NON Nombre ditrations connu ?

Boucle rpter

OUI Boucle pour

ENSA Safi

168

Les Tableaux
Un ensemble de valeurs portant le mme nom de variable et repres par un nombre, sappelle un tableau, ou encore une variable indice. Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappelle lindice. Chaque fois que lon doit dsigner un lment du tableau, on fait figurer le nom du tableau, suivi de lindice de llment, entre [].

Syntaxe variables T[1:4] : tableau de rel T[2] 0 T[4] 0 est quivalent i4 T[i] 0
ENSA Safi 169

Les Tableaux
Dfinition du type
nom du tableau 1 2 5 3 -78 4 2 5 -21 Indice 6 8

tab 12

Contenu du tableau 1 2 e s 3 t 4 e 5 null

untab t

Remarques : Indices : en gnral, dmarrage 1, mais en C++, dmarrage 0 Nombre doctets occups : dpend du type des valeurs enregistres Null est un flag de fin de chaine de caractre
ENSA Safi 170

Exercice 1
Ecrire un algorithme qui dclare et remplisse un tableau de 7 valeurs numriques en les mettant toutes zro.

ENSA Safi

171

Solution
variables Truc [1:7] : tableau de rel i : entier Debut Pour i 1 7 faire Truc[i] 0 finpour Fin

ENSA Safi

172

Exercice 2
Ecrire un algorithme qui dclare et remplisse un tableau contenant les six voyelles de lalphabet latin.

ENSA Safi

173

Solution
variables Truc [1:6] : Tableau de Caractre Debut Truc[1] "a" Truc[2] "e" Truc[3] "i" Truc[4] "o" Truc[5] "u" Truc[6] "y" Fin

ENSA Safi

174

Exercice 3
Ecrire un algorithme qui dclare un tableau de 9 notes, dont on fait ensuite saisir les valeurs par lutilisateur.

ENSA Safi

175

Solution
variables Notes [1:4] : Tableau de entier i : entier Debut Pour i 1 4 faire ecrire_ecran "Entrez la note numro ", i lire_clavier Notes[i] finpour Fin

ENSA Safi

176

Exercice 4
Que produit lalgorithme suivant ? variables Nb [1:6] : tableau de Entier i : Entier Dbut Pour i 1 6 faire Nb[i] i * i finpour Pour i 1 6 faire ecrire_ecran Nb[i] finpour Fin Peut-on simplifier cet algorithme avec le mme rsultat ?
ENSA Safi 177

Solution
Cet algorithme remplit un tableau avec six valeurs : 1, 4, 9, 16, 25,36. Il les crit ensuite lcran. Simplification : variables T[1:6] : tableau de Entier i : Entier Dbut Pour i 1 6 faire Nb[i] i * i ecrire_ecran Nb[i] finpour Fin
ENSA Safi 178

Exercice 5
Que produit lalgorithme suivant ? variables N[1:7]: tableau de Entier i, k : Entier Dbut N[1] 1 Pour k 2 7 faire N[k] N[k-1] + 2 finpour Pour i 1 7 faire ecrire_ecran N[i] finpour Fin Peut-on simplifier cet algorithme avec le mme rsultat ?
ENSA Safi 179

Solution
Cet algorithme remplit un tableau avec les sept valeurs : 1, 3, 5, 7, 9, 11, 13. Il les crit ensuite lcran. Simplification : variables N[1:7]: tableau de Entier k : Entier Dbut N[1] 1 ecrire_ecran N[1] Pour k 2 7 faire N[k] N[k-1] + 2 ecrire_ecran N[k] finpour Fin
ENSA Safi 180

Exercice 6
Que produit lalgorithme suivant ? variables Suite [1:8]: tableau de Entier i : Entier Dbut Suite[1] 1 Suite[2] 1 Pour i 3 8 faire Suite[i] Suite[i-1] + Suite[i-2] finpour Pour i 1 8 faire ecrire_ecran Suite[i] finpour Fin
ENSA Safi 181

Solution
Cet algorithme remplit un tableau de 8 valeurs : 1, 1, 2, 3, 5, 8, 13, 21

ENSA Safi

182

Exercice 7
Ecrivez la fin de lalgorithme 3 afin que le calcul de la moyenne des notes soit effectu et affich lcran.

ENSA Safi

183

Solution
variables Notes [1:9]: tableau de Entier S,i : Entier Debut s0 Pour i 1 9 faire ecrire_ecran "Entrez la note n ", i lire_clavier Notes[i] s s + Notes[i] finpour ecrire_ecran "Moyenne :", s/9 Fin

ENSA Safi

184

Test
crire un algorithme qui trie 4 valeur saisie par lutilisateur par ordre croissant ? crire un algorithme qui affiche les 100 nombres premiers? fonction Mod permet de rcuprer le reste de la division dun nombre par un deuxime nombre. Par exemple : A Mod(10,3) A vaut 1 car 10 = 3*3 + 1 crire un algorithme qui demande lutilisateur les coordonnes dun point X, et affich lcran la couleur de la zone o il est situ. CHERCHE NUMERO DOUBLE DANS UN TABLEAU CHERCHE LE NUMERO MANQUANT DANS UN TABLEAU

ENSA Safi

185

variables Num [1:10] : tableau de Entier variables i,S,N : Entier variables premier : booleen Debut N 1 S 1 Tantque N<=10 faire Premier vrai Pour i 2 S-1 faire si mod(S,i)=0 alors Premierfaux Finsi finpour si Premier alors Num[N] S NN+1 finsi SS+1 fintantque Fin

Tableaux Multidimensionnels
Tableaux deux dimensions Exemple tableau 2 lignes et 7 colonnes 1 1 10 2 9 2
3 132 1

3
20 5 0

5
25 124 2 7

6
9

7
422

Dclaration tableau[1:2, 1:7] dentiers


indices min et max des lignes indices min et max des colonnes

ENSA Safi

187

Tableaux Multidimensionnels

REMARQUE ESSENTIELLE : Il ny a aucune diffrence qualitative entre un tableau deux dimensions ( i, j ) et un tableau une dimension ( i * j ). De mme que le jeu de dames quon vient dvoquer, tout problme qui peut tre modlis dune manire peut aussi tre modlis de lautre. Simplement, lune ou lautre de ces techniques correspond plus spontanment tel ou tel problme, et facilite donc (ou complique, si on a choisi la mauvaise option) lcriture et la lisibilit de lalgorithme. Syntaxe variables Notes [1:9,1:9] : tableau de Entier Notes[1, 8] 0

ENSA Safi

188

Exercice 1
crivez un algorithme remplissant un tableau de 6 sur 13, avec des zros.

ENSA Safi

189

Solution
variables Notes [1:6,1:13] :tableau de Entier i, j :entier

Debut Pour i 1 6 faire Pour j 1 13 faire Truc[i, j] 0 finpour finpour Fin

ENSA Safi

190

Exercice 2
Quel rsultat produira cet algorithme ? variables X[1:2,1:3] : tableau de Entier i, j, val : Entier Dbut Val 1 Pour i 1 2 faire Pour j 1 3 faire X[i, j] Val Val Val + 1 finpour finpour Pour i 1 2 faire Pour j 1 3 faire ecrire_ecran X[i, j] finpour finpour Fin
ENSA Safi 191

Solution
Cet algorithme remplit un tableau de la manire suivante: X[1, 1]= 1 X[1, 2] = 2 X[1, 3]= 3 X[2, 1]= 4 X[2, 2] = 5 X[2, 3]= 6 Il crit ensuite ces valeurs lcran, dans cet ordre.

ENSA Safi

192

Exercice 3
Quel rsultat produira cet algorithme ? variables X[1:2,1:3] : tableau de Entier i, j, val : Entier Dbut Val 1 Pour i 1 2 faire Pour j 1 3 faire X[i, j] Val Val Val + 1 finpour finpour Pour j 1 3 faire Pour i 1 2 faire ecrire_ecran X[i, j] finpour finpour Fin
ENSA Safi 193

Solution
Cet algorithme remplit un tableau de la manire suivante: 1 4 2 5 3 6 Il crit ensuite ces valeurs lcran, dans cet ordre.

ENSA Safi

194

Exercice 4
Quel rsultat produira cet algorithme ? variables T[1:4,1:2] : tableau de Entier k, m : Entier Dbut Pour k 1 4 faire Pour m 1 2 faire //// T[k, m] (k + 1) + 4 * m T[k, m] (2*(k-1))+m*m finpour finpour Pour k 1 4 faire Pour m 1 2 faire ecrire_ecran T[k, m] finpour finpour Fin
ENSA Safi 195

Solution
Cet algorithme remplit un tableau de la manire suivante: T[1, 1] = 6 T[1, 2] = 10 T[2, 1] = 7 T[2, 2] = 11 T[3, 1] = 8 T[3, 2] = 12 T[4, 1] = 9 T[4, 2] = 13 Il crit ensuite ces valeurs lcran, dans cet ordre.

ENSA Safi

196

Exercice 5
Ecrire algorithme quivalent a exercice 4 en utilisant un tableau unidimensionnel

ENSA Safi

197

variables T[1:8] : tableau de Entier k, m,i : Entier Dbut Pour k 1 4 faire Pour m 1 2 faire /////T[k, m] k + m i (2*(k-1))+m /////T[k, m] (k + 1) + 4 * m T[i] (k + 1) + 4 * m finpour finpour Pour k 1 4 faire Pour m 1 2 faire i (2*(k-1))+m ecrire_ecran T[i] finpour finpour Fin

Exercice 6
Soit un tableau T deux dimensions (12, 8) pralablement rempli de valeurs numriques. crire un algorithme qui recherche la plus grande valeur au sein de ce tableau.

ENSA Safi

199

Solution
variables i, j, iMax, jMax : entier variables T[1:12,1:8] : tableau de Entier Le principe de la recherche dans un tableau deux dimensions est strictement le mme que dans un tableau une dimension, ce qui ne doit pas nous tonner. La seule chose qui change, c'est qu'ici le balayage requiert deux boucles imbriques, au lieu d'une seule. Debut ... iMax 1 jMax 1 Pour i 1 12 faire Pour j 1 8 faire Si T[i,j] > T[iMax,jMax] Alors iMax i jMax j FinSi finpour finpour ecrire_ecran "Le plus grand lment est ", T[iMax,jMax] ecrire_ecran "Il se trouve aux indices ", iMax, "; ", jMax Fin

ENSA Safi

200

Procdures et Fonctions
Avantages:
Les procdures ou fonctions permettent de ne pas rpter plusieurs fois une mme squence dinstructions au sein du programme. La mise au point du programme est plus rapide en utilisant des procdures et des fonctions. En effet, elle peut tre ralise en dehors du contexte du programme. Une procdure peut tre intgre un autre programme, ou elle pourra tre range dans une bibliothque doutils ou elle pourra tre utilise par nimporte quel programme.

Utilisation :
Lors de la conception dun programme deux aspects apparaissent : - La dfinition de la procdure ou fonction. - Lappel de la procdure ou fonction au sein du programme. Lcriture de la procdure ou fonction seffectue en fonction de paramtres formels utiliss dans la conception de celle-ci. Par contre au moment de lutilisation de la procdure ou fonction, on associera de vritables valeurs ces paramtres grce des paramtres dappel ou paramtres effectifs.
ENSA Safi 201

Notion de fonction

ENSA Safi

202

Les Fonctions Prdfinies: Math


A Sin(35) Une fonction est donc constitue de trois parties : le nom proprement dit de la fonction. Ce nom ne sinvente pas ! Il doit imprativement correspondre une fonction propose par le langage. Dans notre exemple, ce nom est SIN. deux parenthses, une ouvrante, une fermante. Ces parenthses sont toujours obligatoires, mme lorsqu'on n'crit rien l'intrieur. une liste de valeurs, indispensables la bonne excution de la fonction. Ces valeurs sappellent des arguments, ou des paramtres. Certaines fonctions exigent un seul argument, dautres deux, etc. et dautres encore aucun. A noter que mme dans le cas de ces fonctions nexigeant aucun argument, les parenthses restent obligatoires. Le nombre darguments ncessaire pour une fonction donne ne sinvente pas : il est fix par le langage. Par exemple, la fonction sinus a besoin dun argument (ce nest pas surprenant, cet argument est la valeur de langle). Si vous essayez de lexcuter en lui donnant deux arguments, ou aucun, cela dclenchera une erreur lexcution. Notez galement que les arguments doivent tre dun certain type, et quil faut respecter ces types.

ENSA Safi

203

Les Fonctions Prdfinies: Math


Rsultat atn(p1) cos(p1) sin(p1) tan(p1) exp(p1) rac2(p1) car(p1) arc tangente de p1 cosinus de p1 sinus de p1 tangente de p1 exponentielle de p1 entier, rel entie r, rel entier, rel entier, rel entie r, rel p1 entier, rel entier, rel entier, rel entier, rel entie r, rel entier, rel entier

racine carre de p1 entier, rel caractre ayant pour car, chane code ansi la valeur de p1 entier,rel

chnombre(p1) convertit p1 en nombre

chane

ENSA Safi

204

Les Fonctions Prdfinies: numriques classiques


Une fonction extrmement rpandue est celle qui permet de rcuprer la partie entire dun nombre : Aprs : A Ent(3,228) A vaut 3 Cette fonction permet de rcuprer le reste de la division dun nombre par un deuxime nombre. Par exemple : A 10 Mod 3 B 12 Mod 2 A vaut 1 car 10 = 3*3 + 1 B vaut 0 car 12 = 6*2

Cette fonction permet de rcuprer le quotion de la division dun nombre par un deuxime nombre. Par exemple : B 12 div 2 B vaut 6 car 12 = 6*2 On a :
ENSA Safi

Gnration de nombres alatoires Aprs : Toto Alea() 0 =< Toto < 1


205

Les Fonctions Prdfinies: texte


Tous les langages, je dis bien tous, proposent les fonctions suivantes, mme si le nom et la syntaxe peuvent varier dun langage lautre : long(chane) : renvoie le nombre de caractres dune chane milieu(chane,n1,n2) : renvoie un extrait de la chane, commenant au caractre n1 et faisant n2 caractres de long. Ce sont les deux seules fonctions de chanes rellement indispensables. Cependant, pour nous pargner des algorithmes fastidieux, les langages proposent galement : gauche(chane,n) : renvoie les n caractres les plus gauche dans chane. droite(chane,n) : renvoie les n caractres les plus droite dans chane rang(chane1,chane2,p) : renvoie un nombre correspondant la position de chane2 dans chane1 partir de la position p. Si chane2 nest pas comprise dans chane1, la fonction renvoie zro.

ENSA Safi

206

long("Bonjour, a va ?") long("") milieu("Zorro is back", 4, 7) milieu("Zorro is back", 12, 1) gauche("Et pourtant", 8) droite("Et pourtant", 4) rang("Un pur bonheur", "ur",1) rang("Un pur bonheur", "techno",1) rang("Un pur bonheur", "ur",8)

vaut vaut vaut vaut vaut vaut vaut vaut vaut

16 0 "ro is b" "c" "Et pourt" "t" 5 0 13

Exercice 1
crivez une fonction qui renvoie le nombre de voyelles contenues dans une chane de caractres passe en argument. Au passage, notez qu'une fonction a tout fait le droit d'appeler une autre fonction.

Solution
Fonction NbVoyelles (e Mot : chaine):entier variables i, nb : entier debut nb<--0 Pour i 1 Long(Mot) faire Si rang("aeiouy",Milieu(Mot,i,1),1) <> 0 Alors nb <-- nb + 1 FinSi finpour valeur_retour <-- nb finfonction
ENSA Safi 209

Exercice 2
Rcrivez la fonction rang, vue prcdemment, laide des fonctions millieu et Long (comme quoi, rang, la diffrence de millieu et Long , nest pas une fonction indispensable dans un langage).

ENSA Safi

210

Solution
fonction foncrang(e aa,b:chaine ;e p:entier):entier variables i , r :entier dbut i <-- p TantQue (i < (long(aa) - long(b))) et (b <> Milieu(aa, i, Long(b))) faire i <-- i + 1 FinTantQue Si b <> Milieu(aa, i, Long(b)) Alors var r<-- 0 xx : entier Sinon f1, f2 :chaine r<-- i debut f1 <--"bbb bonjoonur" finsi f2 <--"on" valeur_retour <--r xx <-- foncrang(f1,f2,7) finfonction ecrire_ecran xx
fin
ENSA Safi 211

Procdures et Fonctions
Le corps du programme sappelle alors la procdure principale, et ces groupes dinstructions auxquels on a recours sappellent des fonctions et des sous-procdures Fonction s'crit toujours en-dehors au debut de la procdure principale( au niveau declaration). Dans une fonction ont peut appel une autre fonction mais on ne peut jamais dfinir une autre fonction. Diffrence entre fonction et procdure Les fonctions ne sont qu'un cas particulier des sous-procdures : celui o doit tre renvoy vers la procdure appelante une valeur et une seule. et celle-ci doit appartenir un type de base du Pascal. C est dire un nombre, un caractre ou une chane de caractr, boolean. Les procdures dans tous les autres cas (celui o on ne renvoie aucune valeur, comme celui ou en en renvoie plusieurs.
ENSA Safi 212

Procdures et Fonctions :Syntaxe


Declaration
Fonction RepOuiNon(e Msg : Caractre) : Caractre arguments formelles variables rsultat : caractre debut . valeur_retour rsultat qui indique quelle valeur doit prendre la fonction lorsqu'elle est utilise par le programme. Valeur_retour ou renvoyer finfonction resultat

Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut ecrire_ecran RepOuiNon("oui") argument rel . fin ENSA Safi 213

Procdures et Fonctions :Syntaxe


Declaration procedure
Procedure RepOuiNon(e Msg : Caractre) arguments formelles variables rsultat : caractre debut . finProcedure

Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut RepOuiNon("oui") . fin

ENSA Safi

214

Procdures et Fonctions : passage par valeur


Paramtre formel : variable utilise dans le corps du sousprogramme qui reoit une valeur de lextrieur (ils font parti de la description de la fonction) Paramtre effectif : Il s'agit de la variable (ou valeur) fournie lors de l'appel du sous programme (valeurs fournies pour utiliser la fonction et valeurs renvoyes) Copie de la valeur du paramtre effectif vers le paramtre formel correspondant lors de l'appel Paramtres formel et effectif ont des noms diffrents

Procdures et Fonctions : passage par valeur


variables X : Entier Procedure afficheecran(e k : entier) k=25 Debut ecrire_ecran k finprocedure Dbut X 25 afficheecran(X) X=25 Fin Remarque: avec algoexe il faut ajouter le mot e avant les argument Exemple : afficheecran(e k : entier)
ENSA Safi 216

Passage par valeur

Fonctions:Porte des variables


Si P1 reprsente le programme principal et P2, P3 deux fonctions, le schma qui suit illustre le propos prcdent. Dans P1 on dispose de X,Y et Z Dans P2 on dispose de A,B et X Dans P3 on dispose de U,V,X et Y
Remarque: avec algoexe il faut ajouter le mot globale Exemple : variables globale x : entier
ENSA Safi

variables X : Entier P1 Fonction P2(e A, B : entier) .. finfonction variables Y : Entier Fonction P3(e U, V : entier) .. finfonction variables Z : Entier Debut Fin
217

Exemple de fonction
Mauvaise Structure : ... ecrire_ecran "Etes-vous mari ?" lire_clavier Rep1 TantQue Rep1 <> "Oui" et Rep1 <> "Non" faire ecrire_ecran "Tapez Oui ou Non" lire_clavier Rep1 FinTantQue ... ecrire_ecran "Avez-vous des enfants ?" lire_clavier Rep2 TantQue Rep2 <> "Oui" et Rep2 <> "Non" faire ecrire_ecran "Tapez Oui ou Non" lire_clavier Rep2 FinTantQue ... Bonne structure : Fonction RepOuiNon() : caractre variables truc : car debut lire_clavier Truc TantQue Truc <> "Oui" et Truc <> "Non" faire ecrire_ecran "Tapez Oui ou Non" lire_clavier Truc FinTantQue valretTruc

finfonction Debut ... ecrire_ecran "Etes-vous mari ?" Rep1 RepOuiNon() ... ecrire_ecran "Avez-vous des enfants ?" ENSA Safi 218 Rep2 RepOuiNon() ... Fin

Exercice 1
Quel rsultat produira cet algorithme ? procedure echange (e a,b : rel) variables c : rel debut c a a b b c finprocedure variables x, y : rel Debut x 2 y5 echange(x,y) ecrire_ecran x,y
ENSA Safi 219

Fin

solution1
Quel rsultat produira cet algorithme ?

variables x, y : entier Procedure echange () variables c : entier debut c <-- x x <-- y y <-- c finprocedure

Debut x <-- 2 y<-- 5 echange () ecrire_ecran x,y Fin

ENSA Safi

220

Exercice 2
crivez une fonction qui renvoie la somme de cinq nombres fournis en argument.

ENSA Safi

221

Solution
Fonction Sum(e a1,b,c,d,e1: entier) : entier variables result :entier debut result a1+b+c+d+e1 valeur_retour result Finfonction variables aa, bb, cc, dd, ee,res: entier Debut ecrire_ecran "entrer 5 nbrs" lire_clavier aa,bb,cc,dd,ee Res <-- Sum(aa,bb,cc,dd,ee) ecrire_ecran "la som est",Res fin

Exercice 3
crivez lalgorithme dune procdure permettant deffectuer la division euclidienne de deux entiers a et b. On appellera q le quotient et r le reste de cette division. On rappelle la formule de la division : a=b*q + r avec r < b.

ENSA Safi

223

solution1
variables globale q, r : rels Procedure division_euclidienne (e a,b : entier) Prcondition : aucune Donnes : a et b Donnes / Rsultats : q et r Description : effectue la division euclidienne de a par b Variable locale : aucune Dbut q0 ra Tantque r>=b faire q q+1 r r-b FinTantque finprocedure
ENSA Safi 224

variables v1, v2 : rels Dbut ecrire_ecran " premire valeur " lire_clavier v1 ecrire_ecran "euxime valeur" lire_clavier v2 Division_euclidienne (v1,v2) ecrire_ecran q, r Fin

solution2
variables r : rels Fonction division_euclidienne (e a,b : entier) Prcondition : aucune Donnes : a et b Donnes / Rsultats : q et r Description : effectue la division euclidienne de a par b variables q: rels Dbut q0 ra Tantque r>=b faire q q+1 r r-b FinTantque Valeur_retour q finfonction
ENSA Safi 225

variables v1, v2,qq : rels Dbut ecrire_ecran " premire valeur " lire_clavier v1 ecrire_ecran "deuxime valeur" lire_clavier v2 qqDivision_euclidienne (v1,v2) ecrire_ecran qq, r Fin

Exercice 4
crivez lalgorithme dune fonction perimetre_ rayon _cercle permettant de retourner le rayon dun cercle en fonction de son primtre (pass en paramtre). crivez ensuite une fonction rayon_aire_cercle permettant de retourner le aire dun cercle en fonction de son rayon (pass en paramtre). crivez ensuite une fonction perimetre_aire_cercle qui retourne laire dun cercle en utilisant la fonction perimetre_ rayon _cercle susmentionnes. On souhaite maintenant crire un sous-programme (qui utilise les deux fonctions prcdentes) permettant partir du primtre dun cercle de calculer sa surface. crivez lentte de ce sous programme de deux manires diffrentes.

ENSA Safi

226

You might also like