Vous êtes sur la page 1sur 54

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmique & programmation


C++
LPRT : L1 : S1
Moustapha OULD BECHIR
Ingnieur, consultant en EEI
2012/2013

Algorithmique & programmation C++: LPRT : S1


M. OULD BECHIR: mobechir@yahoo.fr

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
I. Dfinitions

Dfinition #1 : une suite dinstructions,


qui une fois excute correctement
conduit un rsultat

Origine : mot arabe driv du nom


du grand savant Al Khawarizmi (9me
sicle), qui a mis en place un
algorithme pour la multiplication
par glissement

Dfinition #2: lexpression de la


rsolution dun problme de sorte que
le rsultat soit calculable par une
machine
Dfinition #2(Petit Robert): suite finie
squentielle de rgles que lon
applique un nombre fini de donnes,
permettant de rsoudre des classes de
problmes semblables

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction
II. Objectifs
Objectif #1 : Obtenir de la machine
quelle fasse un travail notre
place

Objectif #2 : Automatiser certaines


tches

Objectif #3 : les mmes effets


produisent les mmes rsultats !!!
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

Introduction
IV. Problmatique
#1 : Modlisation : peut-on
modliser le problme

#2 : Rsolution : y a-t-il une


solution

Faire
ceci
indpendamment
du
langage et de la machine

#3 : Complexit : temps et espace

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
IV. Ce quil faut pour faire un bon algo
Condition#1 : Intuition

Condition#2 : Mthodologie

Expliciter
et
formaliser son
raisonnement

Condition#3 : Rigueur

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Etape#5 : Edition des rsultats

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
VI. Un premier algo
Problme : calculer laire dun rectangle
variables:<La, Lo, S>: rels
Dbut

Donnes : Longueur, Largeur


Traitement : Aire=LoXLa
Rsultat : Affichage dAire

Ecrire(donnez la longueur )
Lire(lo)
Ecrire(donnez la largeur )
Lire(la)
S=LaXLo
Ecrire(La surface est: S)
Fin

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

10

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Programme informatique
Q : Qu'est ce que c'est un programme informatique ?

R : traduction dans un langage de programmation d'un


algorithme (code)

Mais la machine ne comprend


toujours pas le code!!!

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

11

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Langage de programmation
Q : Qu'est ce que c'est un langage de programmation ?

R: Ensemble de symboles et de rgles permettant de


combiner ces symboles afin de donner des instructions un
ordinateur
R: code intermdiaire entre le langage machine et les
langages externes(algo)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

12

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Schmatisation

