7/25/2019 Initiation La Programmationfinal2012
1/245
Initiation la programmationalgorithmique
Anne Acadmique 2007-2008
7/25/2019 Initiation La Programmationfinal2012
2/245
ENSA Safi 2
Plan du cours
Introduction linformatiqueArchitecture dun ordinateur
Dcomposition fonctionnelle
Concepts cls
7/25/2019 Initiation La Programmationfinal2012
3/245
Introduction
7/25/2019 Initiation La Programmationfinal2012
4/245
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 ?
7/25/2019 Initiation La Programmationfinal2012
5/245
ENSA Safi 5
Quest-ce quun ordinateur ?
Machine automatique de traitement de linformationobissant des programmes forms par des suitesdoprations arithmtiques et logiques (Larousse 2002)
Diffrents niveaux dapproche : utilisateur, programmeurmachine, concepteur de circuits logiques
7/25/2019 Initiation La Programmationfinal2012
6/245
ENSA Safi 6
Des 0 et des 1
Le hardware de lordinateur comprend essentiellement :diverses mmoires, un processeur, une horloge, des unitsdentre/sortie
Lordinateur excute la cadence de son horloge desinstructions (de niveau machine ) contenue en mmoire etutilisant des donnes contenue dans une autre partie de lammoire.
Les donnes et les instructions, sont codes, au plus basniveaux en une suite de 0 et de 1.
Ces 0 et ces 1 correspondent des tensions des circuitslectroniques. Le cadencement est essentiellement fonctiondu temps de stabilisation des circuits et de leur chauffement.
7/25/2019 Initiation La Programmationfinal2012
7/245
ENSA Safi 7
Codage binaire
Le langage des ordinateurs
Toutes communications l'intrieur de l'ordinateur sont faitesavec des signaux lectriques
0: teint (absence de signal lectrique)
1: allum (prsence de signal lectrique)
7/25/2019 Initiation La Programmationfinal2012
8/245
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)
7/25/2019 Initiation La Programmationfinal2012
9/245
ENSA Safi 9
7/25/2019 Initiation La Programmationfinal2012
10/245
ENSA Safi 10
Codage et adressage
On peut exprimer autant avec une suite de 0 et de 1, qulaide dun alphabet complet (a,b,c,d,e ). Il suffit desaccorder 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 enmmoire. Cette adresse en mmoire est elle-mme codesous forme de 0 et de 1.
7/25/2019 Initiation La Programmationfinal2012
11/245
ENSA Safi 11
Quest-ce quun langage de programmation ?
Langage cd ensemble de mots (vocabulaire) et syntaxe(grammaire) stricte (non ambigu) permettant dcrire unprogramme
Ensemble de structures de donnes, doprations sur cesstructures & ensemble de structures de contrle :squencement, branchement conditionnel, itration
7/25/2019 Initiation La Programmationfinal2012
12/245
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
7/25/2019 Initiation La Programmationfinal2012
13/245
ENSA Safi 13
Que signifie faire de linformatique ?
Passer du temps proximit dun ordinateur ?
Il est essentiel de prciser le niveau auquel cet outil complexeest 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 typesde donnes
7/25/2019 Initiation La Programmationfinal2012
14/245
ENSA Safi 14
A quoi sert la programmation ?
A faire excuter par lordinateur une squence dinstructions
Habituellement , cette squence dinstructions raliseeffectivement un algorithme
Un algorithme est une squence finie dinstructions qui permetdobtenir la solution dun problme en un temps fini.
La programmation sert rsoudre des catgories deproblmes de faon systmatique
7/25/2019 Initiation La Programmationfinal2012
15/245
ENSA Safi 15
Mais encore
Tous les problmes nont pas de solutions algorithmiques
La programmation permet dadapter le comportement delogiciels des catgories spcifiques de problmes. Ellesavre souvent indispensable.
Dans la description de Turing et Von Neumann, lordinateurest une machine universelle.
7/25/2019 Initiation La Programmationfinal2012
16/245
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
7/25/2019 Initiation La Programmationfinal2012
17/245
ENSA Safi 17
Complexit algorithmique
Donne une estimation du nombre doprations lmentairesncessaires lexcution de lalgorithme, et ce en fonction dela 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)
7/25/2019 Initiation La Programmationfinal2012
18/245
ENSA Safi 18
Exemples
Recherche dun mot dans un dictionnaire :parcours linaire VS parcours dichotomique
Tri dune liste dlments
Problmes NP-complets
7/25/2019 Initiation La Programmationfinal2012
19/245
ENSA Safi 19
Graphique : complexit algorithmique
Nbredinstructions
Taille des donnes (N)
linaire
logarithmique
7/25/2019 Initiation La Programmationfinal2012
20/245
ENSA Safi 20
Bon ou mauvais programme ?
Aisment lisible donc bien spcifi, bien documentClair, donc bien structur
Aisment modifiable
Facile tester, dbugger
Robuste (erreurs de lutilisateur)
Correct
Efficace
7/25/2019 Initiation La Programmationfinal2012
21/245
ENSA Safi 21
Vrai ou faux ?
Lutilisation dun ordinateur permet de raliser un travail plusefficacement et plus rapidement
Lordinateur fait ce quon lui dit de faire
Le concepteur dun programme connat toujours le rsultat duprogramme quil a conu
7/25/2019 Initiation La Programmationfinal2012
22/245
Architecture dun ordinateur
7/25/2019 Initiation La Programmationfinal2012
23/245
ENSA Safi 23
Architecture dun ordinateur
La mmoire centraleLunit centrale de traitement (Central Processing Unit)
Les units dentre/sorties
Les units priphriques
Illustrations
7/25/2019 Initiation La Programmationfinal2012
24/245
ENSA Safi 24
Diagramme fonctionnel dune architecture deVon Neumann
Data Memory
Arithmetic Unit
ControlUnit
Program Memory
Program Interface
InputInterface
OutputInt
erface
Illustration reprise de Tib[2002]
7/25/2019 Initiation La Programmationfinal2012
25/245
ENSA Safi 25
Ordres de grandeur
K =Kilo 2^10 = 1 024M= Mga 2^20 =1 048 576
G= Giga 2^30 =1 073 741 824
T=Tra 2^40 =1 099 511 627 776
7/25/2019 Initiation La Programmationfinal2012
26/245
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
7/25/2019 Initiation La Programmationfinal2012
27/245
ENSA Safi 27
Schma de principe
Memoirecentrale
Registre donnes
Registre adresseL/E
Connecteurs adresse
Connecteurs donnes
7/25/2019 Initiation La Programmationfinal2012
28/245
ENSA Safi 28
Lunit centrale de traitement (CPU)
Les instructions
Les adresses
Unit de contrle / unit arithmtique et logique
Les registres
7/25/2019 Initiation La Programmationfinal2012
29/245
ENSA Safi 29
Les instructions
Trois informations ncessaires la CPU en contact avec lammoire RAM.
1. Quelle information traiter ?
2. Quel traitement effectuer ?
3. O ranger le rsultat ?
Architecture RISC et CISC
7/25/2019 Initiation La Programmationfinal2012
30/245
ENSA Safi 30
Les adresses
La suite des instructions excuter est elle-mme range enmmoire.
LA CPU ne communique avec lextrieur que via la mmoireet naccde aux informations que par leur adresse.
7/25/2019 Initiation La Programmationfinal2012
31/245
ENSA Safi 31
Unit de contrle et ALU
Les circuits qui ralisent les oprations lmentaires(additions, multiplications, oprations logique ) sontregroups dans lALU.
Lunit de contrle met en place les donnes et positionne les
circuits lectroniques pour que lALU excute effectivementlopration
Oprations unaires : mise zro, complmentation logique,dcalage, incrmentation
Oprations binaires : ET, OU, XOR
7/25/2019 Initiation La Programmationfinal2012
32/245
ENSA Safi 32
Circuit additionneur
OU
ET
ET
Additionneur 2 bits
7/25/2019 Initiation La Programmationfinal2012
33/245
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, )
7/25/2019 Initiation La Programmationfinal2012
34/245
ENSA Safi 34
Ordres de grandeurs (2005)
Processeur 32 - 64 bitsMmoire RAM = 1 Go
Mmoire dure = 200 Go
Vitesse du processeur = 3 GHz
+ Loi de Moore : cf article du Pour La Science
7/25/2019 Initiation La Programmationfinal2012
35/245
Illustrations des composants
7/25/2019 Initiation La Programmationfinal2012
36/245
ENSA Safi 36
Carte mre (mother board)
7/25/2019 Initiation La Programmationfinal2012
37/245
ENSA Safi 37
CPU
7/25/2019 Initiation La Programmationfinal2012
38/245
ENSA Safi 38
Carte Graphique
7/25/2019 Initiation La Programmationfinal2012
39/245
ENSA Safi 39
Carte Son
7/25/2019 Initiation La Programmationfinal2012
40/245
ENSA Safi 40
Carte rseau
7/25/2019 Initiation La Programmationfinal2012
41/245
ENSA Safi 41
Les Bus
7/25/2019 Initiation La Programmationfinal2012
42/245
ENSA Safi 42
Connecteurs dentre/sort ie
7/25/2019 Initiation La Programmationfinal2012
43/245
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.
7/25/2019 Initiation La Programmationfinal2012
44/245
Programmation Procdurale
7/25/2019 Initiation La Programmationfinal2012
45/245
ENSA Safi 45
Bien distinguer !
Spcification d un algorithme :ce que fait lalgorithme
cahier 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 prcdent
dans un langage de programmation rel
7/25/2019 Initiation La Programmationfinal2012
46/245
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
7/25/2019 Initiation La Programmationfinal2012
47/245
ENSA Safi 47
Notion didentificateur et de type
Identificateur : symbole sans signification universellepermettant de dsigner des objets qui nont pas dexistence endehors du programme.
Dclaration : fixe la signification dun identificateur
Porte dun identificateur : bloc dinstructions pour lequel ladclaration est valable.
Les langages de programmation peuvent tre typs ou non
7/25/2019 Initiation La Programmationfinal2012
48/245
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 laquellelidentificateur est reconnu; en gnral, le bloc dinstructions danslequel 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 ;-) )
7/25/2019 Initiation La Programmationfinal2012
49/245
ENSA Safi 49
dclaration et assignation dune variable
Variables i : integer ;type entier (entier : type prdifini integer : mot cl du langage)
identificateur
i:=4;
7/25/2019 Initiation La Programmationfinal2012
50/245
ENSA Safi 50
Notion de fonction
Une fonction est un morceau de code qui permet de rsoudreun sous-problme du problme trait
La dcomposition du code en tches et sous- tches, le rendplus modulaire. Le programme est plus clair, plus lisible, plus
aisment modifiable
Les fonctions cachent les dtails dimplmentation : il suffit desavoir ce quelles font et non comment elles le font
7/25/2019 Initiation La Programmationfinal2012
51/245
ENSA Safi 51
Notion de fonction
7/25/2019 Initiation La Programmationfinal2012
52/245
ENSA Safi 52
Dclaration dune fonction
Comprend essentiellement trois lments:
1. Le nom de la fonction2. La liste des types darguments
3. Le type de retour de la fonction
Exemples :
Function exposant ( i , j : integer ) : integer ;
7/25/2019 Initiation La Programmationfinal2012
53/245
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 ;
7/25/2019 Initiation La Programmationfinal2012
54/245
ENSA Safi 54
Exemple : un pseudo-code
Programme Principal
/ / Ce programme permet de lire deux entiers lcran et dafficher ensuite leursomme
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
7/25/2019 Initiation La Programmationfinal2012
55/245
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
7/25/2019 Initiation La Programmationfinal2012
56/245
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
7/25/2019 Initiation La Programmationfinal2012
57/245
ENSA Safi 57
Solution 1
Function calculeSomme ( i , j : integer ) : integer ;
Begin
somme := i+j ;
End ;
7/25/2019 Initiation La Programmationfinal2012
58/245
ENSA Safi 58
Solution 2
Function somme ( i , j : integer ) : integer ;
Begin
somme := i+j ;
If somme
7/25/2019 Initiation La Programmationfinal2012
59/245
ENSA Safi 59
Comment concevoir un programme ?
Identifier prcisment le problme que le programme se doitde rsoudre
Dcomposer le problme en sous-problme
Dfinir les fonctions correspondantes
crire le programme principal en pseudo-code, en valuantles critres de qualit.
Implmenter, compiler, excuter sur diffrents cas dutilisation,dbugger
7/25/2019 Initiation La Programmationfinal2012
60/245
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, tendancecartsienne analytique
Danger du Code spaghetti
Critres de qualit facilement viols : modularit, lisibilit,robustesse, exactitude
7/25/2019 Initiation La Programmationfinal2012
61/245
Premiers algorithmes
Anne Acadmique 2007-2008
7/25/2019 Initiation La Programmationfinal2012
62/245
Plan :Premiers algorithmes
Les Variables
Instruction daffectation
Les instructions de lecture et dcriture
Les Tests
Les Boucles
Les Tableaux
Procdures et Fonctions
Les Fichiers
7/25/2019 Initiation La Programmationfinal2012
63/245
ENSA Safi 63
algorithmique ?
Encyclopedia Universalis : Spcification dun schma de calcul sous forme dune suite
finie doprations lmentaires obissant un enchanementdtermin.
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)
7/25/2019 Initiation La Programmationfinal2012
64/245
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'yprendre
Mais... comment le lui dire ?
Comment le lui apprendre ?
Comment s'assurer qu'elle fait ce travail aussi bien que nous ?
Mieux que nous?
7/25/2019 Initiation La Programmationfinal2012
65/245
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 quellesinstructions permettront dobtenir le rsultat voulu. Cest l, si lon y tient, quintervient laforme dintelligence requise pour lalgorithmique. Alors, cest certain, il y a des gensqui possdent au dpart davantage cette intuition que les autres. Cependant, et jinsistesur ce point, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalementque de lexprience tellement rpte que le raisonnement, au dpart laborieux, finit pardevenir spontan .
il faut tre mthodique et rigoureux. En effet, chaque fois quon crit une sriedinstructions 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 vrifiersi le rsultat obtenu est bien celui que lon voulait. Cette opration ne requiert pas lamoindre once dintelligence. Mais elle reste nanmoins indispensable, si lon ne veut pascrire laveuglette.
Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plussouvent lconomie de cette dernire tape : lexprience fera que vous verrez le rsultatproduit par vos instructions, au fur et mesure que vous les crirez. Naturellement, cetapprentissage est long, et demande des heures de travail patient. Aussi, dans un premiertemps, 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.
7/25/2019 Initiation La Programmationfinal2012
66/245
ENSA Safi 66
se mettre mentalement la place de la machine qui vales excuter ?
les ordinateurs, quels quils soient, ne sont fondamentalementcapables de comprendre que quatre catgories d'ordres (enprogrammation, on n'emploiera pas le terme d'ordre, maisplutt celui d'instructions). Ces quatre familles d'instructionssont :
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 debase.
7/25/2019 Initiation La Programmationfinal2012
67/245
ENSA Safi 67
Avec quelles conventions crit-on un algorithme ?
Historiquement, plusieurs types de notations ont reprsentdes algorithmes.
Il y a eu notamment une reprsentation graphique, avec descarrs, des losanges, etc. quon appelait des organigrammes.Aujourdhui, cette reprsentation est quasiment abandonne.
Cest pourquoi on utilise gnralement une srie deconventions appele pseudo-code , qui ressemble unlangage de programmation authentique dont on aurait vacula plupart des problmes de syntaxe. Ce pseudo-code estsusceptible de varier lgrement dun livre (ou dun
enseignant) un autre.
7/25/2019 Initiation La Programmationfinal2012
68/245
Structure de base dun programme
Dclaration de variables et fonctionsProgramme principale
Dbut
..fin
V i bl
7/25/2019 Initiation La Programmationfinal2012
69/245
ENSA Safi 69
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 seulevaleur
Dans un programme une variable a un identificateur unique un identificateur est un mot : - commenant obligatoirement par une lettre
- ne comportant aucun espace
T i bl
7/25/2019 Initiation La Programmationfinal2012
70/245
ENSA Safi 70
Type variable
Type NumriqueType caractre
Type chane
Type boolen
T i bl i
7/25/2019 Initiation La Programmationfinal2012
71/245
ENSA Safi 71
Type variable numrique
Tous les langages, quels quils soient offrent un bouquet de typesnumriques, dont le dtail est susceptible de varier lgrement dunlangage lautre. On retrouve cependant les types suivants :
type nom_typ
e
caractres
autoriss
ensemble
de valeurs
exemples
de valeurs
entier ent
entier
0 9 [-32768..+32767] -152
+4560 ou 4560rel rel 0 9, . -12.3652
+0.186 ou 0.186
I t ti d ff t ti
7/25/2019 Initiation La Programmationfinal2012
72/245
ENSA Safi 72
Instruction daffectation
Cette seule chose quon puisse faire avec une variable, cestlaffecter, cest--dire lui attribuer une valeur
En pseudo-code, l'instruction d'affectation se note avec lesigne
E i t t
7/25/2019 Initiation La Programmationfinal2012
73/245
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
I t ti d ff t ti
7/25/2019 Initiation La Programmationfinal2012
74/245
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 valantautomatiquement zro). Mais ce qui est important, cest que cette valeur justement,ne varie pas proprement parler. Du moins ne varie-t-elle que lorsquelle estlobjet dune instruction daffectation.
La deuxime remarque concerne le signe de laffectation. En algorithmique, commeon 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 estgalement facile. En maths, A = B et B = A sont deux propositions strictementquivalentes. En informatique, absolument pas, puisque cela revient crire A Bet B A, deux choses bien diffrentes. De mme, A = A + 1, qui enmathmatiques, constitue une quation sans solution, reprsente enprogrammation 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 naurezplus aucune difficult passer au = des langages de programmation.
E i 1
7/25/2019 Initiation La Programmationfinal2012
75/245
ENSA Safi 75
Exercice 1
Quelles seront les valeurs des variables A et B aprs excutiondes instructions suivantes ?
variables A, B : EntiersDbut
A 1
B A + 3A 3
Fin
S l ti
7/25/2019 Initiation La Programmationfinal2012
76/245
ENSA Safi 76
Solution
Aprs La valeur des variables est :A 1 A = 1 B = ?B A + 3 A = 1 B = 4
A 3 A = 3 B = 4
Exercice 2
7/25/2019 Initiation La Programmationfinal2012
77/245
ENSA Safi 77
Exercice 2
Quelles seront les valeurs des variables A, B et C aprsexcution des instructions suivantes ?
Variables A, B, C : EntierDbut
A 5
B 3C A + B
A 2
C B AFin
Solution
7/25/2019 Initiation La Programmationfinal2012
78/245
ENSA Safi 78
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 = 8
A 2 A = 2 B = 3 C = 8C B A A = 2 B = 3 C = 1
Exercice 3
7/25/2019 Initiation La Programmationfinal2012
79/245
ENSA Safi 79
Exercice 3
Quelles seront les valeurs des variables A et B aprsexcution des instructions suivantes ?
Variables A, B : EntierDbut
A 5
B A + 4A A + 1
B A 4Fin
Solution
7/25/2019 Initiation La Programmationfinal2012
80/245
ENSA Safi 80
Solution
Aprs La valeur des variables est :A 5 A = 5 B = ?B A + 4 A = 5 B = 9
A A + 1 A = 6 B = 9B A 4 A = 6 B = 2
Exercice 4
7/25/2019 Initiation La Programmationfinal2012
81/245
ENSA Safi 81
Exercice 4
Quelles seront les valeurs des variables A, B et C aprsexcution des instructions suivantes ?
Variables A, B, C :EntierDbut
A 3
B 10C A + B
B A + B
A C
Fin
Solution
7/25/2019 Initiation La Programmationfinal2012
82/245
ENSA Safi 82
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 = 13
A C A = 13 B = 13 C = 13
Exercice 5
7/25/2019 Initiation La Programmationfinal2012
83/245
ENSA Safi 83
Exercice 5
Quelles seront les valeurs des variables A, B et C aprsexcution des instructions suivantes ?
variablesA, B, C :EntierDbut
A 3
B 10C A + B
B A + B
A C
Fin
Solution
7/25/2019 Initiation La Programmationfinal2012
84/245
ENSA Safi 84
Solution
Aprs La valeur des variables est :A 5 A = 5 B = ?B 2 A = 5 B = 2
A B A = 2 B = 2B A A = 2 B = 2
Les deux dernires instructions ne permettent donc pasdchanger les deux valeurs de B et A, puisque lune des deuxvaleurs (celle de A) est ici crase.Si lon inverse les deux dernires instructions, cela nechangera rien du tout, hormis le fait que cette fois cest lavaleur de B qui sera crase.
Exercice 6
7/25/2019 Initiation La Programmationfinal2012
85/245
ENSA Safi 85
Exercice 6
Plus difficile, mais cest un classique absolu, quil fautabsolument matriser : crire un algorithme permettantdchanger les valeurs de deux variables A et B, et ce quelque soit leur contenu pralable.
Solution
7/25/2019 Initiation La Programmationfinal2012
86/245
ENSA Safi 86
Solution
Dbut
C A
A B
B C
Fin
On est oblig de passer par une variable dite temporaire (lavariable C).
Exercice 7
7/25/2019 Initiation La Programmationfinal2012
87/245
ENSA Safi 87
Exercice 7
Une variante du prcdent : on dispose de trois variables A, Bet C. crivez un algorithme transfrant B la valeur de A, Cla valeur de B et A la valeur de C (toujours quels que soientles contenus pralables de ces variables).
Solution
7/25/2019 Initiation La Programmationfinal2012
88/245
ENSA Safi 88
Solution
DbutD C
C B
B A
A D
Fin
En fait, quel que soit le nombre de variables, une seulevariable temporaire suffit
Exercice 8
7/25/2019 Initiation La Programmationfinal2012
89/245
ENSA Safi 89
Exercice 8
Que produit lalgorithme suivant ?
Variables A, B, C : CaractreDbut
A "423"
B "12"
C A + BFin
Solution
7/25/2019 Initiation La Programmationfinal2012
90/245
ENSA Safi 90
Solution
Il ne peut produire quune erreur dexcution, puisquon nepeut pas additionner des caractres.
Exercice 9
7/25/2019 Initiation La Programmationfinal2012
91/245
ENSA Safi 91
Exercice 9
Que produit lalgorithme suivant ?
Variables A, B, C :CaractreDbut
A "423"
B "12"
C A & BFin
Solution
7/25/2019 Initiation La Programmationfinal2012
92/245
ENSA Safi 92
Solution
En revanche, on peut les concatner. A la fin delalgorithme, C vaudra donc "42312".
Les instructions de lecture et dcriture
7/25/2019 Initiation La Programmationfinal2012
93/245
ENSA Safi 93
Les instructions de lecture et d criture(I/O standard: clavier/ecran)
Dans un sens, ces instructions permettent lutilisateur derentrer des valeurs au clavier pour quelles soient utilises parle programme. Cette opration est la lecture.
Dans lautre sens, dautres instructions permettent auprogramme de communiquer des valeurs lutilisateur en les
affichant lcran. Cette opration est lcriture.
Les instructions de lecture et dcriture: Syntaxe
7/25/2019 Initiation La Programmationfinal2012
94/245
ENSA Safi 94
Les instructions de lecture et d criture: Syntaxe
lire_clavier Titi ou Lire Titi
Ds que le programme rencontre une instruction Lire,lexcution sinterrompt, attendant la frappe dune valeur auclavier. Ds lors, aussitt que la touche Entre (Enter) a tfrappe, lexcution reprend
ecrire_ecran Toto ou Ecrire Toto
Dans le sens inverse, pour crire quelque chose lcran.
Important:
Avant de lire_clavier une variable, il est trs fortementconseill dcrire des libells lcran, afin de prvenir
lutilisateur de ce quil doit frapper
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
95/245
ENSA Safi 95
Exercice 1
Quel rsultat produit le programme suivant ?
Variables v, double: entierDbut
V 231
Double V * 2
ecrire_ecran Vecrire_ecran DoubleFin
Solution
7/25/2019 Initiation La Programmationfinal2012
96/245
ENSA Safi 96
Solution
On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)
Exercice 2
7/25/2019 Initiation La Programmationfinal2012
97/245
ENSA Safi 97
Exercice 2
Ecrire un programme qui demande un nombre lutilisateur, puis qui calcule et affiche le carr de cenombre.
Solution
7/25/2019 Initiation La Programmationfinal2012
98/245
ENSA Safi 98
Solution
variables nb, carr : Entier
Dbutecrire_ecran "Entrez un nombre :"lire_clavier nbcarr nb * nb
ecrire_ecran "Son carr est : ", carrFin
En fait, on pourrait tout aussi bien conomiser la variable carr enremplaant 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 del'algorithme, dans l'autre, on privilgie l'conomie d'une variable.
Exercice 3
7/25/2019 Initiation La Programmationfinal2012
99/245
ENSA Safi 99
e c ce 3
Ecrire un programme qui l it le prix HT dun article, lenombre darticles et le taux de TVA, et qui fourni t le prixtotal TTC correspondant. Faire en sorte que des libellsapparaissent clairement.
Solution
7/25/2019 Initiation La Programmationfinal2012
100/245
ENSA Safi 100
variables nb, pht, ttva, pttc : entier
Dbutecrire_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 : ", pttcFin 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 !)
Les Tests
7/25/2019 Initiation La Programmationfinal2012
101/245
ENSA Safi 101
Si boolenAlors
InstructionsFinsi
Si boolenAlorsInstructions 1
SinonInstructions 2
Finsi
Si boolen1AlorsInstructions 1
Sinon si boolen2AlorsInstructions 2
Instructions 3
SinonInstructions 4
Finsi
Les Tests
7/25/2019 Initiation La Programmationfinal2012
102/245
ENSA Safi 102
Boolen est une condition :
gal =
diffrent de !=
strictement plus petit que
plus petit ou gal =
Conditions composes oprateur logique ET, OU, NON, etXOR
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
103/245
ENSA Safi 103
crire un algorithme qui demande un nombre lutilisateur, etlinforme ensuite si ce nombre est positif ou ngatif (on laissede ct le cas o le nombre vaut zro).
Solution
7/25/2019 Initiation La Programmationfinal2012
104/245
ENSA Safi 104
variables n : EntierDbut
ecrire_ecran "Entrez un nombre : "lire_clavier nSi n > 0Alors
ecrire_ecran "Ce nombre est positif "
Sinonecrire_ecran "Ce nombre est ngatif"
FinsiFin
Exercice 2
7/25/2019 Initiation La Programmationfinal2012
105/245
ENSA Safi 105
Ecrire un algorithme qui demande deux nombres lutilisateuret linforme ensuite si leur produit est ngatif ou positif (onlaisse de ct le cas o le produit est nul). Attention toutefois :on ne doit pas calculer le produit des deux nombres.
Solution
7/25/2019 Initiation La Programmationfinal2012
106/245
ENSA Safi 106
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"
Sinonecrire_ecran "Leur produit est ngatif"
FinsiFin
Exercice 3
7/25/2019 Initiation La Programmationfinal2012
107/245
ENSA Safi 107
Ecrire un algorithme qui demande trois noms lutilisateur etlinforme ensuite sils sont rangs ou non dans lordrealphabtique.
Solution
7/25/2019 Initiation La Programmationfinal2012
108/245
ENSA Safi 108
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"Sinon
ecrire_ecran "Ces noms ne sont pas classs"Finsi
Fin
Exercice 4
7/25/2019 Initiation La Programmationfinal2012
109/245
ENSA Safi 109
Ecrire un algorithme qui demande un nombre lutilisateur, etlinforme ensuite si ce nombre est positif ou ngatif (on inclutcette fois le traitement du cas o le nombre vaut zro).
Solution
7/25/2019 Initiation La Programmationfinal2012
110/245
ENSA Safi 110
variables n : EntierDbut
ecrire_ecran "Entrez un nombre : "lire_clavier nSi n < 0 Alors
ecrire_ecran "Ce nombre est ngatif"
Sinon si n = 0 Alorsecrire_ecran "Ce nombre est nul"
Sinonecrire_ecran "Ce nombre est posit if"
Finsi
Fin
Exercice 5
7/25/2019 Initiation La Programmationfinal2012
111/245
ENSA Safi 111
Ecrire un algorithme qui demande deux nombres lutilisateur
et linforme ensuite si le produit est ngatif ou positif (on inclutcette fois le traitement du cas o le produit peut tre nul).Attention toutefois, on ne doit pas calculer le produit !
Solution
7/25/2019 Initiation La Programmationfinal2012
112/245
ENSA Safi 112
variables m, n : Entier
Dbutecrire_ecran "Entrez deux nombres : "lire_clavier m, nSi m = 0 OU n = 0 Alors
ecrire_ecran " Le produit est nul"Sinon s i (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors
ecrire_ecran "Le produit est positi f"
Sinonecrire_ecran " Le produit est ngatif"Finsi
Fin
Si on souhaite simpli fier 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'undes rares cas dans lesquels i l est pertinent)
Exercice 5
7/25/2019 Initiation La Programmationfinal2012
113/245
ENSA Safi 113
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 ?
Solution
7/25/2019 Initiation La Programmationfinal2012
114/245
ENSA Safi 114
variables age : Entier
Dbutecrire_ecran "Entrez lge de lenfant : "lire_clavier ageSi age >= 12Alors
ecrire_ecran "Catgorie Cadet"Sinon si age >= 10 Alors
ecrire_ecran "Catgorie Minime"
Sinon si age >= 8 Alorsecrire_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.
Linstruction selonexemple Comparer:
7/25/2019 Initiation La Programmationfinal2012
115/245
ENSA Safi 115
p
selon abrviation
cas "M" :
ecrire_ecran " Monsieur "cas "Mme" :
ecrire_ecran " Madame "
cas "Mlle" :
ecrire_ecran " Mademoiselle "
Autres :ecrire_ecran " Monsieur, Madame"
finselon
p
si abrviation = "M alors
ecrire_ecran "Monsieur"
sinon si abrviation = "Mme alorsecrire_ecran "Madame"
sinon si abrviation = "Mlle" alors
ecrire_ecran "Mademoiselle"
sinon
ecrire_ecran "Monsieur,Madame "finsi
Exercice 6
7/25/2019 Initiation La Programmationfinal2012
116/245
ENSA Safi 116
Ecrire un algorithme qui demande loperation et 2 numero
lutilisateur. Ensuite, il affiche le resultat :
Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?
Solutionvariables nbr1 nbr2: Entier
7/25/2019 Initiation La Programmationfinal2012
117/245
ENSA Safi 117
variables nbr1,nbr2: Entier
o:charactereDbut
ecrire_ecran "Entrez 1er nbr et nbr2"
lire_clavier nbr1, nbr2ecrire_ecran "Entrez operation"lire_clavier o
selon o
cas "+" :
res
7/25/2019 Initiation La Programmationfinal2012
118/245
ENSA Safi 118
Si A ET BAlors
Instructions 1SinonInstructions 2
Finsi
quivaut :
Si NON A OU NON BAlorsInstructions 2
SinonInstructions 1
Finsi
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
119/245
ENSA Safi 119
Formulez un algorithme quivalent lalgorithme suivant :
Si Tutu > Toto + 4 OU Tata = "OK"AlorsTutu Tutu + 1
SinonTutu Tutu 1
Finsi
Solution
7/25/2019 Initiation La Programmationfinal2012
120/245
ENSA Safi 120
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 desconditions en leur contraire...
Si Tutu
7/25/2019 Initiation La Programmationfinal2012
121/245
ENSA Safi 121
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'utilisateurtape 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.
Solution
7/25/2019 Initiation La Programmationfinal2012
122/245
ENSA Safi 122
variables h, m : entier
Dbutecrire_ecran "Entrez les heures, puis les minutes : "lire_clavier h, mm m + 1Si m = 60 Alors
m 0h h + 1
FinSi
Si h = 24 Alorsh 0
FinSiecrire_ecran "Dans une minute il sera ", h, "heure(s) " , m, "minute(s)"
Fin
Exercice 3
7/25/2019 Initiation La Programmationfinal2012
123/245
ENSA Safi 123
De mme que le prcdent, cet algorithme doit demander une
heure et en afficher une autre. Mais cette fois, il doit grergalement les secondes, et afficher l'heure qu'il sera uneseconde plus tard.
Par exemple, si l'utilisateur tape 21, puis 32, puis 8,l'algorithme doit rpondre : "Dans une seconde, il sera 21heure(s), 32 minute(s) et 9 seconde(s)".
NB : l encore, on suppose que l'utilisateur entre une datevalide.
Solution
7/25/2019 Initiation La Programmationfinal2012
124/245
ENSA Safi 124
variables h, m, s : entier
Dbutecrire_ecran "Entrez les heures, puis les minutes, puis lessecondes : "
lire_clavier h, m, ss s + 1Si s = 60 Alors
s 0m m + 1
FinSiSi m = 60 Alorsm 0h h + 1
FinSiSi h = 24 Alors
h 0FinSi
ecrire_ecran " Dans une seconde il sera " , h, "h" , m, "m et ", s, "s"Fin
Exercice 4
7/25/2019 Initiation La Programmationfinal2012
125/245
ENSA Safi 125
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 dephotocopies effectues et qui affiche la facturecorrespondante.
Solution
7/25/2019 Initiation La Programmationfinal2012
126/245
ENSA Safi 126
variables n : entier
p : reelDbut
ecrire_ecran "Nombre de photocopies : "lire_clavier nSi n
7/25/2019 Initiation La Programmationfinal2012
127/245
ENSA Safi 127
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 duZorglubien, et se prononcera donc ensuite sur le fait quelhabitant est imposable.
Solution
7/25/2019 Initiation La Programmationfinal2012
128/245
ENSA Safi 128
variables sex : Caractre
age : entierC1, C2 : BoolenDbut
ecrire_ecran "Entrez le sexe (M/F) : "lire_clavier sexecrire_ecran "Entrez lge: "lire_clavier age
C1 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
Exercice 6
7/25/2019 Initiation La Programmationfinal2012
129/245
ENSA Safi 129
Une compagnie d'assurance automobile propose ses clients quatre familles de tarifsidentifiables 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, lacompagnie refuse de l'assurer.
un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plusde 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'ajamais 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 rougepour 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'unan.
Ecrire l'algorithme permettant de saisir les donnes ncessaires (sans contrle de saisie) etde traiter ce problme. Avant de se lancer corps perdu dans cet exercice, on pourrarflchir un peu et s'apercevoir qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire uneanalyse !)
variables Age,Dperm, NbrACC, Niv : entier
AncCI C1,C2,C3 : Booleen
DEBUT
Sinon si C3 ET NbrACC=1 Alors
Niv3
Sinon si C3 ET NbrACC=2 Alors
7/25/2019 Initiation La Programmationfinal2012
130/245
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=2 Alors
Niv4
Sinon si C3 ET NbrACC>2 alors
Niv5
finsi
si AncCl Alors
NivNiv-1
finsi
si NIV=
7/25/2019 Initiation La Programmationfinal2012
131/245
ENSA Safi 131
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 justeaprs l'affectation des troi s variables boolennes C1, C2, et C3. On cri t : P 0
Si Non(C1) AlorsP P + 1
FinSiSi Non(C2) AlorsP P + 1
FinSiP P + accSi P < 3 et C3 Alors
P P - 1FinSiSi P = -1 Alorssitu "Bleu"
Sinon si P = 0 Alorssitu "Vert"
Sinon si P = 1 Alorssitu "Orange"
Sinon si P = 2 Alorssitu "Rouge"
Sinon
situ "Refus"FinSiecrire_ecran "Votre situation : " , situFin
Exercice 7
7/25/2019 Initiation La Programmationfinal2012
132/245
ENSA Safi 132
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 candidatsayant obtenu au moins 12,5% des voix au premier tour.
Vous devez crire un algorithme qui permette la saisie des scores dequatre candidats au premier tour. Cet algorithme traitera ensuite lecandidat numro 1 (et uniquement lui) : il dira s'il est lu, battu, s'il setrouve en ballottage favorable (il participe au second tour en tant arriv entte l'issue du premier tour) ou dfavorable (il participe au second toursans avoir t en tte au premier tour).
Solution
7/25/2019 Initiation La Programmationfinal2012
133/245
ENSA Safi 133
Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsentedignement 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 de12,5 %, il est au deuxime tour, s inon il est limin. H h h... mais i l ne faut pas oublier que lecandidat peut trs bien avoir eu 20 % mais tre tout de mme limin, tout simplement parce quel'un des autres a fait plus de 50 % et donc qu'i l n'y a pas de deuxime tour !...
Moralit : ne jamais se jeter sur la programmation avant d'avoir soigneusement men l'analyse duproblme 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"
Sinonecrire_ecran "Ballotage dfavorable"FinSi
Fin
Les Boucles
7/25/2019 Initiation La Programmationfinal2012
134/245
ENSA Safi 134
TantQue boolen(vrai) faire
InstructionsFinTantQue
Pour Compteur := Init ial Final par ValeurDuPasInstructions
finpourOu
Pour Compteur
Initial Final par ValeurDuPasInstructions
Compteur suivant
Les Boucles
7/25/2019 Initiation La Programmationfinal2012
135/245
ENSA Safi 135
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
Les Boucles A ne pas faire
7/25/2019 Initiation La Programmationfinal2012
136/245
ENSA Safi 136
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 senslogique, et de plus, bien peu de langages vous autoriseraient ne serait-ce
qu crire cette structure aberrante. variables Truc, Trac : Entier
PourTruc := instructionsPourTrac :=instructions
finpour (Truc Suivant)
instructionsfinpour (Trac Suivant)
2- Vrification de condit ion d'arrt variables Truc : Entier
DbutPourTruc :=1 15 faireTruc Truc * 2
ecrire_ecran "Passage numro : ", TrucfinpourFin
Truc=2,6,14,30,62,126,254,510,,1022,2046,4094,8190,16382,32766,-2,-2,-2,,,,,,,,,,,,
Les BouclesLa boucle tant que faire
7/25/2019 Initiation La Programmationfinal2012
137/245
ENSA Safi 137
a bouc e ta t que a eamorage {initialisation de la (des) variable(s) de condition}
tant que fairetraitement {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 sarrterajamais .
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
138/245
ENSA Safi 138
Ecrire un algorithme qui demande lutilisateur un nombre
compris entre 1 et 3 jusqu ce que la rponse convienne.
Solution
7/25/2019 Initiation La Programmationfinal2012
139/245
ENSA Safi 139
variables N : Entier
DebutN 0
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 Alorsecrire_ecran "Saisie errone. Recommencez
FinSiFinTantQue
Fin
Exercice 2
7/25/2019 Initiation La Programmationfinal2012
140/245
ENSA Safi 140
Ecrire un algorithme qui demande un nombre compris entre
10 et 20, jusqu ce que la rponse convienne. En cas derponse suprieure 20, on fera apparatre un message : Plus petit ! , et inversement, Plus grand ! si le nombreest infrieur 10.
Solution
7/25/2019 Initiation La Programmationfinal2012
141/245
ENSA Safi 141
variables N : Entier
DebutN 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
FinTantQue
Fin
Les Boucles
7/25/2019 Initiation La Programmationfinal2012
142/245
ENSA Safi 142
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
suprieureAttention : -le traitement ne doit pas modifier le compteur de
boucle
Exercice 3
7/25/2019 Initiation La Programmationfinal2012
143/245
ENSA Safi 143
Ecrire un algorithme qui demande un nombre de dpart, et qui
ensuite affiche les dix nombres suivants. Par exemple, sil'utilisateur entre le nombre 17, le programme affichera lesnombres de 18 27.
Solution
7/25/2019 Initiation La Programmationfinal2012
144/245
ENSA Safi 144
variables N, i : Entier
Debutecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "Les 10 nombres suivants sont : "Pour i := N + 1 N + 10
ecrire_ecran ifinpour
Fin
Exercice 4
7/25/2019 Initiation La Programmationfinal2012
145/245
ENSA Safi 145
Ecrire un algorithme qui demande un nombre de dpart, et qui
ensuite crit la table de multiplication de ce nombre, prsentecomme suit (cas o l'utilisateur entre le nombre 7) :Table de 7 :7 x 1 = 77 x 2 = 14
7 x 3 = 217 x 10 = 70
Solution
7/25/2019 Initiation La Programmationfinal2012
146/245
ENSA Safi 146
variables N, i : Entier
Debutecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "La table de mult iplication de ce nombre
est : "
Pour i := 1 10ecrire_ecran N, " x " , i, " = ", n*i
finpourFin
Exercice 5
7/25/2019 Initiation La Programmationfinal2012
147/245
ENSA Safi 147
Ecrire un algorithme qui demande un nombre de dpart, et qui
calcule la somme des entiers jusqu ce nombre. Parexemple, 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.
Solution
7/25/2019 Initiation La Programmationfinal2012
148/245
ENSA Safi 148
variables N, i, Som : Entier
Debutecrire_ecran "Entrez un nombre : "lire_clavier NSom 0
Pour i := 1 N
Som Som + ifinpourecrire_ecran "La somme est : " , Som
Fin
Exercice 6
7/25/2019 Initiation La Programmationfinal2012
149/245
ENSA Safi 149
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
Solution
7/25/2019 Initiation La Programmationfinal2012
150/245
ENSA Safi 150
variables N, i, F : Entier
Debutecrire_ecran "Entrez un nombre : "lire_clavier NF 1
Pour i := 2 N
F F * ifinpourecrire_ecran "La factorielle est : " , F
Fin
Exercice 7
7/25/2019 Initiation La Programmationfinal2012
151/245
ENSA Safi 151
Ecrire un algorithme qui demande successivement 20
nombres lutilisateur, et qui lui dise ensuite quel tait le plusgrand 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 affichede surcrot en quelle position avait t saisie ce nombre :
Ctait le nombre numro 2
Solution
7/25/2019 Initiation La Programmationfinal2012
152/245
ENSA Safi 152
variables N, i, PG : EntierDebut
PG 0Pour i := 1 20ecrire_ecran "Entrez un nombre : "lire_clavier NSi i = 1 ou N > PG Alors
PG NFinSi
finpourecrire_ecran "Le nombre le plus grandtait : ", PG
Fin
En ligne 3, on peut mettre nimporte quoidans PG, il suffit que cette variable soit
affecte pour que le premier passage enligne 7 ne provoque pas d'erreur.
Pour la version amliore, cela donne : variables N, i, PG, IPG : Entier
DebutPG -32768Pour i := 1 20
ecrire_ecran "Entrez un nombre : "l ire_clavier NSi i = 1 ou N > PG AlorsPG NIPG i
FinSifinpourecrire_ecran "Le nbre le plus grandtait : ", PGecrire_ecran "Il a t saisi en position ",IPG
Fin
Exercice 8
7/25/2019 Initiation La Programmationfinal2012
153/245
ENSA Safi 153
Rcrire lalgorithme prcdent, mais cette fois-ci on ne
connat pas davance combien lutilisateur souhaite saisir denombres. La saisie des nombres sarrte lorsque lutilisateurentre un zro.
Solution
7/25/2019 Initiation La Programmationfinal2012
154/245
ENSA Safi 154
variables N, i, PG, IPG : EntierDebut
N 1i 0PG -32766TantQue N 0
ecrire_ecran "Entrez un nombre : "l ire_clavier Ni i + 1
Si i = 1 ou N > PG AlorsPG NIPG i
FinSiFinTantQueecrire_ecran "Le nombre le plus grand tait : ", PGecrire_ecran " Il a t saisi en position numro " , IPG
Fin
Exercice 9
7/25/2019 Initiation La Programmationfinal2012
155/245
ENSA Safi 155
lire la suite des prix (en euros entiers et termine par zro)
des achats dun client. Calculer la somme quil doit, lire lasomme quil paye, et simuler la remise de la monnaie enaffichant les textes "10 Euros", "5 Euros" et "1 Euro" autant defois quil y a de coupures de chaque sorte rendre.
Solution
7/25/2019 Initiation La Programmationfinal2012
156/245
ENSA Safi 156
variables somdue, M,PE, res, Nb10PE,Nb5PE : Entier
Debut
PE
7/25/2019 Initiation La Programmationfinal2012
157/245
ENSA Safi 157
crire un algorithme qui permette de connatre ses chances de gagner autierc, quart, quint et autres impts volontaires.
On demande lutilisateur le nombre de chevaux partants, et le nombre dechevaux 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 dechevaux 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 singulirementaugmentes par une petite astuce. Vous commencerez par crire lamanire la plus simple, puis vous identifierez le problme, et crirez une
deuxime version permettant de le rsoudre..
Solution
7/25/2019 Initiation La Programmationfinal2012
158/245
ENSA Safi 158
Spontanment, on est tent d'crire l'algor ithme suivant : variables N, P, i, Num, Dno1, Dno2 : Entier
Debut ecrire_ecran "Entr ez le nombre de chevaux partants : "lire_clavier Necrire_ecran "Entr ez le nombre de chevaux jous : "lire_clavier PNum 1Pour i := 2 NNum Num * i
finpourDno1 1Pour i := 2 N-PDno1 Dno1 * i
finpourDno2 1Pour i := 2 PDno2 Dno2 * i
finpourecrire_ecran "Dans l ordre, une chance sur " , Num / Dno1
ecrire_ecran " Dans le dsordre, une sur ", Num / (Dno1 *Dno2)Fin
Cette version, formellement juste, comporte tou t de mme deuxfaiblesses.
La premire, et la plus g rave, concerne la manire dont elle
calcule le rsultat final. Celui-ci est le quo tient d'un no mbre parun autre ; o r, ces nombres auront rapidement tendance tre trsgrands. En calculant, comme on le fait ici, d'abord le num rateur,puis ensui te le dnominateur, on prend le risq ue de demander la machine de stocker des nombr es trop grands pour qu 'elle soitcapable de les coder (cf. le p rambule). C'est d'autant p lus bteque rien ne nous ob lige procder ainsi : on n'est pas obl ig depasser par la divisi on de deux trs grands nomb res pour obtenirle rsultat voulu.
La deuxime remarque est qu'on a progr amm ici trois bou clessuccessives. Or, en y regardant bien, on peut voir q u'aprssimpli fication de la formul e, ces trois boucl es compo rtent lemme nombre de tours ! (si vo us ne me croyez pas, crivez unexemple de calcul et biffez les nombres id entiques au numrateur
et au dnominateur). Ce tripl e calcul (ces trois bo ucles) peutdonc tre ramen(es) un(e) seul(e). Et voi l le travail, qui estnon seulement bien plus court, mais aussi plus perform ant :
variables N, P, i, O, F : EntierDebutecrire_ecran "Entr ez le nombre de chevaux partants : "lire_clavier Necrire_ecran "Entrez le nombre de chevaux jous : "lire_clavier PA 1B 1Pour i : = 1 PA A * (i + N - P)B B * i
finpour
ecrire_ecran "Dans l ordre, une chance sur " , Aecrire_ecran "Dans le dsord re, une chance sur ", A / BFin
Comparaison boucles pour et tant que
1 bV l f i
7/25/2019 Initiation La Programmationfinal2012
159/245
ENSA Safi 159
pourcpt 1 nbVal faireecrire_ecran "Donnez une valeur :"lire_clavier valeur
totalValeurstotalValeurs+ valeur {cumul}
Finpour. quivaut
cpt 0tant que cpt
7/25/2019 Initiation La Programmationfinal2012
160/245
ENSA Safi 160
La boucle rpter ... jusquRpter
(r)affectation de la (des) variable(s) de condition
traitement {suite dinstructions}jusqu
Fonction:-excuter une suite dinstructions au moins une fois et larpter tant quune condition est pas remplieRemarque: le traitement dans lexemple prcdent se limite lar-affectation de la variable de condition
Les Boucles rpterjusqu (suit)Comparaison boucles rpter et tant que (exemple exercice1)
R t
7/25/2019 Initiation La Programmationfinal2012
161/245
ENSA Safi 161
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 valeurtantque (valeur < 1 ou (valeur > 3) ) faire
ecrire_ecran "Donnez une valeur positive paire:"lire_clavier valeur
FinTantQue
Les Boucles rpterjusqu (suit)Comparaison boucles rpter et tant que (suite)
7/25/2019 Initiation La Programmationfinal2012
162/245
ENSA Safi 162
boucle tant que-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 nouvellesvariables (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 avecvrification.
Choisir pour... tant que rpter
7/25/2019 Initiation La Programmationfinal2012
163/245
ENSA Safi 163
Nombreditrations
connu ?
Traitementexcut aumoins une
fois ?
Boucle tant que
Boucle rpter
Boucle pour
OUI
NON
NONOUI
Les Tableaux
7/25/2019 Initiation La Programmationfinal2012
164/245
ENSA Safi 164
Un ensemble de valeurs portant le mme nom de variable et repres parun nombre, sappelle un tableau, ou encore une variable indice.Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappellelindice.Chaque fois que lon doit dsigner un lment du tableau, on fait figurer lenom 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 4
T[i] 0
Les Tableaux
Dfi iti d t
7/25/2019 Initiation La Programmationfinal2012
165/245
ENSA Safi 165
Dfinition du type
1 2 3 4 5 6
tab
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
12 5 -78 2 -21 8
nom du tableau
Indice
Contenu du tableau
t e s t e
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
166/245
ENSA Safi 166
Ecrire un algorithme qui dclare et remplisse un tableau de 7
valeurs numriques en les mettant toutes zro.
Solution
7/25/2019 Initiation La Programmationfinal2012
167/245
ENSA Safi 167
variables Truc [1:7] : tableau de rel
i : entierDebut
Pour i := 1 7Truc[i] 0
finpourFin
Exercice 2
7/25/2019 Initiation La Programmationfinal2012
168/245
ENSA Safi 168
Ecrire un algorithme qui dclare et remplisse un tableau
contenant les six voyelles de lalphabet latin.
Solution
7/25/2019 Initiation La Programmationfinal2012
169/245
ENSA Safi 169
variables Truc [1:6] : Tableau de Caractre
DebutTruc[1] "a"
Truc[2] "e"
Truc[3] "i"
Truc[4] "o"
Truc[5] "u"Truc[6] "y"
Fin
Exercice 3
7/25/2019 Initiation La Programmationfinal2012
170/245
ENSA Safi 170
Ecrire un algorithme qui dclare un tableau de 9 notes, dont
on fait ensuite saisir les valeurs par lutilisateur.
Solution
7/25/2019 Initiation La Programmationfinal2012
171/245
ENSA Safi 171
variables Notes [1:4] : Tableau de entier
i : entier
Debut
Pour i := 1 4ecrire_ecran "Entrez la note numro " , ilire_clavier Notes[i]
finpour
Fin
Exercice 4
7/25/2019 Initiation La Programmationfinal2012
172/245
ENSA Safi 172
Que produit lalgorithme suivant ?
variables Nb [1:6] : tableau de Entieri : EntierDbut
Pour i := 1 6
Nb[i] i * i
finpourPour i := 1 6ecrire_ecran Nb[i]
finpourFin
Peut-on simplifier cet algorithme avec le mme rsultat ?
Solution
7/25/2019 Initiation La Programmationfinal2012
173/245
ENSA Safi 173
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 Entieri : Entier
DbutPour i := 1 6
Nb[i] i * i
ecrire_ecran Nb[i ]finpour
Fin
Exercice 5
7/25/2019 Initiation La Programmationfinal2012
174/245
ENSA Safi 174
Que produit lalgorithme suivant ?
variables N[1:7]: tableau de Entieri, k : EntierDbut
N[1] 1Pour k := 2 7
N[k] N[k-1] + 2finpourPour i := 1 7
ecrire_ecran N[i]finpour
Fin
Peut-on simpl ifier cet algorithme avec le mme rsultat ?
Solution
7/25/2019 Initiation La Programmationfinal2012
175/245
ENSA Safi 175
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 Entierk : Entier
Dbut
N[1] 1ecrire_ecran N[1]Pour k := 2 7
N[k] N[k-1] + 2ecrire_ecran N[k]
finpour
Fin
Exercice 6
7/25/2019 Initiation La Programmationfinal2012
176/245
ENSA Safi 176
Que produit lalgorithme suivant ?
variables Suite [1:8]: tableau de Entieri : Entier
DbutSuite[1] 1Suite[2] 1
Pour i :=3 8Suite[i] Suite[i-1] + Suite[i-2]finpourPour i := 1 8
ecrire_ecran Suite[i]finpour
Fin
Solution
7/25/2019 Initiation La Programmationfinal2012
177/245
ENSA Safi 177
Cet algorithme rempli t un tableau de 8 valeurs : 1, 1, 2, 3,
5, 8, 13, 21
Exercice 7
7/25/2019 Initiation La Programmationfinal2012
178/245
ENSA Safi 178
Ecrivez la fin de lalgorithme 3 afin que le calcul de la
moyenne des notes soi t effectu et affich lcran.
Solution
7/25/2019 Initiation La Programmationfinal2012
179/245
ENSA Safi 179
variables Notes [1:9]: tableau de EntierS,i : Entier
Debuts 0
Pour i := 1 9ecrire_ecran " Entrez la note n " , ilire_clavier Notes[i]s s + Notes[i]
finpourecrire_ecran "Moyenne :" , s/9
Fin
7/25/2019 Initiation La Programmationfinal2012
180/245
variables Num [1:10] : tableau de Entiervariables i,S,N : Entier
variables premier : booleen
7/25/2019 Initiation La Programmationfinal2012
181/245
pDebut
N1
S1
Tantque N
7/25/2019 Initiation La Programmationfinal2012
182/245
ENSA Safi 182
Tableaux deux dimensions
Exemple tableau 2 lignes et 7 colonnes
1 2 3 4 5 6 7
1
2
Dclaration
tableau[1:2, 1:7] dentiers
10 3 20 5 25 2 422
9 132 1 0 124 7 9
indices minet max des
lignes
indices minet max descolonnes
Tableaux Multidimensionnels
7/25/2019 Initiation La Programmationfinal2012
183/245
ENSA Safi 183
REMARQUE ESSENTIELLE :Il ny a aucune diffrence qualitative entre un tableau deuxdimensions ( i, j ) et un tableau une dimension ( i * j ). De mme quele jeu de dames quon vient dvoquer, tout problme qui peut tremodlis 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 compl ique, sion a choisi la mauvaise option) lcriture et la lisibilit de lalgori thme.
Syntaxe
variables Notes [1:9,1:9] : tableau de Entier
Notes[1, 8] 0
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
184/245
ENSA Safi 184
crivez un algorithme remplissant un tableau de 6 sur 13,
avec des zros.
Solution
7/25/2019 Initiation La Programmationfinal2012
185/245
ENSA Safi 185
variables Notes [1:6,1:13] :tableau de Entier
i, j :entier
DebutPour i := 1 6Pour j := 1 13
Truc[i, j] 0finpour
finpourFin
Exercice 2
Quel rsultat produira cet algorithme ?
7/25/2019 Initiation La Programmationfinal2012
186/245
ENSA Safi 186
Quel rsultat produira cet algorithme ?variables X[1:2,1:3] : tableau de Entier
i, j, val : EntierDbut
Val 1Pour i := 1 2
Pour j := 1 3X[i, j] ValVal Val + 1
finpourfinpourPour i := 1 2
Pour j := 1 3ecrire_ecran X[i, j]
finpourfinpour
Fin
Solution
7/25/2019 Initiation La Programmationfinal2012
187/245
ENSA Safi 187
Cet algorithme rempli t un tableau de la manire suivante:
X[1, 1]= 1X[1, 2] = 2X[1, 3]= 3X[2, 1]= 4X[2, 2] = 5
X[2, 3]= 6 Il cri t ensuite ces valeurs l cran, dans cet ordre.
Exercice 3
Quel rsultat produira cet algorithme ?
7/25/2019 Initiation La Programmationfinal2012
188/245
ENSA Safi 188
Quel rsultat produira cet algorithme ?variables X[1:2,1:3] : tableau de Entier
i, j, val : EntierDbut
Val 1Pour i := 1 2Pour j := 1 3X[i, j] ValVal Val + 1
finpourfinpourPour j := 1 3Pour i := 1 2ecrire_ecran X[i, j]
finpourfinpour
Fin
Solution
C t l ith li t t bl d l i i t
7/25/2019 Initiation La Programmationfinal2012
189/245
ENSA Safi 189
Cet algorithme rempli t un tableau de la manire suivante:
X[1, 1]= 1X[1, 2] = 4X[1, 3]= 2X[2, 1]= 5X[2, 2] = 3
X[2, 3]= 6 Il cri t ensuite ces valeurs l cran, dans cet ordre.
Exercice 4
Quel rsultat produira cet algorithme ?
7/25/2019 Initiation La Programmationfinal2012
190/245
ENSA Safi 190
Quel rsultat produira cet algorithme ?
variables T[1:4,1:2] : tableau de Entierk, m : EntierDbutPour k := 1 4Pour m := 1 2
////T[k, m] (k + 1) + 4 * m
T[k, m] (2*(k-1))+mfinpourfinpourPour k := 1 4Pour m := 1 2ecrire_ecran T[k, m]
finpour
finpourFin
Solution
C t l ith li t t bl d l i i t
7/25/2019 Initiation La Programmationfinal2012
191/245
ENSA Safi 191
Cet algorithme rempli t un tableau de la manire suivante:
T[1, 1] = 6T[1, 2] = 10T[2, 1] = 7T[2, 2] = 11T[3, 1] = 8
T[3, 2] = 12T[4, 1] = 9T[4, 2] = 13
Il cri t ensuite ces valeurs l cran, dans cet ordre.
Exercice 5
Ecrire algorithme quivalent a exercice 4 en ut ilisant un tableau
7/25/2019 Initiation La Programmationfinal2012
192/245
ENSA Safi 192
Ecrire algorithme quivalent a exercice 4 en ut ilisant un tableauunidimensionnel
variables T[1:8] : tableau de Entier
k, m,i : EntierDbutPour k := 1 4
7/25/2019 Initiation La Programmationfinal2012
193/245
Pour k := 1 4Pour m := 1 2/////T[k, m] k + m
i (2*(k-1))+m
/////T[k, m] (k + 1) + 4 * m
T[i] (k + 1) + 4 * m
finpourfinpourPour k := 1 4Pour m := 1 2
i (2*(k-1))+mecrire_ecran T[i]
finpourfinpourFin
Exercice 6
Soit n tablea T de dimensions (12 8) pralablement
7/25/2019 Initiation La Programmationfinal2012
194/245
ENSA Safi 194
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.
Solution
variables i, j, iMax, jMax : entier
7/25/2019 Initiation La Programmationfinal2012
195/245
ENSA Safi 195
variables i, j, iMax, jMax : entiervariables T[1:13,1:9] : tableau de Entier
Le principe de la recherche dans un tableau deux dimensions est strictement le mme quedans un tableau une dimension, ce qui ne doit pas nous tonner. La seule chose quichange, c'est qu'ici le balayage requiert deux boucles imbriques, au lieu d'une seule.
Debut...iMax 0
jMax 0Pour i := 1 13Pour j := 1 9Si 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
Procdures et Fonctions
Avantages:
Les procdures ou fonctions permettent de ne pas rpter plusieurs fois
7/25/2019 Initiation La Programmationfinal2012
196/245
ENSA Safi 196
une mme squence dinstructions au sein du programme.
La mise au point du programme est plus rapide en uti lisant desprocdures et des fonctions. En effet, elle peut tre ralise en dehors ducontexte du programme.
Une procdure peut tre intgre un autre programme, ou elle pourratre range dans une biblio thque doutils ou elle pourra tre utilise parnimporte 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 fonct ion deparamtres formels uti liss dans la conception de celle-ci.
Par contre au moment de luti lisation de la procdure ou fonction, onassoc iera de vritables valeurs ces paramtres grce des paramtresdappel ou paramtres effectifs.
Notion de fonction
7/25/2019 Initiation La Programmationfinal2012
197/245
ENSA Safi 197
Les Fonctions Prdfinies: Math
A Sin(35)
7/25/2019 Initiation La Programmationfinal2012
198/245
ENSA Safi 198
( )
Une fonction est donc constitue de trois parties :
le nom proprement dit de la fonction. Ce nom ne sinvente pas ! Il doitimprativement correspondre une fonction propose par le langage. Dansnotre exemple, ce nom est SIN.
deux parenthses, une ouvrante, une fermante. Ces parenthses sont toujoursobligatoires, mme lorsqu'on n'crit rien l'intrieur.
une liste de valeurs, indispensables la bonne excution de la fonction. Cesvaleurs sappellent des arguments, ou des paramtres. Certaines fonctions
exigent un seul argument, dautres deux, etc. et dautres encore aucun. Anoter que mme dans le cas de ces fonctions nexigeant aucun argument, lesparenthses restent obligatoires. Le nombre darguments ncessaire pour unefonction donne ne sinvente pas : il est fix par le langage. Par exemple, lafonction sinus a besoin dun argument (ce nest pas surprenant, cet argumentest la valeur de langle). Si vous essayez de lexcuter en lui donnant deuxarguments, ou aucun, cela dclenchera une erreur lexcution. Notezgalement que les arguments doivent tre dun certain type, et quil fautrespecter ces types.
Les Fonctions Prdfinies: Math
atn(p1) arc tangente de p1 entier, rel entier, rel
7/25/2019 Initiation La Programmationfinal2012
199/245
ENSA Safi 199
cos(p1) cosinus de p1 entie r, rel entier, rel
sin(p1) sinus de p1 entier, rel entier, rel
tan(p1) tangente de p1 entier, rel entier, rel
exp(p1) exponentielle de p1 entie r, rel entie r, rel
rac2(p1) racine carre de p1 entier, rel entier, rel
car(p1) caractre ayant pourcode ansi la valeur de p1
car, chane entier
chnombre(p1) convertit p1 en nombre entier,rel chane
Les Fonctions Prdfinies: numriques classiques
Une fonction extrmement rpandue est celle qui permet dercuprer la partie entire dun nombre :
7/25/2019 Initiation La Programmationfinal2012
200/245
ENSA Safi 200
rcuprer la partie entire d un 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 + 1
B 12 Mod 2 B vaut 0 car 12 = 6*2Cette 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
Les Fonctions Prdfinies: texte
Tous les langages, je dis bien tous, proposent les fonctions suivantes,
7/25/2019 Initiation La Programmationfinal2012
201/245
ENSA Safi 201
g g , j , p p ,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 langagesproposent 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 pascomprise dans chane1, la fonction renvoie zro.
7/25/2019 Initiation La Programmationfinal2012
202/245
long("Bonjour, a va ?") vaut 16
long("") 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", "pur",1) vaut 4
rang("Un pur bonheur", "techno",1) vaut 0 rang("Un pur bonheur", "ur",8) vaut 13
Exercice 1
7/25/2019 Initiation La Programmationfinal2012
203/245
crivez une fonction qui renvoie le nombre de voyelles
contenues dans une chane de caractres passe enargument. Au passage, notez qu'une fonction a tout faitle droit d'appeler une autre fonction.
Solution
Fonction NbVoyelles (e Mot : chaine):entier
7/25/2019 Initiation La Programmationfinal2012
204/245
ENSA Safi 204
Fonction NbVoyelles (e Mot : chaine):entier
variables i, nb : entierdebutnb
7/25/2019 Initiation La Programmationfinal2012
205/245
ENSA Safi 205
Rcrivez la fonction Trouve, vue prcdemment, l aide des
fonctions Mid et Len (comme quoi, Trouve, la diffrence deMid et Len, nest pas une fonction indispensable dans unlangage).
Solutionfonction foncrang(e aa,b:chaine ;e p:entier):entier
variables i , r :entier
db t
7/25/2019 Initiation La Programmationfinal2012
206/245
ENSA Safi 206
dbut
i
7/25/2019 Initiation La Programmationfinal2012
207/245
ENSA Safi 207
p p g pp p p pgroupes 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 jamaisdfinir une autre fonction.
Diffrence entre fonction et procdure
Les fonctions ne sont qu'un cas particulier des sous-procdures : celuio 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 di re unnombre, un caractre ou une chane de caractr, boolean.
Les procdures dans tous les autres cas (celui o on ne renvoie aucunevaleur, comme celui ou en en renvoie plusieurs.
Procdures et Fonctions :Syntaxe
Declaration
7/25/2019 Initiation La Programmationfinal2012
208/245
ENSA Safi 208
Fonction RepOuiNon(e Msg : Caractre) : Caractre
arguments formelles resultat
variables rsultat : caractre
.
valeur_retour rsultat qui indique quelle valeur doit prendre la fonction lorsqu'elle est utilise parle programme.
finfonction
Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut
ecrire_ecran RepOuiNon("oui")
argument rel
.
finfonction
Procdures et Fonctions :Syntaxe
Declaration procedure
7/25/2019 Initiation La Programmationfinal2012
209/245
ENSA Safi 209
Procedure RepOuiNon(e Msg : Caractre)
arguments formelles
variables rsultat : caractre
.
finfonction
Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut
RepOuiNon("oui")
.
finfonction
Procdures et Fonctions : passage par valeur
P t f l i bl tili d l d
7/25/2019 Initiation La Programmationfinal2012
210/245
Paramtre formel : variable utilise dans le corps du sous-
programme qui reoit une valeur de lextrieur (ils font partide la description de la fonction)Paramtre effectif : Il s'agit de la variable (ou valeur)
fournie lors de l'appel du sous programme (valeurs fourniespour utiliser la fonction et valeurs renvoyes)
Copie de la valeur du paramtre effectif vers le paramtreformel correspondant lors de l'appelParamtres formel et effectif ont des noms diffrents
Procdures et Fonctions : passage par valeur
variables X : Entier
7/25/2019 Initiation La Programmationfinal2012
211/245
ENSA Safi 211
DbutX 25afficheecran(X)
Finfonction
Fonction afficheecran(e k : entier)ecrire_ecran kfin
X=25
k=25
Passage par valeur
Remarque: avec algoexe il fautajouter le mot e avant les argumentExemple :afficheecran(e k : entier)
Fonctions:Porte des variables
Si P1 reprsente le programme principal et P2, P3 deuxfonctions, le schma qui suit illustre le propos prcdent.
7/25/2019 Initiation La Programmationfinal2012
212/245
ENSA Safi 212
Dans P1 on dispose deX,Y et Z
Dans P2 on dispose deA,B et X
Dans P3 on dispose de
U,V,X et Y
variables X : Entier P1
variables Y : Entier
variables Z : Entier
Debut
Fin
Fonction P2(e A, B :entier)..finfonction
Fonction P3(e U, V :entier)..finfonction
Remarque: avec algoexe il fautajouter le mot globaleExemple :
variables globale x : entier
Exemple de fonction
Mauvaise Structure : Bonne structure :
F ti R O iN () t
7/25/2019 Initiation La Programmationfinal2012
213/245
ENSA Safi 213
...ecrire_ecran "Etes-vous mari ?"lire_clavier Rep1TantQue Rep1 "Oui" et Rep1 "Non"
ecrire_ecran "Tapez Oui ou Non"lire_clavier Rep1
FinTantQue...ecrire_ecran "Avez-vous des
enfants ?"lire_clavier Rep2TantQue Rep2 "Oui" et Rep2 "Non"ecrire_ecran "Tapez Oui ou Non"lire_clavier Rep2
FinTantQue...
Fonction RepOuiNon() : caractre
variables truc : carlire_clavier TrucTantQue Truc "Oui" et Truc "Non"
ecrire_ecran "Tapez Oui ou Non"lire_clavier Truc
FinTantQuevalretTruc
Top Related