et
Structures de Donnes
Lalgorithmique
Lalgorithmique
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).
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
LDA
Programme
C, C++,
Entres
Sortie Traitement
Dbut algorithme
* Formaliser un algorithme
Deux types de utiliss pour reprsenter des
algorithmes:
sinon
Y<-- -X
fin si;
Afficher Y;
Dclaration des
constantes, des variables
et des structures
Le corps de lalgorithme
var
struct
dbut algorithme
action 1 // commentaire 1
action 2 // commentaire 2
.
.
.
action n // commentaire n
fin algorithme
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.
Le caractre :
a , A , * , 7 , z , ! , .
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)
Signification
Plage de valeurs
accepte
char
unsigned char
short int
unsigned short
int
Caractre
-128 127
0 255
Entier court
0 65 535
int
Entier
unsigned int
0 65 535
0 4 294 967 295
long int
Entier long
3.4*10-38 3.4*1038
1.7*10-308 1.7*10308
10
3.4*10-4932 3.4*104932
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
algorithme
Langage C
Oprateur de multiplication
Oprateur de division
Oprateur d'addition
Oprateur de soustraction
<
<
>
>
<=
<=
>=
>=
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 " = "
Var X Y : chaine
X AB
Y CD
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
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)
* 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
Traitement 3
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).
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>]
SINON
[<bloc d'actions 2>]
FIN SI
Langage C
IF ( <condition> )
{
[<bloc d'actions 1>]
}
ELSE
{
[<bloc d'actions 2>]
}
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
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
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
*
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)
*
Pour.allant.suivant
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 >]
}
*
Exemples
Pour.allant.suivant
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
EN MEMOIRE
i=4
S = -5
*
Exemples
Pour.allant.suivant
*
Exemples
Pour.allant.suivant
*
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
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 . 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
}
*
Exemples
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
EN MEMOIRE
X = i-1
S = -5
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.
*
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]);
*
Exemples
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);
Boucle Rpter
Boucle Pour
*
Trouver la max dun certain nombre connu de valeur
*
Trouver la max et le min dun certain nombre inconnu de valeur. La
saisie sarrte lorsquon saisie une valeur gale zro
*
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.
132
*
Nom de la
variable
Tab
indice
0
12
-56
-8
valeurs
*
Syntaxe:
Syntaxe:
*
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
*
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?
*
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.
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
*
Exemple de dclaration dune fonction
Algorithme principale
dbut
Var x, y: rel
lire(x)
Lire(y)
Ecrire("Moy = , Moyenne(x,y))
Fin
Mme exemple en C
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.
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)!
*
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
NF(x)
*
On peut crire la factorielle de N par une suite:
*
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
*
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 :
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.
*
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
*
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
*
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.
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
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.
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.
*
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.
c1 : affectation
c2 : incrmentation
c3 : test
c4 : addition
c5 : multiplication
c1:affectation
c2: incrmentation
c3: test
(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
*
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
*
La fonction printf()
Dans linstruction :
*
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.
*
Les Oprateurs
*
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
*
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.
*
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;
system("PAUSE");
return 0;
}
system("PAUSE");
return 0;
}