Vous êtes sur la page 1sur 54

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmique & programmation


« C++»
LPRT : L1 : S1
Moustapha OULD BECHIR
Ingénieur, consultant en EEI
2012/2013
Algorithmique & programmation C++: LPRT : S1
1
M. OULD BECHIR: mobechir@yahoo.fr

Institut Universitaire Professionnel de Nouakchott

Contenu du cours
• Introduction
• Les variables
• Lecture/Ecriture
• Les structures de contrôle : conditionnelles & itératives
• Les tableaux
• Les références et les pointeurs
• Les fonctions et les procédures, La récursivité
• Les tris
• La programmation modulaire
Algorithmique & programmation C++ : LPRT : S1, 2
M. OULD BECHIR

1
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Déroulement du cours
• Volume horaire 26 séances(CM, TD et TP)
• Cours sous forme de présentation ppt distribuée en fin
de chaque séance
• TD/TP sous les stations de travail (DEV C++)
• Samedi (10h-12h) & Mardi (10h-12h)
• 2 CC (6ème semaine, 9ème 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, 3


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
I. Définitions Définition #1 : une suite d’instructions,
qui une fois exécutée correctement
conduit à un résultat

Origine : mot arabe dérivé du nom Définition #2: l’expression de la


du grand savant Al Khawarizmi (9ème résolution d’un problème de sorte que
siècle), qui a mis en place un le résultat soit calculable par une
algorithme pour la multiplication machine
par glissement
Définition #2(Petit Robert): suite finie
séquentielle de règles que l’on
applique à un nombre fini de données,
permettant de résoudre des classes de
problèmes semblables

Algorithmique & programmation C++ : LPRT : S1, 4


M. OULD BECHIR

2
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction
II. Objectifs
Objectif #1 : Obtenir de la machine
qu’elle fasse un travail à notre
place

Objectif #2 : Automatiser certaines


tâches

Objectif #3 : les mêmes effets


produisent les mêmes résultats !!!

Algorithmique & programmation C++ : LPRT : S1, 5


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
III. Exemples
Exemple#1 : Notice
d’utilisation d’un téléphone
portable

Exemple#2 : faire son choix


dans un distributeur de
boissons

Exemple#3 : recette pour


faire un gâteau

Algorithmique & programmation C++ : LPRT : S1, 6


M. OULD BECHIR

3
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction
IV. Problématique
#1 : Modélisation : peut-on
modéliser le problème

#2 : Résolution : y a-t-il une Faire ceci


solution indépendamment du
langage et de la machine

#3 : Complexité : temps et espace

Algorithmique & programmation C++ : LPRT : S1, 7


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
IV. Ce qu’il faut pour faire un bon algo

Condition#1 : Intuition

Expliciter et
Condition#2 : Méthodologie formaliser son
raisonnement

Condition#3 : Rigueur

Algorithmique & programmation C++ : LPRT : S1, 8


M. OULD BECHIR

4
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction
V. Etapes de réalisation d’un algo
Etape#1 : Description des données

Etape#2 : Description des résultats


Savoir expliquer
comment faire un
Etape#3 : Lexique des variables
travail sans la
moindre
Etape#4 : Traitement des données ambiguïté

Etape#5 : Edition des résultats

Algorithmique & programmation C++ : LPRT : S1, 9


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction
VI. Un premier algo
Problème : calculer l’aire d’un rectangle

variables:<La, Lo, S>: réels


Début
Données : Longueur, Largeur Ecrire(‘’donnez la longueur ‘’)
Traitement : Aire=LoXLa Lire(‘’lo’’)

Résultat : Affichage d’Aire Ecrire(‘’donnez la largeur ‘’)


Lire(‘’la’’)
S=LaXLo
Ecrire(‘’La surface est: S’’)
Fin

Algorithmique & programmation C++ : LPRT : S1, 10


M. OULD BECHIR

5
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, 11


M. OULD BECHIR

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 règles permettant de


combiner ces symboles afin de donner des instructions à un
ordinateur

R: code intermédiaire entre le langage machine et les


langages externes(algo)

Algorithmique & programmation C++ : LPRT : S1, 12


M. OULD BECHIR

6
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Schématisation

Programme écrit dans Code binaire adressé à


Algorithme un langage (C++) la machine
Écrire("Mon algo) Int main () {
Cout<<"Mon programme";} 001110101011100011

Programation Compilation

Algorithmique & programmation C++ : LPRT : S1, 13


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Un peu d’histoire

Quand il n'y avait


pas de clavier

- 1958: Algol
- 1960 à 1970: CPL BCPL B
- 1970: C, le langage le plus utilisé
Bjarne Stroustrup
- 1983: C++
Algorithmique & programmation C++ : LPRT : S1, 14
M. OULD BECHIR

7
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Langage de bas et haut niveau Q: Par rapport à quoi?
HAUT NIVEAU
JAVA
C# .NET
PYTHON
If RUBY
(a==b){cout
.
<<a;endl}
C

.
BAS NIVEAU .
.
000111001
100110100
011100101
101001011 ASSEMBLEUR
Algorithmique & programmation C++ : LPRT : S1, 15
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++


Forces du C++

- Répandu: documentation…
- Rapidité: jeux, militaires, finances…
- Portable: de machine à machine
- Bibliothèques
- Multi-paradigme: POO

Algorithmique & programmation C++ : LPRT : S1, 16


M. OULD BECHIR

8
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++ TD

Interaction avec la machine HELLO WORLD

ETAPES:
1) Faire l'algo
2) Ecrire le code à l'aide d'un éditeur de texte (Bloc Notes, Notepad…) et l’enregistrer
au format .cpp dans un répertoire portant votre nom
3) Compiler le code à l'aide de Dev C++
4) Lancer la console et exécuter le .exe

