You are on page 1of 163

*Algorithmique

et
Structures de Donnes

Lalgorithmique

- Lalgorithmique est un terme dorigine arabe.


- Le mot algorithme vient du nom du grand
mathmaticien persan Al Khawarizmi, qui introduisit
en Occident la numration dcimale.

Lalgorithmique

Quest ce quun algorithme


Algorithmes et programmation
Formaliser un algorithme
Langages de programmation
(langage C)

Lalgorithmique
Un algorithme est un ensemble de rgles logiques et
chronologiques quon doit suivre pour aboutir la rsolution
dun problme particulier.
Ces rgles sont constitues dun nombre fini doprations
lmentaires.
o Les oprations lmentaires (+, -, *, /, \) et (AND,
OR, NON).

Ces oprations seront excutes dans un ordre bien


dtermin.
Un algorithme peut tre assimil un raisonnement que lon
peut traduire avec un langage que toute personne peut
comprendre :
o LDA : Langage de Description dAlgorithme

Lalgorithmique
Le LDA nest pas un langage informatique.
Le programme informatique est la traduction du LDA
un autre langage comprhensible pour la machine
(Pascal, Visual Basic, C, C++, C#, Java)

Lalgorithmique et la programmation
Raisonnement
logique et
chronologique

Langage traduisant la pense de manire


comprhensible pour toute personne :
Algorithme

LDA

Programme
C, C++,

Langage traduisant le LDA de manire


comprhensible pour lordinateur : Programme

* Quest ce quun algorithme ?


Une suite dinstructions, qui une fois excute correctement,
conduit un rsultat donn

Ouvrir un livre de recettes de cuisine,


Indiquer un chemin un touriste gar.
Suivre un mode demploi faire fonctionner un
magntoscope ou un rpondeur tlphonique

chercher un mot dans le dictionnaire


Rsoudre une quation de second degr

* Quest ce quun algorithme ?


Pour fonctionner, un algorithme doit donc contenir
uniquement des instructions comprhensibles par
celui qui devra lexcuter.

En informatique les choses auxquelles ont doit donner des


instructions sont les ordinateurs et donc on utilise les
langages informatiques (Pascal, Visual basic, C, C++, .etc)
pour leur dcrire ces instructions.

* Pour quoi apprendre lalgorithmique ?


Par ce que lalgorithmique exprime les instructions
rsolvant un problme donn indpendamment des
particularits de tel ou tel langage.

Apprendre lalgorithmique, cest apprendre


manier la structure logique dun programme
informatique.

* Exemple 1. rsoudre une quation de 1er degr


Rsoudre lquation ax+b = 0

Ecrire un plan dun algorithme permettant le calcul


de la valeur de x.

* Exemple 1. rsoudre une quation de 1er degr

Entres

Retenir (saisir, lire) la valeur de a.

Sortie Traitement

Dbut algorithme

Si a est gal zro il y aura pas de solution.

Retenir (saisir, lire) la valeur de b.

Sinon la valeur de x est obtenue en divisant b par a.


Afficher la valeur de x
Fin algorithme

* Formaliser un algorithme
Deux types de utiliss pour reprsenter des
algorithmes:

Reprsentation graphique = organigramme


Pseudo - code

* Organigramme Pseudo - code


Lire X;
si X>=0 alors
Y<-- X

sinon
Y<-- -X
fin si;
Afficher Y;

* Structure dun Algorithme


Dclaration du nom
de lalgorithme

algorithme nom de lalgorithme


const

Dclaration des
constantes, des variables
et des structures

Le corps de lalgorithme

var
struct

liste des constantes


liste des variables

liste des structures

dbut algorithme
action 1 // commentaire 1
action 2 // commentaire 2
.
.
.
action n // commentaire n
fin algorithme

* Structure dun Algorithme


Nom de lalgorithme :

o Il permet tout simplement didentifier un algorithme


parmi dautres.
Les dclarations :
o Cest une liste exhaustive de variables utilises et
manipules dans le corps de l algorithme.
Le corps de lalgorithme :
o Dans cette partie de lalgorithme, sont places les
tches excuter (instructions, oprations, ).

Les commentaires :
o Pour permettre une lecture plus aise et plus
comprhensive de lalgorithme

* Les Dclarations
Les Constantes :
o Elles reprsentent des chiffres, des nombres, des
caractres, des chanes de caractres, dont la valeur ne
peut pas tre modifie au cours de lexcution de
lalgorithme.
Les Variables :
o Elles peuvent stocker des chiffres des nombres, des
caractres, des chanes de caractres, dont la valeur
peut tre modifie au cours de lexcution de lalgorithme.
Les Structures :
o Elles permettent de rassembler plusieurs variables ou
constantes sous un mme identificateur, on parle
galement dentits ou dobjets.

* Les Dclarations des variables et des


constantes
Les constantes et les variables sont dfinies dans la partie
dclarative par deux caractristiques essentielles, savoir :
L identificateur :
o Il reprsente le nom de la variable, de la constante ou
de la structure. Il est compos gnralement de lettres
mais peut galement contenir et de chiffres.
Il ne doit pas commencer par des chiffres

Il ne doit pas contenir despaces, de caractres de


ponctuation ou de caractres accentus.

* Les Dclarations des variables et des


constantes
Le type :

o Il reprsente la nature de la variable ou de la constante


(entier, rel, boolen, chane de caractres)
Exemples :

o var age : rel


o var adresse, ville : chaine
o var nbr_enfants , etage : entier

* Les types de variables


De faon gnrale, pour toute variable cens contenir une ou
plusieurs informations devant tres traites par le processeur,
lordinateur doit lui rserver de la mmoire volatile (RAM). La
taille mmoire ncessaire pour stocker cet objet dpend de la
nature de linformation en question.
Exemple dinformations de base :

Les nombres entiers :


0, -1, 45, 36, -10 en dcimal
45H, 0FBH, 64H en hexadcimal
10101111, 1011 en binaire

Le caractre :
a , A , * , 7 , z , ! , .

Les nombres rels :


-3.67, 4.2569, 564.0, 18.36
10e-6

La chane de caractres
"lectronique", "cd ROM de 80mn" ,

Le boolen :
Il ne peut prendre que deux tats possibles : VRAI ou FAUX (True ou False)

* Les types de variables en langage C


Type de donne

Signification

Taille (en octets)

Plage de valeurs
accepte

char
unsigned char
short int
unsigned short
int

Caractre

-128 127

Caractre non sign 1

0 255

Entier court

-32 768 32 767

Entier court non


sign

0 65 535

int

Entier

2 (sur processeur 16 bits)


4 (sur processeur 32 bits)

-32 768 32 767


-2 147 483 648 2 147
483 647

unsigned int

Entier non sign

2 (sur processeur 16 bits)


4 (sur processeur 32 bits)

0 65 535
0 4 294 967 295

long int

Entier long

-2 147 483 648 2 147


483 647

0 4 294 967 295

3.4*10-38 3.4*1038

1.7*10-308 1.7*10308

10

3.4*10-4932 3.4*104932

Entier long non

unsigned long int sign


Flottant (rel)
float
Flottant double
double
Flottant double long
long double

* Dclarations des variables


Algorithme
Var x, y : entiers

Langage C
int x, y ;

Var a, b : rels
Var z1, z2, z3 : caractres

Float a, b ;
Char z1, z2, z3 ;

* Les Oprateurs
Arithmtique
Oprateur

Comparaison

Algo

Addition

Soustraction

Multiplication

Division

Modulo

MOD

Division entire

Puissance

Oprateur

Pow()

Logique
Oprateur

Algo

Fonction ET

ET

&&

Fonction OU

OU

||

Fonction OU Exclusif

OUX

^^

Fonction NON

NON

Algo

Suprieur stricte

>

>

Infrieur stricte

<

<

Suprieur ou gal

>=

Infrieur ou gal

<=

Egal

==

Diffrent

!=

Remarque:
En C la division entire sobtient en
convertissant la variable rel en
entier

* Priorit des oprateurs usuels


Priorit croissante de bas vers le haut
Oprateur

algorithme

Langage C

Oprateur de multiplication

Oprateur de division

Oprateur d'addition

Oprateur de soustraction

Oprateur d'infriorit stricte

<

<

Oprateur de supriorit stricte

>

>

Oprateur d'infriorit ou d'galit

<=

<=

Oprateur de supriorit ou d'galit

>=

>=

Oprateur d'galit

==

Oprateur d'ingalit

<>

!=

Oprateur et logique ET

ET

&&

Oprateur ou logique OU

OU

||

Oprateur d'affectation

* Loprateur Affectation
L'opration par laquelle on attribue une valeur une variable
s'appelle affectation.
Dans un algorithme (pseudo-code), l'instruction
d'affectation se note avec le signe ""
le signe " " se traduit dans les langage informatique par
le signe " = "

Le signe = est utilis dans certains langages la fois comme


tant oprateur de comparaison mais aussi comme oprateur
daffectation
Var X Y : entier
X5
YX

Var X Y : chaine
X AB
Y CD

* Ordre des instructions


Lordre dans lequel les instructions sont crites va jouer
un rle essentiel dans le rsultat final.

Variable A en Entier
Dbut
A 34
A 12
Fin

Variable A en Entier
Dbut
A 12
A 34
Fin

Valeur finale
A=12

Valeur finale
A=34

* Structure fondamentale dun


algorithme
Langage C

Pseudo - Code
Algorithme principal
Dbut

main()
{
float x, y;
float p;
printf(" Entrez la valeur de x:");
scanf("%f", &x);
printf(" Entrez la valeur de y:");
scanf("%f", &y);
p=x*y;
printf("Le produit de x et y est:
%f", p);
system("PAUSE");

var x, y en rels
var p en rels
Ecrire "Entrez la valeur de x: "
Lire x (rserver une adresse en mmoires pour
stocker une valeur de type rel)

Ecrire "Entrez la valeur de y: "


Lire y
Px*y
Ecrire "Le produit de x et y est: ",
p
Fin

* Exercices
Exercice 1
Quelles seront les valeurs des variables A et B aprs excution des instructions
suivantes ?

Var A, B : Entier
Dbut
A 1
B A + 5
A 10
Fin
A=10, B=6

*
Exercice 2
Quelles seront les valeurs des variables A, B et C aprs excution des instructions
suivantes ?

Variables A, B, C en Entier
Dbut
A 5
B 3
C A + B
A 2
C B A + B
Fin
A=2, B=3, C=4

*
Exercice 3
Quelles seront les valeurs des variables A et B aprs excution des instructions
suivantes ?

Variables A, B en Entier
Dbut
A 5
B A + 4
A A + 1
B A 7
B A B - 7
Fin
A=6, B=0

*
Exercice 4
Quelles seront les valeurs des variables A, B et C aprs excution des
instructions suivantes ?

Variables A, B, C en Entier
Dbut
A 3
B 10
C A + B
B A + B
A C
Fin
A=13, B=13, C=13

*
Exercice 5
Quelles seront les valeurs des variables A et B aprs excution des instructions
suivantes ?

Variables A, B en Entier
Dbut
A 5
B 2
A B
B A
Fin
A=2, B=2

*
Exercice 6
Ecrire un algorithme permettant dchanger les valeurs de deux variables A
et B, et ce quel que soit leur contenu pralable.

Var A, B, K : entiers
Lire (A)
Lire (B)
KA
AB
BK
Ecrire(A, B)

*
Exercice 7
Une variante du prcdent : on dispose de trois variables A, B et C. Ecrivez
un algorithme transfrant B la valeur de A, C la valeur de B et A la
valeur de C (toujours quels que soient les contenus pralables de ces
variables).
Var A, B, K : entiers
Lire (A)
Lire (B)
KC
CB
BA
AK
Ecrire(A, B)

* Structures de contrles
La structure linaire
se caractrise par une suite dactions
excuter dans lordre o elles sont nonces
Les structure de contrle

Traitement 1
Traitement 2
Traitement 3
Traitement 4

Permettent de contrler lexcution dune suite


dinstructions
o Structures de contrle alternatives
o Structures de contrle rptitives

* Les structures Alternatives


Une structure alternative offre la possibilit de donner des
issues diffrentes la poursuite dun algorithme.

Ces issues sexcluent mutuellement.

On peut rencontrer plusieurs formes de structures


alternatives :

* Les structures Alternatives


Forme alternative rduite :
Contrle dun seul bloc dinstruction

Dans cette structure, lexcution du traitement T2 ne dpend


que la ralisation de la condition qui le prcde :
Traitement 1
si la condition est
Si Vrai
vrifie les traitements
Condition
se font dans cet ordre :
Si Faux
(T1 T2 T3).
Traitement 2

Traitement 3

si la condition nest pas


vrifie les traitements
se font dans cet ordre :
(T1 T3).

* Les structures Alternatives


Forme alternative complte :
Contrle de plusieurs bloc dinstruction

Dans cette structure, lexcution de lun des deux


traitements distincts possibles T2 et T3 ne dpend
que la ralisation de la condition qui les prcde :
Traitement 1
si la condition est
vrifie les
traitements se
font dans cet
ordre :
(T1 T2 T4).

Si Faux

Si Vrai
Condition

Traitement 3

Traitement 2

Traitement 4

si la condition
nest pas vrifie
les traitements se
font dans cet
ordre :
(T1 T3 T4).

* Les structures Alternatives


Forme rduite

La structure SI ... ALORS.FIN SI


Langage C

Pseudo - Code
SI <condition> ALORS
[<bloc d'actions-1>]
FIN SI
[<bloc d'actions-2>]

IF ( <condition> )
{
[<bloc d'actions-1>]
}

[<bloc d'actions-2>]

Le bloc dactions 1 est excut seulement au cas o la condition


prend la valeur Vrai. Dans le cas contraire le programme passe
directement le bloc 2 .
Avec cette structure on ne peut contrler quun seul bloc daction

* Les structures Alternatives


Forme complte

La structure SI ... ALORSSINON.FIN SI


Pseudo - Code
SI <condition> ALORS
[<bloc d'actions 1>]

SINON
[<bloc d'actions 2>]
FIN SI

Langage C
IF ( <condition> )
{
[<bloc d'actions 1>]
}
ELSE
{
[<bloc d'actions 2>]
}

[<bloc d'actions 3>]

Au cas o la condition est vraie seul le bloc d'instruction-1 est


excut. Dans le cas contraire seul le bloc d'instructions-2 est
excut.
Avec cette structure on peut contrler plusieurs bloc daction

* Les structures Alternatives


Action 0

Action 0

SI <condition> ALORS

SI <condition> ALORS

Action 1

Action 1

Action 2

Action 2

FIN SI
Action 3
.

SINON
Action 3
FIN SI

Action 4

* Les structures Alternatives


Forme alternative multiple :

dans cette structure, lexcution des traitement Ti dpend de


la ralisation de la condition Ci et de la ralisation de la
ngation de la condition prcdente Ci-1.
Cette structure est utilise dans le cas des conditions
disjointes.

* Les structures Alternatives


Si Cond 1

TA

Faux
Si Cond 2
Faux

Si Cond n
Faux

Vrai
T1

TAT1TB

Vrai
T2

TAT2TB

Vrai
Tn

TATnTB

Aucune Cond

T n+1

TB

TATn+1TB

* Les structures Alternatives


Pseudo - Code
Si <condition1> Alors
Traitement 1;
Sinon
Si <condition2> Alors
Traitement 2;
Sinon
Si <condition3> Alors
Traitement 3;
Sinon
Si <condition4> Alors
Traitement 4;
Sinon
Traitement 5;
Fin Si
Fin Si
Fin Si
Fin Si

Langage C

IF ( <condition1> )
{Traitement 1;}
Else
{
IF (<condition2>)
{Traitement 2;}
else
{
IF (<condition3>)
{Traitement 3;}
else
{
IF (<condition4>)
{Traitement 4;}
else
{Traitement 5;}
}
}
}

*
Var X, Y : rels
X5
Y7
YY2
Si X > Y Alors
XY+X
Sinon
XYX
YY+X
Fin Si
Afficher X, Y
Fin

X=0
Y=5

Var X, Y, Z : rels
X3
Y5
Z9
Si X > Y OR Y > Z Alors
X Y 2*X
Sinon
XYX
YY+X
Fin Si
Afficher X, Y, Z
Fin
X=2
Y=7
Z=9

*
Elaborer un algorithme pour calculer le montant hors
taxe et le montant TTC pour un produit donn. Le prix
unitaire, la quantit et le taux TVA sont fournis en
entre. Une rduction de 10% est applique si le
montant hors taxe est suprieur 1000 Dh,

*
Elaborer un algorithme pour calculer le montant hors
taxe et le montant TTC pour un produit donn. Le prix
unitaire, la quantit et le taux TVA sont fournis en
entre. Une rduction de 10% est applique si le
montant hors taxe est suprieur 1000 Dh,
Var PU, Q, TVA : rels
Var MHT, MTTC : rels
Ecrire ( donner le prix unitaire )
Lire(PU)
Ecrire ( donner la quantit)
Lire(Q)
MHT PU*Q
MTTC MHT*(1+TVA)
Ecrire( le prix hors taxe est: , MHT)
Ecrire( le prix toutes taxes compris est: , MTTC)

*
Elaborer un algorithme pour calculer le montant hors
taxe et le montant TTC pour un produit donn. Le prix
unitaire, la quantit et le taux TVA sont fournis en
entre. Une rduction de 10% est applique si le
montant hors taxe est infrieur 1000 Dh, une rduction
de 20% si le montant est compris entre 1000 et 2000 et
une rduction de 30% si le montant est suprieur
2000.

*
Var PU, Q, TVA : rels
Var MHT, MTTC : rels
Ecrire ( donner le prix unitaire )
Lire(PU)
Ecrire ( donner la quantit)
Lire(Q)
MHT PU*Q
Si (PHT < 1000) Alors
MHT MHT*(1-10%)
Sinon
Si (PHT < 2000) Alors
MHT MHT*(1-20%)
Sinon
MHT MHT*(1-30%)
FinSi
FinSi
PTTC MHT*(1+TVA)
Ecrire( le prix hors taxe est: , PHT)
Ecrire( le prix toutes taxes compris est: , PTTC)

*
Ecrire lalgorithme permettant la rsolution de lquation
ax+b=c (quelque soit la valeur de a)
Var a, b, c : entiers
Var x : rel
Lire (a, b, c)
Si (a=0) alors
Ecrire(impossible )
Sinon
X (c-b)/a
Fin si
Ecrire(x)

*
Ecrire lalgorithme permettant la rsolution de lquation
ax2+bx+c=0 (quelque soit les valeurs de a#0, b et c)
Var a, b, c : entiers
Var x1, x2, D : rels
Lire (a, b, c)
D b^2 4*a*c
Si (a=0) alors
Ecrire(la solution est: , -c/b)

si (D>0) alors
Ecrire(les solutions sont: , (-b+sqrt(D))/(2*a), (-b+sqrt(D))/(2*a))
Sinon
si(D=0) alors
Ecrire(la solution est: , -b/(2*a))
sinon
Ecrire ( pas de solution dans R )
FinSi
FinSi

*
Les structures itratives permettent de rpter lexcution dun
ensemble dinstructions une ou plusieurs fois.
Ces structures sont regroupes sous deux grandes familles
selon si : le nombre de rptitions est connu ou pas.

Nombre
connu de
rptitions

Nombre
inconnu de
rptitions

*
Cas ou le nombre de rptition est connu :
Pour.allant.suivant

Dans cette structure, la sortie de la boucle ditration


seffectue lorsque le nombre souhait de rptition est
atteint.
On utilise donc une variable ditrations caractrise par :
sa valeur initiale,
sa valeur finale,
son pas de variation.

*
Cas ou le nombre de rptition est connu :
Pour.allant.suivant
Faire la somme de N valeurs
Var V, S entiers
S0
Lire (V)
SS+V
Lire (V)
SS+V
Lire (V)
SS+V
Lire (V)
SS+V
.
.
.
Afficher (S)

Var V, S, N,i entiers


S0
Lire (N)
Pour i 1 N
Lire (V)
SS+V
Suivant i
Afficher (S)

*
Pour.allant.suivant

Si la valeur finale de lindice est infrieure sa valeur


initiale le pas de variation est ngatif, la structure est
dite dcroissant
dans le cas contraire, le pas est positif et la
structure est dite croissant

i0 < if
Pour i i0 if
.
.
Suivant i

Pour i if i0
.
.
Suivant i

*
Pour.allant.suivant
Pseudo - code
Pour i Vi Vf [pas p]
[<bloc dactions >]
Suivant i

Language C
for(i = Vi ; i <= Vf ; i = i + 1)
{
[<bloc dactions >]
}

Le bloc d'instructions est excut un nombre de fois connu


lavance contrl par un compteur allant de la valeur Vi
(valeur initiale) la valeur Vf(valeur finale).
Attention :
le traitement ne doit pas modifier la variable de boucle (compteur)

*
Exemples

Pour.allant.suivant

Cet algorithme fait la somme dun certain nbre de valeurs saisies)


Pseudo - code
Var i, S, var : entiers
S0
Pour i allant de 0 3
Afficher ("var =" )
Lire (var)
S S + var
Suivant i
Afficher("La somme est :", S)
Afficher(i)

Language C
int i, S, var;
S = 0;
for (i=0; i<=3; i++)
{
printf("var =");
scanf("%d",&var);
S = S + var;
}
printf("la somme est :%d", S);

*
Exemples

Pour.allant.suivant
SIMULATION

var S : entier
var i : entier

S 0;
Pour i allant de 0 3
lire (var)
S=S+var
suivant i
Ecrire (la valeur de S est, S)
Fin

i=0

var=2

S=0+2

i=1

var=-3

S=2-3

-1

i=2

Var=4

S=-1+4

i=3

Var=-8

S=3-8

-5

i=4

Arrt des itrations

EN MEMOIRE
i=4
S = -5

*
Exemples

Pour.allant.suivant

var A,B,C : entiers


A6
B4
C -2
Pour i allant de i =1 5
si A > B alors
A=C+A
sinon
C=C-B
FinSI
Suivant I
Afficher (les valeurs de A, B et C sont, A, B, C)

*
Exemples

Pour.allant.suivant

Ecrire un algo qui permet de calculer la somme suivante:


S = 1 1/2 + 1/3 1/4 + 1/5 + + (-1)n+1/n
Var Nmax, S : rels
Var n : entier
Ecrire (donner le nbe des termes)
Lire (Nmax)
S0
Pour n allant de 1 Nmax
S = S + (-1) ^ (n + 1) / n
Suivant n
Ecrire(S =, S)
Fin

*
Pour.allant.suivant
Cas des boucles imbriques
Pseudo - code
Pour i allant de Vi Vf [pas p]
Pour j allant de Wi Wf [pas p]
[<bloc dactions >]
Suivant j
Suivant i

Visual Basic
for(i = Vi ; i <= Vf ; i = i + 1)
{
for(j = Vi ; j <= Vf ; j = j + 1)
{
[<bloc dactions >]
}
}

*
Pour.allant.suivant

Exemples
var S : rel
var j : entier

j=1

j=2

i=1

S=0+1+1=2

S=2+1+2=5

S 0;

i=2

S=5+2+1=8

S=8+2+2=12

Pour i allant de 1 3
Pour j allant de 1 2
S=S+i+j
suivant j
Suivant i

i=3

S=12+3+1=16

S=16+3+2=21

i=4

Arrt des itrations

Ecrire (la valeur de x est, S)


Fin

EN MEMOIRE
i=4
S = 21
j=3

j=3

*
Cas ou le nombre de rptition est inconnu :
Tant que . faire
Dans cette structure, la sortie de la boucle ditration
seffectue lorsquune condition nest plus vrifie.

Tant que la condition est vrifie on rpte lexcution du


bloc dinstruction contrl
Le nombre des itrations est donn aprs la sortie de la
boucle

*
Tant que . faire
Pseudo - code

i Vi
Tant que <condition> faire
[<bloc dactions >]
i i+1
Fin tant que

Langage C

i i0
While <condition>
{
[<bloc dactions >]
i i+1
}

Dans ce cas la vrification de la condition se fait avant


lexcution du bloc dinstruction
Le bloc dinstruction peut ne jamais tre excut

*
Exemples

Tant que . faire

Cet algorithme fait la somme des valeurs saisies, arrt la lecture de -1)
Pseudo - code
Var S, var
i0
S0
Afficher ("var =" )
Lire (var)
Tant que (var # -1) faire
S S + var
Afficher ("var =" )
Lire (var)
ii+1
Fin tant que
Afficher("La somme est :", S)
Afficher("Le nombre de valeur est :", i)

Language C
int S, var;
i = 0;
S = 0;
printf("var =");
scanf("%d",&var);
while (var!=-1)
{
S = S + var;
printf("var =");
scanf("%d",&var);
i = i + 1;
}
printf("la somme est :%d",S);
printf("le nbre de valeur est :%d",S);

*
Tant que . faire
var S : entier
var i : entier
i 1;
S 0;
lire (var)
tant que (var # -1) faire
S S+var
lire (var)
ii+1
fin tant que
Afficher (la valeur de S est, S)
Afficher (le nbre de valeur est, i)

SIMULATION

var=2

i=1

S=0+2

var=-3

i=2

S=2-3

-1

Var=4

i=3

S=-1+4

Var=-8

i=4

S=3-8

-5

Var=-1

i=5

Arrt des itrations

EN MEMOIRE
X = i-1
S = -5

Comparaison boucles pour et tant que


Implicitement, linstruction pour:

initialise un compteur
incrmente le compteur chaque pas
vrifie que le compteur ne dpasse pas la borne
suprieure
Explicitement, linstruction tant que il faut
initialiser un compteur {amorage}
incrmenter le compteur chaque pas {relance}
vrifier que le compteur ne dpasse pas la borne
suprieure {test de boucle}

*
Cas ou le nombre de rptition est inconnu :
Rpter ..Tant que
Dans cette structure, la sortie de la boucle ditration
seffectue lorsquune condition nest plus vrifie.

Tant que la condition est vrifie on rpte lexcution du


bloc dinstruction contrl
Le nombre des itrations est donn aprs la sortie de la
boucle

*
Rpter .tant que
Pseudo - code
i Vi
Rpter
[<bloc dactions >]
i i+1
Tant que <condition>

Visual Basic
i=i0
do
{
[<bloc dactions >]
i=i+1
}
while ([condition]);

Dans ce cas la vrification de la condition se fait aprs


lexcution du bloc dinstruction
Le bloc dinstruction sexcute au moins une fois

*
Exemples

Rpter .tant que

Cet algorithme fait la somme des valeurs saisies, arrt la lecture de -1)
Pseudo - code
Var S, var
i0
S0
Afficher ("var =" )
Lire (var)
Rpter
S S + var
Afficher ("var =" )
Lire (var)
ii+1
Tant que (var # -1) faire
Afficher("La somme est :", S)
Afficher("Le nombre de valeur est :", i)

Language C
int S, var;
i = 0;
S = 0;
printf("var =");
scanf("%d",&var);
Do
{
S = S + var;
printf("var =");
scanf("%d",&var);
i = i + 1;
}
while (var!=-1)
printf("la somme est :%d",S);
printf("le nbre de valeur est :%d",i);

Comparaison boucles rpter et tant que


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

Choisir pour... tant que rpter

Boucle Tant que


Traitement
excut au
moins une
fois
Nombre
ditration
connu ?

Boucle Rpter

Boucle Pour

*
Trouver la max dun certain nombre connu de valeur

Var x, Max,p : entiers


P=0
Ecrire( saisir la 1re valeur)
Lire (x)
Max X
Pour i=1 4
Ecrire( saisir la valeur , i)
Lire (x)
si X>Max alors
Max x
p=0
FinSi
si Max = X alors
p=p+1
Fin si
Suivant i
Ecrire( la valeur Max est ; , Max)

Var x, Min : entiers


Ecrire( saisir la 1re valeur)
Lire (x)
Min X
i1
Tant que (x >=0) faire
si x<=Min alors
Min x
FinSi
i=i+1
Ecrire( saisir la valeur , i)
Lire (x)
Fin tan que
Ecrire( la valeur Min est ; , Min)

*
Trouver la max et le min dun certain nombre inconnu de valeur. La
saisie sarrte lorsquon saisie une valeur gale zro

Var x, Max, Min : rels


Ecrire ( donner la 1re la valeur )
lire (X)
Max X
i=1
Tantque (X<>0)
si (X >= Max) alors
Max X
FinSi
FinSi
Ecrire ( donner la valeur , i)
lire (X)
i i+1
Ecrire( la plus grande valeur est: , Max)

*
Ensemble de donnes du mme type
Exemple de problme :
Saisir une suite de nombres, puis afficher cette suite aprs
avoir divis tous les nombres par la valeur maximale de la
suite.

Ncessit de conserver les nombres en mmoire


Variable contenant une valeur
var

132

Variable contenant plusieurs valeurs


var

132 52 -45 78 345 -543 54 23

*
Nom de la
variable
Tab

indice
0

12

-56

-8

valeurs

les "cases" sont numrotes partir de zro, autrement dit


que le plus petit indice est zro.
Lors de la dclaration d'un tableau, on prcise la plus grande
valeur de l'indice
diffrente, donc, du nombre de cases du tableau,
si on veut 12 emplacements, le plus grand indice sera
11).

*
Syntaxe:

Syntaxe:

tableau Tab (19) : entiers


Pour i = 0 19
Ecrire ( donner la valeur , i)
Lire (Tab(i))
Suivant i

Var Tab : entiers


Pour i = 0 19
Ecrire ( donner la valeur , i)
Lire (Tab)
Suivant i

Mmoriser les 20 valeurs

Mmoriser une seule valeur

*
Exemple de problme :
Saisir une suite de nombres, puis afficher cette suite aprs
avoir divis tous les nombres par la valeur maximale de la
suite. Tab T(4) entier
Var Max entier
Ecrire( donner la 1re valeur )
Lire (T(0))
Max T(0)
Pour i = 1 4
Ecrire( donner les valeur )
Lire (T(i))
Si (T(i) > Max) alors
Max T(i)
Fin si
Suivant i
Pour i = 0 4
Ecrire ( les nouvelles valeurs sont: , T(i)/Max)
Suivant i

*
Il arrive frquemment que lon ne connaisse pas lavance le
nombre dlments que devra comporter un tableau.
- On dclare un tableau avec une dimension maximale
- Inconvnient : on peut tre sr du nombre dlment
- Consommation de la mmoire
- On dclare un tableau dynamique
- dclarer le tableau sans prciser au dpart sa dimension
- au cours du programme, on va fixer la dim via une
instruction de redimensionnement : Redim.

*
Tableau Notes() en Numrique
Variable nb en Numrique
Dbut
Ecrire "Combien y a-t-il de notes saisir ?"
Lire nb
Redim Notes(nb-1)
..
..
..
Fin

*
On peut dans une application procder aux mmes
traitements, ou des traitements similaires, plusieurs
endroits de son droulement.
Ces traitements vont tre crite dans des algorithmes part
Fonctions
procdures

Dans lalgorithme principale on peut appeler plusieurs fois


une fonction ou une procdure
Une fonction ou une procdure peut elle-mme appeler une
ou plusieurs fonctions et procdures.

*
Diviser pour mieux rgner
Structuration
Les fonctions et les procdures permettent de dcomposer
un programme complexe en une srie de sous-programmes
plus simples, lesquels peuvent leur tour tre dcomposs
eux-mmes en fragments plus petits, et ainsi de suite.

*
Diviser pour mieux rgner
Regrouper un ensemble dinstruction dans le mme
algorithme afin de pouvoir y faire appel autant de fois que
ncessaire.
Lisibilit et identification des erreurs, rutilisation
Il est inutile de connatre comment est dfinie une fonction
ou une procdure pour y faire appel. Par il est ncessaire
de connatre sa dclaration (son manuel dutilisation):
Quel est son rle?

Quels sont les arguments fournir?


Quelles est la valeur retourne?

*
Les procdures et fonctions peuvent ncessiter
ventuellement un ou plusieurs paramtres dentre ou de
sortie.
Un paramtre dentre est la rfrence une variable
manipule par la procdure ou la fonction.
Un paramtre de sortie est une valeur renvoye par une
fonction.

*
A limage des fonction mathmatiques, une valeur est
retourne par les fonctions algorithmiques, linverse
des procdures.
Exemple:
Ecriture( Bonjour ) constitue un appel la
procdure Ecriture; on lui fournit en paramtre la
valeur dune chane de caractre; mais aucune valeur
nest retourne.
A lecture() constitue un appel la fonction lecture;
aucun argument nest fourni (mains on crit les
parenthses systmatiquement); une valeur est
retourne.
On utilisera le terme fonction indiffremment.

*
Une fonction est une suite ordonne dinstructions qui
peut avoir aucun, un ou plusieurs paramtres dentrs et
retourne aucune ou une valeur (bloc dinstructions nomm
et paramtr).
Syntaxe: Exemple
Fonction NF(Entre a : Entier, Entre b : chaine)
dlivre Rel
Dbut
Var .., res en rel
..
..
Dlivre res
Fin

Programme suite
arithmtiques
0.

1.
2.
3.
4.
5.

Fonction terme (Entre rang : entier, Entre raison: entier,


Entre terme0 en entier) dlivre Entier
Dbut
var val : entier
val terme0 + raison*rang
dlivre val
Fin

6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.

Dbut
Var n, U0, U, r : entier
Ecrire( premier terme ?)
Lire(U0)
Ecrire( raison ?)
Lire(r)
Ecrire( les termes U0, U1, U10 sont: )
Pour n=1 10
U terme(n, r, U0)
Ecrire(U)
Ecrire( )
Suivant n
Fin

*
Dans sa dclarations ils sont appels paramtres formels
Au sein dun appel, ils sont appels paramtres effectifs
chaque paramtre formel correspond un paramtre
effectif, de mme type

Le nom dun paramtres effectif peut tre diffrents de


celui du paramtre formel associ

*
Exemple de dclaration dune fonction

Fonction Moyenne(Entre A : rel , Entre B : rel)dlivre rel


Dbut
Var Moy : rel
Moy (A+B)/2
dlivre (Moy)
Fin
Exemple dappelle dune fonction

Algorithme principale
dbut
Var x, y: rel
lire(x)
Lire(y)
Ecrire("Moy = , Moyenne(x,y))
Fin

Mme exemple en C

Exemple de dclaration dune fonction

float Moyenne(float X, float Y)


{
float Moy;
Moy = (X+Y)/2;
return (Moy) ;
}
Exemple dappelle dune fonction

main()
{
float x, y ;
scanf("%f", &x);
scanf("%f", &y);
printf("Moy = %.2f",Moyenne (x, y)) ;
system("pause");
return 0;
}

*
Exercice
Ecrire une fonction Max(T, n) qui permet de trouver le
maximum dun tableau dun certain nombre de valeurs.

*
Paramtres dentrs-Sortie
Un paramtre peut jouer la fois le rle de paramtre
d'entre et de sortie. Le paramtre effectif correspondant
est alors ncessairement une variable initialise, pour que
son rle de sortie puisse tre accompli.
Exemple
Fonction doubler( Entree-Sortie x en Rel)
Debut
xx*2
Fin

*
Exercice
Ecrire un programme permettant de saisir trois rels
(variables a, b, c) et, suite a plusieurs appels a une fonction
permuter(), permettant dchanger les valeurs de deux
variables, conduit a avoir a <= b <= c, quelles que soient les
valeurs saisies.

1.
2.
3.
4.
5.
6.
7.

Fonction Permuter( Entree-Sortie x en Reel, Entree-Sortie y en Reel )


Debut
variable z en Reel
zx
xy
yz
Fin

8. Debut
9. variable a, b, c en Rel
10. lire(a, b, c)
11. Si a > b Alors
12. Permuter( a, b )
13. FinSi
11. Si b > c Alors
12. Permuter( b, c )
13. FinSi
11. Si a > b Alors
12. Permuter( a, b )
13. FinSi

*
La Notion de Rcursivit
La dcomposition en sous problme
Le processus danalyse permet de dcomposer un problme
en sous problme plus simples . leur tour, ces sous
problmes seront leur tour dcomposs jusqu un niveau
dopration lmentaires faciles raliser.
La dcomposition rcursive
Dans certain cas, le sous problme est une illustration du
problme initial, mais pour un cas plus simple . Par
consquent, la solution du problme sexprime par rapport
elle-mme! On appelle se phnomne rcursivit.

*
Exemple de Rcursivit
la factoriel de n est : 1*2*3..*n
Mais

n! = 1*2*..*(n-1)*n
n! = n*(n-1)!

Pour calculer na valeur de n!, il suffit donc de savoir calculer


(n-1)! Et ensuite de multiplier cette valeur par n.
Le sous problme du calcul (n-1)! Est le mme problme
initial, mais pour un cas plus simple car n-1 < n

*
Raisonnement par rcurrence
Soit une proprit P sur telle que P(0) est vraie et l'implication
P(n) P(n+1). Alors P(n) est vraie pour tout n de .
Suite rcurrente
Soit un ensemble E, on note (an) une suite dlments de E telle
que:
a0 est connue
an = f(an-1), pour n>0 et f: E E.
La suite (an) avec n est une suite rcurrente. Elle est
entirement dtermine pour tout n de .

*
Une fonction rcursive est une fonction qui sappelle ellemme dans son traitement.
On a vu que pendant le traitement dune fonction nous
pouvons appeler dautres fonctions dj dclares
Si la fonction appele nest autre que la fonction qui
appelle, on dclenche une boucle infinie.

*
Fonction F(Entre a : Entier, Entre b :
chaine) dlivre Rel
Dbut
Var res en rel
..
Dlivre res
Fin
Fonction NF(Entre z) dlivre Rel
Dbut
Var x,y, res en rel
..
Res = F(x, y)
Dlivre res
Fin

Fonction NF(Entre z) dlivre Rel


Dbut
Var x,res en rel
..
Res = NF(x)
Dlivre res
Fin

NF(x)

NF() est fonction une rcursive

*
On peut crire la factorielle de N par une suite:

Avec Un = N!. Sous cette forme Un dpend de n et Un-1.


Ecrire l'algorithme de la fonction factorielle en employant la
rcursivit.

*
1. Fonction Fact (Entre n : entier) dlivre entier
2. Dbut
3.
var res : entier
4.
Si (n = 0 ou n=1) Alors
5.
Res 1
6.
Else
7.
Res n*Fact(n-1)
8.
FinSi
9.
Dlivre (res)
10.Fin
1. var N : entier
2. Dbut
3.
Ecrire( donner la valeur de N )
4.
Lire(N)
5.
Ecrire( la factorielle de N est:, FACT(N))
6. Fin

*
La valeur de la racine carre d'un nombre A peut tre
approxime en employant la suite rcurrente d'ordre 1
suivante:
La rcursivit ne porte pas sur la

variable principale du problme


(variable dont on cherche la racine : A)
mais elle porte sur une autre variable X

*
Version itrative du calcul de la racine carre
0. Fonction racine( Entree A en rel ) dlivre rel
1. Dbut
2. variable X en rel
3. X 1
4. TantQue Abs(X*X-A) >= 0.001 Faire
5. X ( X + A / X ) / 2
6. FinFaire
7. dlivre X
8. Fin

*
Version rcursive du calcul de la racine carre
0. Fonction racine-rec(Entree A en rel, Entre X en rel)
dlivre rel
1. Dbut
2. variable res en rel
3. Si |X*X - A| <= 0,001 Alors
4. Res x
5. Sinon
6. Res racine-rec(A, ( X + A / X ) / 2)
7. FinSi
8. Dlivre res
9. Fin
1. Fonction racine(Entre A) dlivre rel
2. Dbut
3. Dlivre racine-rec(A, 1)
4. Fin

*
Les tableaux permettent de stocker plusieurs lments de
mme type au sein d'une seule entit,
Trier un tableau c'est donc ranger les lments d'un
tableau en ordre croissant ou dcroissant
Il existe plusieurs mthodes de tri qui se diffrencient par
leur complexit d'excution et leur complexit de
comprhension pour le programmeur.
Nous exposons deux mthodes :

le tri par minimum (maximum) successif (tri de

selection)

Le tri bulles

*
Tous les algorithmes de tri utilisent une procdure qui
permet d'changer (de permuter) la valeur de deux
variables.
1.
2.
3.
4.
5.
6.
7.

Fonction changer (E/S a, b : Entier)


Dclaration T : Entier
Dbut
T a
ab
bT
fin

*
on parcourt le tableau de gauche droite, on cherche le plus
petit lment puis on le positionne dans lindice i du tableau.
On recommence la mme opration pour le sous-tableau de
droite qui commence par lindice i+1.

plus
gnralement
:
Pour
trier
le
sous-tableau
t[i..nbElements] il suffit de positionner au rang i le plus
petit lment de ce sous-tableau et de trier le sous-tableau
t[i+1..nbElements]

Par exemple, pour trier [221, 215, 130, 163, 147, 120], on
va avoir les boucles suivantes :
i=0; 221

215

130

163

147

120

i=1; 120

215

130

163

147

221

i=2; 120

130

215

163

147

221

i=3; 120

130

147

163

215

221

i=4; 120

130

147

163

215

221

i=5; 120

130

147

163

215

221

Il nous faut donc une fonction qui soit capable de dterminer le plus petit
lment (en fait l'indice du plus petit lment) d'un tableau partir d'un
certain rang
Fonction IndexMin(tab() : Entier , rang : entier, Nb : entier ) : entier
Dbut
Var Min, i, pmin : entiers
pmin=rang;
Min = tab[rang];
pour(i rang+1 Nb-1)
Si (tab[i]<=Min) Alors
Min=tab[i];
pmin=i;
FinSi
Suivant i
renvoi (pmin);
Fin

Cration dune procdure tri() qui appelle la fonction IndexMin() afin


de trier les valeur du tableau TY()
Fonction IndexMin(tab() : Entier ,
rang : entier, Nb : entier ) : entier
Dbut
Var Min, i, pmin : entiers
pmin=rang;
Min = tab[rang];
pour(i rang+1 Nb-1)
Si (tab[i]<=Min) Alors
Min=tab[i];
pmin=i;
FinSi
Suivant i
renvoi (pmin);
Fin

Procdure tri (E/S T() : entier , n :


entiers)
Dbut
Var i, i_min, k : entiers;
pour(i 0 n-2)
i_min IndexMin(T, i, n)
Si (i != i_min)
k = T[i]
T[i]=T[i_min]
T[i_min]=k
FinSi
Suivant i
Fin

Cration de lalgorithme principal qui appelle la procdure Tri()


Var i, n entier
tableau V() : entier;
Ecrire("Donner le nbre dlment\n") ;
lire(n);
Redim V(n-1)
pour(i 0 n-1)
Ecrire("la valeur ", i);
lire(V(i))
Suivant i
tri(V, n)
Ecrire("les valeurs trier sont:");
pour(i 0 n-1)
Ecrire(V(i))
Suivant i
Fin

*
Principe de la mthode :
Slectionner le minimum du tableau en parcourant le tableau
de la fin au dbut et en changeant tout couple d'lments
conscutifs non ordonns.

*
Par exemple, pour trier [221, 215, 130, 163, 147, 120], on
va avoir les boucles suivantes :
i=0;

221

130

163

147

120

j=0; 221

215

130

163

120

147

221

215

130

120

163

147

221

215

120

130

163

147

221

120

215

130

163

147

j=1;
j=2;

i=1;

215

120

221

215

130

163

147

120

130

221

215

147

163

120

130

147

221

215

163

120

130

147

163

221

215

120

130

147

163

215

221

*
fonction tri(t(), Nb: entier)
Dbut
var i, k, p : entier
Pour (i0 Nb-1)
Pour (kNb-1 i+1 [-1])
si(t[k] < t[k-1]) alors
p=t[k-1];
t[k-1]=t[k];
t[k]=p;
FinSi
suivant k
Suivant i
Fin

Algo pricipal
dbut
var i, n : entier
Tableau V()
Ecrire("Donnez n")
lire(n)
Redim (V(n-1))
Pour(i0 n-1)
Ecrire("V() = ", i)
Lire(V[i])
Suivant i
tri(V, n);
Pour(i0 n-1)
Ecrire("V() = ", i, V(i))
Suivant i
FIN

*
Recherche dans un ensemble non tri
On procd par une recherche linaire: on parcoure le
tableau et lorsque quon trouve le nombre recherch (t(i)=X)
on renvoi lindice correspondant.
Si on parcours tous le tableau sans trouver la valeur
recherche on dclare que le nombre nexiste pas.

*
Recherche dans un ensemble non tri
Fonction Recherche (T(), X, Nb)
Var i, R : entier
i0
Tant que (i<=Nb-1 ET T(i) <> X) Alors
i i+1
Fin tant que
Si (i = Nb) alors
Ecrire ( le nombre est introuvable )
Sinon
Ecrire ( le nombre de trouve dans lindice )
Renvoyer (i)
Fin

*
Recherche dans un ensemble tri suivant un ordre croissant
On procd par une recherche linaire: on parcoure le
tableau et tant que llment du tableau est infrieur au
nombre recherch (t(i) < X) on continu la recherche.
Si on parcours tous le tableau sans trouver la valeur
recherche on dclare que le nombre nexiste pas.

*
Recherche dans un ensemble tri suivant un ordre croissant

Fonction Recherche (T(), X, Nb)


Var i, R : entier
i0
Tant que (i<=Nb-1 ET T(i) < X) Alors
i i+1
Fin tant que
Si (i = Nb) alors
Ecrire ( le nombre est introuvable )
Sinon
Ecrire ( le nombre de trouve dans lindice )
Renvoyer (i)
Fin

*
Algorithme de Dichotomie
Le jeu du nombre cach
Une personne choisi un nombre compris entre 1 et 100, on
doit deviner ce nombre. Nous allons faire des propositions
et la personne rpond "trop grand", "trop petit" ou
"gagn". Le jeu sarrte lorsquon va trouv le nombre.

N: nombre choisi entre 0 et 100


P: proposition

Var X, N, P
Ecrire ( donner un nombre entre 0 et 100)
Lire (N)
Lire (P)
Tant que (P <> N) faire
si (P > N) alors
Ecrire ( trop grand )
sinon
si (P < N) alors
Ecrire ( trop petit )
Fin Si
Lire (P)
Fin tant que
Ecrire ( gagn )

*
Quelles techniques de jeu peut-on employer pour gagner le
plus rapidement possible ?
La technique-1 est la suivante:
Si on propose un nombre G plus grand que celui recherch,
on va proposer un autre nombre dans lintervalle [0..G-1]
Si on propose aprs un nombre P plus petit que celui
recherch, on va proposer un autre nombre dans lintervalle
[P+1..G-1] et ainsi de suite
Chaque fois quon propose un nombre on limite plus
lintervalle de recherche

Var X, N, P, Min, Max : entier;


Ecrire("donner un nombre entre 0 et 100 ");
Lire(N)
Lire(P)
Min=0;
Max=100;
Tant que (P <> N)
Si (P > N) Alors
Max = P-1;
Ecrire("donner un nbre entre", Min, Max);}
Sinon
Si (P < N) Alors
Min = P+1;
printf("donner un nbre entre", Min, Max);}
FinSi
FinSi
Lire (P);
Fin tantque
printf("gagn");

Simulation
Le nombre cach est 72

Min

Max

Proposition

100

34

35

100

56

57

100

80

57

79

60

61

79

75

61

74

72

Gagn

*
La technique-2 Mthode de dichotomie:
Cette mthode est identique la prcdente seulement les
valeurs proposes seront proche du milieu des intervalles
[Min..Max]
Chaque fois quon propose un nombre on limite plus
lintervalle de recherche en crasant les valeurs de Min et
Max.

Var X, N, P, Min, Max : entier


Ecrire("donner un nombre entre 0 et 100 ");
Lire(N);
Min 0;
Max 100;
P (Max+Min)/2;
Ecrire(P);
Tant que (P <> N) faire
Si (P > N) Alors
Max = P-1
Sinon
Si (P < N) Alors
Min = P+1
Fin Si
P=(Max+Min)/2;
Ecrire(P);
Fin tant que
Ecrire("gagn", P);

Simulation
Le nombre cach est 72

Min

Max

Proposition milieu

100

50

51

100

75

51

74

62

63

74

68

69

74

71

72

74

73

72

72

72

gagn

*
f est une fonction dfinie sur lintervalle [a, b] et strictement
monotone sur [a; b]. On cherche rsoudre numriquement
lquation f(x) = 0.

Var X, N, P, Min, Max : rel


Lire(Min)
Lire(Max)
P=(Max+Min)/2;
Ecrire(P)
Si (f(Max)*f(Min)>0) Alors
Ecrire("pas de solution")
sinon
tant que (abs(f(P)) > 0.001) faire
si (f(Min) * f(P)<=0) Alors
Max P
sinon
Min P
Fin Si
P=(Max+Min)/2;
Fin tant que
Ecrire( la solution est:", P);
Fin Si
Fin

*
Comment valuer les performances d'un algorithme ?
diffrents algorithmes ont des couts diffrents en
termes de temps d'excution (nombre d'oprations
effectues par l'algorithme), taille mmoire (taille
ncessaire pour stocker les diffrentes structures de
donnes pour l'excution).
Ces deux concepts sont appels la complexit en
temps et en espace de l'algorithme.

*
La complexit algorithmique permet de mesurer les
performances d'un algorithme et de le comparer avec
d'autres algorithmes ralisant les mme fonctionnalits.
La complexit algorithmique est un concept fondamental
pour tout programmeur, elle permet de dterminer si un
algorithme a et meilleur quun algorithme b et sil est
optimal ou bien il ne doit pas tre utilis

*
Le temps d'excution d'un programme dpend :
1. du nombre de donnes,
2. de la taille du code,
3. du type d'ordinateur utilis (processeur, mmoire),
4. de la complexit en temps de l'algorithme.
Soit n la taille des donnes du problme et T(n) le temps
d'excution de l'algorithme. On distingue :
o Le temps du plus mauvais cas Tmax(n) qui correspond
au temps maximum pris par l'algorithme pour un
problme de taille n
o le temps moyen Tmoy(n) temps moyen d'excution sur
des donnes de taille n.

*
Rgles gnrales :
1. le temps d'excution TE d'une affectation, dune
incrmentation, dune opration lmentaire ou d'un test
est considr comme constant c.
2. Le temps d'une squence d'instructions est la somme
des TE des instructions qui la composent.
3. le temps d'un branchement conditionnel est gal au TE
du test plus le max des deux TE correspondant aux
deux alternatives (dans le cas d'un temps max).
4. Le temps d'une boucle est gal la somme du cot du
test de sortie de boucle + du corps de la boucle.

Exemple-1: Calcul d'une somme de carrs


Variable: n, i : entier
Variable: somme : rel
Dbut
Somme 0
pour i 0 n-1 faire
Somme somme + i*i
Suivant i
fin

c1 : affectation
c2 : incrmentation
c3 : test
c4 : addition
c5 : multiplication

Cette algorithme une complexit O(n)

Exemple-2 : calcul du factorielle (fonction rcursive)


Fonction factorielle(n ; naturel) : naturel
Dbut
Si n = 0 alors
Retourner 1
Sinon
Retourner n*factorielle(n-1)
Finsi
Fin

Exemple-3 algorithme de Recherche du Max


Var : X, i, Max : entiers
Ecrire( donner la valeur , 0)
Lire X
Max X
i1
Tant que (X <> -1) faire
si(X > Max) alors
Max X
FinSi
Ecrire( donner la valeur , i)
lire X
ii+1
Fin tant que
Ecrire(Max=, Max)

c1:affectation
c2: incrmentation
c3: test

La complexit est en O(n)

Exemple-4 Somme de deux matrice


Tableau M1()(), M2()(), S()()
Var i, j: entier
Ecrire(donner la dimension des deux matrices)
Lire (n, m)
Redim(M1(n-1)(m-1))
Pour i = 0 n-1
Redim(M2(n-1)(m-1))
pour j=0 m-1
Redim(S(n-1)(m-1))
S(i)(j)=M1(i)(j)+M1(i)(j)
Pour i = 0 n-1
Ecrire( S()()= , i, j, S(i)(j))
pour j=0 m-1
suivant j
Ecrire( M1()() , i, j)
Suivant i
lire M1(i)(j)
suivant j
Suivant i
Pour i = 0 n-1
pour j=0 m-1
Ecrire( M1()() , i, j)
lire M1(i)(j)
suivant j
Suivant i
La complexit est en O(n2)

Exemple-5 Fonction Echange


1.
2.
3.
4.
5.
6.
7.

Fonction changer (E/S a, b : Entier)


Dclaration T : Entier
Dbut
T a
ab
bT
fin

T(n) = c1+c1+c1 = 3c1


Complexit constante en O(1)

(c1 : affectation)

*
Algorithmes de recherche linaire
Fonction Recherche (T(), X, Nb)
Var i, R : entier
i0
Tant que (i<=Nb-1 ET T(i) <> X) Alors
i i+1
Fin tant que
Si (i = Nb) alors
Ecrire ( le nombre est introuvable )
Sinon
Ecrire ( le nombre de trouve dans lindice )
Renvoyer (i)
Fin

*
Fonction Recherchedico(T() : entier, Nb : entier, X : entier): entier
Min 0;
Var m : entier
Max Nb-1;
m (Max+Min)/2;
Tant que (T(m) <> X) faire
Si (T(m) > X) Alors
Max = m-1
Sinon
Si (T(m) < X) Alors
Min = m+1
Fin Si
P=(Max+Min)/2;
Fin tant que
Renvoyer (m);

*
Dans la Recherche linaire,
Pire des cas, lment cherch absent du tableau
On va effectuer n tests: T(n)=n*C
complexit linaire : O(n)
Le temps dexcution est proportionnel aux nombres de
donnes.
Naf il existe un algorithme plus efficace

Les algorithmes usuels peuvent tre classs en un certain nombre de


grandes classes de complexit.
Les algorithmes sous-linaires, dont la complexit est en gnral en
O(logn). sont considrs comme les plus rapides. C'est le cas de la
recherche d'un lment dans un ensemble ordonn fini de cardinal n.
Les algorithmes linaires en complexit O(n) ou en O(nlogn) sont
considrs comme rapides, comme l'valuation de la valeur d'une
expression compose de n symboles ou les algorithmes optimaux de tri.
Plus lents sont les algorithmes de complexit situe entre O(n2) et O(n3),
c'est le cas de la multiplication des matrices et du parcours dans les
graphes.
Au del, les algorithmes polynomiaux en O(nk) pour k > 3 sont
considrs comme lents, sans parler des algorithmes exponentiels (dont la
complexit est suprieure tout polynme en n) que l'on s'accorde dire
impraticables ds que la taille des donnes est suprieure quelques
dizaines d'units.

Ordre de grandeur du temps ncessaire l'excution


d'un algorithme d'un type de complexit

*
Qualits d'un algorithme :
1. Maintenable (facile comprendre, coder, dboguer),
2. Rapide
Conseils :
1. Privilgier le point 2 sur le point 1 uniquement si on
gagne en complexit.
2. ce que fait l'algorithme doit se lire lors d'une lecture
rapide : Une ide par ligne.
3. Faire galement attention la prcision, la stabilit et la
scurit.
La rapidit d'un algorithme est un lment d'un tout
dfinissant les qualits de celui-ci.

*
Comment trouver un algorithme?
Prenez un exemple
tentez de voir intuitivement dessus comment rsoudre le
problme.
Tentez alors de gnraliser ces oprations pour obtenir les
principes gnraux de votre algorithme.
traduisez ces principes en pseudo-code.
Si besoin, dcomposez le problme en sous problmes que
vous traitez indpendamment,

*
#include <stdio.h>
main()
{
printf("Premier programme\n ");
}

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

*
La directive # include
Pour compiler correctement un fichier, le compilateur a
besoin
o d'informations concernant les dclarations de:
o structures de donnes
o variables externes
o l'aspect (prototype) des fonctions prdfinies.
Toutes ces informations sont contenues dans des fichiers
avec l'extension .h .Ces fichiers doivent tre inclus dans
le fichier que l'on veut compiler.
Par exemple, pour utiliser la fonction printf, il faut inclure le fichier
stdio.h (standard input output) .

*
La fonction main

Est un "en-tte", elle prcise que ce qui sera dcrit la


suite est le programme principal.
Un programme en C apparat comme une fonction qui
porte le nom main(), le programme doit tre dlimit
par des accolades { pour le dbut, et } pour la
fin.
On dit que les instructions situes entre ces accolades
forment un "bloc".

*
La fonction printf()
Dans linstruction :

printf(Premier programme \n);


On appelle la fonction prdfinie printf(). Cette fonction
reoit un argument qui est : "Premier programme \n"
Les guillemets servent dlimiter une "chane de
caractres".
La notation \n est conventionnelle: elle reprsente un
caractre de fin de ligne qui, lorsqu'il est envoy l'cran,
provoque le passage la ligne suivante.

*
de manire gnrale, le langage C prvoit une notation de ce
type (\ suivi d'un caractre) pour un certain nombre de
caractres dits "de contrle".
\n nouvelle ligne
\t tabulation horizontale

\v tabulation verticale
\b retour d'un caractre en arrire
\r retour chariot
\f saut de page
\a beep

*
Les types des variables
Le type char
On peut stocker dans ces variables des chaines
caractres. dsigne un entier sign cod sur 1 octet
Les types short, int
Le type short reprsente un entier sign cod sur 2 octets
Le type int reprsente un entier sign cod sur 4 octets

*
Les types des variables
Le type rel
Les nombres virgule flottante (nombres rels) servent
coder de manire approche les nombres rels.

On dispose de trois types de nombres virgule flottante,


les types float, double et long double.

*
Les Oprateurs

Les oprateurs arithmtiques :


- : changement de signe
* : Multiplication
/ : Division
% : Modulo (reste de la division de deux entiers)
+ : Addition
- : Soustraction

*
Les Oprateurs
Les oprateurs relationnels :
Ces oprateurs binaires (vrai ou faux) permettent dtablir des
conditions logiques en comparant leurs deux oprandes.
== test si gal
!= test si diffrent
< test si infrieur
<= test si infrieur ou gal
> test si suprieur

>= test si suprieur ou gal

*
Les Oprateurs
Les oprateurs logiques:
Ces oprateurs permettent les oprations boolennes
classiques sur des conditions logiques.
! Ngation logique dune condition
&& ET logique de conditions
|| OU logique de conditions

*
Les Oprateurs
Oprateur dincrmentation
Incrmentation prfixe/postfixe.

a++ est quivalent a=a+1;


b=a++; est quivalent b=a; puis a=a+1;

b=++a; est quivalent a=a+1; puis b=a;

*
La fonction printf()
Le premier argument de printf est une chane de caractres
qui spcifie la fois
des caractres afficher tels quels,
des "codes de format" reprs par %. Un "code de
conversion" (tel que c, d ou f) y "prcise le type de
l'information afficher.
Printf("%d" , X)
Printf( la valeur de de X et Y est %d %d" , X, Y)
%d int, %f float, %c char

*
La fonction scanf()
D'une manire gnrale, l'appel de scanf se prsente ainsi :
scanf ( format, liste_d_adresses)
format : constante chane (entre " "),
liste_d_adresses : liste de "lvalue", spares par des
virgules, d'un type en accord avec le code de format
correspondant.
Scanf("%d " , &X)

*
Les Structures de contrle
If (condition)
{Bloc 1}
Else
{Bloc 2}

If (condition)
{Bloc 1}
Else IF
{Bloc 2}
Else IF
{Bloc 3}
Else
{Bloc 4}

*
Les Structures de contrle
main()
{ int n ;
do
{
printf ("donnez un nb < 0 : ") ;
scanf ("%d", &n) ;
}
while (n<=0)
printf ("vous avez fourni %d\n", n) ;

*
Les Structures de contrle
main()
{
int Som, X ;
Som = 0;

main()
{
int Som, X ;
Som = 0;

while(Som <= 100)


{
printf("donnez un nb : ");
scanf("%d", &X) ;
Som = Som + X;
}
printf ("la somme est termine") ;

For (i=1; i<=N; i++)


{
printf("donnez un nb : ");
scanf("%d", &X) ;
Som = Som + X;
}
printf ("la somme est termine") ;

system("PAUSE");
return 0;
}

system("PAUSE");
return 0;
}