Algorithme
crire("Mon algo)

Programme crit dans


un langage (C++)

Code binaire adress


la machine

Int main () {
Cout<<"Mon programme";}

001110101011100011

Programation

Compilation

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

13

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Un peu dhistoire

Quand il n'y avait


pas de clavier

- 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

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Langage de bas et haut niveau
HAUT NIVEAU

Q: Par rapport quoi?

JAVA
C# .NET
PYTHON
RUBY
.
C

If
(a==b){cout
<<a;endl}

BAS NIVEAU
000111001
100110100
011100101
101001011

.
.
.

ASSEMBLEUR

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

15

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Forces du C++

- Rpandu: documentation
- Rapidit: jeux, militaires, finances
- Portable: de machine machine
- Bibliothques
- Multi-paradigme: POO

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

16

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Interaction avec la machine

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

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++

TD

Structure dun programme C++


// commentaires

/*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;
}

/* inclure la bibliothque iostream Input Output Stream qui contient les


fonctions cout et cin*/
// espaces de nom standard, par dfaut
// la fonction principale, chaque programme doit en contenir une
// corps de la fonction et traitement
// dclaration dune constante
//dclaration dune variable

// initialisation dune variable


// appel dune fonction
//retourne 0 si tout sest bien pass
// fin du programme
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

18

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

VARIABLES : <Liste didentificateurs> : TYPE


Exemple : VARIABLES< a,b > : rels
Nom : caractre

Notion#4 : instruction permettant de rserver


de lespace mmoire pour stocker des donnes
Notion#5 (TYPE) : Ensemble de valeurs
possibles pour la variable
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

19

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

20

10

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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.

Rel : float, double


Entier : integer
Boolen : bool
Caractre : char

Utilisent de 1 8 octets selon la


longueur
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

21

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

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

Ecriture: la machine va afficher quelque chose en sortie


La machine renvoie un rsultat lutilisateur
Exemple : Afficher(votre solde est de : XXXUM)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

24

12

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

25

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures conditionnelles: SI, ALORS, SINON, SELON QUE
SI <CONDITIONS> <INSTRUCTIONS 1>
SINON <INSTRUCTIONS 2>
Fin SI
Si les conditions 1 sont vraies, alors on excute le bloc dinstructions 1,
sinon on excute le bloc dinstructions 2

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures conditionnelles: SI, ALORS, SINON, SELON QUE
Exemples:
Cas#2 : Si la moyenne est suprieure 10 et infrieure 12, afficher Passable, si elle
12 afficher Mention, sinon afficher Insuffisant

suprieure

Variable : moyenne : rel


Afficher(Entrez la moyenne :)
Lire(moyenne)
Si moyenne>=12
Alors Afficher(Mention)
Sinon
Si

moyenne>=10
Afficher(Passable)

Fsi
Sinon
Fsi

Afficher(Insuffisant)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

29

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures conditionnelles: SI, ALORS, SINON, SELON QUE
Selon que

Selon <IDENTIFICATEUR>
<Liste de valeur> <INSTRUCTIONS 1>
<Liste de valeur> <INSTRUCTIONS 2>
.
.
. <Autres> <INSTRUCTIONS N>

Selon que <nombre de livres>


Cas <0> : Afficher(vous ne lisez pas du
tout !)
Cas <1> : Afficher(vous ne lisez pas assez)
Cas <2> : Afficher(vous devriez lire plus)
Cas <3> : Afficher(ce nest pas suffisant)
Cas <4> : Afficher(lisez en peu plus)

Permet une facilit dcriture en cas de


plusieurs cas

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

15

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures de contrle : correspondances algo. C++
Structure

Syntaxe en algo

Syntaxe en C/C++

SI

Si <condition> alors <instruction> FSI

If(condition) { instruction}

SI, SINON

Si <condition> alors <instruction> SINON


alors <instruction> FSI

If(condition) { instruction}
else {instruction}

SI, SINON SI

Si <condition> alors <instruction> SINON


SI (condition) alors <instruction> FSI

If(condition) { instruction}
Else if (condition) {instruction}

SELON QUE

Selon que cas 1: faire


cas 2:faire

Switch(var)
Case 1: {}
Case 2:{}

dfaut: faire
Default:{}
Tant que

Tant que <condition> alors


<instruction> FTantque

While(condition) {instruction}

Rpter

Rpter <instruction> Tant que /jusqu ce que


<condition>

Do{instructions;
}
While(condition);

Pour

Pour var de< limite_inf> <limite_sup> par pas de


For(i=1;i<=k;i++){instruction}
<pas> faire Fpour
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Les structures conditionnelles:


Exercices de 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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Programmation dun switch


CdC: faire un menu, qui propose l'utilisateur:
1: Addition de deux nombres
2: Multiplication de deux nombres
3: Division de deux nombres
4: Quitter
#include <iostream>
using namespace std;
int main()
{
int choix;
float a,b,s,p,d;
cout<<"Faites votre choix:?"<<endl;
cout<<"1: Addition"<<endl;
cout<<"2: Multiplication"<<endl;
cout<<"3: Division"<<endl;
cout<<"4: Sortir"<<endl;
cin>>choix;

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Programmation dun switch (suite)


switch (choix)
{
case 1:
cout<<"Entrez a:"<<endl;
cin>>a;
cout<<"Entrez b:"<<endl;
cin>>b;
s=a+b;
cout << "La somme des deux chiffres est:" <<s<< endl;
break;
case 2:
cout<<"Entrez a:"<<endl;
cin>>a;
cout<<"Entrez b:"<<endl;
cin>>b;
p=a*b;
cout << "Le produit des deux chiffres est:" <<p<< endl;
break;
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

17

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Programmation dun switch (suite)


case 3:
cout<<"Entrez a:"<<endl;
cin>>a;
cout<<"Entrez b:"<<endl;
cin>>b;
d=a/b;
cout << "La division de :" <<a<<" "<<"Par"<<" "<<b<<" "<<"est:"<<d<< endl;
break;
case 4;
cout << "Au revoir, merci d'avoir utilis le programme" << endl;
break;
default:
cout << "Vous avez rentr une mauvaise valeur!!"<< endl;
break;
}
return 0;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: TANT QUE, REPETER, POUR
TANT QUE : WHILE
<Initialisations>:
// valeurs initiales des variables
Tant que <CONDITIONS> <INSTRUCTIONS 1>
Ftantque

- Rpte les instructions tant que la condition de la boucle est vraie.


-Les instructions de la boucle peuvent ne pas tre excutes
-Utilise pour faire un nombre inconnu ditrations mais fini
-La condition doit devenir fausse aprs un certain nombre ditrations

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

18

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: TANT QUE, REPETER, POUR
TANT QUE : WHILE
Exemple
Faire la main
174 et 72

Algorithme dEuclide : calcul du PGCD de deux entiers


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)
a
b
Fsi
ca-b
78
a c
Fin Tant que
52
Afficher(le PGCD est : a)

26

a-b
26

=78-26=52

26

26

26

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: TANT QUE, REPETER, POUR
REPETER: DO WHILE
<Initialisations>:// valeurs initiales des variables
Rpter <INSTRUCTIONS >
Tant que <CONDITIONS>

- 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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

19

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: TANT QUE, REPETER, POUR
REPETER: DO WHILE
Exemple
Constante : mdp=TARZAN // initialisation
Rpter
Afficher(Entrez votre mot de passe :)
Lire(mot de passe)
Tant que mot de passe !=mdp
Afficher(Votre mot de passe est incorrect)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: TANT QUE, REPETER, POUR
POUR: FOR
<Initialisations>:// valeurs initiales des variables
POUR <COMPTEUR > de <Valeur initiale> <valeur finale> pas de <pas>
<INSTRUCTIONS>
Fin Pour
- Si le nombre ditrations est connu davance
-On peut inverser le sens de parcours de la boucle
-On peut modifier le pas de sa valeur par dfaut (1)

Exemple

Affiche les dix premiers entiers


Pour i=1 10 pas de 1
Afficher(i :)
Fin Pour

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

20

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: SEMANTIQUE
for(i=1 ;i<=10 ;i++)
IMPLICITEMENT

- Initialise le compteur (Amorage)


-Incrmente le compteur chaque passage (Relance)
-Vrifie que la nouvelle valeur du compteur est dans lintervalle dfini (Condition)

EXPLICITEMENT
While(i<=10 ){affiche(i);i=i+1;}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Les structures itratives: CHOIX ?
Nombre
ditrations
connu
NON

Traitement
excut au
moins une
fois

OUI

REPTER

OUI

NON

TANT QUE

POUR

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

21

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


Post et pr incrmentation:
++i : incrmente i et retourne la nouvelle valeur (i=i+1)
i++ : incrmente i et retourne lancienne valeur (i=(i+1)-1)
--i : dcrmente i et retourne la nouvelle valeur (i=i-1)
i-- : dcrmente i et retourne lancienne valeur (i=(i-1)+1)
i(+,/,*) : additionne divise, multiplie i et i : (i=i+i, i=i/i, i=i*i)

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Programmation dun compteur


CdC: Un programme qui affiche les entiers de 0 10 en ordre croissant
Cas 1: while
#include<iostream>
using namespace std;
int main()
{
int compteur=0;
const int limit=10;
while(compteur<=limit)
{
cout << compteur << endl;
compteur=compteur+1;
}
return 0;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

22

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Programmation dun compteur


CdC: Un programme qui affiche les entiers de 0 10 en ordre croissant
Cas 2: do while
#include<iostream>
using namespace std;
int main()
{
int compteur(0);
int limit=10;
do
{
cout << compteur << endl;
compteur=compteur+1;
}
while(compteur<=limit);
return 0;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

Programmation dun compteur


CdC: Un programme qui affiche les entiers de 0 10 en ordre croissant
Cas 3: for
#include<iostream>
using namespace std;
int main()
{
int compteur(0);
for (compteur = 0 ; compteur <= 10 ; compteur++)
{
cout << compteur << endl;
}
return 0;
}
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

23

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

TDs
1) Dessiner un rectangle
2) Factorielle
3) Multiplication Egyptienne
4) PGCD
5) Triangle de Pascal

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

