Vous êtes sur la page 1sur 54

29/01/2013

Institut Universitaire Professionnel de Nouakchott Algorithmique & programmation « C++ » LPRT : L1 :

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 M. OULD BECHIR: mobechir@yahoo.fr

1

Institut Universitaire Professionnel de Nouakchott

Contenu du cours

• Introduction
• Introduction
• Les variables
• Les variables
• Lecture/Ecriture
• Lecture/Ecriture
• Les structures de contrôle : conditionnelles & itératives
• Les structures de contrôle : conditionnelles & itératives
• Les tableaux
• Les tableaux
• Les références et les pointeurs
• Les références et les pointeurs
• Les fonctions et les procédures, La récursivité
• Les fonctions et les procédures, La récursivité
• Les tris
• Les tris
• La programmation modulaire
• La programmation modulaire

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

2

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
Introduction

I. Définitions

Définition #1 : une suite d’instructions, qui une fois exécutée correctement conduit à un résultat
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 du grand savant Al Khawarizmi (9 ème siècle),
Origine : mot arabe dérivé du nom
du grand savant Al Khawarizmi (9 ème
siècle), qui a mis en place un
algorithme pour la multiplication
par glissement
Définition #2: l’expression de la résolution d’un problème de sorte que le résultat soit calculable
Définition #2: l’expression de
la
résolution d’un problème de sorte que
le résultat soit calculable par une
machine
Définition #2(Petit Robert): suite finie séquentielle de règles que l’on applique à un nombre fini
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction
Introduction

II. Objectifs

Objectif #1 : Obtenir de la machine qu’elle fasse un travail à notre place
Objectif #1 : Obtenir de la machine
qu’elle fasse un travail à notre
place
Objectif #2 : Automatiser certaines tâches
Objectif #2 : Automatiser certaines
tâches
Objectif #3 : les mêmes effets produisent les mêmes résultats !!!
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
Introduction

III. Exemples

Exemple#1 : Notice d’utilisation d’un téléphone portable
Exemple#1
:
Notice
d’utilisation
d’un
téléphone
portable
Exemple#2 : faire son choix dans un distributeur de boissons
Exemple#2 : faire son choix
dans
un
distributeur de
boissons
Exemple#3 : recette pour faire un gâteau
Exemple#3 : recette pour
faire un gâteau

Algorithmique & programmation C++ : LPRT : S1,

6

 

M.

OULD BECHIR

29/01/2013

 

Institut Universitaire Professionnel de Nouakchott

 
Introduction
Introduction
 

IV.

Problématique

#1 : Modélisation : peut-on modéliser le problème
#1 : Modélisation : peut-on
modéliser le problème
 
#2 : Résolution : y a-t-il une solution
#2
:
Résolution
:
y
a-t-il
une
solution
Faire ceci indépendamment du langage et de la machine
Faire
ceci
indépendamment du
langage et de la machine
#3 : Complexité : temps et espace
#3 : Complexité : temps et espace

Algorithmique & programmation C++ : LPRT : S1,

7

 

M.

OULD BECHIR

 

Institut Universitaire Professionnel de Nouakchott

 
Introduction
Introduction
 

IV.

Ce qu’il faut pour faire un bon algo

 
Condition#1 : Intuition
Condition#1 : Intuition
 
Condition#2 : Méthodologie
Condition#2 : Méthodologie
Expliciter et formaliser son raisonnement
Expliciter
et
formaliser
son
raisonnement
Condition#3 : Rigueur
Condition#3 : Rigueur

Algorithmique & programmation C++ : LPRT : S1,

8

 

M.

OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction
Introduction

V. Etapes de réalisation d’un algo

Etape#1 : Description des données

Etape#2 : Description des résultats

Etape#3 : Lexique des variables

Etape#4 : Traitement des données

Etape#5 : Edition des résultats

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

Savoir expliquer comment faire un travail sans la moindre ambiguïté
Savoir expliquer
comment faire un
travail sans la
moindre
ambiguïté

9

Institut Universitaire Professionnel de Nouakchott

Introduction
Introduction

VI. Un premier algo

Problème : calculer l’aire d’un rectangle

