Vous êtes sur la page 1sur 35

Algorithmiqueetprogrammation

(1)

STIC1/EEA1
UniversitdeSousse
ESSTHS
20142015
WajdiElhamzi
elhamziwajdi@yahoo.fr

Introduction
La dmarche algorithmique est une composante
essentielle de lactivit mathmatique.
q
Lusage et le dveloppement des algorithmes font
partie de notre quotidien ; ils sont notamment la
base du fonctionnement des automates, des
calculatrices et des ordinateurs.
De nombreux algorithmes sont connus depuis
lAntiquit, dont lalgorithme dEuclide, qui permet
de calculer le PGCD de deux nombres entiers
non nuls.
2

Questcequunalgorithme?
Historique
LLalgorithmique
algorithmiqueestuntermed
est un terme dorigine
originearabe,vientdu
arabe, vient du
nomduclbremathmaticienmusulmanAlKhawarizmi
(AbuJa'farMohammedBenMussaAlKhwarismi)
Dfinition
UnALGORITHME estunesuitefiniedinstructions
lmentaires(rgles),quisappliquentdansunordre
( g ) q
pp q
dterminunnombrefinidedonnespourfournir
unrsultat.

Unalgorithme!!

prenddesdonnesenentreetlestransformeenun
rsultatadquatensortie,
doittreindpendant detoutlangagede
programmation,
estcritdansunniveaudedtailpermettantdele
reproduire dans
dansnimportequellangagede
n importe quel langage de
programmation,
doittremodlisdemaniretrerutilisable.

Exemplesdunalgorithme?
Ouvertunlivrederecettesdecuisine?
Ouvert un livre de recettes de cuisine?
Dchiffrunmodedemploidunetablette,unemachine
laverouunmagntoscope?

Indiquuncheminuntouristegar?
Rsoluunequationduseconddegr?

Exemplesdunalgorithme:Rsolution
dunequationduseconddegr
F(x)=a.X2 +b.X +c
1. Calculerlediscriminantdeltadel'quation:
=b2 4ac
2.

b b 2 4ac
Si(>0)alors:X1,2=
2a

SI(=0)alors:X=X1=X2=

b
2a
6

Descriptiondunalgorithme
Organigramme

PseudoCode

Dbut
=b2
Oui

Dbut Algo_Equation
Db
Al E
i
Calculer =b2 4ac
Si (>0)alors

4ac

>0

Non

X1,2=

b b 2 4ac
2a

SiNon Si (=0)alors
b

X1,2=

b b 2 4ac
2a

Erreur
Fin

=0
Oui
X=X1=X2 =

X=X
X=
X1=X
= X2=
= 2a
SiNon
alors
Afficher("Erreur")
FinSi
Fin Algo_Equation

b
2a
7

Unalgorithmenestpasunique
Unalgorithmedoitrsoudreunproblme
unique.
i
Ilpeutexisterplusieursalgorithmespour
rsoudrelemmeproblme.Parexemple,on
peut syyprendredediffrentesfaonspour
peuts
prendre de diffrentes faons pour
trierunelistededonnes.

Propritsdunalgorithme
Unalgorithmedoitavoirlespropritssuivantes:
1. Correction: silesconditionsenentresont
satisfaitesetlesinstructionsdelalgorithmesont
excutesalorslersultatproduitestcorrecte.
2. Terminaison:lalgorithmedoitterminerson
excution la suite dun
excutionlasuited
unnombrefinid
nombre fini dtapes
tapes.Il
Il
doitdonctrecomposdunnombrefini
dinstructionsetnedoitpascontenirdeboucles
infinies.
9

Gagnerdutempsen
programmation

Pourrussirledveloppementdunprogramme,
il est ncessaire d en crire d abord l algorithme.
ilestncessairedencriredabordlalgorithme.
Pourcefaire,ilfaut:
Comprendreleproblmequevotreprogrammedoitrsoudre.
Savoirquelleinformationestrequisepourqueleprogramme
puisseaccomplirsatche(dfinitiondesdonnesetdeleurs
types).
Savoircommentleproblmedoittrersolu.
l
bl
d
l

Unefoislalgorithmeralis,ilestimpratifdele
tester autantquepossibleavantson
implmentationdansunlangageappropri.
10

Mthodededveloppementde
logiciels
Approchedescendante
Spcifierlesbesoinsduproblme
Comprendreleproblme
Identifierleslmentsncessaireslarsolutionduproblme

Phasedanalyse
Identifierlesdonnesenentreetlesrsultatsensortie
Identifierlesbesoinsadditionnels

Diviserleproblmeensousproblmes
Phasedemodlisation
Algorithme
Amliorationdelalgorithme

Droulementdelalgorithme(Simulationdelexcutiondelalgorithme)
Implmentation(Traduireenunlangagedeprogrammation)
Vrificationettesteduprogramme
Maintenanceduprogramme
11

Langagedeprogrammation?
Unlangagedeprogrammationestunensemble
g g
p g
d'instructionsetderglessyntaxiquescomprhensible
parl'ordinateuretpermettantdecrerdesalgorithmes.
Unprogrammeestlatraductiond'unalgorithmedans
lelangagedeprogrammationutilis.
LangageC/C++,matlab,java,C#,UML,Pascal,
Langage C/C++ matlab java C# UML Pascal

12

Structuregnraledun
algorithme(1)
Algorithme nom de lalgorithme;
Var
listes de variables;;
Const listes des constantes;
Struct listes des structures;
Fonc listes de variables;
Proc listes de variables;
Dbut
Instruction_1
Instruction_2
Instruction_3
.
Instruction_n
Fin nom de lalgorithme

len-tte
Les dclarations de variables,
constantes et structures
Les dclarations de fonctions et
procdures

Le corps de lalgorithme

13

Lestypesfondamentaux
Letypedunedonnedterminelensembledesvaleursquelle
peutprendre.Lestypesoffertsparlapluspartdeslangages
sont:
Typenumrique(entierourel)
Byte (codsur1octet):de[27,27[ou[0,28[
Entier court (codsur2octets):[215,215[
Entierlong(codsur4octets):[231,231[
Relsimpleprcision (codsur4octets):prcisiondordre107
Reldoubleprcision (codsur8octets):prcisiondordre1014

Typecaractre
yp
lettresmajuscules,minuscules,chiffres,symboles,..
Exemples:A,b,1,?,

Typechanedecaractre:toutesuitedecaractres
Exemples:"","Nom,Prnom","codepostale:1000",

Typelogiqueouboolen:deuxvaleursVRAIouFAUX
14

Lestypesnumrique :ENTIER
Le type entier se note int en C, est utilis pour stocker des
valeurs entires, positives ou ngatives. Un entier occupe
quatre
t
octets
t t (32 bits)
bit ) en mmoire.
i
C
Cependant,
d t des
d
qualificatifs peuvent venir prciser :
sataille,cestdirelenombredoctetssurlequelilestreprsent(2
octetspourshort,4pourlong).
short int a;/*unentier court*/
short a;/*galementunentiercourt(int
;/ g
( estimplicite)*/
p
) /
long l;/*unentierlong(int estaussiimplicite)*/

silssontsignsounon.Pardfaut,lesentierssontsigns(positifsou
ngatif).Silonprciseunsigned devantletype,ilsnepeuventpastre
ngatifs.
unsigned int n;/*unentiernonsign*/
unsigned shorts;/*unentier courtnonsign */
15

Lestypesnumrique :REL
Le type REL serautilispourstockerlesnombresvirgule.
Unreloccupede 4(32bits)8octets(64bits)enmmoire.
ENC:
Ilexistedeuxtypesrels,lesrelssimpleprcisionappelsfloat (32
bits)etlesrelsdoubleprcisionappelsdouble(64bits).
Exemples:
Double
valeur_abs;
Float
z;
float
x=0 557;
x=0.557;
double
y=15.32;

16

Lestypescaractre
Letypecaractreserautilispourstockerlescaractres.Un
caractreoccupeunoctet(8bits)enmmoire.
ENC:
Letypecaractresenotechar.Cetypeestunfaituntypeentieretsa
valeurestlecodeASCIIducaractre!!
Exemples:
char
c;
int
i;
c='A'; /*lavaleurdecest'A'*/
i=c; /*lavaleurdeiest65,codeASCIIde'A'*/

17

Lestypeschaine/booleen
chane :EnCiln'existepasdetypespcialpourchanesde
caractres.Lesmoyensdetraiterleschanesdecaractres
y
serontdcritsplustard.
boolen :EnCiln'existepasdetypespcialpourvariables
boolennes.Touslestypesdevariablesnumriquespeuvent
treutilisspourexprimerdesoprationslogiques:

18

Lestypesfondamentaux(enC)

19

Dclarerunevariable
Var<listedidentificateurs>:type
Rle:Instructionpermettantderserverdelespacemmoire
pourstockerdesdonnes(dpenddutypedecesdonnes:
entiers,rels,caractres,etc.)
Exemples :
varvaleur,date:entiers
nom,prnom:chanesdecaractres
EnC :
Int
valeur,date;
Char nom,prnom;
20

10

Dclareruneconstante
Const (<identificateur>:type)<expression>
Rle:Instructionpermettantderserverdelespacemmoire
pourstockerdesdonnesdontlavaleurestfixepourtout
lalgorithme
Exemples :Const(Pi:rel)3.14
(Max:entier)100
EnC :
#define
Pi3.14
#define
Max100
21

Variables&Constantes
Les
Lesdonnesd
donnes dun
unproblmesontdcritespardesconstantes
problme sont dcrites par des constantes
et/oudesvariables.
Lesvariablesetlesconstantespermettentdvaluerles
expressionsutilisesdanslesalgorithmes.
Chaquevariable/constantedoittreduntypespcifique.ex:
caractrealphabtiqueouvaleurnumrique.
Ladiffrenceentrelesvariables&lesconstantes:
La diffrence entre les variables & les constantes:
lavaleurdunevariablepeutchangerdurantlarsolutiondu
problmeparunprogramme.Cependant,lavaleurdune
constantenepeutpaschanger.
22

11

Variables&Constantes(suite)
Lesnomsdevariablessontunecombinaisondecaractres
alphanumriques et possiblement du underscore (caractrede
alphanumriquesetpossiblementduunderscore
(caractre de
soulignement).
Lesnomsdevariablesnedoiventpascommencerparunchiffre.Ils
commencentsoitparununderscore soitparunelettredelalphabet.
Ilestprfrabledutiliserdesnomslislasignificationdelavariable.
Adesfinsdelisibilit,danslesnomscomposs,lesmotsdoiventtre:soit
sparsparununderscore (ex:distance_en_miles)soitchaquemot,sauf
lepremier,commenceparunemajuscule(ex:distanceEnMiles).
es noms de constantes sont entirement en majuscules.
Lesnomsdeconstantessontentirementenmajuscules.
Utiliserdesnomsdevariablesdemoinsde15caractrespourvitertoute
ambigit.
Unnomdevariablenepeuttreunmotrserv(telqueEntier,Rel,si,
tantque).

23

Variablesglobales/locales
Lesvariablesglobales:ellesexistentenmmoirependant
toute la dure de vie du programme (inefficace).
touteladuredevieduprogramme(inefficace).
Ilestrecommanddviterautantquepossibledutiliserles
variableglobales.
Lesvariablesglobalessontvisiblesdepartoutdansle
programme.
Touteslesautresvariablessontlocales aubloc/fonctionou
ellesonttdclares.
24

12

Variablesglobales
#include<stdio.h>
int STATUS;
intSTATUS;
voidA(...){
...if(STATUS>0)
STATUS;
else......}
voidB(...){
( ){
...STATUS++;
...}
!!!Lesvariablesglobalessontutiliseravecprcaution,
puisqu'ellescrentdes liensinvisiblesentrelesfonctions.
25

Variableslocales
voidHELLO(void);
{ char NOM[20];
{charNOM[20];
printf("Introduisezvotrenom:");
gets(NOM);
printf("Bonjour%s!\n",NOM);}
(
)
if(N>0)
{intI;
for(I=0;I<N;I++)...}

26

13

Rglesdemanipulationde
donnes
Nepasconfondrelestypesdedonnes.
f d l
d d

Exemple:uncaractrenetreplacdansunevariabledetypeEntier.

Seulslesoprationsvalidessuruntypededonnessont
autorises.
Exemple:
l unechanedecaractresnepeuttreutilisedansdescalculs.
h d

ili d
d
l l

27

Lesentres/sorties
Cesdeuxoprateursdebasepermettentdedialoguer:
Soitonsaisitunevaleur(lordinateurattendunevaleurpour
unevariable)
Soitonafficheunevaleurlcran

28

14

Lesentres/sorties:lecture
Lalecturepermetd'entrerdesdonnspartirduclavier.
Enpseudocode,onnote:lire(var)ousaisir(var)
En pseudo code on note: lire (var) ou saisir (var)
lamachinemetlavaleurentreauclavierdanslazone
mmoirenommevar
Exemple:lire(a)/saisir(a)
EnC
scanf(<"Format">,&identificateur1,....,&identificateurn);
ex:scanf("%D",&a);

29

Lesentres/sorties:criture
L'criturepermetd'afficherdesrsultatsl'cran(oudeles
criredansunfichier)sousdiffrentsformat.
Enpseudocode,onnote: crire (listedexpressions)ou
afficher(listedexpressions)
lamachineaffichelesvaleursdesexpressionsdcritedansla
liste.
Exemple:
Vart:rel//dfinitiondelavariableentiret
tt2.421
2.421
AFFICHER("tvaut:",t,"!")//cetteinstructionfera
apparatre
//lcranlemessagesuivant:tvaut2.421!

EnC
printf(<"Format">,identificateur1,....,identificateurn);
30

15

Lesentres/sorties
1 char un_caractere = 'A';
1A

2 int un
un_entier
entier = 10;
3 float un_reel = 3.14;
4 double un_double = 1.10e-2;

2 10
3 3.140000

4 0.011000
6 printf("%c\n", un_caractere);
5 2 * 10 = 20
7 printf("%d\n", un_entier);
6 c = A et nb = 0.011000
8 printf("%f\n", un_reel);
9 printf("%f\n"
printf( %f\n , un_double);
un double);
10 printf("2 * %d = %d\n", un_entier, un_entier * 2);
11 printf("c = %c et nb = %f\n", un_caractere, un_double);
5

31

LesformatsenC
Leformat:indiquecommentvonttreaffichlesvaleursdes
variables.Ilestcomposdetexteetdecodesd'affichage
suivantletypedevariable.
i tl t
d
i bl

Type

Format

Entierdcimal

%d

Entieroctal

%o

Entierhexadcimal

%x

Entiernonsign

%u

caractre

%c

Chainedecaractre

%s

rel

%f

32

16

Utilisationdescaractresspciaux
enC
Squence
d'chappement

signification

%%

affichageducaractre'%'

\0

caractrenull ;valeur0,dlimiteurdefindechanedecaractres

\a

alerte;beep systme

\b
\f
\n
\r

backspace ;dplacementducurseurd'uncaractreenarrire
form feed ;sautdepage
newline ;sautdeligne
g return ;retourchariot
carriage

\t

tabulationhorizontale

\v

tabulationverticale

printf("\aBonjour\n"); /* met un bip puis affiche Bonjour et


passe la ligne */
33

Utilisationdescaractresspciaux
enC
#include <stdio.h>
#include <conio.h>
void
id main()
i ()
{
char c;
c =66;
/* c est le caractre alphanumrique A */
printf("%d\n",c); /* affichage du code ASCII en dcimal */
/* et retour la ligne */
printf("%o\n",c);
/* affichage du code ASCII en base huit
/* et retour la ligne */
printf("%x\n"
printf(
%x\n ,c);
c); //* affichage du code ASCII en hexadcimal
/* et retour la ligne */
printf("%c\n",c);
/* affichage du caractre */
/* et retour la ligne */
puts("Pour continuer frapper une touche...");
getch(); /* Attente d'une saisie clavier */
}
34

17

LesInstructions
Uneinstructionpeuttre:
1 lire (nom de variable) permet dentrer une valeur partir du clavier
1.lire(nom_de_variable)permetdentrerunevaleurpartirduclavier.
2.afficher(nom_de_variable ouconstante)permetdafficherlcran.

Exemple:
Algorithme Principal
var num:entier;
Dbut
lire (num);
afficher (num);
Fin Principal

3.Instructiondaffectation:permetdecopierunevaleurlueoucalculefigurant
droitedusymboledaffectation=danslavariablefigurantgauchedumme
symbole.

Exemple:
sum =num1+num2;

35

Instructions(suite)
4.Unappeldefonction:lesfonctionssontdesprogrammes(desalgorithmesdans
notrecas)utilisspourqueleursoitdlgueunetcheindpendante(mais
ncessaire)delalgorithmeprincipal.
)
g
p
p
Exemple:
prod =calculer_produit(num1,num2);
lafonctioncalculer_produit calculleproduitdenum1etnum2et
sauvegardelersultatdansprod.
5.Instructionsdcisionnelles:utilisespourchoisirentredeux(ou plusieurs)
alternatives.
Exemple: si,switchcase.
si (x>100)alors afficher(Trop grand );
sinon afficher(
afficher(Valeur
Valeur valide
valide);
);
6.Instructionsderptition:utilisespourexcuterdemanirerpteune
squencedinstructionsuncertainnombredefoisoujusqucequunvnement
seralise.Ex:Tantque,Pouretc.

36

18

Instructiondaffectation""
Laffectationconsisteattribuerunevaleurune
variable(cestdire
variable(c
est direrempliroumodifierlecontenud
remplir ou modifier le contenu d'une
unezone
zone
mmoire)
Enpseudocode,l'affectationestnoteparlesigne
Vare:attribuelavaleurdeelavariableVar
e peuttreunevaleur,uneautrevariableouuneexpression
Var ete doiventtredemmetypeoudetypescompatibles
laffectationnemodifiequecequiestgauchedelaflche
Exemples:
enC:

i1jiki+j
i=1;j=i;k=i+j;

37

Instructiondaffectation(enC)
Uneinstructiondaffectationestutilisepouraffecterune
p
variablelavaleurduneexpressionlueouvalue.
Formatdelaffectation:
variable=expression;
Ex:copierlecontenudelavariablenum1danslavariable
num2
num2=num1;
E
Ex:copierletotaldenum1etnum2dansnum3
i l
ld
1
2d
3
num3=num1+num2;
!!Attention:lesymbole=nedsignepaslgalitmais
pluttlaffectation.
38

19

Instructiondaffectation(enC)

x+=y/*x=x+y*/
y/
y /
x=y/*x=xy*/
x%=y/*x=x%y*/
x|=y/*x=x|y*/

int i=10;
i++;/*postincrmentation dei*/
++i; /*princrmentation
++i;/
princrmentation dei
de i *//
i;/*postdcrmentation dei*/
i;/*prdcrmentation dei*/
x=++y;estquivalent:
++y;
x=y;
39

Instructiondaffectation(enC)

40

20

Affectation:lchangedes
chandails

41

Lesexpressions
Dfinition:
Uneexpressionestunevariableouuneconstante,ouune
combinaisondeceuxciconnectespardesoprateursappropris.
Expressionsarithmtiques:lesvariablessontdetypenumrique
connectespardesoprateursarithmtiques (+,,/,%,*)
Expressionsrelationnelles:lesvariablespeuventtredenimporte
q
queltypeaveclaconditionsquellessoientdummetype.Les
yp
q
yp
variablessontconnectespardesoprateursrelationnels
(<,>,<=,>=,==,!=).Lersultatestboolen.
Expressionslogiques:sappliquentauxvaleurslogiques(boolennes).
UtilisentlesoprateurlogiquesNOT(!),ET(&&),OU(||).
42

21

LesoprateursArithmtiques

43

Lesoprateurslogiques

44

22

Lesoprateurslogiques
Exemples

45

Lesoprateursrelationnels
Ils sont utiliss pour les structures conditionnelles, de choix et
itratives, voir chapitres suivants. Ils permettent de comparer
une
ne variable
ariable par rapport une
ne a
autre
tre variable
ariable o
ou une
ne valeur
ale r o
ou
une expression.
Le rsultat ne peut tre que VRAI ou FAUX, on parle de
valeur boolenne.
- FAUX correspond 0.
- VRAI correspond toute valeur diffrente de 0.

46

23

Conditionssimplesetcomposes
Une condition simple est constitue dune unique expression:
Exemples:
Si (A=0) alors
ecrire("A est nulle")
Finsi
Une condition compose est celle constitue de plusieurs conditions
simples relies par des oprateurs logiques
Exemples:
Exemples:
x compris entre 2 et 6 : (x >= 2) ET (x < =6)
n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
deux valeurs et deux seulement sont identiques parmi a, b et c :
(a=b) XOR (a=c) XOR (b=c)
47

Instructionsconditionnelles(1)
Si...Alors...FinSi
La structure de contrle SI...ALORS permet dexcuter des
instructions en fonction de la valeur dune condition (qui nest autre
que le rsultat dun test).
q
)
La syntaxe est la suivante:
SI (condition) ALORS
Faux
Instruction(s)
test
FINSI
En C:
vraie
if (condition)
{
Suitesdinstructions
i t ti ( )
instruction(s)
}
Cette structure fonctionne de la manire suivante :
si la condition est vraie, alors les instructions crites entre les
accolades sont excutes;
si la condition est fausse alors, les instructions ne sont pas
excutes.
48

24

Instructionsconditionnelles(1)
Si...Alors...FinSi
Exemple1
Exemple3

if (a > b)
max = a;
else
max = b;

if (A > B)
{
Tempo = A;
A = C;
C = Tempo ;
}
else
{Tempo = B;
B = C;

Exemple2
if (EGAL)
printf("A est gal B\n");
else
printf("A est diffrent de B\n");

C = Tempo ; }
49

Instructionsconditionnelles(2)
Si...Alors...SinonFinSi
SI (condition) ALORS
Instruction1
SINON
Instruction2
FINSI
En C:
if (condition)
{
instructions 1;

}
else
instructions 2;

test

vraie

Suitesdinstructions1

Faux
Suitesdinstructions2

50

25

Instructionsconditionnelles(2)
Si...Alors...SinonFinSi

51

Instructionsconditionnelles(3)
Si...Alors...SinonSiFinSi
if (condition1) { /* squence1 */
Instruction_1;1;
...
}
else if (condition2) { /* squence2 */
Instruction_2;1;
...
}
...
else if (conditionn;1) { /* squence n1 */
Instruction_n-1;1;
...
else
{/* squence n*/
Instruction_n;1;
...
}

52

26

Instructionsconditionnelles(3)
Si...Alors...SinonSiFinSi
exemple1

Exemple2
...
#include <stdio
<stdio.h>
h>
printf("Continuer (O)ui / (N)on ?");
main()
getchar(C);
{ int A,B;
if (C=='O')
printf("Entrez deux nombres entiers :");
{ ... }
scanf("%i %i", &A, &B);
else if (C=='N')
if (A > B)
printf("Au revoir ...\n");
printf("%i est plus grand que %i\n", A, B);
else
else if (A < B)
printf("\aErreur
i tf("\ E
d'entre
d' t !\
!\n");
")
printf("%i est plus petit que %i\n", A, B);
...
else printf("%i est gal %i\n", A, B);
return 0;
La dernire partie else traite le cas o aucune des
}
conditions n'a t remplie. Elle est optionnelle, mais elle
peut tre utilise trs confortablement pour dtecter des
erreurs.

%d %i : entier!!!

53

Instructionsconditionnelles(4)
SelonCas..FinSelon
SELON Variable
CAS Valeur1 :
Action si Variable contient la valeur Valeur1
CAS Valeur2, Valeur3 :
Action si Variable contient la valeur Valeur2 ou valeur3
CAS SINON :
Action si Variable ne contient aucune des valeurs figurant dans les
CAS prcdent
FIN SELON

54

27

Instructionsconditionnelles(4)
SelonCas..FinSelon
#include<stdio.h>
int main()
{{int jour;
j ;
Printf("donner un numro du jour");
Scanf("%d",&jour);
Switch (jour) {
case 1: printf("Lundi\n); break;
case 2: printf( Mardi\n); break;
case 3: printf( Mercredi\n); break;
case 4: printf( Jeudi\n); break;
case 5:
5 printf(
i tf( Vendredi\n);
V d di\ ) break;
b k
case 6: printf( Samedi\n); break;
case 7: printf( Dimanche\n); break;
default : printf( Numro du jour erron\n);
}
Return 0;
}

55

FonctionmainenC
Dclaration selon les normes du langage C:

int main(void)
{ /*code*/
return;}
ou (si tu lis les paramtres de lignes de commande)

int main(int argc, char *argv[])


{ /*code*/
return;}
void main()
-->Ne
>N respecte
t pas lla norme : pas d
de retour
t
d'
d'entier,
ti pas d
dclar
l sous lla fforme
prototype
int main()
-->Ne respecte pas la norme : retour d'entier OK, mais pas dclar sous forme
prototype.
int main(void)
-->Respecte la norme.
56

28

Testimbriqus(1)
Les tests peuvent avoir un degr quelconque
d'imbrications
Si condition1 alors
.
Si condition2 alors
suite dInstruction

FinSi

Finsi

exemple1
Var
n : entier
Dbut
Ecrire ("entrez un nombre : ")
Lire (n)
Si n < 0 alors
Ecrire ("Ce nombre est ngatif")
Sinon
Si n = 0 alors Ecrire ("Ce nombre est nul")
Sinon Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
57

Testimbriqus(2)
Exemple2
Var n : entier
V
ti
Dbut
Ecrire ("entrez un nombre : ")
Lire (n)
Si n < 0 alors Ecrire ("Ce nombre est ngatif")
Finsi
Si n = 0 alors Ecrire ("Ce nombre est nul")
Finsi
Si n > 0 alors Ecrire (("Ce
Ce nombre est positif")
positif )
Finsi
Fin
Remarque : dans lexemple 2 on fait trois tests systmatiquement alors que
dans lexemple 1, si le nombre est ngatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqus pour limiter le nombre de tests et placer
d'abord les conditions les plus probables

58

29

Testimbriqus(3)
Exercices
Le prix de stylos dans un espace de vente varie selon le
nombre acheter:
5 Dinars lunit si le nombre de stylos acheter est
infrieur 10,
4 Dinars lunit si le nombre de stylos acheter est
compris entre 10 et 20,
3 Dinars lunit si le nombre de stylos acheter est au-del
de 20.
crivez un algorithme qui demande lutilisateur le nombre
de stylos acheter, qui calcule et affiche le prix payer
59

Instructionsderptitions
TANTQUEFAIREFINTANTQUE
Les boucles servent rpter l'excution d'un groupe d'instructions un
certain nombre de fois
On distingue
g trois sortes de boucles en langages
g g de p
programmation
g
:
Les boucles tant que : on y rpte des instructions tant qu'une
certaine condition est ralise
Les boucles jusqu' : on y rpte des instructions jusqu' ce
qu'unecertaine condition soit ralise
Les
L boucles
b
l pour ou avec compteur
t
: on y rpte
t d
des iinstructions
t
ti
en faisant voluer un compteur (variable particulire) entre une valeur
initiale et une valeur finale

30

Instructionsderptitions
TANTQUEFAIREFINTANTQUE
Algo:
Tantque
q condition Faire
Instruction 1
...
Instruction n
Fin Tantque
Instructions suivantes
En C
while
hil (condition)
(
diti )
{
instruction 1;
...
instruction n;
}
instructions suivantes;

test

vraie

Suitesdinstructions

Faux

Le nombre de
rptitions nest pas
connu et peut tre nul :
0 n rptitions
61

Instructionsderptitions
TANTQUEFAIREFINTANTQUE
Le nombre d'itrations dans une boucle TantQue n'est pas connu au
moment d'entre dans la boucle. Il dpend de l'volution de la valeur de la
condition
Une des instructions du corps de la boucle doit absolument changer la
valeur de la condition de vrai faux (aprs un certain nombre d'itrations),
sinon le programme va tourner indfiniment
Attention aux boucles infinies!!!
E
Exemple
l de
d boucle
b
l infinie
i fi i :
i1
TantQue i > 0
i i+1
FinTantQue
62

31

Instructionsderptitions
TANTQUEFAIREFINTANTQUE
algorithme qui dtermine le
premier nombre entier N tel q
p
que
la somme de 1 N dpasse
strictement 100
Algorithme Nb_100
Var som, i : entier
Debut
i0
som 0
som
TantQue (som <=100)
i i+1
som som+i
FinTantQue
Ecrire (" La valeur cherche est N= ", i)
Fin

Exemple 1
/* Afficher les nombres de 0 9 */
int I = 0;
while (I<10)
{ printf("%d\n", I);
I++;
}

Exemple 2
int I;
/* Afficher les nombres de 0 9 */
I = 0;
while (I<10) printf("%i \n", I++);
/* Afficher les nombres de 1 10 */
I = 0;
while (I<10) printf("%i \n", ++I);

Exemple 3
/* Afficher les nombres de 10 1 */
int I=10; while (I) printf("%i \n", I--);

63

Instructionsderptitions
RpterJusqua
Algo:
Rpter
p
Instructions
..
Jusqu condition

Suitesdinstructions

En C
do
{
I t ti
Instructions
}
while (condition);

Faux

test
vraie

Les instructions sont


excutes au moins une
fois avant le test!!
64

32

Instructionsderptitions
RpterJusqua
Algo:
Rpter
ecrire("Entrez
(
un entier entre 1 et 10 : "))
lire(a);
Jusqu (a<=0 OU a>10)
En C
int a;
do
{
printf("\n
i tf("\ Entrez
E t
un entier
ti entre
t 1 ett 10 : ");
")
scanf("%d",&a);
}
while ((a <= 0) || (a > 10));

Suitesdinstructions

Faux

test
vraie

Les instructions sont


excutes au moins une
fois avant le test!!
65

Instructionsderptitions
Tantque VsRpter
la squence d'instructions est excute au moins une
f i dans
fois
d
lla b
boucle
l R
Rpter
t jjusqu',
' alors
l
qu'elle
' ll peutt ne
pas tre excute dans le cas du Tant que.
la squence d'instructions est excute si la condition
est vraie pour Tant que et si la condition est fausse pour
Rpter jusqu'.
Dans les deux cas, la squence d'instructions doit
ncessairement faire voluer la condition, faute de quoi
on obtient une boucle infinie.
66

33

Instructionsderptitions
PourFinPour
Lorsque le nombre de fois o un bloc dinstructions doit tre excut est
connu lavance, la boucle POUR est prfrable aux boucles prcdentes
Algo
Al
Pour variable De valeur1 A valeur2 par pas de 1 Faire
instruction 1
...
instruction n
Fain Pour
En C
for (variable = valeur1; variable <= valeur2; variable++)
{
bloc dinstructions;
}

67

Instructionsderptitions
PourFinPour
Calcul de x la puissance n (Xn) o x est un rel non nul et n un entier
positif ou nul (avec un pas positif)
Algorithme Exposant
Var x, puiss : rel
n, i : entier
Dbut
Ecrire (" Entrez respectivement les valeurs de x et n ")
Lire (x, n)
puiss 1
Pour i allant de 1 n
puiss puiss*x
FinPour
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin Exposant

Inti,n;
Float x,puiss;
.
f (I 0 I
for(I=0;I<n;I++)
I )
{puiss=puiss*x;}
..

68

34

Instructionsderptitions
PourFinPour
Calcul de x la puissance n (Xn) o x est un rel non nul et n un entier
positif ou nul (forme 2 avec un pas ngatif)
Algorithme Exposant
Var x, puiss : rel
n, i : entier
Dbut
Ecrire (" Entrez respectivement les valeurs de x et n ")
Lire (x, n)
puiss 1
Pour i allant de n 1 par pas -1
puiss puiss*x
FinPour
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin Exposant
69

Instructionsderptitions
Choixdetypedeboucle
Si on peut dterminer le nombre d'itrations avant l'excution
de la boucle,, il est plus
p
naturel d'utiliser la boucle Pour
S'il n'est pas possible de connatre le nombre d'itrations
avant l'excution de la boucle, on fera appel l'une des
boucles TantQue ou rpter jusqu'
Pour le choix entre TantQue et jusqu' :
Si on doit tester la condition de contrle avant de
commencer les instructions de la boucle, on utilisera
TantQue
Si la valeur de la condition de contrle dpend d'une
premire excution des instructions de la boucle, on
utilisera rpter jusqu'

70

35