#include <iostream>
using namespace std;

int main ()
{
cout<<"Hello world";

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

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++ TD

Structure d’un programme C++


// commentaires /*commentaire long*/

#include <iostream> /* inclure la bibliothèque iostream “Input Output Stream” qui contient les
fonctions cout et cin*/
using namespace std; // espaces de nom standard, par défaut

int main () // la fonction principale, chaque programme doit en contenir une


{ // corps de la fonction et traitement
const float pi=3.14; // déclaration d’une constante
float longuer; //déclaration d’une variable
char a;
int i;
int j=1; // initialisation d’une variable

cout<<"Hello world"; // appel d’une fonction


return 0; //retourne 0 si tout s’est bien passé

} // fin du programme

Algorithmique & programmation C++ : LPRT : S1, 18


M. OULD BECHIR

9
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les variables
Notion de variable et de type
Notion#1 : un symbole, parfois indexé,
représentant une quantité inconnue
appartenant à un ensemble

Notion#2 : associe un nom à une valeur donnée

VARIABLES : <Liste d’identificateurs> : TYPE


Notion#3 : permet de nommer et de mémoriser Exemple : VARIABLES< a,b > : réels
les données utilisées par l’algo Nom : caractère

Notion#4 : instruction permettant de réserver


de l’espace mémoire pour stocker des données

Notion#5 (TYPE) : Ensemble de valeurs


possibles pour la variable
Algorithmique & programmation C++ : LPRT : S1, 19
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les variables
Les constantes
Une variable de valeur fixe, sa valeur ne sera pas modifiée par le programme:
Constante : pi3,14
On les place avant les variables

L’affectation
Définition: fonction permettant d’affecter à la variable de gauche la valeur de
la variable de droite
Exemple : pi3,14
NomMohamed
BénéficePrix_Vente-Prix_Achat

Algorithmique & programmation C++ : LPRT : S1, 20


M. OULD BECHIR

10
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les variables
Structures de données élémentaires

Il existe plusieurs types de variables, et chacun correspond à une taille maximale de


nombre, ou un caractère, ou encore une vérité. Plus le type peut contenir de gros
nombres, plus il utilise de place en mémoire.

Réel : float, double


Entier : integer
Booléen : bool
Caractère : char

Utilisent de 1 à 8 octets selon la


longueur

Algorithmique & programmation C++ : LPRT : S1, 21


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les variables
Les opérateurs

Arithmétique:
+ (addition)
- (soustraction)
X (multiplication)
/ (division)
%(modulo): reste de la division
Logiques:
ET (&&)
OU (||)
INVERSE ( !) LOGIQUE(complément)
Comparaison : >, <, >=, <=, == (test d’égalité), != (différent de)
Algorithmique & programmation C++ : LPRT : S1, 22
M. OULD BECHIR

11
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les variables
La portée d’une variable
La portée d’un identificateur est la partie du programme dans laquelle
l’identificateur 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 portée (là où elle visible)
Exemple :
{
int i=3 ;
{
int i=5 ;
cout << i ; // affiche 5
}
cout << i ; // affiche 3
}
Les deux variables ont des portées différentes !
Algorithmique & programmation C++ : LPRT : S1, 23
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Lecture/Ecriture
Lecture : la machine va lire quelque chose en entrée

L’utilisateur transmet une donnée à 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 résultat à l’utilisateur


Exemple : Afficher(‘votre solde est de : XXXUM’)

Algorithmique & programmation C++ : LPRT : S1, 24


M. OULD BECHIR

12
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Lecture/Ecriture
Exemple:

Variables :<Valeur> : réel //déclarations


Début
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, 25


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Lecture/Ecriture
Programme qui calcul l’aire d’un 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, 26
M. OULD BECHIR

13
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Lecture/Ecriture
Programme qui calcul l’aire d’un 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, 27
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives


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 exécute le bloc d’instructions 1,


sinon on exécute le bloc d’instructions 2

Exemples:
Cas#1 : Si la moyenne est supérieure à 10, afficher Admis, sinon afficher redoublant
Variable : moyenne : réel
début
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 contrôle : conditionnelles & itératives


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

Variable : moyenne : réel


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

Si moyenne>=10
Afficher(‘Passable’)
Fsi
Sinon Afficher(‘Insuffisant’)
Fsi

Algorithmique & programmation C++ : LPRT : S1, 29


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives


Les structures conditionnelles: SI, ALORS, SINON, SELON QUE
Selon que
Selon que <nombre de livres>
Cas <0> : Afficher(‘vous ne lisez pas du
tout !’)
Selon <IDENTIFICATEUR> Cas <1> : Afficher(‘vous ne lisez pas assez’)
<Liste de valeur> <INSTRUCTIONS 1> Cas <2> : Afficher(‘vous devriez lire plus’)
<Liste de valeur> <INSTRUCTIONS 2> Cas <3> : Afficher(‘ce n’est pas suffisant’)
Cas <4> : Afficher(‘lisez en peu plus’)
.
.
. <Autres> <INSTRUCTIONS N>
Permet une facilité d’écriture 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 contrôle : conditionnelles & itératives


Les structures de contrôle : 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 If(condition) { instruction}


alors <instruction> FSI else {instruction}

SI, SINON SI Si <condition> alors <instruction> SINON If(condition) { instruction}


SI (condition) alors <instruction> FSI Else if (condition) {instruction}

SELON QUE Selon que cas 1: faire Switch(var)


cas 2:faire Case 1: {}
Case 2:{}
défaut: faire
Default:{}

Tant que Tant que <condition> alors While(condition) {instruction}


<instruction> FTantque

Répéter Répéter <instruction> Tant que /jusqu’à ce que Do{instructions;


<condition> }
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 contrôle : conditionnelles & itératives TD


Les structures conditionnelles:
Exercices de TD #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)
IF, ELSE {
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 contrôle : conditionnelles & itératives TD

Programmation d’un 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 contrôle : conditionnelles & itératives TD

Programmation d’un 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 contrôle : conditionnelles & itératives TD

Programmation d’un 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 contrôle : conditionnelles & itératives


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

- Répète les instructions tant que la condition de la boucle est vraie.


-Les instructions de la boucle peuvent ne pas être exécutées
-Utilisée pour faire un nombre inconnu d’itérations mais fini
-La condition doit devenir fausse après un certain nombre d’itérations

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

18
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives


Les structures itératives: TANT QUE, REPETER, POUR
TANT QUE : WHILE
Exemple Algorithme d’Euclide : calcul du PGCD de deux entiers
Faire à la main
174 et 72 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 a b a-b
ca-b
78 26 =78-26=52
a c
Fin Tant que 52 26 26
Afficher(‘le PGCD est : a’)
26 26 0

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives


Les structures itératives: TANT QUE, REPETER, POUR
REPETER: DO WHILE
<Initialisations>:// valeurs initiales des variables
Répéter <INSTRUCTIONS >
Tant que <CONDITIONS>

- Comme Tant que mais l’instruction est au moins réalisée une fois
- La condition est vérifiée après l’exécution, elle porte sur le résultat du traitement
-Typique pour les saisies avec vérification

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

19
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives


Les structures itératives: TANT QUE, REPETER, POUR
REPETER: DO WHILE
Exemple

Constante : mdp=’TARZAN’ // initialisation

Répéter
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 contrôle : conditionnelles & itératives


Les structures itératives: 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 d’itérations est connu d’avance
-On peut inverser le sens de parcours de la boucle
-On peut modifier le pas de sa valeur par défaut (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 contrôle : conditionnelles & itératives


Les structures itératives: SEMANTIQUE

for(i=1 ;i<=10 ;i++)


IMPLICITEMENT

- Initialise le compteur (Amorçage)


-Incrémente le compteur à chaque passage (Relance)
-Vérifie que la nouvelle valeur du compteur est dans l’intervalle défini (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 contrôle : conditionnelles & itératives


Les structures itératives: CHOIX ?

Nombre
d’itérations
connu
NON

Traitement
exécuté au OUI
moins une
fois

OUI NON

REPTER TANT QUE POUR

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

21
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives


Post et pré incrémentation:
++i : incrémente i et retourne la nouvelle valeur (i=i+1)
i++ : incrémente i et retourne l’ancienne valeur (i=(i+1)-1)
--i : décrémente i et retourne la nouvelle valeur (i=i-1)
i-- : décrémente i et retourne l’ancienne valeur (i=(i-1)+1)
i(+,/,*) : additionne divise, multiplie i et i : (i=i+i, i=i/i, i=i*i)

Compléments:
-Continue : provoque (dans une instruction do, for, ou while) l’arrêt de l’itération courante
et le passage au début de l’itération suivante.
-Break : provoque l’arrêt de la première instruction do, for, switch ou while englobant

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD

Programmation d’un 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 contrôle : conditionnelles & itératives TD

Programmation d’un 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 contrôle : conditionnelles & itératives TD

Programmation d’un 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 contrôle : conditionnelles & itératives TD

TD’s
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 contrôle : conditionnelles & itératives TD

TD’s
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 contrôle : conditionnelles & itératives TD

TD’s
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 contrôle : conditionnelles & itératives TD

TD’s
3) Multiplication Egyptienne

variables:<a, b>: entiers

Début
Tant que a >= 1 faire
Si a est impair alors
On accumule b dans une somme qui sera le résultat
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 contrôle : conditionnelles & itératives TD

TD’s
3) Multiplication Egyptienne

Parité de a a b
1 13 5
0 6 10
1 3 20
1 1 40
=5+20+40=65

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD

TD’s #include<iostream>
using namespace std;
3) Multiplication Egyptienne 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 contrôle : conditionnelles & itératives TD

TD’s
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 contrôle : conditionnelles & itératives TD

TD’s
4) PGCD