Données : Longueur, Largeur Traitement : Aire=LoXLa Résultat : Affichage d’Aire
Données : Longueur, Largeur
Traitement : Aire=LoXLa
Résultat : Affichage d’Aire
variables:<La, Lo, S>: réels Début Ecrire(‘’donnez la longueur ‘’) Lire(‘’lo’’)
variables:<La, Lo, S>: réels
Début
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++
Introduction au langage C++

Programme informatique

Q : Qu'est ce que c'est un programme informatique ?
Q : Qu'est ce que c'est un programme informatique ?
R : traduction dans un langage de programmation d'un algorithme (code)
R : traduction dans un langage de programmation d'un
algorithme (code)
Mais la machine ne comprend toujours pas le 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++
Introduction au langage C++

Langage de programmation

Q : Qu'est ce que c'est un 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
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)
R: code intermédiaire 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++
Introduction au langage C++

Schématisation

Algorithme

Écrire("Mon algo)

Programme écrit dans un langage (C++)

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

Code binaire adressé à la machine

001110101011100011

Code binaire adressé à la machine 001110101011100011 Programation Compilation Algorithmique & programmation
Code binaire adressé à la machine 001110101011100011 Programation Compilation Algorithmique & programmation
Programation
Programation
Compilation
Compilation

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

13

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++
Introduction au langage C++

Un peu d’histoire

Nouakchott Introduction au langage C++ Un peu d’histoire Quand il n'y avait pas de clavier Bjarne

Quand il n'y avait pas de clavier

Un peu d’histoire Quand il n'y avait pas de clavier Bjarne Stroustrup - 1958: Algol -

Bjarne Stroustrup

- 1958: Algol

- 1960 à 1970: CPL BCPL B

- 1970: C, le langage le plus utilisé

- 1983: C++

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

14

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++
Introduction au langage C++

Langage de bas et haut niveau

Q: Par rapport à quoi?

HAUT NIVEAU

BAS NIVEAU

If

(a==b){cout

<<a;endl}

000111001

100110100

011100101

101001011

JAVA

C# .NET

PYTHON

RUBY

.

C

.

.

.

ASSEMBLEUR

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

15

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++
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,

M. OULD BECHIR

16

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++ TD
Introduction au langage C++
TD

Interaction avec la machine

ETAPES:

HELLO WORLD

1)

Faire l'algo

2)

Ecrire le code à l'aide d'un éditeur de texte (Bloc Notes, Notepad…) et l’enregistrer

3)

au format .cpp dans un répertoire portant votre nom 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,

M. OULD BECHIR

17

Institut Universitaire Professionnel de Nouakchott

Introduction au langage C++ TD
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

using namespace std;

fonctions cout et cin*/ // espaces de nom standard, par défaut

int main ()

// la fonction principale, chaque programme doit en contenir une

{

// corps de la fonction et traitement // déclaration d’une constante

const float pi=3.14;

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,

M. OULD BECHIR

18

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les variables
Les variables

Notion de variable et de type

Notion#1 : un symbole, parfois indexé, représentant une quantité inconnue appartenant à un ensemble
Notion#1 : un symbole, parfois indexé,
représentant une quantité inconnue
appartenant à un ensemble
Notion#2 : associe un nom à une valeur donnée
Notion#2 : associe un nom à une valeur donnée
Notion#3 : permet de nommer et de mémoriser les données utilisées par l’algo
Notion#3 : permet de nommer et de mémoriser
les données utilisées par l’algo

VARIABLES : <Liste d’identificateurs> : TYPE Exemple : VARIABLES< a,b > : réels Nom : caractère

Notion#4 : instruction permettant de réserver de l’espace mémoire pour stocker des données
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
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 variables

Les constantes

Une variable de valeur fixe, sa valeur ne sera pas modifiée par le programme: Constante
Une variable de valeur fixe, sa valeur ne sera pas modifiée par le programme:
Constante : pi 3,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
Définition: fonction permettant d’affecter à la variable de gauche la valeur de
la variable de droite
Exemple : pi 3,14
Nom Mohamed
Bénéfice Prix_Vente-Prix_Achat

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

20

29/01/2013

Institut Universitaire Professionnel de Nouakchott

 
Les variables
Les variables
 

Structures de données élémentaires

Il existe plusieurs types de variables, et chacun correspond à une taille maximale de nombre,
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
Réel : float, double
Entier : integer
Booléen : bool
Caractère : char
Utilisent de 1 à 8 octets selon la longueur
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 variables
 

Les opérateurs

Arithmétique: + (addition) - (soustraction) X (multiplication) / (division) %(modulo): reste de la division
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

 
Les variables
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
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/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 :?
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’)
La machine renvoie un résultat à l’utilisateur
Exemple : Afficher(‘votre solde est de : XXXUM’)
 