25

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

TDs
3) Multiplication Egyptienne

Parit de a

13

10

20

40
=5+20+40=65

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


TDs
3) Multiplication Egyptienne

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

TD

TDs
4) PGCD

a-b

78

26

=78-26=52

52

26

26

26

26

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

27

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives

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

Institut Universitaire Professionnel de Nouakchott

Les structures de contrle : conditionnelles & itratives


TDs
Fonctions mathmatiques

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

Institut Universitaire Professionnel de Nouakchott

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] ;

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

60

30

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Tableau statique 1D/affichage


Parcourir un tableau par lutilisateur
Pour i=0 taille-1
Afficher(Notes[i])
Fin pour
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

61

Institut Universitaire Professionnel de Nouakchott

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

Exemple: calcul dune moyenne de notes


Ecrire un programme qui demande lutilisateur le nombre de notes, puis
linvite les saisir une aprs lautre et affiche la fin la moyenne.

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

62

31

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux

TD

Exemple: calcul dune moyenne de notes


#include <iostream>
using namespace std;
int main()
{
int nombreNotes=1;
double notes[nombreNotes];
double somme(0);
double moyenne(0);

// Initialisation de la taille du tableau

cout<<"Entrez le nombre de notes:"<<endl;


cin>>nombreNotes;
for(int i(0); i<nombreNotes; ++i)
{
cout<<"Donnez la note:"<<i<<endl;
cin>> notes[i];
somme += notes[i];
}
moyenne=somme/nombreNotes;
cout << "Votre moyenne est : " << moyenne << endl;

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

63

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

64

32

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
Tableau dynamique 1D/parcours
On le remplit et on le parcours de la mme faon que pour un tableau statique
Notes[i]

Tableau dynamique/changer la taille initiale


Changer la taille :
vector<int> tableau(3,2); //Un tableau de 3 entiers valant tous 2
tableau.push_back(8); //On ajoute une 4me case au tableau. Cette case contient la valeur 8
tableau.pop_back(); //On supprime la dernire case

Connaitre la taille :
Notes.Size()
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

65

Institut Universitaire Professionnel de Nouakchott

Les tableaux

TD

Tableau dynamique 1D/changement de taille


#include <iostream>
#include <vector> //Ne pas oublier !
using namespace std;
int main()
{
vector<double> notes;
notes.push_back(12.5);
notes.push_back(19.5);
notes.push_back(6);
notes.push_back(12);

//Un tableau vide


//On ajoute des cases avec les notes

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;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

66

33

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

LPRT : S4, M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tableaux

TD

Exemple: Tableau multidimensionnel 2D/remplissage


#include<iostream>
using namespace std;
int tabl[3][3] = {{4, 3, 6},{10, 0, 0},{-1, 5, 3}};

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;
}

Programmation vnementielle & rseau :


LPRT : S4, M. OULD BECHIR

68

34

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
La Classe STRING
String en Anglais : Chaine de caractres Chaine de caractres=tableau de caractres !!
Dclaration :

#include<string>
String nom(Mohamed) ;

Accs une lettre:


Nom[0]=M
Concatnation :
String nomcomplet=nom+ +string prenom
nom.size()

Taille:

Programmation vnementielle & rseau :


LPRT : S4, M. OULD BECHIR

69

Institut Universitaire Professionnel de Nouakchott

Les tableaux

TD

La Classe STRING/Quelques fonctions


#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1,s2,s3;
string str=Exemple dutilisation de substr.;
size_t pos;
cout << "Tapez une chaine de caractres : "; getline (cin, s1);
cout << "Tapez une chaine de caractres : "; getline (cin, s2);
s3=s1+s2;
cout << "Voici la concatenation des 2 chaines :" << endl; // Affichera un espace entre les deux chaines
cout << s3 << endl;
int taille=s1.size();
// Pour connaitre la taille de la chaine
cout << "La chaine comporte :"<<taille<<"caractres";
s3=str.substr(5,10);
cout<<s3;
pos = str.find("utilisation"); //renvoie la position de utilisation dans le texte
String str3 = str.substr (pos);
// affiche le texte partir de utilisation jusqu' la fin
Programmation vnementielle & rseau :
LPRT : S4, M. OULD BECHIR

70

35

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

71

Institut Universitaire Professionnel de Nouakchott

Les tableaux
TDs

TD

1) Remplissage/Lecture dun tableau 1D