a b a-b
78 26 =78-26=52
52 26 26
26 26 0

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

27
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD


#include<iostream>
TD’s using namespace std;
int main()
4) PGCD {
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;
}

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD

TD’s
5)Triangle de PASCAL

0 1 2 3 4… (K)
0 1
1 1 1
2 1 2 1
3 1 3 3 1
4 1 4 6 4 1
.
.
(n)
Algorithmique & programmation C++ : LPRT : S1,
M. OULD BECHIR

28
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD

TD’s
5)Triangle de PASCAL

n! n!(n − k + 1)
C nk = =
k!(n − k )! k (k − 1)!(n − k + 1)(n − k )!

( n − k + 1) k −1
C nk = Cn
k

Algorithmique & programmation C++ : LPRT : S1,


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD

TD’s
#include<iostream>
5)Triangle de PASCAL
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 contrôle : conditionnelles & itératives TD


#include<iostream>
TD’s //#include<cmath> // #include<math.h>
using namespace std;
Fonctions mathématiques
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 données permettant de rassembler un ensemble de données


de même type dans une seule variable en les différenciant par un indice
qui varie de 0 à taille_tab-1

Tableau statique 1D

Tableau dont la taille est fixe

Déclaration : TYPE NOM [taille]


int const taille=10 ;
float Notes[taille] ;