Algorithmique & programmation C++ : LPRT : S1,

24

M.

OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott Lecture/Ecriture Exemple: Variables :<Valeur> : réel
Institut Universitaire Professionnel de Nouakchott
Lecture/Ecriture
Exemple:
Variables :<Valeur> : réel
Début
Ecrire(‘Donnez moi un chiffre’)
Lire(‘Valeur’)
Ecrire(‘Vous avez saisi :Valeur’)
//déclarations
//Affichage
//Saisie
//Affichage
Valeur=ValeurX2
//Traitement
Ecrire(‘La nouvelle valeur est :Valeur’)
Fin
//Affichage
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Lecture/Ecriture
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, M. OULD BECHIR

27

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives
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,
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
Variable : moyenne : réel
début
Afficher(‘Entrez la moyenne :’)
Lire(‘moyenne’)
Si moyenne>=10
Alors
Afficher(‘Admis’)
Sinon
Afficher(‘Redoublant’)
FSI
Fin
28

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives
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 à 12 afficher Mention, sinon afficher Insuffisant

supérieure

Variable : moyenne : réel Afficher(‘Entrez la moyenne :’) Lire(‘moyenne’) Si moyenne>=12 Alors
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,

M. OULD BECHIR

29

Institut Universitaire Professionnel de Nouakchott

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

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

Selon <IDENTIFICATEUR> <Liste de valeur> <INSTRUCTIONS 1> <Liste de valeur>
Selon <IDENTIFICATEUR>
<Liste de valeur> <INSTRUCTIONS 1>
<Liste de valeur> <INSTRUCTIONS 2>
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 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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives
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 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:{}

défaut: faire

Default:{}

Tant que

Tant que <condition> alors <instruction> FTantque

While(condition) {instruction}

Répéter

Répéter <instruction> Tant que /jusqu’à ce que <condition>

Do{instructions;

}

 

While(condition);

Pour

Pour var de< limite_inf> à <limite_sup> par pas de <pas> faire Fpour

Algorithmique & programmation C++ : LPRT : S1,

For(i=1;i<=k;i++){instruction}

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

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

Les structures conditionnelles:

TD
TD

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;

IF, ELSE

}

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

return EXIT_SUCCESS;

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

M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD
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
#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
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
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Programmation d’un switch (suite)

case 3: cout<<"Entrez a:"<<endl; cin>>a; cout<<"Entrez
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 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>
<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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

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

Exemple

Faire à la main 174 et 72

Algorithme d’Euclide : calcul du PGCD de deux entiers Variables :<a,b,c> :entiers Afficher(‘Donnez le plus
Algorithme d’Euclide : 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)
Fsi
a
b a-b
c
a c
Fin Tant que
Afficher(‘le PGCD est : a’)
a-b
78
26
=78-26=52
52
26
26
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 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
<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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives
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
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 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> à
<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
Affiche les dix premiers entiers
Pour i=1 à 10 pas de 1
Afficher(‘i :’)
Fin Pour

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives
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
- 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 de contrôle : conditionnelles & itératives
Les structures itératives: CHOIX ? Nombre d’itérations connu NON Traitement exécuté au OUI moins une
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives
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
++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
-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
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;
#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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD
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 <<
#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
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
#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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD
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
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
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;
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

TD’s

2) Factorielle #include <iostream> using namespace std; int main() { int resultat = 1; int
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
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
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD
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) 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
Les structures de contrôle : conditionnelles & itératives
TD

TD’s

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

