Upload
fatimaohajou94
View
16
Download
1
Embed Size (px)
Citation preview
Initiation la programmationalgorithmique
Anne Acadmique 2007-2008
ENSA Safi 2
Plan du cours
Introduction linformatique Architecture dun ordinateur Dcomposition fonctionnelleConcepts cls
Introduction
ENSA Safi 4
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 5
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 6
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 7
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 8
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 9
ENSA Safi 10
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 11
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 12
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 13
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 14
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 15
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 16
+ + + +
Lecture/criture
Unit decommande
tats internes:Etat0, Etat1, Etat2,
...
Ruban= entre,sortie etmmoire
Etat de lamachine
Contenu dela cellule
Ecrit sur leruban
Dplacementruban Etat suivant
Etat0 vide D Etat0Etat0 + D Etat1
Le Programme
La machine de Turing
ENSA Safi 17
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 18
Exemples
Recherche dun mot dans un dictionnaire : parcours linaire VS parcours dichotomique
Tri dune liste dlments
Problmes NP-complets
ENSA Safi 19
Graphique : complexit algorithmique
Nbre dinstructions
Taille des donnes (N)
linaire
logarithmique
ENSA Safi 20
Bon ou mauvais programme ?
Aisment lisible donc bien spcifi, bien documentClair, donc bien structurAisment modifiableFacile tester, dbugger Robuste (erreurs de lutilisateur)
CorrectEfficace
ENSA Safi 21
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
Architecture dun ordinateur
ENSA Safi 23
Architecture dun ordinateur
La mmoire centraleLunit centrale de traitement (Central Processing Unit)
Les units dentre/sortiesLes units priphriques
Illustrations
ENSA Safi 24
Diagramme fonctionnel dune architecture de Von Neumann
Data Memory
Arithmetic Unit
ControlUnit
Program Memory
Program Interface
Inpu
t Int
erfa
ce
Out
put I
nter
face
Illustration reprise de Tib[2002]
ENSA Safi 25
Ordres de grandeur
K =Kilo 2^10 = 1 024M= Mga 2^20 =1 048 576G= Giga 2^30 =1 073 741 824T=Tra 2^40 =1 099 511 627 776
ENSA Safi 26
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 27
Schma de principe
Memoire centrale
Registre donnes
Registre adresseL/E
Connecteurs adresse
Connecteurs donnes
ENSA Safi 28
Lunit centrale de traitement (CPU)
Les instructions
Les adresses
Unit de contrle / unit arithmtique et logique
Les registres
ENSA Safi 29
Les instructions
Trois informations ncessaires la CPU en contact avec la mmoire RAM.
1. Quelle information traiter ?2. Quel traitement effectuer ?3. O ranger le rsultat ?
Architecture RISC et CISC
ENSA Safi 30
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 31
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 32
Circuit additionneur
OU
ET
ET
Additionneur 2 bits
ENSA Safi 33
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 34
Ordres de grandeurs (2005)
Processeur 32 - 64 bitsMmoire RAM = 1 GoMmoire dure = 200 GoVitesse du processeur = 3 GHz
+ Loi de Moore : cf article du Pour La Science
Illustrations des composants
ENSA Safi 36
Carte mre (mother board)
ENSA Safi 37
CPU
ENSA Safi 38
Carte Graphique
ENSA Safi 39
Carte Son
ENSA Safi 40
Carte rseau
ENSA Safi 41
Les Bus
ENSA Safi 42
Connecteurs dentre/sortie
ENSA Safi 43
Hirarchie mmoire
Dans un ordinateur, le processeur accde aux instructions du programme excuter ainsi qu'aux donnes ncessaires son excution depuis la mmoire.
Programmation Procdurale
ENSA Safi 45
Bien distinguer !
Spcification d un algorithme :ce que fait lalgorithmecahier des charges du problme rsoudre
Expression d un algorithme :comment il le faittexte dans un langage de type Pascal / C
Implmentation d un algorithme :traduction du texte prcdentdans un langage de programmation rel
ENSA Safi 46
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 47
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 48
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 nomde 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 49
dclaration et assignation dune variable
Variables i : integer ;
type entier (entier : type prdifini integer : mot cl du langage)
identificateur
i:=4;
ENSA Safi 50
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 51
Notion de fonction
ENSA Safi 52
Dclaration dune fonction Comprend essentiellement trois lments:
1. Le nom de la fonction2. La liste des types darguments3. Le type de retour de la fonction
Exemples : Function exposant ( i , j : integer ) : integer ;
ENSA Safi 53
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 54
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 55
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 56
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 57
Solution 1
Function calculeSomme ( i , j : integer ) : integer ;
Begin
somme := i+j ;
End ;
ENSA Safi 58
Solution 2
Function somme ( i , j : integer ) : integer ;
Begin
somme := i+j ;
If somme
ENSA Safi 59
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 60
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
Premiers algorithmes
Anne Acadmique 2007-2008
Plan :Premiers algorithmesLes Variables Instruction daffectation Les instructions de lecture et dcritureLes TestsLes Boucles Les TableauxProcdures et Fonctions Les Fichiers
ENSA Safi 63
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 64
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 65
Pourquoi un cours dalgorithmique ? concevoir une solution
rflchir
ENSA Safi 66
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 67
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 68
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.
Structure de base dun programme
Dclaration de variables et fonctionsProgramme principale
Dbut..
fin
ENSA Safi 70
Variables
La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de luicoller 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 seulevaleur
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 71
Type variable
Type Numrique Type caractreType chaneType boolen
ENSA Safi 72
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 nom_type
caractres autoriss
ensemble de valeurs
exemplesde valeurs
entier ententier
0 9 [-32768..+32767] -152+4560 ou 4560
rel rel 0 9, . -12.3652+0.186 ou 0.186
ENSA Safi 73
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 74
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 75
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 76
Exercice 1
Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ?variables A, B : EntiersDbut
A 1B A + 3A 3
Fin
ENSA Safi 77
Solution
Aprs La valeur des variables est :A 1 A = 1 B = ?B A + 3 A = 1 B = 4A 3 A = 3 B = 4
ENSA Safi 78
Exercice 2
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ?
Variables A, B, C : EntierDbut
A 5B 3C A + BA 2C B A
Fin
ENSA Safi 79
Solution
Aprs La valeur des variables est :A 5 A = 5 B = ? C = ?B 3 A = 5 B = 3 C = ?C A + B A = 5 B = 3 C = 8A 2 A = 2 B = 3 C = 8C B A A = 2 B = 3 C = 1
ENSA Safi 80
Exercice 3
Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ?
Variables A, B : EntierDbut
A 5B A + 4A A + 1B A 4
Fin
ENSA Safi 81
Solution
Aprs La valeur des variables est :A 5 A = 5 B = ?B A + 4 A = 5 B = 9A A + 1 A = 6 B = 9B A 4 A = 6 B = 2
ENSA Safi 82
Exercice 4
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ?
Variables A, B, C :EntierDbut
A 3B 10C A + BB A + BA C
Fin
ENSA Safi 83
Solution
Aprs La valeur des variables est :A 3 A = 3 B = ? C = ?B 10 A = 3 B = 10 C = ?C A + B A = 3 B = 10 C = 13B A + B A = 3 B = 13 C = 13A C A = 13 B = 13 C = 13
ENSA Safi 84
Exercice 5
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ?
variablesA, B, C :EntierDbut
A 3B 10C A + BB A + BA C
Fin
ENSA Safi 85
Solution
Aprs La valeur des variables est :A 5 A = 5 B = ?B 2 A = 5 B = 2A B A = 2 B = 2B A 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 86
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 87
Solution
Dbut
C AA BB C
FinOn est oblig de passer par une variable dite temporaire (la
variable C).
ENSA Safi 88
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 89
Solution
DbutD CC BB AA D
FinEn fait, quel que soit le nombre de variables, une seule
variable temporaire suffit
ENSA Safi 90
Exercice 8
Que produit lalgorithme suivant ?Variables A, B, C : Caractre
DbutA "423"B "12"C A + B
Fin
ENSA Safi 91
Solution
Il ne peut produire quune erreur dexcution, puisquon ne peut pas additionner des caractres.
ENSA Safi 92
Exercice 9
Que produit lalgorithme suivant ?Variables A, B, C :Caractre
DbutA "423"B "12"C A & B
Fin
ENSA Safi 93
Solution
En revanche, on peut les concatner. A la fin de lalgorithme, C vaudra donc "42312".
ENSA Safi 94
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 95
Les instructions de lecture et dcriture: Syntaxe
lire_clavier Titi ou Lire TitiDs 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 TotoDans 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 96
Exercice 1
Quel rsultat produit le programme suivant ?Variables v, double: entier
DbutV 231Double V * 2ecrire_ecran Vecrire_ecran le double est ,Double
Fin
ENSA Safi 97
Solution
On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)
ENSA Safi 98
Exercice 2
Ecrire un programme qui demande un nombre lutilisateur, puis qui calcule et affiche le carr de ce nombre.
ENSA Safi 99
Solution
variables nb, carr : EntierDbut
ecrire_ecran "Entrez un nombre :"lire_clavier nbcarr nb * nbecrire_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*nbC'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 100
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 101
Solution
variables nb, pht, ttva, pttc : entierDbut
ecrire_ecran "Entrez le prix hors taxes :"lire_clavier phtecrire_ecran "Entrez le nombre darticles :"lire_clavier nbecrire_ecran "Entrez le taux de TVA ( %):"lire_clavier ttvapttc 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 102
Les Tests
Si boolen AlorsInstructions
Finsi Si boolen Alors
Instructions 1SinonInstructions 2
Finsi Si boolen1 Alors
Instructions 1Sinon si boolen2 AlorsInstructions 2Instructions 3
SinonInstructions 4
Finsi
Boolen 1
Instruction 1
Instruction 2
Boolen 2
Instruction 3
Instruction 4
Instruction suivant
oui
non
non
oui
ENSA Safi 103
Les Tests
Boolen est une condition : gal = diffrent de != strictement plus petit que < strictement plus grand que > plus petit ou gal =
Conditions composes oprateur logique ET, OU, NON, et XOR
ENSA Safi 104
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 105
Solution
variables n : EntierDbut
ecrire_ecran "Entrez un nombre : "lire_clavier nSi n > 0 Alors
ecrire_ecran "Ce nombre est positif "Sinon
ecrire_ecran "Ce nombre est ngatif"Finsi
Fin
ENSA Safi 106
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 107
Solution
variables m, n : EntierDbut
ecrire_ecran "Entrez deux nombres diff de 0"lire_clavier m, nSi ((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 108
Exercice 3
Ecrire un algorithme qui demande trois noms lutilisateur et linforme ensuite sils sont rangs ou non dans lordre alphabtique.
ENSA Safi 109
Solution
variables a, b, c : CaractreDbut
ecrire_ecran "Entrez successivement trois noms : "lire_clavier a, b, cSi ((a < b) ET (b < c)) Alors
ecrire_ecran "Ces noms sont classs alphabtiquement"
Sinonecrire_ecran "Ces noms ne sont pas classs"
FinsiFin
ENSA Safi 110
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 111
Solution
variables n : EntierDbut
ecrire_ecran "Entrez un nombre : "lire_clavier nSi 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 112
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 113
Solution
variables m, n : EntierDbut
ecrire_ecran "Entrez deux nombres : "lire_clavier m, nSi 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 114
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 115
Solution
variables age : EntierDbut
ecrire_ecran "Entrez lge de lenfant : "lire_clavier ageSi 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 serait-
ce quen commenant par la catgorie la plus jeune.
ENSA Safi 116
Linstruction selonexemple
selon abrviationcas "M" :
ecrire_ecran " Monsieur " cas "Mme" :
ecrire_ecran " Madame " cas "Mlle" :
ecrire_ecran " Mademoiselle " Autres :
ecrire_ecran " Monsieur, Madame "
finselon
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 " finsi
Organigrame selon
v=1
Instruction 1
Instruction 2
V=2
Instruction 3
Instruction suivant
oui
non
non
oui
selon vcas 1:
instruction 1cas 2:
instruction 2Autres :
instruction 3iselle Madame " finselon
ENSA Safi 118
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 119
Solution variables nbr1,nbr2: Entier o:charactere
Dbutecrire_ecran "Entrez 1er nbr et nbr2"lire_clavier nbr1, nbr2ecrire_ecran "Entrez operation"lire_clavier oselon ocas "+" :
res
ENSA Safi 120
Conditions composes
Si A ET B AlorsInstructions 1
SinonInstructions 2
Finsi
quivaut :
Si NON A OU NON B AlorsInstructions 2
SinonInstructions 1
Finsi
ENSA Safi 121
Exercice 1
Formulez un algorithme quivalent lalgorithme suivant :Si Tutu > Toto + 4 OU Tata = "OK" Alors
Tutu Tutu + 1SinonTutu Tutu 1
Finsi
ENSA Safi 122
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
ENSA Safi 123
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 124
Solution
variables h, m : entierDbut
ecrire_ecran "Entrez les heures, puis les minutes : "lire_clavier h, mm m + 1Si m = 60 Alors
m 0h h + 1
FinSiSi h = 24 Alors
h 0FinSiecrire_ecran "Dans une minute il sera ", h, "heure(s) ", m, "minute(s)"
Fin
ENSA Safi 125
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 126
Solution
variables h, m, s : entierDbut
ecrire_ecran "Entrez les heures, puis les minutes, puis les secondes : "
lire_clavier h, m, ss s + 1Si s = 60 Alors
s 0m m + 1
FinSiSi m = 60 Alors
m 0h h + 1
FinSiSi h = 24 Alors
h 0FinSiecrire_ecran "Dans une seconde il sera ", h, "h", m, "m et ", s, "s"
Fin
ENSA Safi 127
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 128
Solution
variables n : entier p : reel
Dbutecrire_ecran "Nombre de photocopies : "lire_clavier nSi n
ENSA Safi 129
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 dimptLe programme demandera donc lge et le sexe du
Zorglubien, et se prononcera donc ensuite sur le fait que lhabitant est imposable.
ENSA Safi 130
Solution
variables sex : Caractreage : entierC1, C2 : Boolen
Dbutecrire_ecran "Entrez le sexe (M/F) : "lire_clavier sexecrire_ecran "Entrez lge: "lire_clavier ageC1 sex = "M" ET age > 20C2 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 131
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 !)
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 age2
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
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=
ENSA Safi 133
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 :
P 0Si Non(C1) AlorsP P + 1
FinSiSi Non(C2) AlorsP P + 1
FinSiP P + accSi P < 3 et C3 AlorsP P - 1
FinSiSi P = -1 Alorssitu "Bleu"
Sinon si P = 0 Alorssitu "Vert"
Sinon si P = 1 Alorssitu "Orange"
Sinon si P = 2 Alorssitu "Rouge"
Sinonsitu "Refus"
FinSiecrire_ecran "Votre situation : ", situFin
ENSA Safi 134
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 135
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
Dbutecrire_ecran "Entrez les scores des quatre prtendants :"lire_clavier A, B, C, DC1 A > 50C2 B > 50 ou C > 50 ou D > 50C3 A >= B et A >= C et A >= DC4 A >= 12,5Si 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 136
Les Boucles TantQue boolen(vrai) faire
Instructions
FinTantQue Pour Compteur Initial Final par ValeurDuPas
Instructions
finpourOuPour Compteur Initial Final par ValeurDuPas
Instructions
Compteur suivant
ENSA Safi 137
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 138
Les Boucles A ne pas faire1- 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)instructionsfinpour (Trac Suivant)
2- Vrification de condition d'arrt variables Truc : Entier
DbutPour Truc 1 15 faireTruc Truc * 2ecrire_ecran "Passage numro : ", Truc
finpourFin
Truc=2,6,14,30,62,126,254,510,,1022,2046,4094,8190,16382,32766,-2,-2,-2,,,,,,,,,,,,
ENSA Safi 139
Les Boucles La boucle tant que faire
amorage {initialisation de la (des) variable(s) de condition}tantque faire
traitement {suite dinstructions}relance {r-affectation de la (des) variable(s) de condition}
FinTantQueFonction:-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 .
Organigramme tantque
Boolen(vraie)
Instruction 1
relance
Instruction 2
oui
non
Tantque boolen(vraie) faireinstruction1relance
FinTantQue
ENSA Safi 141
Exercice 1
Ecrire un algorithme qui demande lutilisateur un nombre compris entre 1 et 3 jusqu ce que la rponse convienne.
ENSA Safi 142
Solution
variables N : EntierDebut
N 0ecrire_ecran "Entrez un nombre entre 1 et 3"TantQue N < 1 ou N > 3 faire
lire_clavier NSi N < 1 ou N > 3 Alors
ecrire_ecran "Saisie errone. RecommencezFinSi
FinTantQueFin
ENSA Safi 143
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 144
Solution
variables N : EntierDebut
N 0ecrire_ecran "Entrez un nombre entre 10 et 20"TantQue N < 10 ou N > 20 faire
lire_clavier NSi N < 10 Alors
ecrire_ecran "Plus grand !"Sinon si N > 20 Alors
ecrire_ecran "Plus petit !"FinSi
FinTantQueFin
ENSA Safi 145
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
Interprtation boucle pour
Compteur1
compteur
ENSA Safi 147
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 148
Solution
variables N, i : EntierDebut
ecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "Les 10 nombres suivants sont : "Pour i N + 1 N + 10 faire
ecrire_ecran ifinpour
Fin
ENSA Safi 149
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 :7 x 1 = 77 x 2 = 147 x 3 = 217 x 10 = 70
ENSA Safi 150
Solution
variables N, i : EntierDebut
ecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "La table de multiplication de ce nombre
est : "Pour i 1 10 faire
ecrire_ecran N, " x ", i, " = ", n*ifinpour
Fin
ENSA Safi 151
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 = 15NB : on souhaite afficher uniquement le rsultat, pas la
dcomposition du calcul.
ENSA Safi 152
Solution
variables N, i, Som : EntierDebut
ecrire_ecran "Entrez un nombre : "lire_clavier NSom 0Pour i 1 N faire
Som Som + ifinpourecrire_ecran "La somme est : ", Som
Fin
ENSA Safi 153
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 154
Solution
variables N, i, F : EntierDebut
ecrire_ecran "Entrez un nombre : "lire_clavier NF 1Pour i 2 N faire
F F * ifinpourecrire_ecran "La factorielle est : ", F
Fin
ENSA Safi 155
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 : 12Entrez le nombre numro 2 : 14etc.Entrez le nombre numro 20 : 6Le 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 156
Solution
variables N, i, PG : EntierDebut
PG -32768Pour i 1 20 faire
ecrire_ecran "Entrez un nombre : "lire_clavier NSi i = 1 ou N > PG Alors
PG NFinSi
finpourecrire_ecran "Le nombre le plus grand tait : ", PGFin
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
DebutPG -32768Pour i 1 20 faire
ecrire_ecran "Entrez un nombre : "lire_clavier NSi i = 1 ou N > PG AlorsPG NIPG i
FinSifinpourecrire_ecran "Le nbre le plus grand tait : ", PGecrire_ecran "Il a t saisi en position ", IPGFin
ENSA Safi 157
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 158
Solution
variables N, i, PG, IPG : EntierDebut
N 1i 0PG -32766TantQue N 0 faire
ecrire_ecran "Entrez un nombre : "lire_clavier Ni i + 1Si i = 1 ou N > PG Alors
PG NIPG i
FinSiFinTantQueecrire_ecran "Le nombre le plus grand tait : ", PGecrire_ecran "Il a t saisi en position numro ", IPG
Fin
ENSA Safi 159
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 160
Solution
variables somdue, M,PE, res, Nb10PE, Nb5PE : EntierDebut
PE
ENSA Safi 161
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 gagnerDans 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 162
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 Necrire_ecran "Entrez le nombre de chevaux jous : "lire_clavier PNum 1Pour i 2 N faireNum Num * i
finpourDno1 1Pour i 2 N-P faireDno1 Dno1 * i
finpourDno2 1Pour i 2 P faireDno2 Dno2 * i
finpourecrire_ecran "Dans lordre, une chance sur ", Num / Dno1ecrire_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 : EntierDebutecrire_ecran "Entrez le nombre de chevaux partants : "lire_clavier Necrire_ecran "Entrez le nombre de chevaux jous : " lire_clavier P A 1 B 1 Pour i 1 P faireA A * (i + N - P) B B * i
finpour ecrire_ecran "Dans lordre, une chance sur ", A ecrire_ecran "Dans le dsordre, une chance sur ", A / B Fin
ENSA Safi 163
Comparaison boucles pour et tant que
pour cpt 1 nbVal faireecrire_ecran "Donnez une valeur :"lire_clavier valeur
totalValeurstotalValeurs+ valeur {cumul}Finpour. quivaut cpt 0tant que cpt
ENSA Safi 164
Les Boucles rpterjusqu (suit)
La boucle rpter ... jusquRpter
(r)affectation de la (des) variable(s) de conditiontraitement {suite dinstructions}
jusqu Fonction:-excuter une suite dinstructions au moins une fois et la rpter tant quune condition est pas remplieRemarque: le traitement dans lexemple prcdent se limite la r-affectation de la variable de condition
ENSA Safi 165
Les Boucles rpterjusqu (suit)Comparaison boucles rpter et tant que (exemple exercice1)
Rpterecrire_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) ) faireecrire_ecran "Donnez une valeur positive paire:"lire_clavier valeur
FinTantQue
ENSA Safi 166
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.
Organigramme rpterjusqu
Boolen(vraie)
Instruction 1
relance
Instruction 2
ouinon
rpterinstruction1relance
Jusqu boolen (faux)
ENSA Safi 168
Choisir pour... tant que rpter
Nombre ditrations
connu ?
Traitement excut au moins une
fois ?
Boucle tant que
Boucle rpter
Boucle pour
OUI
NON
NONOUI
ENSA Safi 169
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
i 4T[i] 0
ENSA Safi 170
Les Tableaux
Dfinition du type
1 2 3 4 5 6tab
1 2 3 4 5untab
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
12 5 -78 2 -21 8
nom du tableau Indice
Contenu du tableau
t e s t e null
ENSA Safi 171
Exercice 1
Ecrire un algorithme qui dclare et remplisse un tableau de 7 valeurs numriques en les mettant toutes zro.
ENSA Safi 172
Solution
variables Truc [1:7] : tableau de reli : entier
DebutPour i 1 7 faire
Truc[i] 0finpour
Fin
ENSA Safi 173
Exercice 2
Ecrire un algorithme qui dclare et remplisse un tableau contenant les six voyelles de lalphabet latin.
ENSA Safi 174
Solution
variables Truc [1:6] : Tableau de CaractreDebut
Truc[1] "a"Truc[2] "e"Truc[3] "i"Truc[4] "o"Truc[5] "u"Truc[6] "y"
Fin
ENSA Safi 175
Exercice 3
Ecrire un algorithme qui dclare un tableau de 9 notes, dont on fait ensuite saisir les valeurs par lutilisateur.
ENSA Safi 176
Solution
variables Notes [1:4] : Tableau de entieri : entier
DebutPour i 1 4 faireecrire_ecran "Entrez la note numro ", i lire_clavier Notes[i]
finpourFin
ENSA Safi 177
Exercice 4
Que produit lalgorithme suivant ?variables Nb [1:6] : tableau de Entier
i : EntierDbut
Pour i 1 6 faireNb[i] i * i
finpourPour i 1 6 faire
ecrire_ecran Nb[i]finpour
FinPeut-on simplifier cet algorithme avec le mme rsultat ?
ENSA Safi 178
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
DbutPour i 1 6 faire
Nb[i] i * iecrire_ecran Nb[i]
finpourFin
ENSA Safi 179
Exercice 5
Que produit lalgorithme suivant ?variables N[1:7]: tableau de Entier
i, k : EntierDbut
N[1] 1Pour k 2 7 faire
N[k] N[k-1] + 2finpourPour i 1 7 faire
ecrire_ecran N[i]finpour
FinPeut-on simplifier cet algorithme avec le mme rsultat ?
ENSA Safi 180
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
DbutN[1] 1ecrire_ecran N[1] Pour k 2 7 faire
N[k] N[k-1] + 2ecrire_ecran N[k]
finpourFin
ENSA Safi 181
Exercice 6
Que produit lalgorithme suivant ?variables Suite [1:8]: tableau de Entier
i : EntierDbut
Suite[1] 1Suite[2] 1Pour i 3 8 faire
Suite[i] Suite[i-1] + Suite[i-2] finpourPour i 1 8 faire
ecrire_ecran Suite[i] finpour
Fin
ENSA Safi 182
Solution
Cet algorithme remplit un tableau de 8 valeurs : 1, 1, 2, 3, 5, 8, 13, 21
ENSA Safi 183
Exercice 7
Ecrivez la fin de lalgorithme 3 afin que le calcul de la moyenne des notes soit effectu et affich lcran.
ENSA Safi 184
Solution
variables Notes [1:9]: tableau de Entier S,i : Entier
Debuts 0Pour i 1 9 faire
ecrire_ecran "Entrez la note n ", i lire_clavier Notes[i]s s + Notes[i]
finpourecrire_ecran "Moyenne :", s/9
Fin
ENSA Safi 185
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
variables Num [1:10] : tableau de Entier variables i,S,N : Entier
variables premier : booleen Debut
N1
S1
Tantque N
ENSA Safi 187
Tableaux Multidimensionnels
Tableaux deux dimensions Exemple tableau 2 lignes et 7 colonnes
1 2 3 4 5 6 712
Dclarationtableau[1:2, 1:7] dentiers
10 3 20 5 25 2 4229 132 1 0 124 7 9
indices min et max des lignes
indices min et max des colonnes
ENSA Safi 188
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.
Syntaxevariables Notes [1:9,1:9] : tableau de EntierNotes[1, 8] 0
ENSA Safi 189
Exercice 1
crivez un algorithme remplissant un tableau de 6 sur 13, avec des zros.
ENSA Safi 190
Solution
variables Notes [1:6,1:13] :tableau de Entieri, j :entier
DebutPour i 1 6 fairePour j 1 13 faireTruc[i, j] 0
finpourfinpourFin
ENSA Safi 191
Exercice 2
Quel rsultat produira cet algorithme ?variables X[1:2,1:3] : tableau de Entier
i, j, val : EntierDbut
Val 1Pour i 1 2 faire
Pour j 1 3 faireX[i, j] ValVal Val + 1
finpourfinpourPour i 1 2 faire
Pour j 1 3 faireecrire_ecran X[i, j]
finpourfinpour
Fin
ENSA Safi 192
Solution
Cet algorithme remplit un tableau de la manire suivante:X[1, 1]= 1
X[1, 2] = 2X[1, 3]= 3X[2, 1]= 4X[2, 2] = 5X[2, 3]= 6
Il crit ensuite ces valeurs lcran, dans cet ordre.
ENSA Safi 193
Exercice 3
Quel rsultat produira cet algorithme ?variables X[1:2,1:3] : tableau de Entier
i, j, val : EntierDbut
Val 1Pour i 1 2 fairePour j 1 3 faireX[i, j] ValVal Val + 1
finpourfinpourPour j 1 3 fairePour i 1 2 faireecrire_ecran X[i, j]
finpourfinpour
Fin
ENSA Safi 194
Solution
Cet algorithme remplit un tableau de la manire suivante:1
42536
Il crit ensuite ces valeurs lcran, dans cet ordre.
ENSA Safi 195
Exercice 4
Quel rsultat produira cet algorithme ?variables T[1:4,1:2] : tableau de Entier
k, m : EntierDbutPour k 1 4 fairePour m 1 2 faire
//// T[k, m] (k + 1) + 4 * mT[k, m] (2*(k-1))+m*m
finpourfinpourPour k 1 4 fairePour m 1 2 faireecrire_ecran T[k, m]
finpourfinpourFin
ENSA Safi 196
Solution
Cet algorithme remplit un tableau de la manire suivante:T[1, 1] = 6
T[1, 2] = 10T[2, 1] = 7T[2, 2] = 11T[3, 1] = 8T[3, 2] = 12T[4, 1] = 9T[4, 2] = 13
Il crit ensuite ces valeurs lcran, dans cet ordre.
ENSA Safi 197
Exercice 5
Ecrire algorithme quivalent a exercice 4 en utilisant un tableau unidimensionnel
variables T[1:8] : tableau de Entierk, m,i : Entier
DbutPour k 1 4 fairePour m 1 2 faire/////T[k, m] k + mi (2*(k-1))+m/////T[k, m] (k + 1) + 4 * m
T[i] (k + 1) + 4 * mfinpour
finpourPour k 1 4 fairePour m 1 2 fairei (2*(k-1))+mecrire_ecran T[i]
finpourfinpourFin
ENSA Safi 199
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 200
Solution
variables i, j, iMax, jMax : entiervariables 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 1jMax 1Pour i 1 12 faire
Pour j 1 8 faireSi T[i,j] > T[iMax,jMax] Alors
iMax ijMax j
FinSifinpour
finpourecrire_ecran "Le plus grand lment est ", T[iMax,jMax] ecrire_ecran "Il se trouve aux indices ", iMax, "; ", jMax
Fin
ENSA Safi 201
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 202
Notion de fonction
ENSA Safi 203
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 204
Les Fonctions Prdfinies: Math
Rsultat p1
atn(p1) arc tangente de p1 entier, rel entier, rel
cos(p1) cosinus de p1 entie r, rel entier, rel
sin(p1) sinus de p1 entier, rel entier, reltan(p1) tangente de p1 entier, rel entier, relexp(p1) exponentielle de p1 entie r, rel entie r, rel
rac2(p1) racine carre de p1 entier, rel entier, relcar(p1) caractre ayant pour
code ansi la valeur de p1car, chane entier
chnombre(p1) convertit p1 en nombre entier,rel chane
ENSA Safi 205
Les Fonctions Prdfinies: numriques classiquesUne fonction extrmement rpandue est celle qui permet de
rcuprer la partie entire dun nombre :Aprs : A Ent(3,228) A vaut 3Cette fonction permet de rcuprer le reste de la division dun
nombre par un deuxime nombre. Par exemple : A 10 Mod 3 A vaut 1 car 10 = 3*3 + 1B 12 Mod 2 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 Gnration de nombres alatoiresAprs : Toto Alea() On a : 0 =< Toto < 1
ENSA Safi 206
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.
long("Bonjour, a va ?") vaut 16long("") vaut 0milieu("Zorro is back", 4, 7) vaut "ro is b"milieu("Zorro is back", 12, 1) vaut "c"gauche("Et pourtant", 8) vaut "Et pourt"droite("Et pourtant", 4) vaut "t"rang("Un pur bonheur", "ur",1) vaut 5rang("Un pur bonheur", "techno",1) vaut 0
rang("Un pur bonheur", "ur",8) vaut 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.
ENSA Safi 209
Solution
Fonction NbVoyelles (e Mot : chaine):entiervariables i, nb : entierdebut
nb
ENSA Safi 210
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 211
Solutionfonction foncrang(e aa,b:chaine ;e p:entier):entiervariables i , r :entierdbut
i
ENSA Safi 212
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 213
Procdures et Fonctions :Syntaxe
Declaration Fonction RepOuiNon(e Msg : Caractre) : Caractre
arguments formelles resultat
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
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 214
Procdures et Fonctions :Syntaxe
Declaration procedureProcedure 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
Procdures et Fonctions : passage par valeur
Paramtre formel : variable utilise dans le corps du sous-programme 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
ENSA Safi 216
Procdures et Fonctions : passage par valeur
variables X : Entier
DbutX 25afficheecran(X)Fin
Procedure afficheecran(e k : entier)Debutecrire_ecran kfinprocedure
X=25
k=25
Passage par valeur
Remarque: avec algoexe il faut ajouter le mot e avant les argument Exemple :afficheecran(e k : entier)
ENSA Safi 217
Fonctions:Porte des variables
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
Si P1 reprsente le programme principal et P2, P3 deux fonctions, le schma qui suit illustre le propos prcdent.
variables X : Entier P1
variables Y : Entier
variables Z : EntierDebutFin
Fonction P2(e A, B : entier)..finfonction
Fonction P3(e U, V : entier)..finfonction
Remarque: avec algoexe il faut ajouter le mot globaleExemple :variables globale x : entier
ENSA Safi 218
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" faireecrire_ecran "Tapez Oui ou Non"lire_clavier Rep2
FinTantQue...
Bonne structure :
Fonction RepOuiNon() : caractrevariables truc : car
debutlire_clavier Truc TantQue Truc "Oui" et Truc "Non" faire
ecrire_ecran "Tapez Oui ou Non"lire_clavier Truc
FinTantQuevalretTruc
finfonctionDebut
...ecrire_ecran "Etes-vous mari ?"Rep1 RepOuiNon()...ecrire_ecran "Avez-vous des enfants ?"Rep2 RepOuiNon()...
Fin
ENSA Safi 219
Exercice 1 Quel rsultat produira cet algorithme ?
procedure echange (e a,b : rel) variables c : reldebut
c aabbc
finprocedurevariables x, y : relDebut
x2y5echange(x,y)ecrire_ecran x,y
Fin
ENSA Safi 220
solution1
Quel rsultat produira cet algorithme ?
variables x, y : entierProcedure echange ()
variables c : entierdebut
c
ENSA Safi 221
Exercice 2
crivez une fonction qui renvoie la somme de cinq nombres fournis en argument.
SolutionFonction Sum(e a1,b,c,d,e1: entier) : entiervariables result :entierdebut
result a1+b+c+d+e1valeur_retour result
Finfonctionvariables aa, bb, cc, dd, ee,res: entierDebut
ecrire_ecran "entrer 5 nbrs"lire_clavier aa,bb,cc,dd,eeRes
ENSA Safi 223
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 224
solution1
variables globale q, r : rels Procedure division_euclidienne (e a,b :
entier)Prcondition : aucuneDonnes : a et bDonnes / Rsultats : q et rDescription : effectue la division
euclidienne de a par bVariable locale : aucuneDbut
q0r aTantque r>=b faire
q q+1r r-b
FinTantquefinprocedure
variables v1, v2 : relsDbut
ecrire_ecran " premire valeur "lire_clavier v1ecrire_ecran "euxime valeur"lire_clavier v2Division_euclidienne (v1,v2)ecrire_ecran q, r
Fin
ENSA Safi 225
solution2 variables r : rels Fonction division_euclidienne (e a,b :
entier)Prcondition : aucuneDonnes : a et bDonnes / Rsultats : q et rDescription : effectue la division
euclidienne de a par bvariables q: relsDbut
q0r aTantque r>=b faire
q q+1r r-b
FinTantqueValeur_retour q
finfonction
variables v1, v2,qq : relsDbut
ecrire_ecran " premire valeur "lire_clavier v1ecrire_ecran "deuxime valeur"lire_clavier v2qqDivision_euclidienne (v1,v2)ecrire_ecran qq, r
Fin
ENSA Safi 226
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.