Pour accéder à un élément :


Notes[indice] ;

Algorithmique & programmation C++ : LPRT : S1, 60


M. OULD BECHIR

30
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux

Tableau statique 1D/remplissage


Remplissage d’un tableau par l’utilisateur

Pour i=0 à taille-1


Afficher(‘Entrez l’élément n° :i+1 :’)
Lire(‘x)
Notes[i]x
Fin pour

Tableau statique 1D/affichage


Parcourir un tableau par l’utilisateur

Pour i=0 à taille-1


Afficher(‘Notes[i]’)
Fin pour

Algorithmique & programmation C++ : LPRT : S1, 61


M. OULD BECHIR

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 d’une moyenne de notes

Ecrire un programme qui demande à l’utilisateur le nombre de notes, puis


l’invite à les saisir une après l’autre et affiche à la fin la moyenne.

Algorithmique & programmation C++ : LPRT : S1, 62


M. OULD BECHIR

31
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD
Exemple: calcul d’une moyenne de notes
#include <iostream>
using namespace std;
int main()
{
int nombreNotes=1; // Initialisation de la taille du tableau
double notes[nombreNotes];
double somme(0);
double moyenne(0);

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, 63
} M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tableaux

Tableau dynamique 1D
Tableau dont la taille peut varier

Déclaration : Vector<type> NOM(taille)


#include <vector>
int const taille=10 ;
Vector<float> Notes(taille) ;

Tableau dynamique/remplissage

Affectation

vector<int> Notes(5, 3); //Crée un tableau de 5 entiers valant tous 3


vector<double> Notes; //Crée un tableau de 0 nombres à virgules

Algorithmique & programmation C++ : LPRT : S1, 64


M. OULD BECHIR

32
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux

Tableau dynamique 1D/parcours

On le remplit et on le parcours de la même façon 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 4ème case au tableau. Cette case contient la valeur 8
tableau.pop_back(); //On supprime la dernière case

Connaitre la taille :
Notes.Size()

Algorithmique & programmation C++ : LPRT : S1, 65