3) Multiplication Egyptienne { int a; int b; int res=0; cout<<"Entrez a:"<<endl;
3) Multiplication Egyptienne
{
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD
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’)
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
c
a c
Fin Tant que
Afficher(‘le PGCD est : a’)
a-b

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les structures de contrôle : conditionnelles & itératives TD
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
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

TD’s

#include<iostream>

using namespace std; int main()

4) PGCD { int a; int b; int c=0; int d=0; cout<<"Donnez a:"<<endl; cin>>a;
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
Les structures de contrôle : conditionnelles & itératives
TD

TD’s

5)Triangle de PASCAL (K) 0 1 2 3 4… 1 0 1 1 1 1
5)Triangle de PASCAL
(K)
0
1
2
3
4…
1
0
1
1
1
1
2
1
2
1
3
3
1
3
1
4
6
4
1
4
.
.
(n)

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

TD’s

5)Triangle de PASCAL n ! n !( n k + 1) k C = =
5)Triangle de PASCAL
n !
n
!(
n
k
+
1)
k
C
=
=
n
k
!(
n
k
)!
k
(
k
1)!(
n
k
+
1)(
n
k
)!
(
n
k
+1)
1
k
C
=
C k
n
n
k

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

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

TD’s

5)Triangle de PASCAL #include<iostream> using namespace std; int main() { int n, i, j, x;
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/01/2013

Institut Universitaire Professionnel de Nouakchott

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

TD’s

#include<iostream> //#include<cmath> using namespace std;

// #include<math.h>

Fonctions mathématiques int main() { float r=10; float rc=sqrt(r); float z=exp(r); float v=log(r); float x=sin(r);
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
Les tableaux
Structure de données permettant de rassembler un ensemble de données de même type dans une
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 ;
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,

M. OULD BECHIR

60

29/01/2013

29/01/2013 Institut Universitaire Professionnel de Nouakchott Les tableaux Tableau statique 1D/remplissage Remplissage

Institut Universitaire Professionnel de Nouakchott

Les tableaux
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 :’)
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 &
Parcourir un tableau par l’utilisateur
Pour i=0 à taille-1
Afficher(‘Notes[i]’)
Fin pour
Algorithmique & programmation C++ : LPRT : S1,

M.

OULD BECHIR

61

& programmation C++ : LPRT : S1, M. OULD BECHIR 61 Institut Universitaire Professionnel de Nouakchott

Institut Universitaire Professionnel de Nouakchott

Les tableaux
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} int
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}
int Notes[4]={0}
int Notes[4]={1}
// Notes[0]=2, Notes[1]=3, Notes[2]=0, Notes[3]=0
// Notes[0]=0, Notes[1]=0, Notes[2]=0, Notes[3]=0
// 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,

M.

OULD BECHIR

62

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
Les tableaux

Exemple: calcul d’une moyenne de notes

TD
TD

#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
Les tableaux

Tableau dynamique 1D

Tableau dont la taille peut varier Déclaration : Vector<type> NOM(taille) #include <vector> int const
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;
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,

M. OULD BECHIR

64

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
Les tableaux

Tableau dynamique 1D/parcours

On le remplit et on le parcours de la même façon que pour un tableau
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);
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()
Connaitre la taille :
Notes.Size()

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

65

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD
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)

{

moyenne += notes[i];

//On utilise notes.size() pour la limite de notre boucle

//On additionne toutes les notes

}

moyenne /= notes.size();

cout << "Votre moyenne est : " << moyenne << endl;

//On utilise à nouveau notes.size() pour obtenir le nombre de notes

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

66

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux
Les tableaux

Tableau multidimensionnel ND

Tableau de tableaux 2D Déclaration : TYPE NOM [taillex][tailley] int const taillex=5 ; int const
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
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
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 :
LPRT : S4, M. OULD BECHIR

67

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD
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;

tabl[x][y] << '\t'; cout << endl; } cin.ignore(); cin.get(); return EXIT_SUCCESS; }

}

cin.ignore();

cin.get();

return EXIT_SUCCESS;

} Programmation évènementielle & réseau :

LPRT : S4, M. OULD BECHIR

68

29/01/2013

Institut Universitaire Professionnel de Nouakchott

 
Les tableaux
Les tableaux
 

La Classe STRING