#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();

cout<<"Entrez le nouveau nombre d'lments:"<<endl;


cin>>nbelements;
for(int i(0); i<nbelements; i++)
{
cout<<"Donnez l'lement:"<<" "<<i<<endl;
cin>>j;
elements.push_back(j);
}

for(int i = 0; i <n; i++)


{
cout <<"L'lment" <<" "<<i+1<<" "<<"est:
"<<" "<<tableau[i]<< endl;
}
}
}
Algorithmique & programmation C++ : LPRT : S1,

72

M. OULD BECHIR

36

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
TDs

TD

2) Recherche du minimum dans un tableau


#include<iostream>
using namespace std;
int main()
{
int n=0,x;
int tableau[n];
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;
}
int ppt=x;
for(int i = 0; i <n; i++)
{
if(ppt>=tableau[i])
{ //recherche du min
ppt=tableau[i];
}
}
cout <<"Le plus petit lment" <<" "<<"est:"<<" "<<ppt<< endl;
Algorithmique & programmation C++ : LPRT : S1,
}

73

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tableaux
TDs

TD

3) Recherche du maximum dans un tableau


#include<iostream>
using namespace std;
int main()
{
int n=0,x;
int tableau[n];
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;
}
int pgd=x;
for(int i = 0; i <n; i++)
{
if(pgd<=tableau[i])
{ //recherche du max
pgd=tableau[i];
}
}
cout <<"Le plus grand lment" <<" "<<"est:"<<" "<<pgd<< endl;
Algorithmique & programmation C++ : LPRT : S1,
}