M. OULD BECHIR

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; //Un tableau vide
notes.push_back(12.5); //On ajoute des cases avec les notes
notes.push_back(19.5);
notes.push_back(6);
notes.push_back(12);

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, 66
} M. OULD BECHIR

33
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
Tableau multidimensionnel ND
Tableau de tableaux 2D

Déclaration : TYPE NOM [taillex][tailley]


int const taillex=5 ;
int const tailley=4 ;
float Matrice [5][4]

00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34

Tableau de tableaux ND

Déclaration : TYPE NOM [taillex][tailley]….[taillez]


int const taillex=5 ;
int const tailley=6 ;
….
int const taillez=n ;
float Grille [5][6]…[n]
Programmation évènementielle & réseau :
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 évènementielle & réseau :
68
LPRT : S4, M. OULD BECHIR

34
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
La Classe STRING

String en Anglais : Chaine de caractères Chaine de caractères=tableau de caractères !!

Déclaration : #include<string>
String nom(“Mohamed”) ;

Accès à une lettre:


Nom[0]=M
Concaténation :
String nomcomplet=nom+’ ‘+string prenom
Taille: nom.size()

Programmation évènementielle & réseau :


69
LPRT : S4, M. OULD BECHIR

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 d’utilisation de substr.“;
size_t pos;
cout << "Tapez une chaine de caractères : "; getline (cin, s1);
cout << "Tapez une chaine de caractères : "; 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<<"caractères";
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 évènementielle & réseau :
70
LPRT : S4, M. OULD BECHIR

35
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD

TD’s #include<iostream>
Int table[5]; using namespace std;
Vector<int> tab(5); int main() //remplissage sans boucle
{
Tab.size(); int tableau[8]= {10, 4, 5, 2, 1, 7, 10, 3};
}

EXERCICES:
1) Remplissage/Lecture d’un 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, 71


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD

TD’s 1) Remplissage/Lecture d’un tableau 1D


#include<iostream>
using namespace std; #include <iostream>
int main() // Tableau statique #include<vector>
{ using namespace std;
int n=0,x; int main() // Tableau dynamique
int tableau[0]; {
cout <<"Entrez la taille du tableau:"<< endl; vector<int> elements;
cin>>n; int j=0;
int nbelements=elements.size();
for(int i = 0; i < n; i++)
{ cout<<"Entrez le nouveau nombre d'éléments:"<<endl;
cout <<"Entrez l'élément"<<i+1<< endl; cin>>nbelements;
cin>>x;
tableau[i]=x; for(int i(0); i<nbelements; i++)
} {
cout<<"Donnez l'élement:"<<" "<<i<<endl;
for(int i = 0; i <n; i++) cin>>j;
{ elements.push_back(j);
cout <<"L'élément" <<" "<<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 TD

TD’s 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'élément"<<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 élément" <<" "<<"est:"<<" "<<ppt<< endl;
Algorithmique & programmation C++ : LPRT : S1, 73
}
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD

TD’s 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'élément"<<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 élément" <<" "<<"est:"<<" "<<pgd<< endl;
} Algorithmique & programmation C++ : LPRT : S1, 74
M. OULD BECHIR

37
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD

TD’s 4) Recherche d’une 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'élément"<<" "<<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 références & les pointeurs


La déclaration d’une variable, permet de « coller » une étiquette sur un
emplacement dans la mémoire
int i=2;

Mémoire

2
0x22ff1c

Un pointeur est une variable qui contient l'adresse d'une autre variable
 gestion manuelle de la mémoire
Algorithmique & programmation C++ : LPRT : S1, 76
M. OULD BECHIR

38
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs


* &
Un pointeur est typé: int *pointeur;
 Pointeur
*i: représente l'adresse mémoire de la variable i
 Référence
&i: désigne l'objet pointé par le pointeur i

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 chaîne de caractères
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;

 le pointeur ne contient l’adresse d’aucune case


La case 0, n'existe pas
Algorithmique & programmation C++ : LPRT : S1, 77
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs


Déroulement 1
int i=2; ptr
ptr=&i;
int * ptr(0);

Mémoire

1 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, 78
M. OULD BECHIR

39
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs


Déroulement 2
Cout<<*ptr; ptr

Mémoire

1 2
6
6
9

1) Aller dans la case mémoire nommée ptr


2) Lire la valeur enregistrée
3) Suivre la flèche pour aller à l'adresse pointée
4) Lire la valeur stockée
5) Afficher cette valeur Algorithmique & programmation C++ : LPRT : S1, 79
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs


Exercice
1) Déclaration de pointeurs et de références et impression
#include <iostream>
using namespace std;
int main() {
float note(16); //déclaration d'une variable de type réel
float *ptr(0); //déclaration d'un pointeur pouvant pointer vers une variable de type réel
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 pointée (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, 80


M. OULD BECHIR

40
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs


Exercice: Les tableaux et les pointeurs
2) Déclaration d'un tableau et affichage de ses éléments à l'aide de pointeurs
Un tableau est une suite de variables de même type, situées dans un espace contigu en
mémoire: int tab[4]={2,3,6,0} #include <iostream>
using namespace std;
Adresse Variable int main() {
int tab[4]={2,3,6,0};
cout<<"Le tableau"<<" "<<tab<<endl;
0x22ff30 2 //tab est un pointeur vers la première case du tableau
0x22ff34 3 cout<<"La valeur de la première case est:"<<" "<<tab[0]<<endl;
cout<<"La valeur de la 1ère case est également:"<<" "<<*tab<<endl;
0x22ff38 6 cout<<"La valeur de la 2nd case est donc:"<<" "<<*(tab+1)<<endl;
cout<<"L'adresse de la 3ème case est donc:"<<" "<<&(tab[2])<<endl;
0x22ff3c 0 return 0;
}

Algorithmique & programmation C++ : LPRT : S1, 81


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Définitions

FONCTION#1 : Morceau de code réutilisable à plusieurs endroits du


programme, permettant une décomposition du code et renvoyant un ou
plusieurs résultats.

FONCTION#2 : Boite noire, prenant en entrée des paramètres et


restituant en sortie des résultats.

PROCEDURE#1 : Morceau de code réutilisable à plusieurs endroits du


programme, permettant une décomposition du code et ne renvoyant pas
de résultat.

Algorithmique & programmation C++ : LPRT : S1, 82


M. OULD BECHIR

41
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Déclaration

Déclarations d’une fonction/procédure:

type nom(liste de paramètres formels)


{
Corps
Return résultat ; return ; // si procédure
}

type : type du résultat de la fonction (void dans le cas d’une procédure)


Liste de paramètres formels :type1 parm1, …….typen parmn.

Algorithmique & programmation C++ : LPRT : S1, 83


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Exemples

int max(int a,int b) //fonction


{
int res=b ; Appel d’une fonction :
if (a>b) res = a ; type nom(liste de paramètres réels)
return res ; int main()
} {
int a=5 ;
void permut(inta, int b) //procédure int b=6 :
{ max(a ;b) ;
int aux = b ; }
b=a;
a = aux ;
}

Algorithmique & programmation C++ : LPRT : S1, 84


M. OULD BECHIR

42
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Passage de paramètres
Le passage des paramètres à une fonction/procédure, se fait soit par valeur soit par
référence
 Passage par valeur
Par défaut, les paramètres d’une fonction sont initialisés par une copie
des valeurs des paramètres réels.
Exemple :
void permuter(int a,int b) (2)
{ x 3
int aux = b ; (3) (1)
b=a; (4) y 2
a = aux ; (5) // on détruit ici les copies a et b a 3 (2)
}
int main() b 2
(3)
{ aux 2
int x,y ; (4)
x=3 ; (1) b 3
y=2 ; a 2 (5
permuter(x,y) ; x 3 (6)
cout<<" x = "<<x ; (6)
}

Algorithmique & programmation C++ : LPRT : S1, 85


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Passage de paramètres
Le passage des paramètres à une fonction/procédure, se fait soit par valeur soit par
référence
 Passage par référence
Une référence sur une variable est un synonyme de cette variable,
c’est-à-dire une autre manière de désigner le même emplacement
mémoire.
Exemple :
void permuter(int &a,int & b) (2) x a 3
{ (3) (1), (2)
int aux = b ; y b
(4) 2
b=a;
a = aux ; (5) aux 2 (3)
}
int main() b 3 (4)
{
int x,y ; a 2 (5)
x=3 ; (1)
y=2 ; x
permuter(x,y) ; 2 (6)
cout<<" x = "<<x ; (6)
}

Algorithmique & programmation C++ : LPRT : S1, 86


M. OULD BECHIR

43
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Passage de paramètres

Intérêt de passage par référence/pointeur :

Le passage par référence est plus efficace que le passage


par valeur car il évite la recopie des arguments car seule
l’adresse mémoire de l’argument est communiquée à la
fonction. Ce passage devient obligatoire si l’on veut
récupérer plus d’une valeur à partir d’une fonction

Algorithmique & programmation C++ : LPRT : S1, 87


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Passage de paramètres/remplissage et parcours d’un 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'élément n°"<<i+1<<endl;
cin>>x;
*(tab+i)=x;
}
}

int ParcoursTab(int n, int *tab)