String en Anglais : Chaine de caractères Chaine de caractères=tableau de caractères !! Déclaration :
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 :
Taille:
String nomcomplet=nom+’ ‘+string prenom
nom.size()
 

Programmation évènementielle & réseau :

LPRT : S4, M. OULD BECHIR

69

Institut Universitaire Professionnel de Nouakchott

 
Les tableaux TD
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; cout << s3 << endl; int taille=s1.size(); cout << "La chaine comporte :"<<taille<<"caractères";

s3=str.substr(5,10);

// Affichera un espace entre les deux chaines

// Pour connaitre la taille de la chaine

 

cout<<s3;

pos = str.find("utilisation"); String str3 = str.substr (pos);

//renvoie la position de utilisation dans le texte // affiche le texte à partir de utilisation jusqu'à la fin

Programmation évènementielle & réseau :

LPRT : S4, M. OULD BECHIR

70

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD
Les tableaux
TD

TD’s

Int table[5];

Vector<int> tab(5);

Tab.size();

EXERCICES:

#include<iostream> using namespace std; int main() //remplissage sans boucle

{

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

}

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,

M. OULD BECHIR

71

Institut Universitaire Professionnel de Nouakchott

Les tableaux TD
Les tableaux
TD

TDs

1)

Remplissage/Lecture d’un tableau 1D

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

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott Les tableaux TD TD’s 2) Recherche du minimum dans un
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott Les tableaux TD TD’s 4) Recherche d’une valeur dans un
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
i
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott Les références & les pointeurs * & Un pointeur est
Institut Universitaire Professionnel de Nouakchott
Les références & les pointeurs
*
&
Un pointeur est typé:
int *pointeur;
*i: représente l'adresse mémoire de la variable i Pointeur
&i: désigne l'objet pointé par le pointeur i Référence
double *pointeurA;
unsigned int *pointeurB;
string *pointeurC;
//Un pointeur qui peut contenir l'adresse d'un nombre a virgule
//Un pointeur qui peut contenir l'adresse d'un nombre entier positif
//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;
La case 0, n'existe pas le pointeur ne contient l’adresse d’aucune case
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;
int * ptr(0);
ptr
ptr=&i;
Mémoire
2
1
6
6
9
i
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs
Les références & les pointeurs
Déroulement 2 Cout<<*ptr; ptr Mémoire 2 1 6 6 9 1) 2) Aller dans la
Déroulement 2
Cout<<*ptr;
ptr
Mémoire
2
1
6
6
9
1)
2)
Aller dans la case mémoire nommée ptr
Lire la valeur enregistrée
3)
4)
Suivre la flèche pour aller à l'adresse pointée
Lire la valeur stockée
5)
Afficher cette valeur
Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

79

Institut Universitaire Professionnel de Nouakchott

Les références & les pointeurs
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); ptr = &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;

}

//déclaration d'un pointeur pouvant pointer vers une variable de type réel // pointage du pointeur ptr vers la variable note

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

29/01/2013

Institut Universitaire Professionnel de Nouakchott Les références & les pointeurs Exercice: Les tableaux et les
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>
Adresse
Variable
using namespace std;
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 2 nd 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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

 
Les fonctions & les procédures
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 ;
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
Les fonctions & les procédures
 

Exemples

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

Algorithmique & programmation C++ : LPRT : S1,

84

 

M.

OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures
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
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)
y
2
b = a ;
(4)
a = aux ;
// on détruit ici les copies a et b
a
3
(5)
}
b
2
int main()
{
aux
2
int x,y ;
b
3
(1)
x=3 ;
a
2
y=2 ;
permuter(x,y) ;
x
3
cout<<" x = "<<x ;
(6)
}

(1)

(2)

(3)

(4)

(5

(6)

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

85

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures
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
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
2
(4)
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
2
(6)
permuter(x,y) ;
(6)
cout<<" x = "<<x ;
}
Algorithmique & programmation C++ : LPRT : S1,
M.
OULD BECHIR

86

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures
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
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,

M. OULD BECHIR

87

Institut Universitaire Professionnel de Nouakchott

Les fonctions & les procédures
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;
#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,
}
M. OULD BECHIR

88