74

M. OULD BECHIR

37

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
TDs

TD

4) Recherche dune valeur dans un tableau


#include<iostream>
using namespace std;
const int N=5;
int main()
{
int t[N],i,val;
bool trouve;
for(i=0;i<N;i++) //Remplissage du tableau
{cout<<"Entrez l'lment"<<" "<<i+1<<endl;
cin>>t[i];}
cout<<"Entrez la valeur rechercher : ";//Saisie de l'entier rechercher
cin>>val;
trouve=false;
i=0;
while(!trouve && i<N){
if(t[i]==val)
trouve=true;
else i++;}
if(trouve) cout<<"La valeur se trouve dans le tableau"<<endl;
else cout<<"La valeur ne se trouve pas dans le tableau"<<endl;
return 0;
Algorithmique & programmation C++ : LPRT : S1,
}

75

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les rfrences & les pointeurs


La dclaration dune variable, permet de coller une tiquette sur un
emplacement dans la mmoire
int i=2;

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

Institut Universitaire Professionnel de Nouakchott

Les rfrences & les pointeurs


*

&

Un pointeur est typ:

int *pointeur;

*i: reprsente l'adresse mmoire de la variable i


 Pointeur
&i: dsigne l'objet point par le pointeur i
 Rfrence
double *pointeurA;
//Un pointeur qui peut contenir l'adresse d'un nombre a virgule
unsigned int *pointeurB;
//Un pointeur qui peut contenir l'adresse d'un nombre entier positif
string *pointeurC;
//Un pointeur qui peut contenir l'adresse d'une chane de caractres
int const *pointeurD; //Un pointeur qui peut contenir l'adresse d'un nombre entier constant