{
for(int i=0;i<n;i++){
cout<<"L'élément 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, 88
} M. OULD BECHIR

44
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures


Propriétés d’une fonction
 Une fonction ne renvoie qu’un seul résultat au plus
 Une fonction ne peut pas renvoyer de tableau statique
 Dans le cas de plus d’un résultat, on peut placer le résultat
dans un tableau dynamique
 Une fonction peut également renvoyer un pointeur comme
résultat
 Une fonction peut également utiliser des variables globales
 Les procédures (fonction void) sont pratiques pour
récupérer plus d’un résultat
 Un tableau n’est jamais passé à une fonction par référence
 Un tableau est passé à une fonction en pointeur

Algorithmique & programmation C++ : LPRT : S1, 89


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

La récursivité
Définition :
Une fonction récursive est une fonction qui s’appelle elle-même.
F(F(x))

Définition :
Chaque fonction récursive doit inclure un bloc d’instructions appelé
« point d’arrêt » qui permet d’arrêter la fonction

Méthodologie :
Pour écrire une fonction récursive, il faut :
-Identifier les cas particuliers
-Identifier la condition d’arrêt de la boucle
-Identifier le cas général (générique)
Algorithmique & programmation C++ : LPRT : S1, 90
M. OULD BECHIR

45
29/01/2013

Institut Universitaire Professionnel de Nouakchott

La récursivité
 Exemples

Factorielle: Somme de a et b:
int Fact(int n) // AVEC UNE BOUCLE #include<iostream>
{ using namespace std;
int resultat = 1;
for(int i = 1; i <= n; i++) int somme(int a, int b)
resultat *= i; {
return resultat; if(b==0)
} { return a;
}
int Fact(int n) // AVEC LA RECURSIVITE else return somme(a+1,b-1);
{
}
if(n == 1)
return 1;
else
return (n*Fact(n-1));
}

Algorithmique & programmation C++ : LPRT : S1, 91


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

La récursivité
 Exemples
Algorithme du PGCD :
#include<iostream>
using namespace std;
void Echanger(int &i, int &j) //Procédure ECHANGER
{ int main()
int aux; {
aux=i; int a,b;
i=j;
j=aux;
cout<<"Donnez a:"<<endl;
} cin>>a;
cout<<"Donnez b:"<<endl;
int pgcd(int &a, int &b) //pgcd récursif cin>>b;
{
int d=0; int r=pgcd(a,b);
while (a!=b) cout<<"le PGCD est:"<<r<<endl;
{
if(a<b)
}
{ Echanger(a, b); }
d=a-b;
a=d;
pgcd(a,b);
}
return a; } Algorithmique & programmation C++ : LPRT : S1, 92
M. OULD BECHIR

46
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri à bulles
Principe:
Sélectionner le minimum du tableau en parcourant le tableau de la fin au début et
en échangeant tout couple d'éléments consécutifs non ordonnés.

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, 93


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri à bulles
Exemple

T={12, 10, 5, 3}

 {12, 10, 5, 3}
i=0
{12, 10, 3, 55}
j=3 Complexité: Nombre d'itérations (moyenne et pire des cas)
{12, 3, ,10, 5}
j=2 n-1

{3, 12, 10, 5}


j=1
 {3, 12, 10, 5}
i=1
Nombe de permutations: ∑k =n(n-1)/2
k=1
{3, 12, 5, 10}
j=3
{3, 5, 12, 10}
j=2
Complexité: O(n2)
 {3, 5, 12, 10}
i=2
{3, 5, 10, 12}
j=3
… {3, 5, 10, 12}
i=3


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

47
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri à bulles #include<iostream>
using namespace std;
Programme int main()
{

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 décroissant


//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 sélection
Principe
Commencer par échanger chaque deux éléments 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, 96


M. OULD BECHIR

48
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri par sélection
Exemple

T={5, 10, 3, 12}

 {5, 10, 3, 12}


i=1
{10, 5, 3, 12}
j=0
{10, 5, 3, 12}
j=1 Complexité: Nombre d'itérations (moyenne et pire des cas)
{10, 5, 12, 3}
j=2
 {10, 5, 12, 3}
i=2 Nombe de permutations:n(n-1)
{10, 5, 12, 3}
j=0
{10, 12 , 5, 3}
j=1
{10, 12, 5, 3}
j=2 Complexité: O(n2)
 {10, 12, 5, 3}
i=3
{12, 10, 5, 3}
j=0
{12, 10 , 5, 3}
j=1
{12, 10, 5, 3}
j=2
Algorithmique & programmation C++ : LPRT : S1, 97
M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri par sélection #include <iostream>
Using namespace std;
Programme 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, 98
} M. OULD BECHIR

49
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri par minimums successifs
Principe
Pour une place donnée, on sélectionne l'élément qui doit y être positionné.
De ce fait, si on parcourt la tableau de gauche à droite, on positionne à chaque fois
le plus petit élément 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 variables: int i, int indiceRecherche
{ indiceRecherche=rang { indiceRecherche=rang
Pour i=rang+1 à nbelements Pour i=1 à nbelements-1
si T[i]<T[indiceRecherche] alors si( i!=indiceRecherche) alors
indiceRecherche=i Permuter(T[i],T[indice])
Fsi Fsi
Fpour Fpour
Retourner indiceRecherche }
}

Algorithmique & programmation C++ : LPRT : S1, 99


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tris
void Echanger(int &i, int &j) //Procédure ECHANGER
 Tri par minimums successifs {
int aux;
Programme 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++)
int main() {
{ if(T[i]<T[IndiceRecherche]){
int tabl[] = {10, 4, 5, 2, 1, 7, 10, 3}; IndiceRecherche=i;
int longueur = sizeof(tabl) / sizeof(int); }
}
TriMinSuccessif(tabl,longueur); return IndiceRecherche;
for(int k=0;k<=7;k++) //Affichage }
cout<< tabl[k] << endl;
} 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, 100
} M. OULD BECHIR

