Académique Documents
Professionnel Documents
Culture Documents
Contenu du cours
Introduction
Les variables
Lecture/Ecriture
Les structures de contrle : conditionnelles & itratives
Les tableaux
Les rfrences et les pointeurs
Les fonctions et les procdures, La rcursivit
Les tris
La programmation modulaire
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
29/01/2013
Droulement du cours
Volume horaire 26 sances(CM, TD et TP)
Cours sous forme de prsentation ppt distribue en fin
de chaque sance
TD/TP sous les stations de travail (DEV C++)
Samedi (10h-12h) & Mardi (10h-12h)
2 CC (6me semaine, 9me semaine) sans les documents
1 Examen final, sans les documents
NF=2/5 CC + 3/5 EF + PB
Respect des horaires et attitude correcte
Introduction
I. Dfinitions
29/01/2013
Introduction
II. Objectifs
Objectif #1 : Obtenir de la machine
quelle fasse un travail notre
place
Introduction
III. Exemples
Exemple#1
:
Notice
dutilisation dun tlphone
portable
Exemple#2 : faire son choix
dans un distributeur de
boissons
Exemple#3 : recette pour
faire un gteau
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
29/01/2013
Introduction
IV. Problmatique
#1 : Modlisation : peut-on
modliser le problme
Faire
ceci
indpendamment
du
langage et de la machine
Introduction
IV. Ce quil faut pour faire un bon algo
Condition#1 : Intuition
Condition#2 : Mthodologie
Expliciter
et
formaliser son
raisonnement
Condition#3 : Rigueur
29/01/2013
Introduction
V. Etapes de ralisation dun algo
Etape#1 : Description des donnes
Etape#2 : Description des rsultats
Etape#3 : Lexique des variables
Etape#4 : Traitement des donnes
Savoir expliquer
comment faire un
travail sans la
moindre
ambigut
Introduction
VI. Un premier algo
Problme : calculer laire dun rectangle
variables:<La, Lo, S>: rels
Dbut
Ecrire(donnez la longueur )
Lire(lo)
Ecrire(donnez la largeur )
Lire(la)
S=LaXLo
Ecrire(La surface est: S)
Fin
10
29/01/2013
11
12
29/01/2013
Algorithme
crire("Mon algo)
Int main () {
Cout<<"Mon programme";}
001110101011100011
Programation
Compilation
13
- 1958: Algol
- 1960 1970: CPL
BCPL
B
- 1970: C, le langage le plus utilis
- 1983: C++
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
Bjarne Stroustrup
14
29/01/2013
JAVA
C# .NET
PYTHON
RUBY
.
C
If
(a==b){cout
<<a;endl}
BAS NIVEAU
000111001
100110100
011100101
101001011
.
.
.
ASSEMBLEUR
15
- Rpandu: documentation
- Rapidit: jeux, militaires, finances
- Portable: de machine machine
- Bibliothques
- Multi-paradigme: POO
16
29/01/2013
TD
HELLO WORLD
ETAPES:
1) Faire l'algo
2) Ecrire le code l'aide d'un diteur de texte (Bloc Notes, Notepad) et lenregistrer
au format .cpp dans un rpertoire portant votre nom
3) Compiler le code l'aide de Dev C++
4) Lancer la console et excuter le .exe
#include <iostream>
using namespace std;
int main ()
{
cout<<"Hello world";
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
17
TD
/*commentaire long*/
#include <iostream>
using namespace std;
int main ()
{
const float pi=3.14;
float longuer;
char a;
int i;
int j=1;
cout<<"Hello world";
return 0;
}
18
29/01/2013
Les variables
Notion de variable et de type
Notion#1 : un symbole, parfois index,
reprsentant
une
quantit
inconnue
appartenant un ensemble
Notion#2 : associe un nom une valeur donne
Notion#3 : permet de nommer et de mmoriser
les donnes utilises par lalgo
19
Les variables
Les constantes
Une variable de valeur fixe, sa valeur ne sera pas modifie par le programme:
Constante : pi3,14
On les place avant les variables
Laffectation
Dfinition: fonction permettant daffecter la variable de gauche la valeur de
la variable de droite
Exemple : pi3,14
NomMohamed
BnficePrix_Vente-Prix_Achat
20
10
29/01/2013
Les variables
Structures de donnes lmentaires
Il existe plusieurs types de variables, et chacun correspond une taille maximale de
nombre, ou un caractre, ou encore une vrit. Plus le type peut contenir de gros
nombres, plus il utilise de place en mmoire.
21
Les variables
Les oprateurs
Arithmtique:
+ (addition)
- (soustraction)
X (multiplication)
/ (division)
%(modulo): reste de la division
Logiques:
ET (&&)
OU (||)
INVERSE ( !) LOGIQUE(complment)
Comparaison : >, <, >=, <=, == (test dgalit), != (diffrent de)
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
22
11
29/01/2013
Les variables
La porte dune variable
La porte dun identificateur est la partie du programme dans laquelle
lidentificateur peut tre utilis sans provoquer de conflit (erreur de
compilation)
Variable locale : par rapport une portion de programme
Variable globale : par rapport tout le programme
Visibilit : incluse dans la porte (l o elle visible)
Exemple :
{
int i=3 ;
{
int i=5 ;
cout << i ; // affiche 5
}
cout << i ; // affiche 3
}
Les deux variables ont des portes diffrentes !
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
23
Lecture/Ecriture
Lecture : la machine va lire quelque chose en entre
Lutilisateur transmet une donne la machine
Exemple : Saisir( Quel est votre nom :? )
Cocher la case correspondante
24
12
29/01/2013
Lecture/Ecriture
Exemple:
Variables :<Valeur> : rel
//dclarations
Dbut
Ecrire(Donnez moi un chiffre)
//Affichage
Lire(Valeur)
//Saisie
Ecrire(Vous avez saisi :Valeur)
//Affichage
Valeur=ValeurX2
//Traitement
Ecrire(La nouvelle valeur est :Valeur) //Affichage
Fin
25
Lecture/Ecriture
Programme qui calcul laire dun rectangle
#include <iostream>
using namespace std;
int main ()
{
float lo;
float la;
float sr;
cout<<"Longueur:?"<<endl;
cin>>lo;
cout<<"Largeur:?"<<endl;
cin>>la;
sr=lo*la;
cout<<"La surface est:"<<sr<<"\n";
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
26
13
29/01/2013
Lecture/Ecriture
Programme qui calcul laire dun cercle
#include <iostream>
using namespace std;
int main ()
{
const float pi=3.14;
float r;
float sr;
cout<<Rayon:?"<<endl;
cin>>r;
sr=pi*r*r;
cout<<"La surface est:"<<sr<<"\n";
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
27
Exemples:
Cas#1 : Si la moyenne est suprieure 10, afficher Admis, sinon afficher redoublant
Variable : moyenne : rel
dbut
Afficher(Entrez la moyenne :)
Lire(moyenne)
Si moyenne>=10
Alors
Afficher(Admis)
Sinon
Afficher(Redoublant)
FSI
Fin
28
14
29/01/2013
suprieure
moyenne>=10
Afficher(Passable)
Fsi
Sinon
Fsi
Afficher(Insuffisant)
29
Selon <IDENTIFICATEUR>
<Liste de valeur> <INSTRUCTIONS 1>
<Liste de valeur> <INSTRUCTIONS 2>
.
.
. <Autres> <INSTRUCTIONS N>
15
29/01/2013
Syntaxe en algo
Syntaxe en C/C++
SI
If(condition) { instruction}
SI, SINON
If(condition) { instruction}
else {instruction}
SI, SINON SI
If(condition) { instruction}
Else if (condition) {instruction}
SELON QUE
Switch(var)
Case 1: {}
Case 2:{}
dfaut: faire
Default:{}
Tant que
While(condition) {instruction}
Rpter
Do{instructions;
}
While(condition);
Pour
TD
IF, ELSE
#include <iostream>
using namespace std;
int main()
{
int nblivres;
cout<<"Combien de livres avez vous:?"<<endl;
cin>>nblivres;
if (nblivres == 0)
{
cout << "Vous devriez lire en peu plus" << endl;
}
else if (nblivres == 1)
{
cout << "Alors, c'est pour quand le deuxieme ?" << endl;
}
else if (nblivres == 2)
{
cout << "Seulement deux livres!" << endl;
}
else
{
cout << "C'est bien, mais il faut acheter plus de livres!" << endl;
}
cout << "MERCI" << endl;
cin.ignore(); cin.get();
return EXIT_SUCCESS;
return 0;
Algorithmique & programmation C++ : LPRT : S1,
}
M. OULD BECHIR
16
29/01/2013
TD
TD
17
29/01/2013
TD
18
29/01/2013
26
a-b
26
=78-26=52
26
26
26
- Comme Tant que mais linstruction est au moins ralise une fois
- La condition est vrifie aprs lexcution, elle porte sur le rsultat du traitement
-Typique pour les saisies avec vrification
19
29/01/2013
Exemple
20
29/01/2013
EXPLICITEMENT
While(i<=10 ){affiche(i);i=i+1;}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
Traitement
excut au
moins une
fois
OUI
REPTER
OUI
NON
TANT QUE
POUR
21
29/01/2013
Complments:
-Continue : provoque (dans une instruction do, for, ou while) larrt de litration courante
et le passage au dbut de litration suivante.
-Break : provoque larrt de la premire instruction do, for, switch ou while englobant
TD
22
29/01/2013
TD
TD
23
29/01/2013
TD
TDs
1) Dessiner un rectangle
2) Factorielle
3) Multiplication Egyptienne
4) PGCD
5) Triangle de Pascal
TD
TDs
1) Dessiner un rectangle
#include <iostream>
using namespace std;
int main()
{
int largeur, hauteur;
cout << "Largeur du rectangle : ";
cin >> largeur;
cout << "Hauteur du rectangle : ";
cin >> hauteur;
for(int ligne(0); ligne < hauteur; ligne++)
{
for(int colonne(0); colonne < largeur; colonne++)
{
cout << "*";
}
cout << endl;
}
return 0;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
24
29/01/2013
TD
TDs
2) Factorielle
#include <iostream>
using namespace std;
int main()
{
int resultat = 1;
int n;
cout<<"Entrez n:"<<endl;
cin>>n;
for(int i = 1; i <= n; i++)
{
resultat *= i;
//resultat=resultat*i;
}
cout << "La factorielle de:" <<" "<<n<<" "<<"est:"<<" "<<resultat<<endl;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
TD
TDs
3) Multiplication Egyptienne
variables:<a, b>: entiers
Dbut
Tant que a >= 1 faire
Si a est impair alors
On accumule b dans une somme qui sera le rsultat
Fin Si
a devient a/2
b devient b 2
Fin tant que
Fin
25
29/01/2013
TD
TDs
3) Multiplication Egyptienne
Parit de a
13
10
20
40
=5+20+40=65
TD
#include<iostream>
using namespace std;
int main()
{
int a;
int b;
int res=0;
cout<<"Entrez a:"<<endl;
cin>>a;
cout<<"Entrez b:"<<endl;
cin>>b;
while(a>=1)
{
if(a%2==1)
{
res=res+b;
}
a=a/2;
b=2*b;
}
cout<<"La multiplication vaut:"<<res;
return 0;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
26
29/01/2013
TD
TDs
4) PGCD
Variables :<a,b,c> :entiers
Afficher(Donnez le plus grand nombre des deux : a)
Lire(a)
Afficher(Donnez le plus petit nombre des deux : b)
Lire(b)
Tant que a !=b
Si a<b alors changer(a,b)
Fsi
ca-b
a c
Fin Tant que
Afficher(le PGCD est : a)
TD
TDs
4) PGCD
a-b
78
26
=78-26=52
52
26
26
26
26
27
29/01/2013
TD
#include<iostream>
using namespace std;
int main()
{
int a;
int b;
int c=0;
int d=0;
cout<<"Donnez a:"<<endl;
cin>>a;
cout<<"Donnez b:"<<endl;
cin>>b;
while (a!=b)
{
if(a<b)
{
c=a;
a=b;
b=c;
}
d=a-b;
a=d;
}
cout<<"le PGCD est:"<<a<<endl;
return 0;
}
TDs
4) PGCD
TD
TDs
5)Triangle de PASCAL
0
1
2
3
4
1
1
1
1
1
1
2
3
4
1
3
6
1
4
(K)
.
.
(n)
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
28
29/01/2013
TD
TDs
5)Triangle de PASCAL
C nk =
n!
n!(n k + 1)
=
k!(n k )! k (k 1)!(n k + 1)(n k )!
C nk =
( n k + 1) k 1
Cn
k
TD
TDs
5)Triangle de PASCAL
#include<iostream>
using namespace std;
int main()
{
int n, i, j, x;
cout<<"Entrez le nombre de lignes que vous voulez afficher:"<<endl;
cin>>n;
for(i=0;i<=n-1;i++)
{
x=1;
cout<<x<<" ";
for(j=1;j<=i;j++)
{
x=x*(i-j+1)/j;
cout<<x<<" ";
}
cout<<"\n";
}
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
29
29/01/2013
TD
#include<iostream>
//#include<cmath> // #include<math.h>
using namespace std;
int main()
{
float r=10;
float rc=sqrt(r);
float z=exp(r);
float v=log(r);
float x=sin(r);
float y=cos(r);
float w=asin(r);
float t=acos(r);
float s=pow(r,2);
cout <<"La racine est:" <<rc << endl;
cout <<"L'exponentielle est:" <<z << endl;
cout <<"Le logarithme est:" <<v << endl;
cout <<"Le sinus est:" <<x << endl;
cout <<"Le cosinus est:" <<y << endl;
cout <<"L'arcsinus est:" <<w << endl;
cout <<"L'arccosinus est:" <<t << endl;
cout <<"La puissance 2 est:" <<s << endl;
return 0;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
Les tableaux
Structure de donnes permettant de rassembler un ensemble de donnes
de mme type dans une seule variable en les diffrenciant par un indice
qui varie de 0 taille_tab-1
Tableau statique 1D
Tableau dont la taille est fixe
Dclaration : TYPE NOM [taille]
int const taille=10 ;
float Notes[taille] ;
Pour accder un lment :
Notes[indice] ;
60
30
29/01/2013
Les tableaux
Tableau statique 1D/remplissage
Remplissage dun tableau par lutilisateur
Pour i=0 taille-1
Afficher(Entrez llment n :i+1 :)
Lire(x)
Notes[i]x
Fin pour
61
Les tableaux
Tableau statique 1D/initialisation
Initialiser un tableau
int Notes[4]={2,3,4,1} //Notes[0]=2, Notes[1]=3, Notes[2]=4, Notes[3]=1
int Notes[4]={2,3}
// Notes[0]=2, Notes[1]=3, Notes[2]=0, Notes[3]=0
int Notes[4]={0}
// Notes[0]=0, Notes[1]=0, Notes[2]=0, Notes[3]=0
int Notes[4]={1}
// Notes[0]=1, Notes[1]=0, Notes[2]=0, Notes[3]=0
62
31
29/01/2013
Les tableaux
TD
63
Les tableaux
Tableau dynamique 1D
Tableau dont la taille peut varier
Dclaration : Vector<type> NOM(taille)
#include <vector>
int const taille=10 ;
Vector<float> Notes(taille) ;
Tableau dynamique/remplissage
Affectation
vector<int> Notes(5, 3); //Cre un tableau de 5 entiers valant tous 3
vector<double> Notes; //Cre un tableau de 0 nombres virgules
64
32
29/01/2013
Les tableaux
Tableau dynamique 1D/parcours
On le remplit et on le parcours de la mme faon que pour un tableau statique
Notes[i]
Connaitre la taille :
Notes.Size()
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
65
Les tableaux
TD
double moyenne(0);
for(int i(0); i<notes.size(); ++i)
//On utilise notes.size() pour la limite de notre boucle
{
moyenne += notes[i];
//On additionne toutes les notes
}
moyenne /= notes.size();
//On utilise nouveau notes.size() pour obtenir le nombre de notes
cout << "Votre moyenne est : " << moyenne << endl;
}
66
33
29/01/2013
Les tableaux
Tableau multidimensionnel ND
Tableau de tableaux 2D
Dclaration : TYPE NOM [taillex][tailley]
int const taillex=5 ;
int const tailley=4 ;
float Matrice [5][4]
00
10
20
30
01
11
21
31
02
12
22
32
03
13
23
33
04
14
24
34
Tableau de tableaux ND
Dclaration : TYPE NOM [taillex][tailley].[taillez]
int const taillex=5 ;
int const tailley=6 ;
.
int const taillez=n ;
float Grille [5][6][n]
Programmation
vnementielle & rseau :
67
Les tableaux
TD
int main()
{
for(int y = 0; y < 3; y++)
{
for(int x = 0; x < 3; x++)
cout << tabl[x][y] << '\t';
cout << endl;
}
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}
68
34
29/01/2013
Les tableaux
La Classe STRING
String en Anglais : Chaine de caractres Chaine de caractres=tableau de caractres !!
Dclaration :
#include<string>
String nom(Mohamed) ;
Taille:
69
Les tableaux
TD
70
35
29/01/2013
Les tableaux
TD
TDs
#include<iostream>
using namespace std;
int main() //remplissage sans boucle
{
int tableau[8]= {10, 4, 5, 2, 1, 7, 10, 3};
}
Int table[5];
Vector<int> tab(5);
Tab.size();
EXERCICES:
1) Remplissage/Lecture dun tableau
2) Recherche du min dans un tableau
3) Recherche du max dans un tableau
4) Recherche d'une valeur dans un tableau
5) Triangularisation de Gauss (A faire en plus)
71
Les tableaux
TDs
TD
#include<iostream>
using namespace std;
// Tableau statique
int main()
{
int n=0,x;
int tableau[0];
cout <<"Entrez la taille du tableau:"<< endl;
cin>>n;
for(int i = 0; i < n; i++)
{
cout <<"Entrez l'lment"<<i+1<< endl;
cin>>x;
tableau[i]=x;
}
#include <iostream>
#include<vector>
using namespace std;
// Tableau dynamique
int main()
{
vector<int> elements;
int j=0;
int nbelements=elements.size();
72
M. OULD BECHIR
36
29/01/2013
Les tableaux
TDs
TD
73
M. OULD BECHIR
Les tableaux
TDs
TD
74
M. OULD BECHIR
37
29/01/2013
Les tableaux
TDs
TD
75
M. OULD BECHIR
Mmoire
2
0x22ff1c
Un pointeur est une variable qui contient l'adresse d'une autre variable
gestion manuelle de la mmoire
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
76
38
29/01/2013
&
int *pointeur;
77
ptr
ptr=&i;
Mmoire
2
6
6
9
78
39
29/01/2013
ptr
Mmoire
2
6
6
9
1)
2)
3)
4)
5)
79
M. OULD BECHIR
80
40
29/01/2013
Variable
0x22ff30
0x22ff34
0x22ff38
0x22ff3c
81
82
41
29/01/2013
83
//fonction
//procdure
84
42
29/01/2013
x 3
y 2
a 3
b 2
aux 2
b 3
a 2
x 3
(1)
(2)
(3)
(4)
(5
(6)
85
(5)
(1)
x a
y b
aux
(3)
(4)
(5)
(6)
(1), (2)
(6)
86
43
29/01/2013
87
88
44
29/01/2013
89
La rcursivit
Dfinition :
Une fonction rcursive est une fonction qui sappelle elle-mme.
F(F(x))
Dfinition :
Chaque fonction rcursive doit inclure un bloc dinstructions appel
point darrt qui permet darrter la fonction
Mthodologie :
Pour crire une fonction rcursive, il faut :
-Identifier les cas particuliers
-Identifier la condition darrt de la boucle
-Identifier le cas gnral (gnrique)
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
90
45
29/01/2013
La rcursivit
Exemples
Factorielle:
int Fact(int n)
// AVEC UNE BOUCLE
{
int resultat = 1;
for(int i = 1; i <= n; i++)
resultat *= i;
return resultat;
}
int Fact(int n) // AVEC LA RECURSIVITE
{
if(n == 1)
return 1;
else
return (n*Fact(n-1));
}
Somme de a et b:
#include<iostream>
using namespace std;
int somme(int a, int b)
{
if(b==0)
{
return a;
}
else return somme(a+1,b-1);
}
91
La rcursivit
Exemples
Algorithme du PGCD :
#include<iostream>
using namespace std;
void Echanger(int &i, int &j) //Procdure ECHANGER
{
int aux;
aux=i;
i=j;
j=aux;
}
int pgcd(int &a, int &b)
{
int d=0;
while (a!=b)
{
if(a<b)
{ Echanger(a, b); }
d=a-b;
a=d;
pgcd(a,b);
}
return a; }
//pgcd rcursif
int main()
{
int a,b;
cout<<"Donnez a:"<<endl;
cin>>a;
cout<<"Donnez b:"<<endl;
cin>>b;
int r=pgcd(a,b);
cout<<"le PGCD est:"<<r<<endl;
}
92
46
29/01/2013
Les tris
Tri bulles
Principe:
Slectionner le minimum du tableau en parcourant le tableau de la fin au dbut et
en changeant tout couple d'lments conscutifs non ordonns.
Algo.:
variables: int i; int j, int n, Tableau T
Pour i=0 n-1 faire
Pour j=n-1 i+1 faire
si (T[j]<T[j-1]) alors changer (T[j], T[j-1])
Fsi
Fpour
Fpour
93
Les tris
Tri bulles
Exemple
T={12, 10, 5, 3}
i=0
{12, 10, 5, 3}
j=3
{12, 10, 3, 55}
j=2
{12, 3, ,10, 5}
j=1
{3, 12, 10, 5}
i=1
{3, 12, 10, 5}
j=3
{3, 12, 5, 10}
j=2
{3, 5, 12, 10}
i=2
{3, 5, 12, 10}
j=3
{3, 5, 10, 12}
i=3
{3, 5, 10, 12}
Nombe de permutations:
k =n(n-1)/2
k=1
Complexit: O(n2)
94
47
29/01/2013
Les tris
Tri bulles
#include<iostream>
using namespace std;
int main()
{
Programme
95
M. OULD BECHIR
Les tris
Tri par slection
Principe
Commencer par changer chaque deux lments successifs en les ordonnant et en
effectuant n passage.
Algo.:
variables: int i; int j, int n, Tableau T
Pour i=1 n faire
Pour j=0 n-2 faire
si (T[j]<T[j+1]) alors changer (T[j], T[j+1])
Fsi
Fpour
Fpour
96
48
29/01/2013
Les tris
Tri par slection
Exemple
T={5, 10, 3, 12}
i=1
{5, 10, 3, 12}
j=0
{10, 5, 3, 12}
j=1
{10, 5, 3, 12}
j=2
{10, 5, 12, 3}
i=2
{10, 5, 12, 3}
j=0
{10, 5, 12, 3}
j=1
{10, 12 , 5, 3}
j=2
{10, 12, 5, 3}
i=3
{10, 12, 5, 3}
j=0
{12, 10, 5, 3}
j=1
{12, 10 , 5, 3}
j=2
{12, 10, 5, 3}
Complexit: O(n2)
97
Les tris
Tri par slection
Programme
#include <iostream>
Using namespace std;
int main()
{
int tabl[] = {10, 4, 5, 2, 1, 7, 10, 3};
int longueur = sizeof(tabl) / sizeof(int);
int temp = 0;
for(int i = 1; i <= longueur; i++)
for(int j = 0; j < longueur - 1; j++)
if(tabl[j] < tabl[j+1])
{
temp = tabl[j];
tabl[j] = tabl[j+1];
tabl[j+1] = temp;
}
while(longueur--)
cout << tabl[longueur] << endl;
}
98
49
29/01/2013
Les tris
Tri par minimums successifs
Principe
Pour une place donne, on slectionne l'lment qui doit y tre positionn.
De ce fait, si on parcourt la tableau de gauche droite, on positionne chaque fois
le plus petit lment qui se trouve dans le sous tableau droit
Algo.:
Algo.:
99
Les tris
Tri par minimums successifs
Programme
int main()
{
int tabl[] = {10, 4, 5, 2, 1, 7, 10, 3};
int longueur = sizeof(tabl) / sizeof(int);
TriMinSuccessif(tabl,longueur);
for(int k=0;k<=7;k++) //Affichage
cout<< tabl[k] << endl;
}
100
50
29/01/2013
Les tris
Tri rapide (pivot): rcursif
Principe
Choisir un lment du tableau appel pivot,
Ordonner les lments du tableau par rapport au pivot
Appeler rcursivement le tri sur les parties du tableau gauche et droite du pivot.
Algo.:
Variables : int i, int j, int pivot, tableau T
Procdure TriRapide(int T[]; int gauche; int droite)
Dbut
i=gauche;
j=droite;
pivot=T[(i+j)/2];
Rpter tant que T[i]<pivot faire i=i+1 Fin tq
tant que T[j]>pivot faire j=j-1 Fin tq
si(i<=j) alors echanger(T[i],T[j])
i=i+1;
j=j-1;
Fsi
jusqu' ce que i>j
si(gauche<j) alors TriRapide(T, gauche, j) Fsi
si(i<droite) alors TriRapide(T, i, droite) Fsi
Fin
Algorithmique & programmation C++ : LPRT : S1,
101
M. OULD BECHIR
Les tris
Tri rapide (pivot): rcursif
#include<iostream>
using namespace std;
void TriRapide(int T[],int &gauche, int &droite)
{
int i =gauche;
int aux=0;
int main()
int j=droite;
{
//int j= (sizeof(T) / sizeof(int))-1;
int tabl[] = {10, 4, 5, 2, 1, 7, 10, 3};
int pivot=T[(i+j)/2];
do {
int gauche=0;
while(T[i]<pivot){i=i+1;}
int droite= (sizeof(tabl) / sizeof(int))-1;
while(T[j]>pivot) {j=j-1;}
TriRapide(tabl, gauche, droite);
if(i<=j){
for(int k=0;k<=7;k++) //pour le tri croissant
aux=T[i];
cout<< tabl[k] << endl;
T[i]=T[j];
}
T[j]=aux;
i=i+1;
j=j-1;
}
}
while(i<=j);
if(gauche<j){TriRapide(T,gauche,j);}
if(i<droite){TriRapide(T,i,droite);}
}
Programme
102
51
29/01/2013
Algorithmes clbres!!!
1) Tour de Hanoi
103
Algorithmes clbres!!!
2) Recherche dichotomique
Exemple:
Recherche d'un lment dans un tableau tri:
i) On coupe le tableau en deux
ii) On restreint la recherche la partie ou se trouve l'lment
iii) Et ainsi de suite
104
52
29/01/2013
Algorithmes clbres!!!
3) Algorithme de Fourmis: voyageur du commerce
105
Algorithmes clbres!!!
4) Problme d'Einstein:5 Hommes, 5 maisons, 5 fumeurs
On a cinq maisons alignes de couleurs diffrentes.
Dans chaque maison vit une personne de nationalit diffrente.
Chaque personne boit une boisson diffrente.
Chaque personne fume un type de cigarette diffrent.
Chaque personne lve un animal diffrent.
Il faut trouver qui lve les poissons.
Indices :
1) L'anglais vit dans la maison rouge
2) Le sudois lve des chiens
3) Le danois boit du th.
4) La maison verte est juste gauche de la maison blanche.
5) Le propritaire de la maison verte boit du caf.
6) Le fumeur de Pall Mall lve des oiseaux.
7) Le propritaire de la maison jaune fume des Dunhills.
8) L'homme qui vit dans la maison du centre boit du lait.
9) Le norvgien vit dans la premire maison.
10) L'homme qui fume des Blends vit ct de celui qui lve des chats.
11) L'homme qui lve des chevaux vit ct du fumeur de Dunhills.
12) L'homme qui fume des Blue Masters boit de la bire.
13) L'allemand fume des Prince.
14) Le norvgien vit ct de la maison bleue.
15) L'homme qui fume des Blends a un voisin qui boit de l'eau.
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR
106
53
29/01/2013
Rfrences bibliographiques
107
54