29/01/2013

Institut Universitaire Professionnel de Nouakchott

 
Les fonctions & les procédures
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
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é
La récursivité
 
Définition : Une fonction récursive est une fonction qui s’appelle elle-même. F(F(x))
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 »
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
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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

La récursivité
La récursivité

Exemples

Factorielle: int Fact(int n) // AVEC UNE BOUCLE { int resultat = 1; for(int i
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) {
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 récursivité
La récursivité

Exemples

Algorithme du PGCD : #include<iostream> using namespace std; void Echanger(int &i, int &j)
Algorithme du PGCD :
#include<iostream>
using namespace std;
void Echanger(int &i, int &j)
//Procédure ECHANGER
{
int aux;
aux=i;
i=j;
j=aux;
}
int pgcd(int &a, int &b)
//pgcd récursif
{
int d=0;
while (a!=b)
{
if(a<b)
{ Echanger(a, b); }
d=a-b;
a=d;
pgcd(a,b);
}
return a; }
int main() { int a,b; cout<<"Donnez a:"<<endl; cin>>a; cout<<"Donnez
int main()
{
int a,b;
cout<<"Donnez a:"<<endl;
cin>>a;
cout<<"Donnez b:"<<endl;
cin>>b;
int r=pgcd(a,b);
cout<<"le PGCD est:"<<r<<endl;
}

92

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
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,

M. OULD BECHIR

93

Institut Universitaire Professionnel de Nouakchott

Les tris
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'itérations (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

29/01/2013

Institut Universitaire Professionnel de Nouakchott Les tris Tri à bulles #include<iostream> Programme using
Institut Universitaire Professionnel de Nouakchott
Les tris
Tri à bulles
#include<iostream>
Programme
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 = 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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Les tris
Les tris

Tri par sélection

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'itérations (moyenne et pire des cas)

Nombe de permutations:n(n-1)

Complexité: O(n2)

Algorithmique & programmation C++ : LPRT : S1,

97

 

M.

OULD BECHIR

Institut Universitaire Professionnel de Nouakchott

Les tris
Les tris

Tri par sélection

#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 = 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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

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

Int indicemin(int T[], int rang, int nbelements) variables: int i, int indiceRecherche { indiceRecherche=rang Pour i=rang+1 à nbelements

Fpour

si T[i]<T[indiceRecherche] indiceRecherche=i

Fsi

alors

Retourner indiceRecherche

}

Algo.:

Void TriMinSuccessif(int T[], int nbelements) variables: int i, int indiceRecherche { indiceRecherche=rang Pour i=1 à nbelements-1

Fpour

}

si( i!=indiceRecherche) Permuter(T[i],T[indice]) Fsi

alors

Algorithmique & programmation C++ : LPRT : S1,

M. OULD BECHIR

99

Institut Universitaire Professionnel de Nouakchott Les tris void Echanger(int &i, int &j) //Procédure ECHANGER
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};
int longueur = sizeof(tabl) / sizeof(int);
TriMinSuccessif(tabl,longueur);
for(int k=0;k<=7;k++) //Affichage
cout<< tabl[k] << endl;
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,
100
}
M. OULD BECHIR
}

29/01/2013

Institut Universitaire Professionnel de Nouakchott Les tris Tri rapide (pivot): récursif Principe • Choisir un
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
tant que T[j]>pivot
faire i=i+1
Fin tq
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 tabl[] = {10, 4, 5, 2, 1, 7, 10, 3};
int gauche=0;
int droite= (sizeof(tabl) / sizeof(int))-1;
TriRapide(tabl, gauche, droite);
for(int k=0;k<=7;k++) //pour le tri croissant
cout<< tabl[k] << endl;
//int j= (sizeof(T) / sizeof(int))-1;
int pivot=T[(i+j)/2];
do {
while(T[i]<pivot){i=i+1;}
while(T[j]>pivot) {j=j-1;}
if(i<=j){
aux=T[i];
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

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

29/01/2013

Institut Universitaire Professionnel de Nouakchott

Algorithmes célèbres!!!

 

3) Algorithme de Fourmis: voyageur du commerce

Algorithmique & programmation C++ : LPRT : S1,

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

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

107