Professional Documents
Culture Documents
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
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
ENSA Safi
11
ENSA Safi
12
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 + + + +
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
logarithmique
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
Illustrations
ENSA Safi
23
Data Memory
Input Interface
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
Connecteurs adresse
ENSA Safi 27
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 ?
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
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
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 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
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
ENSA Safi
52
ENSA Safi
53
Exemple : un pseudo-code
Programme Principal
// Ce programme permet de lire deux entiers lcran et dafficher ensuite leur somme
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.
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
ENSA Safi
60
Premiers algorithmes
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
ENSA Safi
64
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
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
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
ENSA Safi
94
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
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 "
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
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
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
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
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
163
ENSA Safi
164
Organigramme rpterjusqu
rpter instruction1 relance Jusqu boolen (faux)
Instruction 1 relance Boolen(vraie) non Instruction 2 oui
OUI
Boucle rpter
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
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
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
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
ENSA Safi
203
racine carre de p1 entier, rel caractre ayant pour car, chane code ansi la valeur de p1 entier,rel
chane
ENSA Safi
204
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
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)
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
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
Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut RepOuiNon("oui") . fin
ENSA Safi
214
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
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