50
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
 Tri rapide (pivot): récursif
Principe
• Choisir un élément du tableau appelé pivot,
• Ordonner les éléments du tableau par rapport au pivot
• Appeler récursivement le tri sur les parties du tableau à gauche et à droite du pivot.
Algo.:
Variables : int i, int j, int pivot, tableau T
Procédure TriRapide(int T[]; int gauche; int droite)
Début
i=gauche;
j=droite;
pivot=T[(i+j)/2];
Répéter 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): récursif
#include<iostream>
Programme 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];
int gauche=0; do {
int droite= (sizeof(tabl) / sizeof(int))-1; while(T[i]<pivot){i=i+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);}
}

Algorithmique & programmation C++ : LPRT : S1, 102


M. OULD BECHIR

51
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmes célèbres!!!
1) Tour de Hanoi

Source: Récursivité: Nicoals Delestre, INSA de Rouen


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

Institut Universitaire Professionnel de Nouakchott

Algorithmes célèbres!!!

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 séquence et qu'il
soit possible de faire une comparaison relative à l'ordre dans la séquence

Exemple:
Recherche d'un élément dans un tableau trié:
i) On coupe le tableau en deux
ii) On restreint la recherche à la partie ou se trouve l'élément
iii) Et ainsi de suite …

Algorithmique & programmation C++ : LPRT : S1, 104


M. OULD BECHIR

52
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmes célèbres!!!
3) Algorithme de Fourmis: voyageur du commerce

Algorithmique & programmation C++ : LPRT : S1, 105


M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Algorithmes célèbres!!!
4) Problème d'Einstein:5 Hommes, 5 maisons, 5 fumeurs
On a cinq maisons alignées de couleurs différentes.
Dans chaque maison vit une personne de nationalité différente.
Chaque personne boit une boisson différente.
Chaque personne fume un type de cigarette différent.
Chaque personne élève un animal différent.
Il faut trouver qui élève les poissons.
Indices :
1) L'anglais vit dans la maison rouge
2) Le suédois élève des chiens
3) Le danois boit du thé.
4) La maison verte est juste à gauche de la maison blanche.
5) Le propriétaire de la maison verte boit du café.
6) Le fumeur de Pall Mall élève des oiseaux.
7) Le propriétaire de la maison jaune fume des Dunhills.
8) L'homme qui vit dans la maison du centre boit du lait.
9) Le norvégien vit dans la première maison.
10) L'homme qui fume des Blends vit à côté de celui qui élève des chats.
11) L'homme qui élève des chevaux vit à côté du fumeur de Dunhills.
12) L'homme qui fume des Blue Masters boit de la bière.
13) L'allemand fume des Prince.
14) Le norvégien vit à côté de la maison bleue.
15) L'homme qui fume des Blends a un voisin qui boit de l'eau.
Algorithmique & programmation C++ : LPRT : S1, 106
M. OULD BECHIR

53
29/01/2013

Institut Universitaire Professionnel de Nouakchott

Références bibliographiques

- Site du zero: www.siteduzero.com


- Cours d'algorithmique : Céline Robardet, INSA de Lyon
- Les algorithmiques de tri: Nicolas Delestre, Michel Mainguenaud, INSA-ENSICAEN
- Algorithmique et programmation: Arnaud Giersch, IUT Belfort-Montbéliard
- Cours de C++: François Laroussinie, ENS Cachan
- Exercices corrigés: Paris 13
- Algorithmique en C: Jean Michel Léry, PEARSON, ISBN: 978-2-7440-7479-0, ISSN:1768-7616

Algorithmique & programmation C++ : LPRT : S1, 107


M. OULD BECHIR

54

Vous aimerez peut-être aussi