Initialisation des pointeurs


double *pointeurA=NULL;
unsigned int *pointeurB=NULL;
string *pointeurC=NULL;
int const *pointeurD=NULL;

La case 0, n'existe pas


 le pointeur ne contient ladresse daucune case
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

77

Institut Universitaire Professionnel de Nouakchott

Les rfrences & les pointeurs


Droulement 1
int i=2;
int * ptr(0);

ptr

ptr=&i;

Mmoire
2

6
6
9

Cout<<"La valeur de i est:"<<i;


Cout<<"L'adresse de i est:"<<&i;
Cout<<"La valeur de i est aussi:"<<*ptr;
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

78

39

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les rfrences & les pointeurs


Droulement 2
Cout<<*ptr;

ptr

Mmoire
2

6
6
9

1)
2)
3)
4)
5)

Aller dans la case mmoire nomme ptr


Lire la valeur enregistre
Suivre la flche pour aller l'adresse pointe
Lire la valeur stocke
Algorithmique & programmation C++ : LPRT : S1,
Afficher cette valeur

79

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les rfrences & les pointeurs


Exercice
1) Dclaration de pointeurs et de rfrences et impression
#include <iostream>
using namespace std;
int main() {
float note(16); //dclaration d'une variable de type rel
float *ptr(0); //dclaration d'un pointeur pouvant pointer vers une variable de type rel
ptr = &note; // pointage du pointeur ptr vers la variable note
cout << "La valeur de note est : " << note<< endl;
cout << "L'adresse de la variable note est : " << &note<< endl;
cout << "La valeur du pointeur est : " << ptr << endl;
cout << "La valeur de la variable pointe (qui est note) est : " <<* ptr << endl;
*ptr +=2; // modification de note en passant par le pointeur
cout << "La nouvelle valeur de note est : " << note<< endl;
cout << "L'adresse de la variable note est toujours : " << &note<< endl;
return 0;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

80

40

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les rfrences & les pointeurs


Exercice: Les tableaux et les pointeurs
2) Dclaration d'un tableau et affichage de ses lments l'aide de pointeurs
Un tableau est une suite de variables de mme type, situes dans un espace contigu en
mmoire: int tab[4]={2,3,6,0}
#include <iostream>
Adresse

Variable

0x22ff30

0x22ff34

0x22ff38

0x22ff3c

using namespace std;


int main() {
int tab[4]={2,3,6,0};
cout<<"Le tableau"<<" "<<tab<<endl;
//tab est un pointeur vers la premire case du tableau
cout<<"La valeur de la premire case est:"<<" "<<tab[0]<<endl;
cout<<"La valeur de la 1re case est galement:"<<" "<<*tab<<endl;
cout<<"La valeur de la 2nd case est donc:"<<" "<<*(tab+1)<<endl;
cout<<"L'adresse de la 3me case est donc:"<<" "<<&(tab[2])<<endl;
return 0;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

81

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Dfinitions

FONCTION#1 : Morceau de code rutilisable plusieurs endroits du


programme, permettant une dcomposition du code et renvoyant un ou
plusieurs rsultats.
FONCTION#2 : Boite noire, prenant en entre des paramtres et
restituant en sortie des rsultats.
PROCEDURE#1 : Morceau de code rutilisable plusieurs endroits du
programme, permettant une dcomposition du code et ne renvoyant pas
de rsultat.

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

82

41

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Dclaration
Dclarations dune fonction/procdure:
type nom(liste de paramtres formels)
{
Corps
Return rsultat ; return ; // si procdure
}
type : type du rsultat de la fonction (void dans le cas dune procdure)
Liste de paramtres formels :type1 parm1, .typen parmn.

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

83

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Exemples
int max(int a,int b)
{
int res=b ;
if (a>b) res = a ;
return res ;
}

//fonction

void permut(inta, int b)


{
int aux = b ;
b=a;
a = aux ;
}

//procdure

Appel dune fonction :


type nom(liste de paramtres rels)
int main()
{
int a=5 ;
int b=6 :
max(a ;b) ;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

84

42

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Passage de paramtres
Le passage des paramtres une fonction/procdure, se fait soit par valeur soit par
rfrence
 Passage par valeur
Par dfaut, les paramtres dune fonction sont initialiss par une copie
des valeurs des paramtres rels.
Exemple :
(2)
void permuter(int a,int b)
{
int aux = b ;
(3)
b=a;
(4)
a = aux ;
// on dtruit ici les copies a et b
(5)
}
int main()
{
int x,y ;
(1)
x=3 ;
y=2 ;
permuter(x,y) ;
cout<<" x = "<<x ;
(6)
}

x 3
y 2
a 3
b 2
aux 2
b 3
a 2
x 3

(1)
(2)
(3)
(4)
(5
(6)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

85

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Passage de paramtres
Le passage des paramtres une fonction/procdure, se fait soit par valeur soit par
rfrence
 Passage par rfrence
Une rfrence sur une variable est un synonyme de cette variable,
cest--dire une autre manire de dsigner le mme emplacement
mmoire.
Exemple :
(2)
void permuter(int &a,int & b)
{
(3)
int aux = b ;
(4)
b=a;
a = aux ;
}
int main()
{
int x,y ;
x=3 ;
y=2 ;
permuter(x,y) ;
cout<<" x = "<<x ;
}

(5)

(1)

x a

y b

aux

(3)

(4)

(5)

(6)

(1), (2)

(6)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

86

43

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Passage de paramtres

Intrt de passage par rfrence/pointeur :


Le passage par rfrence est plus efficace que le passage
par valeur car il vite la recopie des arguments car seule
ladresse mmoire de largument est communique la
fonction. Ce passage devient obligatoire si lon veut
rcuprer plus dune valeur partir dune fonction

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

87

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Passage de paramtres/remplissage et parcours dun tableau par un pointeur
#include<iostream>
using namespace std;
void RemplissageTab(int n, int *tab)
{
int x;
int i;
for(i=0;i<n;i++){
cout<<"Entrez l'lment n"<<i+1<<endl;
cin>>x;
*(tab+i)=x;
}
}
int ParcoursTab(int n, int *tab)
{
for(int i=0;i<n;i++){
cout<<"L'lment n"<<i+1<<" "<<"est:"<<*(tab+i)<<endl;
}
}
int main()
{
int n=5;
int tableau[n];
RemplissageTab(n, tableau);
ParcoursTab(n,tableau);
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

88

44

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procdures


Proprits dune fonction
 Une fonction ne renvoie quun seul rsultat au plus
 Une fonction ne peut pas renvoyer de tableau statique
 Dans le cas de plus dun rsultat, on peut placer le rsultat
dans un tableau dynamique
 Une fonction peut galement renvoyer un pointeur comme
rsultat
 Une fonction peut galement utiliser des variables globales
 Les procdures (fonction void) sont pratiques pour
rcuprer plus dun rsultat
 Un tableau nest jamais pass une fonction par rfrence
 Un tableau est pass une fonction en pointeur

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

89

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

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);
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

91

Institut Universitaire Professionnel de Nouakchott

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;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

92

46

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

93

Institut Universitaire Professionnel de Nouakchott

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}

Complexit: Nombre d'itrations (moyenne et pire des cas)


n-1

Nombe de permutations:

k =n(n-1)/2
k=1

Complexit: O(n2)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

94

47

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri bulles

#include<iostream>
using namespace std;
int main()
{

Programme

int tabl[] = {10, 4, 5, 2, 1, 7, 10, 3};


int longueur = sizeof(tabl) / sizeof(int);
int temp = 0;
for(int i = 0; i <= longueur-1; i++)
for(int j = longueur-1; j >=i+1; j--)
if(tabl[j] < tabl[j-1])
{
temp = tabl[j];
tabl[j] = tabl[j-1];
tabl[j-1] = temp;
}
//while(longueur--) //pour le tri dcroissant
//cout<< tabl[longueur] << endl;
for(int k=0;k<longueur;k++) //pour le tri croissant
cout<< tabl[k] << endl;
Algorithmique & programmation C++ : LPRT : S1,
}

95

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

96

48

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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: Nombre d'itrations (moyenne et pire des cas)


Nombe de permutations:n(n-1)

Complexit: O(n2)

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

97

Institut Universitaire Professionnel de Nouakchott

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;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

98

49

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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.:

Int indicemin(int T[], int rang, int nbelements)

Void TriMinSuccessif(int T[], int nbelements)


variables: int i, int indiceRecherche
{ indiceRecherche=rang
Pour i=1 nbelements-1
si( i!=indiceRecherche) alors
Permuter(T[i],T[indice])
Fsi
Fpour
}

variables: int i, int indiceRecherche


{ indiceRecherche=rang
Pour i=rang+1 nbelements
si T[i]<T[indiceRecherche] alors
indiceRecherche=i
Fsi
Fpour
Retourner indiceRecherche
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

99

Institut Universitaire Professionnel de Nouakchott

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;
}

void Echanger(int &i, int &j) //Procdure ECHANGER


{
int aux;
aux=i;
i=j;
j=aux;
}
int FIndiceRecherche(int T[], int nbelements, int rang) // Recherche de l'indice du Min
{
int IndiceRecherche=rang;
for(int i=rang+1;i<nbelements;i++)
{
if(T[i]<T[IndiceRecherche]){
IndiceRecherche=i;
}
}
return IndiceRecherche;
}

void TriMinSuccessif(int T[],int nbelements) // Tri successif


{
int i,indice;
for(i=0;i<nbelements;i++)
{
indice=FIndiceRecherche(T,nbelements,i);
if(i!=indice){
Echanger(T[i],T[indice]);
}
Algorithmique
& programmation C++ : LPRT : S1,
}
M. OULD BECHIR
}

100

50

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

102

51

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmes clbres!!!
1) Tour de Hanoi

Source: Rcursivit: Nicoals Delestre, INSA de Rouen


Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

103

Institut Universitaire Professionnel de Nouakchott

Algorithmes clbres!!!
2) Recherche dichotomique

Mot d'origine grec, qui signifie couper en deux


Principe:
Il faut que les objets du champ de recherche, puissent former une squence et qu'il
soit possible de faire une comparaison relative l'ordre dans la squence

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

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

104

52

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmes clbres!!!
3) Algorithme de Fourmis: voyageur du commerce

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

105

Institut Universitaire Professionnel de Nouakchott

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

Institut Universitaire Professionnel de Nouakchott

Rfrences bibliographiques

- Site du zero: www.siteduzero.com


- Cours d'algorithmique : Cline Robardet, INSA de Lyon
- Les algorithmiques de tri: Nicolas Delestre, Michel Mainguenaud, INSA-ENSICAEN
- Algorithmique et programmation: Arnaud Giersch, IUT Belfort-Montbliard
- Cours de C++: Franois Laroussinie, ENS Cachan
- Exercices corrigs: Paris 13
- Algorithmique en C: Jean Michel Lry, PEARSON, ISBN: 978-2-7440-7479-0, ISSN:1768-7616

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

107

54

Vous aimerez peut-être aussi