SlideShare una empresa de Scribd logo
1 de 193
Descargar para leer sin conexión
Cours de C++
Fran¸cois Laroussinie
Dept. d’Informatique, ENS de Cachan
2 novembre 2005
Premi`ere partie I
Introduction
Introduction
Introduction
Algorithme et programmation
Algorithme: m´ethode pour r´esoudre un probl`eme
Pour un probl`eme donn´e, il peut y avoir plusieurs
algorithmes. . . ou aucun !
NB: pour la plupart des probl`emes int´eressants, il n’existe pas
d’algorithme (ni aujourd’hui, ni demain !)
Dans les probl`emes qui restent, la grande majorit´e ont des
algorithmes beaucoup trop durs pour ˆetre utilis´es !
On cherche des algorithmes simples, efficaces, ´el´egants. . .
Programme: . . . s’adresse `a une machine !
Introduction
Le langage C++
D´ebut en 1983.
Am´elioration du langage C:
Abstraction de donn´ees
Programmation orient´ee objet
Programmation g´en´erique
tr`es utilis´e !
Introduction
Programmer
Une fois trouv´e l’algorithme, programmer en C++ comporte 3
phases:
1. Editer le programme – avec votre ´editeur de texte favori. . .
Introduction
Programmer
Une fois trouv´e l’algorithme, programmer en C++ comporte 3
phases:
1. Editer le programme – avec votre ´editeur de texte favori. . .
2. Compiler le programme (avec g++)
Introduction
Programmer
Une fois trouv´e l’algorithme, programmer en C++ comporte 3
phases:
1. Editer le programme – avec votre ´editeur de texte favori. . .
2. Compiler le programme (avec g++)
3. Ex´ecuter le programme
Introduction
Programmer
Une fois trouv´e l’algorithme, programmer en C++ comporte 3
phases:
1. Editer le programme – avec votre ´editeur de texte favori. . .
2. Compiler le programme (avec g++)
3. Ex´ecuter le programme
. . .
4. TESTER et DEBUGGER : retour au point 1 !
C¸a peut durer assez longtemps...
Introduction
Un exemple
L’in´evitable hello world:
#i n c l u d e <iostream>
using namespace std ;
i n t main () {
cout << ” h e l l o world !” << endl ;
}
D´emo...
Deuxi`eme partie II
Structures de base du C++
Plan
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Plan
Programmation
Les briques de base du langage:
Ce qui permet de stocker des donn´ees: types, variables,
tableaux, etc.
Les expressions qui permettent de manipuler les donn´ees.
Les instructions pour construire les algorithmes.
Types, variables...
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Types, variables...
Types ´el´ementaires
int : entiers (au min 16 bits, pour des valeurs ≤ 32767)
(d’autres formats existent: long int (min 32 bits), short
int, unsigned int) . . .
(float), double et long double : nombres `a virgule
flottante (en g´en´eral 15 chiffres sign. pour double).
Par ex. 23.3 ou 2.456e12 ou 23.56e − 4
char : caract`eres (’a’,’b’,. . . ’A’,. . . ,’:’,. . . ).
bool : bool´eens (’true’ ou ’false’).
(Et: 0 ≡ false ; tout entier non nul ´equivaut `a false)
(Et aussi: des types particuliers pour les tailles de tableaux, de
chaˆınes de caract`eres, d’objets etc. size t, ::size type)
Types, variables...
D´efinition de variable
Syntaxe : type v;
int p ;
double x ;
Toute variable doit ˆetre d´efinie avant d’ˆetre utilis´ee !
Une d´efinition peut apparaˆıtre n’importe o`u dans un
programme.
Une variable est d´efinie jusqu’`a la fin de la premi`ere instruction
compos´ee (marqu´ee par }) qui contient sa d´efinition.
(Une variable d´efinie en dehors de toute fonction – et de tout
espace de nom – est une variable globale).
Types, variables...
D´efinition de variable
Une variable peut ˆetre initialis´ee lors de sa d´eclaration, deux
notations sont possibles :
int p=34 ;
double x=12.34 ;
int p (34) ;
double x (12.34) ;
Une variable d’un type ´el´ementaire qui n’est pas initialis´ee, n’a pas
de valeur d´efinie: elle peut contenir n’importe quoi.
Types, variables...
Constantes symboliques
Syntaxe : const type nom = val;
Par exemple: const int Taille = 100 ;
Il ne sera pas possible de modifier Taille dans le reste du
programme (erreur `a la compilation). . .
Types, variables...
Chaˆınes de caract`eres
Il existe une classe string, ce n’est un pas un type ´el´ementaire.
Pour l’utiliser, il faut placer tˆete du fichier :
# include <string>
string t ; d´efinit t comme une variable...
string s(25,’a’) ;
string mot = "bonjour" ;
s.size() repr´esente la longueur de s
s[i] est le i-`eme caract`ere de s ( i = 0,1,. . . s.size()-1)
s+t est une nouvelle chaˆıne correspondant `a la concat´enation
de s et t.
NB: il existe une autre sorte de chaˆıne de caract`eres en C/C++
Types, variables...
Tableaux
Pour utiliser la classe vector, il faut placer en tˆete du fichier :
# include <vector>
Un tableau est typ´e:
vector<int> Tab(100,5) ;
vector<int> Tab(50) ;
vector<double> T ;
Structure g´en´erale: vector< type > Nom(n,v) ;
vector< type > Nom1 = Nom2 ;
→ les valeurs de Nom2 sont alors recopi´ees dans Nom1.
T.size() correspond `a la taille de T.
NB: size() renvoie en fait un entier non sign´e, son type
exact est vector<type>::size type
Types, variables...
Tableaux
T[i] d´esigne le i-`eme ´el´ement avec i = 0, . . . T.size()-1.
vector<vector<int> > T d´efinit un tableau `a deux
dimensions.
Pour l’initialiser, on peut utiliser l’instruction suivante :
vector<vector<int> >
T2(100,vector<int>(50,1)) ;
. . . on initialise chacune des 100 cases de T1 avec un tableau
de taille 50 rempli de 1.
Expressions
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Expressions
Affectation
En C/C++, l’affectation est une expression:
Soient v une variable (au sens large) et expr une expression.
v = expr affecte la valeur de expr `a la variable v et retourne la
valeur affect´ee `a v comme r´esultat.
Par exemple, i = (j = 0) affecte 0 `a j puis `a i et retourne 0 !!
Expressions
Op´erateurs classiques
Op´erateurs arithm´etiques:
*, +, -, / (division enti`ere et r´eelle), % (modulo)
Op´erateurs de comparaison
< (inf´erieur), <= (inf´erieur ou ´egal), == (´egal), > (sup´erieur),
>= (sup´erieur ou ´egal) et != (diff´erent)
Op´erateurs bool´eens
&& repr´esente l’op´erateur “ET”, || repr´esente le “OU”, et !
repr´esente le “NON”.
Par exemple, ((x<12) && ((y>0) || !(z>4)))
Expressions
Pr´e et Post incr´ement
++var incr´emente la variable var et retourne la nouvelle valeur.
(++i ´equivaut `a i=i+1)
var++ incr´emente la variable var et retourne l’ancienne valeur.
(i++ ´equivaut `a (i=i+1)-1)
En dehors d’une expression, i++ et ++i sont donc ´equivalentes.
Expressions
Pr´e et Post d´ecr´ement
L’expression --var d´ecr´emente la variable var et retourne la
nouvelle valeur.
L’expression var-- d´ecr´emente la variable var et retourne
l’ancienne valeur.
Instructions
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Instructions
Instructions usuelles
d´efinition de variables, fonctions, types etc.
expr ;
{ liste d’instructions } : instruction compos´ee.
if (expr) instr
if (expr) instr1 else instr2
if (v == 3) i =i+4 ;
if ((v==3) && (i<5))
{ i=i+4 ;
v=v*2 ;}
else v=i ;
r = r*3 ;
Instructions
La boucle FOR
for (expr1 ;expr2 ;expr3) instr
  ¡ ¢ £ ¤ ¥ ¦ §
¨ ©   
    
  ! 
# $ % 
#

' ( )
Ex: for(i=0 ;i235 ;i=i+1) cout  T[i] ;
for(i=0,j=1 ;i235 ;i=i+1,j=j+3) cout  T[i][j] ;
Instructions
La boucle WHILE
while (expr) instr
  ¡ ¢ £ ¤ ¥ ¦
§ ¨ ©
Instructions
La boucle DO
do instr while (expr) ;
  ¡ ¢ £ ¤ ¥ ¦
§ ¨ ©
  
 §
Entr´ees - Sorties
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Entr´ees - Sorties
Afficher `a l’´ecran
Pour utiliser les entr´ees/sorties, il faut ajouter:
# include iostream
Syntaxe : cout   expr1   . . .   exprn ;
Cette instruction affiche expr1 puis expr2. . .
Afficher un saut de ligne se fait au moyen de cout   endl.
int i=45 ;
cout  la valeur de i est   i  endl ;
Entr´ees - Sorties
Afficher `a l’´ecran
Syntaxe : cout   expr1   . . .   exprn ;
cout (ou std::cout) d´esigne le “flot de sortie” standard.
  est un op´erateur binaire:
le premier op´erande est cout (de type “flot de sortie”)
le second op´erande est l’expression `a afficher
le r´esultat est de type “flot de sortie’
  est associatif de gauche `a droite
  est surcharg´e (ou sur-d´efini): on utilise le mˆeme op´erateur
pour afficher des caract`eres, des entiers, des r´eels ou des
chaˆınes de caract`eres etc.
Entr´ees - Sorties
Lire au clavier
Syntaxe : cin   var1   . . .   varn ;
Cette instruction lit (au clavier) des valeurs et les affecte `a var1
puis var2 . . .
cin est le flot d’entr´ee standard, et   est un op´erateur similaire `a
 .
Les caract`eres tap´es au clavier sont enregistr´es dans un buffer dans
lequel les cin viennent puiser des valeurs. Les espaces, les
tabulations et les fins de lignes sont des s´eparateurs.
Exemples
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Exemples
Exemples...
chaine.cc
tab.cc
es.cc
Evaluation des expressions
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Evaluation des expressions
Evaluation des expressions
Priorit´e des op´erateurs :
x[y] x++ x--
++x --x !x -x
x*y x/y x% y
x+y x-y
x  y x  y
x  y x  y x = y x = y
x == y x != y
x  y
x || y
x = y x op= y
x ? y : z
Evaluation des expressions
Evaluation des expressions bool´eennes
Dans e1  e2, la sous-expression e2 n’est ´evalu´ee que si e1
a ´et´e ´evalu´ee `a ’true’.
if (i =0  T[i]  20) blabla
Dans e1 || e2, la sous-expression e2 n’est ´evalu´ee que si e1
a ´et´e ´evalu´ee `a ’false’.
if (i0 || T[i]  20) blabla
Evaluation des expressions
Evaluation des expressions arithm´etiques
Si une (sous-)expression m´elange plusieurs types, c’est le type le
plus large qui est utilis´e.
int i=3,j=2,m ;
double r=3.4 ;
m = (i/j)*r ;
D’abord l’expression (i/j) est ´evalu´ee: / d´esigne ici la
division enti`ere, cela donne donc 1.
Pour ´evaluer le produit 1*r, il faut convertir 1 en double
(1.0) et faire le produit sur les doubles, cela donne 3.4
Pour l’affectation, comme m est entier, 3.4 est converti en
int. Finalement on a m = 3.
Evaluation des expressions
Evaluation des expressions arithm´etiques
• Pour ´eviter les erreurs, il est possible de convertir explicitement
des donn´ees d’un certain type en un autre.
Par exemple:
int i=3,j=2,m ;
double r=3.4 ;
m = (double(i)/j)*r ;
Donne...
Evaluation des expressions
Evaluation des expressions arithm´etiques
• Pour ´eviter les erreurs, il est possible de convertir explicitement
des donn´ees d’un certain type en un autre.
Par exemple:
int i=3,j=2,m ;
double r=3.4 ;
m = (double(i)/j)*r ;
Donne... 5 !
Evaluation des expressions
Evaluation des expressions arithm´etiques
• Pour ´eviter les erreurs, il est possible de convertir explicitement
des donn´ees d’un certain type en un autre.
Par exemple:
int i=3,j=2,m ;
double r=3.4 ;
m = (double(i)/j)*r ;
Donne... 5 !
• L’´evaluation d’une expression arithm´etique ne se fait pas toujours
de gauche `a droite !
Ex: (i/j)*(r/3)
(d´emo)
Structure g´en´erale d’un programme C++
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Structure g´en´erale d’un programme C++
Structure g´en´erale d’un programme
Un programme C++ est r´eparti dans un ou plusieurs fichiers.
Chacun peut contenir des d´efinitions/d´eclarations de fonctions, des
d´efinitions de types et des d´efinitions de variables globales.
Il existe une seule fonction main: c’est la fonction qui sera
ex´ecut´ee apr`es la compilation.
Le profil de main est : int main() ou int main( int argc,
char ** argv ) pour passer des arguments.
Exemple de programme complet. . .
Structure g´en´erale d’un programme C++
Structure g´en´erale d’un programme
Un programme complet:
#include iostream
void test(int j)
{ cout  j  endl ; }
int main()
{
int i =20 ;
cout  bonjour  endl ;
test(i) ;
}
Proc´edures et fonctions
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Proc´edures et fonctions
D´efinition de fonction
type nom( liste des param`etres) { corps }
type est le type du r´esultat de la fonction.
(void si il s’agit d’une proc´edure)
La liste des param`etres (param`etres formels):
type1 p1, ..., typen pn
Le corps d´ecrit les instructions `a effectuer.
Le corps utilise ses propres variables locales, les ´eventuelles
variables globales et les param`etres formels.
Si une fonction renvoie un r´esultat, il doit y avoir (au moins)
une instruction return expr ;
Dans le cas d’une proc´edure, on peut utiliser: return ;
Proc´edures et fonctions
Exemple
int max(int a,int b)
{
int res=b ;
if (ab) res = a ;
return res ;
}
Proc´edures et fonctions
Appel d’une fonction
nom(liste des arguments)
La liste des arguments (param`etres r´eels) est expr1, expr2, . . . exprn
o`u chaque expri est compatible avec le type typei du param`etre
formel pi.
Exemple :
int k=34, t=5, m ;
m = max(k,2*t+5) ;
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x”
“y”
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y”
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z”
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z”
“a” 10
“b” 5
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z”
“a” 10
“b” 5
“res” 5
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z”
“a” 10
“b” 5
“res” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z”
“a” 10
“b” 5
“res” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z” 10
———————————–
z = 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
Fin
Proc´edures et fonctions
Afficher le contenu d’un tableau d’entiers
void AfficherTab(vectorint T)
{
for (int i=0 ; i T.size() ; i++)
cout  T[i]    ;
}
Proc´edures et fonctions
Saisie d’un tableau d’entiers
Proc´edures et fonctions
Saisie d’un tableau d’entiers
vectorint SaisieTab()
{
int taille ;
cout   Entrer une taille :  ;
cin  taille ;
vectorint res(taille,0) ;
for (int i=0 ; i taille ; i++) {
cout   val =  ;
cin  res[i] ;
}
return res ;
}
Proc´edures et fonctions
Recherche du plus grand ´el´ement
Proc´edures et fonctions
Recherche du plus grand ´el´ement
int Recherche(vectorint T)
{
if (T.size()==0) {
cout  ‘‘Erreur ! Tableau vide !’’  endl ;
return -1 ; }
int res=T[0] ;
for (int i=1 ; iT.size() ;i++)
if (T[i]  res) res=T[i] ;
return res ;
}
Proc´edures et fonctions
Recherche de l’indice du plus grand ´el´ement
Proc´edures et fonctions
Recherche de l’indice du plus grand ´el´ement
int RechercheInd(vectorint T)
{
if (T.size()==0) {
cout  ‘‘Erreur ! Tableau vide !’’  endl ;
return -1 ; }
int res=0 ;
for (int i=1 ; iT.size() ;i++)
if (T[i]  T[res]) res=i ;
return res ;
}
Proc´edures et fonctions
Port´ee des identificateurs
Un identificateur XXX peut ˆetre utilis´e `a la ligne l de la d´efinition
d’une fonction F ssi:
XXX est une variable d´efinie dans une instruction compos´ee
contenant l.
XXX est un param`etre de F.
(XXX est une variable globale, i.e. d´efinie hors de toute
fonction.)
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x”
“y”
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y”
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z”
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“a” 10
“b” 5
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“a” 10
“b” 5
“res” 5
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“a” 10
“b” 5
“res” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“a” 10
“b” 5
“res” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z” 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
“x” 5
“y” 10
“z” 10
———————————–
z = 10
Proc´edures et fonctions
Exemple
int max(int a,int b)
{int res=b ;
if (ab) res = a ;
return res ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
int z = max(y,x) ;
cout z = z ; }
Fin
Proc´edures et fonctions
Passage de param`etres par valeur
Par d´efaut, les param`etres d’une fonction sont initialis´es par une
copie des valeurs des param`etres r´eels.
Modifier la valeur des param`etres formels dans le corps de la
fonction ne change pas la valeur des param`etres r´eels.
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x”
“y”
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y”
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10 “a” 10
“b” 5
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10 “a” 10
“b” 5
“aux” 5
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10 “a” 10
“b” 10
“aux” 5
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10 “a” 5
“b” 10
“aux” 5
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10
———————————–
x = 5
Proc´edures et fonctions
Essai de permutation
void permut(int
a,int b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
Proc´edures et fonctions
Passage des param`etres par r´ef´erence
Pour modifier la valeur d’un param`etre r´eel dans une fonction, il
faut passer ce param`etre par r´ef´erence.
Une r´ef´erence sur une variable est un synonyme de cette variable,
c’est-`a-dire une autre mani`ere de d´esigner le mˆeme emplacement
de la m´emoire.
On utilise le symbole  pour la d´eclaration d’une r´ef´erence:
Dans la liste des param`etres de la d´efinition d’une fonction, type 
pi d´eclare le param`etre pi comme ´etant une r´ef´erence sur le ieme
param`etre r´eel vi .
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x”
“y”
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y”
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10“a”
“b”
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 5
“y” 10“a”
“b”
“ aux ” 5
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 10
“y” 10“a”
“b”
“ aux ” 5
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 10
“y” 5“a”
“b”
“ aux ” 5
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 10
“y” 5
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
“x” 10
“y” 5
———————————
x = 10
Proc´edures et fonctions
Permutation
void permut(int  a,int  b)
{int aux = b ;
b = a ;
a = aux ; }
...
int main() {
int x,y ;
x=5 ;
y=10 ;
permut(y,x) ;
cout x = x ; }
Fin
Proc´edures et fonctions
Passage par r´ef´erence
Il faut que les param`etres r´eels soient compatibles avec un
passage par r´ef´erence. . .
permut(x,5) n’est pas possible !
Usage “bizarre” des r´ef´erences dans la liste des param`etres:
const type  p
Id´ee: le passage par r´ef´erence est plus efficace que le passage
par valeur car il ´evite la recopie des arguments car seule
l’adresse m´emoire de l’argument est communiqu´ee `a la
fonction.
Proc´edures et fonctions
Exercice . . .
Algorithmes de tri
Comment trier un tableau d’entiers ?
Proc´edures et fonctions
Exercice . . .
Algorithmes de tri
Comment trier un tableau d’entiers ?
rechercher le plus grand ´el´ement et le placer `a la fin du tableau
recherche le deuxi`eme plus grand et le placer en
avant-derni`ere position
etc.
Proc´edures et fonctions
Exercice . . .
Algorithmes de tri
Comment trier un tableau d’entiers Tab ?
Pour IndFin = Tab.size()-1 ... 1 faire
rechercher l’indice IMAX du plus grand ´el´ement de Tab entre
les indices 0 `a IndFin.
Permuter les ´el´ements plac´es en IMAX et IndFin.
Proc´edures et fonctions
Exercice . . .
Algorithmes de tri
Comment trier un tableau d’entiers Tab ?
Pour IndFin = Tab.size()-1 ... 1 faire
rechercher l’indice IMAX du plus grand ´el´ement de Tab entre
les indices 0 `a IndFin.
Permuter les ´el´ements plac´es en IMAX et IndFin.
A la premi`ere ´etape, on s´electionne le plus grand ´el´ement et on le
place `a la fin du tableau ; puis on trouve le deuxi`eme plus grand et
on le place `a l’avant-derni`ere place etc.
Proc´edures et fonctions
Fonction de s´election
int RechercheInd(vectorint T, int imax)
{
if (T.size()  imax-1) {
cout  Erreur ! Tableau trop petit !   endl ;
return -1 ; }
int res=0 ;
for (int i=1 ; i= imax ;i++)
if (T[i]  T[res]) res=i ;
return res ;
}
Proc´edures et fonctions
Fonction de s´election
vectorint Trier(vectorint T)
{
vectorint Taux = T ;
int aux ;
for (int i=Taux.size()-1 ; i0 ; i--) {
aux = RechercheInd(Taux,i) ;
Permuter(Taux[aux],Taux[i]) ;
}
return Taux ;
}
Proc´edures et fonctions
Fonction de s´election
Tri in situ avec passage par r´ef´erence
void Trier(vectorint  T)
Proc´edures et fonctions
Fonction de s´election
Tri in situ avec passage par r´ef´erence
void Trier(vectorint  T)
{
int aux ;
for (int i=T.size()-1 ; i0 ; i--) {
aux = RechercheInd(Taux,i) ;
Permuter(T[aux],T[i]) ;
}
}
R´ecursivit´e
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
R´ecursivit´e
Fonctions r´ecursives
La factorielle...
int fact(int n)
{
assert(n=0) ;
if (n==0) return 1 ;
return n*fact(n-1) ;
}
R´ecursivit´e
Les tours de Hanoi
void Hanoi(int nb,int p1, int p2)
{
if (nb  0) {
int p3 = 6-p1-p2 ;
Hanoi(nb-1,p1,p3) ;
cout  On bouge le Pion   nb   vers  
p2 ;
Hanoi(nb-1,p3,p2) ;
}
}
Compl´ements sur les fonctions
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Compl´ements sur les fonctions
Valeurs par d´efaut des param`etres
On peut attribuer des valeurs par d´efaut aux param`etres d’une
fonction.
int max(int a,int b =0)
{
if (ab) return a ;
else return b ;
}
Compl´ements sur les fonctions
Recherche dichotomique
int RechDicho(vectordouble Tab,int bg, int
bd,double x)
{ if (bg  bd) return -1 ;
int M = (bg+bd)/2 ;
if (Tab[M]==x) return M ;
if (Tab[M]  x)
return RechDicho(Tab,bg,M-1,x) ;
else return RechDicho(Tab,M+1,bd,x) ;
}
int Recherche(vectordouble Tab,double x)
{ int taille = Tab.size() ;
if (taille == 0) return -1 ;
return RechDicho(Tab,0,taille-1,x) ;
}
Compl´ements sur les fonctions
Recherche dichotomique
int Recherche(vectordouble Tab, double x,
int bg =-1, int bd =-1)
{ if((bg==-1)(bd ==-1))
return Recherche(Tab,x,0,Tab.size()-1) ;
if (bg  bd) return -1 ;
int M = (bg+bd)/2 ;
if (Tab[M]==x) return M ;
if (Tab[M]  x)
return Recherche(Tab,x,bg,M-1) ;
else return Recherche(Tab,x,M+1,bd) ;
}
Appel directement avec: Recherche(T,10.3)
Compl´ements sur les fonctions
Fonctions inline
Pour de petites fonctions, il peut ˆetre plus efficace (= rapide)
d’´eviter un appel de fonction et `a la place, expanser le corps de la
fonction en lieu et place de chaque appel.
C’est possible avec le mot cl´e inline.
inline int max(int a,int b =0)
{
if (ab) return a ;
else return b ;
}
Compl´ements sur les fonctions
Le tri fusion
Principe:
Pour trier un tableau T entre les indices a et b:
On trie entre a et a+b
2
On trie entre a+b
2 et b
On construit un tableau tri´e `a partir des sous-parties tri´ees.
Port´ee, visibilit´e, dur´ee de vie des variables
void Tri fusion(vectorint  T,int bg =-1, int bd
=-1)
{
if ((bg==-1)  (bd==-1)) {
bg=0 ;
bd=int(T.size()) -1 ;
}
int k ;
if (bg  bd) {
k = (bg+bd)/2 ;
Tri fusion(T,bg,k) ;
Tri fusion(T,k+1,bd) ;
Fusion(T,bg,k,bd) ;
}
Port´ee, visibilit´e, dur´ee de vie des variables
}
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Port´ee, visibilit´e, dur´ee de vie des variables
Port´ee d’un identificateur
La port´ee d’un identificateur correspond aux parties du programme
o`u cet identificateur peut ˆetre utilis´e sans provoquer d’erreur `a la
compilation.
La port´ee d’une variable globale ou d’une fonction globale est ´egale
au programme.
La port´ee d’une variable locale va de sa d´efinition jusqu’`a la fin de
la premi`ere instruction compos´ee ({...}) qui contient sa d´efinition.
Deux variables peuvent avoir le mˆeme nom mais dans ce cas, elle
doivent avoir deux port´es diff´erentes.
Port´ee, visibilit´e, dur´ee de vie des variables
Port´ee
{
int i=3 ;
{
int i=5 ;
cout  i ; // affiche 5
}
cout  i ; // affiche 3
}
Les deux variables ont des port´ees diff´erentes !
Exemple. . .
Port´ee, visibilit´e, dur´ee de vie des variables
Visibilit´e
• La visibilit´e d’une variable dit quand elle est accessible
La visibilit´e est inclue dans la port´ee...
• La dur´ee de vie d’une variable correspond `a la p´eriode depuis
cr´eation `a sa destruction.
Dur´ee de vie et port´ee co¨ıncident pour toutes les variables que
nous avons ´evoqu´ees jusqu’ici.
mais . . .
Port´ee, visibilit´e, dur´ee de vie des variables
Variables static
L’espace m´emoire d’une variable locale d´eclar´ee static est allou´e
une seule fois et n’est d´etruit qu’`a la fin du programme !
void Test(int v)
{
static int compteur=0 ;
compteur++ ;
cout  compteur  -eme appel de Test endl ;
cout   v =   v  endl ;
}
Sa dur´ee de vie est celle du programme.
Port´ee, visibilit´e, dur´ee de vie des variables
Hanoi (suite)
Obj: compter le nombre d’appels `a la proc´edure Hanoi.
void Hanoi(int nb,int p1, int p2, int affichage=0)
{ static int NB = 0 ;
NB++ ;
if (affichage == 1) {
cout  NB   appels de Hanoi 
return ; }
if (nb  0) {
int p3 = 6-p1-p2 ;
Hanoi(nb-1,p1,p3) ;
cout  On bouge le Pion   nb   vers le
piquet   p2  endl ;
Hanoi(nb-1,p3,p2) ;
}
}
Port´ee, visibilit´e, dur´ee de vie des variables
Espace de noms
Un programme important utilise de nombreuses biblioth`eques,
fonctions etc. Pour ´eviter les probl`emes de conflit de noms, on
utilise des espaces de noms (namespace) :
on associe un nom `a un ensemble de variables, types,
fonctions.
leur nom complet est: leur nom d’espace suivi de :: et de leur
nom.
Ex. la fonction int fct(){...} d´efinie dans le domaine A
aura pour nom complet A::fct()
Les noms complets de cout et cin sont std::cout et
std::cin.
Pour ´eviter d’´ecrire les noms complets , on utilise:
using namespace std ;
Port´ee, visibilit´e, dur´ee de vie des variables
Cr´eer un espace de nom
namespace toto {
int N = 10 ;
int Test()
{
cout  test...  ;
}
}
Les objets N et Test ont pour nom toto::N et toto::Test
Compl´ements
Plan
2 Types, variables...
3 Expressions
4 Instructions
5 Entr´ees - Sorties
6 Exemples
7 Evaluation des expressions
8 Structure g´en´erale d’un programme C++
9 Proc´edures et fonctions
10 R´ecursivit´e
11 Compl´ements sur les fonctions
12 Port´ee, visibilit´e, dur´ee de vie des variables
13 Compl´ements
Compl´ements
Compl´ements - 1
Instructions suppl´ementaires:
break provoque l’arrˆet de la premi`ere instruction do, for,
switch ou while englobant.
continue provoque (dans une instruction do, for, ou while)
l’arrˆet de l’it´eration courante et le passage au d´ebut de
l’it´eration suivante.
switch (exp) {
case cste1 : liste d’instructions1
...
case csten : liste d’instructionsn
default: liste d’instructions
}
Compl´ements
Compl´ements - 2
(exp) ? exp1 : exp2 vaut exp1 si exp est ´evalu´ee `a vrai et
exp2 sinon.
m = (i  j) ? i : j
var op= expr d´esigne l’expression var = var op expr
(op ∈ {+,-,*,/,%})
int i=2,j=34 ;
i += 2 ;
j *= 10 ;
j *= (i++) ;
int i=2,j=34 ;
i = i+2 ;
j = j*10 ;
j = j*i ;
i = i+1 ;
Compl´ements
Compl´ements - 2
(exp) ? exp1 : exp2 vaut exp1 si exp est ´evalu´ee `a vrai et
exp2 sinon.
m = (i  j) ? i : j
var op= expr d´esigne l’expression var = var op expr
(op ∈ {+,-,*,/,%})
int i=2,j=34 ;
i += 2 ;
j *= 10 ;
j *= (i++) ;
int i=2,j=34 ;
i = i+2 ;
j = j*10 ;
j = j*i ;
i = i+1 ;
A la fin, on a: i==5 et j==1360
Troisi`eme partie III
Classes C++
Introduction
Plan
14 Introduction
15 Regroupement de donn´ees
16 Classes C++
Champs et m´ethodes
Constructeurs et destructeurs
Fonctions amies
Conversions entre types
17 Surcharge d’op´erateurs
Introduction
Introduction
Un algorithme n’utilise pas que des objets de type int, double ou
bool...
´etats et transitions lorsqu’on parle de graphes.
Piquet et pions pour Hanoi
Fractions
Piles
Un programme doit “coller” `a l’algorithme !
Introduction
De nouveaux types
Il faut pouvoir d´efinir de nouveaux types de donn´ees.
D´efinir des variables de ce types, les manipuler dans les fonctions
etc.
Introduction
De nouveaux types
Il faut pouvoir d´efinir de nouveaux types de donn´ees.
D´efinir des variables de ce types, les manipuler dans les fonctions
etc.
Un type de donn´ees = regroupement de donn´ees + des op´erations
Comme les types de base !
Regroupement de donn´ees
Plan
14 Introduction
15 Regroupement de donn´ees
16 Classes C++
Champs et m´ethodes
Constructeurs et destructeurs
Fonctions amies
Conversions entre types
17 Surcharge d’op´erateurs
Regroupement de donn´ees
Regroupement de donn´ees
Exemple: une base de donn´ees pour les notes des ´etudiants.
Regroupement de donn´ees
Regroupement de donn´ees
Exemple: une base de donn´ees pour les notes des ´etudiants.
Chaque fiche d’´etudiant contient :
un nom et un pr´enom
un num´ero d’inscription
un ensemble de notes
Une “base de donn´ees” pour une promo = un ensemble de fiches
Regroupement de donn´ees
Fiche d’´etudiants. . .
D´efinir le type fiche:
s t r u c t FicheEtudiant {
s t r i n g Nom;
s t r i n g Prenom ;
i n t Numero ;
vector double Notes ;
};
Ce n’est pas ordonn´e...
Regroupement de donn´ees
Fiche d’´etudiants. . .
Autre d´efinition ´equivalente pour le type fiche:
s t r u c t FicheEtudiant {
s t r i n g Nom, Prenom ;
i n t Numero ;
vector double Notes ;
};
Regroupement de donn´ees
Utilisation des fiches
fiche est un type comme les autres:
fiche F ;
d´efinit une variable F de type fiche.
Une fiche contient plusieurs parties (champs), on y acc`ede par leur
nom pr´ec´ed´e d’un point “.” :
F.Nom d´esigne le champ (de type string) Nom de la fiche F.
F.Notes[i] d´esigne le champ (de type double) Notes[i] de la
fiche F.
etc.
Regroupement de donn´ees
Utilisation des fiches
D´efinir les champs d’une fiche:
FicheEtudiant F ;
F .Nom = ” Takis ”;
F . Prenom = ”Jean ”;
F . Numero = 1234;
F . Notes [ 2 ] = 12.3 ;
Regroupement de donn´ees
Utilisation des fiches
Une fonction afficher...
void A f f i c h e r ( FicheEtudiant v )
{
cout  ”No : ”  v . Numero  ” − ”  v . Prenom  ”
f o r ( i n t i =0; i  v . Notes . s i z e () ; i++)
cout  v . Notes [ i ]  ” ”;
cout  endl ;
}
demo 1-2-3
Regroupement de donn´ees
Les “struct”
On utilise le type d´efini pat un struct comme n’importe quel
autre type: dans les fonctions (param`etre ou r´esultat), les variables,
les tableaux etc.
Les affectations (param`etres de fonction, variable, etc.) se font
champ `a champ.
Classes C++
Plan
14 Introduction
15 Regroupement de donn´ees
16 Classes C++
Champs et m´ethodes
Constructeurs et destructeurs
Fonctions amies
Conversions entre types
17 Surcharge d’op´erateurs
Classes C++
Les classes C++
Lorsqu’on d´efinit un type de donn´ees, on fournit des fonctions de
manipulation et impose leur usage: les d´etails d’impl´ementation
n’ont pas `a ˆetre connus par l’utilisateur.
On veut donc offrir une interface et prot´eger certaines donn´ees.
Les classes permettent de
regrouper des donn´ees
associer des fonctions aux objets de la classe
restreindre l’acc`es `a certaines donn´ees
Classes C++
Fichier d’´etudiants
On veut construire des bases de donn´ees pour stocker les fiches
d’´etudiants de chaque promo.
Pour chaque promo, on veut disposer des fonctions suivantes:
saisir les noms, pr´enoms et num´eros des ´etudiants :
(initialisation de la base)
saisir des notes pour un ´etudiant
afficher les notes d’un ´etudiant
afficher la moyenne d’un ´etudiant
afficher la moyenne pour un cours
afficher la moyenne g´en´erale
Classes C++
Fichier d’´etudiants
On veut construire des bases de donn´ees pour stocker les fiches
d’´etudiants de chaque promo.
Pour chaque promo, on veut disposer des fonctions suivantes:
saisir les noms, pr´enoms et num´eros des ´etudiants :
(initialisation de la base)
saisir des notes pour un ´etudiant
afficher les notes d’un ´etudiant
afficher la moyenne d’un ´etudiant
afficher la moyenne pour un cours
afficher la moyenne g´en´erale
Et c’est tout !
Classes C++
Fichier d’´etudiants
Chaque promo doit contenir les donn´ees suivantes:
le nombre d’´etudiants
le nombre de cours
la liste des cours
la fiche de chaque ´etudiant
Classes C++
Fichier d’´etudiants
On int`egre donc les donn´ees suivantes dans une promo:
c l a s s Promo {
p r i v a t e :
i n t Nbc ;
i n t Nbe ;
vector s t r i n g  Cours ;
vector FicheEtudiant  Etudiants ;
. . .
};
Classes C++
Comment d´efinir les fonctions associ´ees
On va utiliser une autre approche que celle pr´esent´ee dans la partie
A.
On va prot´eger certains aspects du type Promo: la structure
interne, le nom des champs...
On va d´efinir des fonctions particuli`eres (fonctions membre,
m´ethodes) qui seules pourront acc´eder `a la partie cach´ee du
type Promo.
Ces m´ethodes seront l’interface de la classe.
On les d´efinit dans la classe.
Classes C++
M´ethode - fonction membre
Ces fonctions s’appliquent toujours `a un objet de la classe, plus
´eventuellement `a d’autres param`etres.
Cet objet joue un rˆole particulier: on dit que l’on appelle la
m´ethode sur lui.
Le m´ecanisme d’appel de ces fonctions tient compte de cette
diff´erence et s´epare cet objet des autres param`etres:
Plutˆot que de faire Test(o,p1,...,pk), on fait:
o.Test(p1,...,pk)
On appelle Test comme un champ...
Vision: o re¸coit le “message” ou l’ “ordre” Test.
Classes C++
M´ethode - fonction membre
Les m´ethodes sont d´eclar´ees dans la classe.
Le nom complet de la m´ethode Test de la classe Toto est
Toto::Test
Les m´ethodes peuvent acc´eder aux champs des objets de la
classe: ce sont les seules `a pouvoir le faire (ou presque) !
L’objet sur lequel elle sont appel´ees, n’apparaˆıt explicitement
dans la d´efinition des m´ethodes.
Par d´efaut, les champs apparaissant dans la d´efinition d’une
m´ethode sont ceux de l’objet sur lequel la fonction sera
appel´ee.
Classes C++
Initialisation
c l a s s Promo {
p r i v a t e :
i n t Nbc ;
i n t Nbe ;
vector s t r i n g  Cours ;
vector FicheEtudiant  Etudiants ;
p u b l i c :
void I n i t i a l i s a t i o n ( ) ;
void S a i s i e N o t e s ( i n t n ) ;
void AfficheNotesE ( i n t n ) ;
double MoyenneE ( i n t n ) ;
double MoyenneC ( i n t c ) ;
double MoyenneG ( ) ;
};
Classes C++
Initialisation
void Promo : : I n i t i a l i s a t i o n ()
{
cout  ”Nb d ’ e t u d i a n t s : ”; c i n  Nbe ;
cout  ”Nb de cours : ”; c i n  Nbc ;
Cours = vector s t r i n g (Nbc ) ;
Etudiants = vector FicheEtudiant (Nbe ) ;
f o r ( i n t i =0; i  Nbc ; i++) {
cout  ” Cours ” i  ” : ”;
c i n  Cours [ i ] ; }
f o r ( i n t i =0; i Nbe ; i++) {
cout  ”Nom : ”; c i n  Etudiants [ i ] . Nom;
cout  ”Prenom : ”; c i n  Etudiants [ i ] . Prenom ;
cout  ”Numero : ”; c i n  Etudiants [ i ] . Numero ;
Etudiants [ i ] . Notes = vector double (Nbc ) ;
}
}
Classes C++
Constructeurs
M´ethodes particuli`eres appel´ees automatiquement `a chaque
d´efinition d’un objet de la classe.
Pour passer des arguments `a un constructeur, il suffit de faire
suivre le nom de la variable par la liste des arguments :
MaClasse A(i,f) ;
Lorsqu’aucun argument n’est donn´e, le constructeur sans
argument est appel´e.
Si aucun constructeur n’est d´efini explicitement, le
compilateur cr´ee un constructeur sans argument
MaClasse::MaClasse() qui se contente d’appeler les
constructeurs (sans argument) de chaque champ de l’objet.
Classes C++
Constructeur copieur
MaClasse (const MaClasse )
: utilis´e pour le passage des param`etres et les initialisations.
Si une fonction a un param`etre A du type MaClasse, un appel
de cette fonction avec une variable V de MaClasse conduit `a
l’initialisation de A avec V via le constructeur copieur.
Lorsqu’on d´efinit une variable V et qu’on l’initialise `a une
valeur E, par l’instruction “MaClasse V=E ;”, on utilise le
constructeur copieur.
Diff´erence avec : “MaClasse V ; V=E ;”
Le constructeur copieur cr´e´e par d´efaut fait une initialisation
champ `a champ avec les champs de l’argument.
Classes C++
Constructeur / destructeur
Il existe aussi des destructeurs : on peut d´efinir un (et un seul)
destructeur qui est appel´e automatiquement lorsqu’une variable
locale est d´etruite
(surtout utiles pour les structures de donn´ees dynamiques)
Pour comprendre tous ces m´ecanismes d’appel...
il faut les essayer !!
cf. Constructeurs.cc
Classes C++
Fonctions amies
Si une fonction F est “amie” (friend) d’une classe C1, alors F
peut acc´eder aux champs priv´es de C1.
Si une classe C2 comme est “amie” de C1, toutes les fonctions
membres de C2 peuvent acc´eder aux champs priv´es de C1.
Ces d´eclarations se font dans la d´efinition de C1 :
c l a s s C1 {
. . .
f r i e n d type−de−F F( param−de−F ) ;
f r i e n d c l a s s C2 ;
. . .
};
Classes C++
Conversions entre types
Comme pour les types simples, on peut d´efinir des conversions
entre les classes.
Un constructeur de T1 qui prend un unique param`etre de type
T2 d´efinit implicitement une conversion de T2 dans T1.
(pas de composition: ne marche que pour des conversions en
une ´etape)
Une fonction membre operator T1() dans la classe T2
d´efinit aussi une conversion de T2 dans T1.
(´evite de modifier la d´efinition de T1)
Par exemple :
c l a s s f r a c t i o n {
p u b l i c :
. . .
f r a c t i o n ( i n t v ) {num=v ; den =1;}
double () { r e t u r n double (num)/ den ;}
};
Surcharge d’op´erateurs
Plan
14 Introduction
15 Regroupement de donn´ees
16 Classes C++
Champs et m´ethodes
Constructeurs et destructeurs
Fonctions amies
Conversions entre types
17 Surcharge d’op´erateurs
Surcharge d’op´erateurs
Surcharge d’op´erateurs
Il est possible de surcharger les op´erateurs de C++ (+, -, [ ], =,
==, . . . ): les arit´es et les priorit´es ne changent pas.
Deux points de vue:
fonction globale: “A op B” est vue comme l’application d’une
fonction “op” `a deux arguments “A” de type TA et “B” de
type TB.
f r a c t i o n operator ∗( f r a c t i o n f , f r a c t i o n g )
{ r e t u r n f r a c t i o n ( f . Numerateur ()∗ g . Numerateur ( ) ,
f . Denominateur ()∗ g . Denominateur ( ) ) ; }
f r a c t i o n operator −( f r a c t i o n f )
{ r e t u r n f r a c t i o n (−f . Numerateur ( ) ,
f . Denominateur ( ) ) ; }
Surcharge d’op´erateurs
Surcharge d’op´erateurs
fonction membre: “A op B” est vue comme l’application d’une
fonction “op” `a un argument “B” de type TB sur l’objet “A”
de type TA.
c l a s s f r a c t i o n {
p r i v a t e :
i n t num, den ;
p u b l i c :
. . .
f r a c t i o n operator −();
f r a c t i o n operator ∗( f r a c t i o n h ) ;
};
f r a c t i o n f r a c t i o n : : operator −()
{ r e t u r n f r a c t i o n (−num, den ) ; }
f r a c t i o n f r a c t i o n : : operator ∗( f r a c t i o n h )
{ r e t u r n f r a c t i o n (num∗h . num, den∗h . den ) ; }
Surcharge d’op´erateurs
Surcharge de cout 
L’op´erateur  ne peut ˆetre surcharg´e que de mani`ere globale.
Profil pour un type T:
ostream   (ostream  , T )
Exemple:
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ostream  operator (ostream  os , f r a c t i o n f )
{
os  f . Numerateur ()  ”/”  f . Denominateur ( ) ;
r e t u r n os ;
}
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Quatri`eme partie IV
Structures de donn´ees dynamiques
Pointeurs
Plan
18 Pointeurs
19 Pointeurs et tableaux
20 new et delete
21 structures de donn´ees dynamiques
22 Retour sur les classes
Pointeurs
Pointeurs
Une variable permet de d´esigner – par un nom – un emplacement
dans la m´emoire.
Il est aussi possible de d´esigner directement les cases m´emoire par
leur adresse.
Un pointeur permet de stocker ces adresses m´emoire.
Pointeurs
Pointeurs, *, 
Un pointeur est typ´e : on distingue les pointeurs sur un int,
sur un double, sur une fraction etc.
D´efinir un pointeur:
type * nom ;
nom est un pointeur sur type, i.e. pouvant recevoir une
adresse d´esignant un objet de type type.
V repr´esente l’adresse m´emoire d’une variable V.
*P d´esigne l’objet point´e par le pointeur P.
i n t i , ∗ pi , k ;
i =3;
p i = i ; // p i pointe sur i
k = (∗ p i )+5; // i d e n t i q u e `a : k=i +5
(∗ p i ) = k+2; // i d e n t i q u e `a : i = k+2
(∗ p i )++;
// i c i , i =11, k=8
Pointeurs
Pointeurs et r´ef´erences
Au lieu du passage par r´ef´erence, il est possible de passer (par
valeur) les adresses des arguments d’une fonction et de modifier les
donn´ees contenues `a ces adresses via l’op´erateur *.
Fonction permut :
void permut ( i n t ∗ pa , i n t ∗ pb )
{ i n t aux = (∗ pa ) ;
(∗ pa ) = (∗ pb ) ;
(∗ pb ) = aux ;}
Pour ´echanger les valeurs de i et j, on ´ecrit permut(i,j) ;
(seule solution en C)
Pointeurs et tableaux
Plan
18 Pointeurs
19 Pointeurs et tableaux
20 new et delete
21 structures de donn´ees dynamiques
22 Retour sur les classes
Pointeurs et tableaux
Tableaux `a la “C”
type nom[taille] ;
→ d´efinit un tableau d’´el´ements de type type et de taille taille
(indices de 0 `a taille − 1). L’´el´ement d’indice i est d´esign´e par
nom[i].
Dans “int Tab[10]”, Tab d´esigne l’adresse de la premi`ere case
du tableau (i.e. Tab[0]) et le type de Tab est “const int *”.
Qu’est-ce que Tab[i] ?
Pointeurs et tableaux
Tableaux `a la “C”
type nom[taille] ;
→ d´efinit un tableau d’´el´ements de type type et de taille taille
(indices de 0 `a taille − 1). L’´el´ement d’indice i est d´esign´e par
nom[i].
Dans “int Tab[10]”, Tab d´esigne l’adresse de la premi`ere case
du tableau (i.e. Tab[0]) et le type de Tab est “const int *”.
Qu’est-ce que Tab[i] ? c’est (*(Tab+i)).
i n t T [ 1 0 ] ;
i n t ∗ p ;
p = T [ 4 ] ;
p [ 0 ] = 100; // ´equivaut `a T[ 4 ] = 100
p [ 1 ] = 200; // ´equivaut `a T[ 5 ] = 100
Pointeurs et tableaux
Pointeurs et tableaux
Passer un tableau “C” en param`etre d’une fonction revient `a
passer l’adresse de la premi`ere case ⇒ passage par r´ef´erence.
Pour d´eclarer un param`etre T de type tableau d’entiers, on
´ecrit: int T[].
La taille doit ˆetre pass´ee avec un autre param`etre.
void Tri(int T[],int taille)
autres chaˆınes de caract`eres : tableaux (simples) de caract`eres
se terminant par le caract`ere sp´ecial ’0’.
char T[8] = exemple ;
d´efinit et initialise le tableau T avec T[0]= ’e’, T[1]=’x’,
. . . , T[7]=’0’.
new et delete
Plan
18 Pointeurs
19 Pointeurs et tableaux
20 new et delete
21 structures de donn´ees dynamiques
22 Retour sur les classes
new et delete
new et delete
obj : allouer et d´esallouer de la m´emoire sans d´ependre la dur´ee de
vie des variables.
“new type ;” alloue un espace m´emoire pour contenir un objet
de type type et retourne l’adresse ce cette zone m´emoire.
“P = new type[N] ;” alloue un espace m´emoire capable de
contenir N objets de type type ...
“delete P ;” d´esalloue l’espace m´emoire d’adresse P.
(ou “delete [ ] P ;”)
Une zone allou´ee par new n’est d´esallou´ee que par l’appel de
delete. . .
new et delete
Un peu de cin´ema ...
structures de donn´ees dynamiques
Plan
18 Pointeurs
19 Pointeurs et tableaux
20 new et delete
21 structures de donn´ees dynamiques
22 Retour sur les classes
structures de donn´ees dynamiques
Structures de donn´ees dynamiques
Une structure de donn´ees dynamique ´evolue au cours du temps.
Exemple de la pile: utiliser un tableau oblige `a borner la taille de la
pile.
On pr´ef`ere allouer de l’espace m´emoire en fonction des besoins :
ajouter un ´el´ement `a la pile correspondra `a allouer (avec new)
de la m´emoire, et
supprimer reviendra `a d´esallouer (avec delete) la case
contenant l’objet.
⇒ Le contenu de la pile sera donc ´eclat´e dans la m´emoire
Pour ne pas perdre d’´el´ements, on indique `a chaque ´el´ement o`u se
trouve le prochain ´el´ement.
Cela correspond `a la notion de liste chaˆın´ee
structures de donn´ees dynamiques
Listes chaˆın´ees
Un maillon d’une liste chaˆın´ee:
c l a s s element {
p u b l i c :
i n t v a l ;
element ∗ s u i v a n t ;
};
Le champ suivant contient l’adresse du prochain ´el´ement de la liste
(ou 0).
On utilise l’adresse du premier ´el´ement de la liste...
Parcours de liste, inversion, longueur. . .
Listes doublement chaˆın´ees, circulaires, . . .
Retour sur les classes
Plan
18 Pointeurs
19 Pointeurs et tableaux
20 new et delete
21 structures de donn´ees dynamiques
22 Retour sur les classes
Retour sur les classes
Classes et pointeurs
p-champ raccourci pour (*p).champ
p-fct() raccourci pour (*p).fct()
Lorsqu’on alloue de la m´emoire pour stocker un objet de type
T, un constructeur est appel´e :
soit celui sans argument (dans le cas d’un “new T”),
soit un avec argument si des arguments sont pr´esents ( “new
T(a1,...,aN) ;”).
Dans la d´efinition des fonctions membre, on peut acc´eder `a
l’adresse de l’objet courant: pointeur this.
Cinqui`eme partie V
Compl´ements
Compl´ements
H´eritage
Programmation orient´ee objet
G´en´ericit´e (classes, fonctions)
GDB
Exceptions
...

Más contenido relacionado

La actualidad más candente

Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaAziz Darouichi
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3PGambette
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage Ccoursuniv
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent Agnus
 
INF120 - Algo DUT SRC1 - Cours 2
INF120 - Algo DUT SRC1 - Cours 2INF120 - Algo DUT SRC1 - Cours 2
INF120 - Algo DUT SRC1 - Cours 2PGambette
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#Youness Boukouchi
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieLoic Yon
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en cbenouini rachid
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage cEbrima NJIE
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NETAziz Darouichi
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Langage C
Langage  CLangage  C
Langage Cjwilili
 

La actualidad más candente (20)

Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Le langage C
Le langage CLe langage C
Le langage C
 
Chapitre2 prog dsplf3
Chapitre2 prog dsplf3Chapitre2 prog dsplf3
Chapitre2 prog dsplf3
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
INF120 - Algo DUT SRC1 - Cours 2
INF120 - Algo DUT SRC1 - Cours 2INF120 - Algo DUT SRC1 - Cours 2
INF120 - Algo DUT SRC1 - Cours 2
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
Le langage C
Le langage CLe langage C
Le langage C
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage c
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NET
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Langage C
Langage  CLangage  C
Langage C
 
Chapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et InstructionsChapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et Instructions
 

Similar a langage C++

Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdiversHajar Yazine
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
ExercicescorrigesdiversKarim Amane
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 
Cours c#
Cours c#Cours c#
Cours c#zan
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfHailisara
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA Asmaa BENGUEDDACH
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeInforMatica34
 
cours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdfcours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdfLamissGhoul1
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationkamalomari2
 
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfChapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfAdjimbawNDIAYE
 

Similar a langage C++ (20)

Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
Language-C.ppt
Language-C.pptLanguage-C.ppt
Language-C.ppt
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
Exercicescorrigesdivers
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
Algo inf102 2007
Algo inf102 2007Algo inf102 2007
Algo inf102 2007
 
Cours c#
Cours c#Cours c#
Cours c#
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
 
Langage C
Langage CLangage C
Langage C
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
 
cours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdfcours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdf
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'application
 
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfChapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 
Cours algorithmique02
Cours algorithmique02Cours algorithmique02
Cours algorithmique02
 

Más de mohamednacim

l'analyse financière
l'analyse financièrel'analyse financière
l'analyse financièremohamednacim
 
المحاسبة المالية
المحاسبة الماليةالمحاسبة المالية
المحاسبة الماليةmohamednacim
 
الذكاء الإصطناعي
الذكاء الإصطناعيالذكاء الإصطناعي
الذكاء الإصطناعيmohamednacim
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databasesmohamednacim
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصريةmohamednacim
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصريةmohamednacim
 
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS mohamednacim
 
التحليل الاحصائي Spss
التحليل الاحصائي Spss التحليل الاحصائي Spss
التحليل الاحصائي Spss mohamednacim
 
Byt of ByteofPython arabic
Byt of ByteofPython arabicByt of ByteofPython arabic
Byt of ByteofPython arabicmohamednacim
 
maintenance informatique
maintenance informatiquemaintenance informatique
maintenance informatiquemohamednacim
 
الشامل في الشبكات
الشامل في الشبكاتالشامل في الشبكات
الشامل في الشبكاتmohamednacim
 
شبكات الكمبيوتر
شبكات الكمبيوترشبكات الكمبيوتر
شبكات الكمبيوترmohamednacim
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databasesmohamednacim
 
Programming in pasca l
Programming in pasca lProgramming in pasca l
Programming in pasca lmohamednacim
 

Más de mohamednacim (20)

Networking
NetworkingNetworking
Networking
 
Perl tutorial
Perl tutorial Perl tutorial
Perl tutorial
 
l'analyse financière
l'analyse financièrel'analyse financière
l'analyse financière
 
Mohasabamalia v2
Mohasabamalia v2Mohasabamalia v2
Mohasabamalia v2
 
المحاسبة المالية
المحاسبة الماليةالمحاسبة المالية
المحاسبة المالية
 
الذكاء الإصطناعي
الذكاء الإصطناعيالذكاء الإصطناعي
الذكاء الإصطناعي
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databases
 
Spss
SpssSpss
Spss
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصرية
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصرية
 
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
 
التحليل الاحصائي Spss
التحليل الاحصائي Spss التحليل الاحصائي Spss
التحليل الاحصائي Spss
 
Byt of ByteofPython arabic
Byt of ByteofPython arabicByt of ByteofPython arabic
Byt of ByteofPython arabic
 
maintenance informatique
maintenance informatiquemaintenance informatique
maintenance informatique
 
Les bases du pc
Les bases du pcLes bases du pc
Les bases du pc
 
الشامل في الشبكات
الشامل في الشبكاتالشامل في الشبكات
الشامل في الشبكات
 
شبكات الكمبيوتر
شبكات الكمبيوترشبكات الكمبيوتر
شبكات الكمبيوتر
 
Vba course
Vba courseVba course
Vba course
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databases
 
Programming in pasca l
Programming in pasca lProgramming in pasca l
Programming in pasca l
 

Último

COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 

Último (13)

COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 

langage C++

  • 1. Cours de C++ Fran¸cois Laroussinie Dept. d’Informatique, ENS de Cachan 2 novembre 2005
  • 4. Introduction Algorithme et programmation Algorithme: m´ethode pour r´esoudre un probl`eme Pour un probl`eme donn´e, il peut y avoir plusieurs algorithmes. . . ou aucun ! NB: pour la plupart des probl`emes int´eressants, il n’existe pas d’algorithme (ni aujourd’hui, ni demain !) Dans les probl`emes qui restent, la grande majorit´e ont des algorithmes beaucoup trop durs pour ˆetre utilis´es ! On cherche des algorithmes simples, efficaces, ´el´egants. . . Programme: . . . s’adresse `a une machine !
  • 5. Introduction Le langage C++ D´ebut en 1983. Am´elioration du langage C: Abstraction de donn´ees Programmation orient´ee objet Programmation g´en´erique tr`es utilis´e !
  • 6. Introduction Programmer Une fois trouv´e l’algorithme, programmer en C++ comporte 3 phases: 1. Editer le programme – avec votre ´editeur de texte favori. . .
  • 7. Introduction Programmer Une fois trouv´e l’algorithme, programmer en C++ comporte 3 phases: 1. Editer le programme – avec votre ´editeur de texte favori. . . 2. Compiler le programme (avec g++)
  • 8. Introduction Programmer Une fois trouv´e l’algorithme, programmer en C++ comporte 3 phases: 1. Editer le programme – avec votre ´editeur de texte favori. . . 2. Compiler le programme (avec g++) 3. Ex´ecuter le programme
  • 9. Introduction Programmer Une fois trouv´e l’algorithme, programmer en C++ comporte 3 phases: 1. Editer le programme – avec votre ´editeur de texte favori. . . 2. Compiler le programme (avec g++) 3. Ex´ecuter le programme . . . 4. TESTER et DEBUGGER : retour au point 1 ! C¸a peut durer assez longtemps...
  • 10. Introduction Un exemple L’in´evitable hello world: #i n c l u d e <iostream> using namespace std ; i n t main () { cout << ” h e l l o world !” << endl ; } D´emo...
  • 12. Plan Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 13. Plan Programmation Les briques de base du langage: Ce qui permet de stocker des donn´ees: types, variables, tableaux, etc. Les expressions qui permettent de manipuler les donn´ees. Les instructions pour construire les algorithmes.
  • 14. Types, variables... Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 15. Types, variables... Types ´el´ementaires int : entiers (au min 16 bits, pour des valeurs ≤ 32767) (d’autres formats existent: long int (min 32 bits), short int, unsigned int) . . . (float), double et long double : nombres `a virgule flottante (en g´en´eral 15 chiffres sign. pour double). Par ex. 23.3 ou 2.456e12 ou 23.56e − 4 char : caract`eres (’a’,’b’,. . . ’A’,. . . ,’:’,. . . ). bool : bool´eens (’true’ ou ’false’). (Et: 0 ≡ false ; tout entier non nul ´equivaut `a false) (Et aussi: des types particuliers pour les tailles de tableaux, de chaˆınes de caract`eres, d’objets etc. size t, ::size type)
  • 16. Types, variables... D´efinition de variable Syntaxe : type v; int p ; double x ; Toute variable doit ˆetre d´efinie avant d’ˆetre utilis´ee ! Une d´efinition peut apparaˆıtre n’importe o`u dans un programme. Une variable est d´efinie jusqu’`a la fin de la premi`ere instruction compos´ee (marqu´ee par }) qui contient sa d´efinition. (Une variable d´efinie en dehors de toute fonction – et de tout espace de nom – est une variable globale).
  • 17. Types, variables... D´efinition de variable Une variable peut ˆetre initialis´ee lors de sa d´eclaration, deux notations sont possibles : int p=34 ; double x=12.34 ; int p (34) ; double x (12.34) ; Une variable d’un type ´el´ementaire qui n’est pas initialis´ee, n’a pas de valeur d´efinie: elle peut contenir n’importe quoi.
  • 18. Types, variables... Constantes symboliques Syntaxe : const type nom = val; Par exemple: const int Taille = 100 ; Il ne sera pas possible de modifier Taille dans le reste du programme (erreur `a la compilation). . .
  • 19. Types, variables... Chaˆınes de caract`eres Il existe une classe string, ce n’est un pas un type ´el´ementaire. Pour l’utiliser, il faut placer tˆete du fichier : # include <string> string t ; d´efinit t comme une variable... string s(25,’a’) ; string mot = "bonjour" ; s.size() repr´esente la longueur de s s[i] est le i-`eme caract`ere de s ( i = 0,1,. . . s.size()-1) s+t est une nouvelle chaˆıne correspondant `a la concat´enation de s et t. NB: il existe une autre sorte de chaˆıne de caract`eres en C/C++
  • 20. Types, variables... Tableaux Pour utiliser la classe vector, il faut placer en tˆete du fichier : # include <vector> Un tableau est typ´e: vector<int> Tab(100,5) ; vector<int> Tab(50) ; vector<double> T ; Structure g´en´erale: vector< type > Nom(n,v) ; vector< type > Nom1 = Nom2 ; → les valeurs de Nom2 sont alors recopi´ees dans Nom1. T.size() correspond `a la taille de T. NB: size() renvoie en fait un entier non sign´e, son type exact est vector<type>::size type
  • 21. Types, variables... Tableaux T[i] d´esigne le i-`eme ´el´ement avec i = 0, . . . T.size()-1. vector<vector<int> > T d´efinit un tableau `a deux dimensions. Pour l’initialiser, on peut utiliser l’instruction suivante : vector<vector<int> > T2(100,vector<int>(50,1)) ; . . . on initialise chacune des 100 cases de T1 avec un tableau de taille 50 rempli de 1.
  • 22. Expressions Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 23. Expressions Affectation En C/C++, l’affectation est une expression: Soient v une variable (au sens large) et expr une expression. v = expr affecte la valeur de expr `a la variable v et retourne la valeur affect´ee `a v comme r´esultat. Par exemple, i = (j = 0) affecte 0 `a j puis `a i et retourne 0 !!
  • 24. Expressions Op´erateurs classiques Op´erateurs arithm´etiques: *, +, -, / (division enti`ere et r´eelle), % (modulo) Op´erateurs de comparaison < (inf´erieur), <= (inf´erieur ou ´egal), == (´egal), > (sup´erieur), >= (sup´erieur ou ´egal) et != (diff´erent) Op´erateurs bool´eens && repr´esente l’op´erateur “ET”, || repr´esente le “OU”, et ! repr´esente le “NON”. Par exemple, ((x<12) && ((y>0) || !(z>4)))
  • 25. Expressions Pr´e et Post incr´ement ++var incr´emente la variable var et retourne la nouvelle valeur. (++i ´equivaut `a i=i+1) var++ incr´emente la variable var et retourne l’ancienne valeur. (i++ ´equivaut `a (i=i+1)-1) En dehors d’une expression, i++ et ++i sont donc ´equivalentes.
  • 26. Expressions Pr´e et Post d´ecr´ement L’expression --var d´ecr´emente la variable var et retourne la nouvelle valeur. L’expression var-- d´ecr´emente la variable var et retourne l’ancienne valeur.
  • 27. Instructions Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 28. Instructions Instructions usuelles d´efinition de variables, fonctions, types etc. expr ; { liste d’instructions } : instruction compos´ee. if (expr) instr if (expr) instr1 else instr2 if (v == 3) i =i+4 ; if ((v==3) && (i<5)) { i=i+4 ; v=v*2 ;} else v=i ; r = r*3 ;
  • 29. Instructions La boucle FOR for (expr1 ;expr2 ;expr3) instr   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ! # $ % # ' ( ) Ex: for(i=0 ;i235 ;i=i+1) cout T[i] ; for(i=0,j=1 ;i235 ;i=i+1,j=j+3) cout T[i][j] ;
  • 30. Instructions La boucle WHILE while (expr) instr   ¡ ¢ £ ¤ ¥ ¦ § ¨ ©
  • 31. Instructions La boucle DO do instr while (expr) ;   ¡ ¢ £ ¤ ¥ ¦ § ¨ © §
  • 32. Entr´ees - Sorties Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 33. Entr´ees - Sorties Afficher `a l’´ecran Pour utiliser les entr´ees/sorties, il faut ajouter: # include iostream Syntaxe : cout expr1 . . . exprn ; Cette instruction affiche expr1 puis expr2. . . Afficher un saut de ligne se fait au moyen de cout endl. int i=45 ; cout la valeur de i est i endl ;
  • 34. Entr´ees - Sorties Afficher `a l’´ecran Syntaxe : cout expr1 . . . exprn ; cout (ou std::cout) d´esigne le “flot de sortie” standard. est un op´erateur binaire: le premier op´erande est cout (de type “flot de sortie”) le second op´erande est l’expression `a afficher le r´esultat est de type “flot de sortie’ est associatif de gauche `a droite est surcharg´e (ou sur-d´efini): on utilise le mˆeme op´erateur pour afficher des caract`eres, des entiers, des r´eels ou des chaˆınes de caract`eres etc.
  • 35. Entr´ees - Sorties Lire au clavier Syntaxe : cin var1 . . . varn ; Cette instruction lit (au clavier) des valeurs et les affecte `a var1 puis var2 . . . cin est le flot d’entr´ee standard, et est un op´erateur similaire `a . Les caract`eres tap´es au clavier sont enregistr´es dans un buffer dans lequel les cin viennent puiser des valeurs. Les espaces, les tabulations et les fins de lignes sont des s´eparateurs.
  • 36. Exemples Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 38. Evaluation des expressions Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 39. Evaluation des expressions Evaluation des expressions Priorit´e des op´erateurs : x[y] x++ x-- ++x --x !x -x x*y x/y x% y x+y x-y x y x y x y x y x = y x = y x == y x != y x y x || y x = y x op= y x ? y : z
  • 40. Evaluation des expressions Evaluation des expressions bool´eennes Dans e1 e2, la sous-expression e2 n’est ´evalu´ee que si e1 a ´et´e ´evalu´ee `a ’true’. if (i =0 T[i] 20) blabla Dans e1 || e2, la sous-expression e2 n’est ´evalu´ee que si e1 a ´et´e ´evalu´ee `a ’false’. if (i0 || T[i] 20) blabla
  • 41. Evaluation des expressions Evaluation des expressions arithm´etiques Si une (sous-)expression m´elange plusieurs types, c’est le type le plus large qui est utilis´e. int i=3,j=2,m ; double r=3.4 ; m = (i/j)*r ; D’abord l’expression (i/j) est ´evalu´ee: / d´esigne ici la division enti`ere, cela donne donc 1. Pour ´evaluer le produit 1*r, il faut convertir 1 en double (1.0) et faire le produit sur les doubles, cela donne 3.4 Pour l’affectation, comme m est entier, 3.4 est converti en int. Finalement on a m = 3.
  • 42. Evaluation des expressions Evaluation des expressions arithm´etiques • Pour ´eviter les erreurs, il est possible de convertir explicitement des donn´ees d’un certain type en un autre. Par exemple: int i=3,j=2,m ; double r=3.4 ; m = (double(i)/j)*r ; Donne...
  • 43. Evaluation des expressions Evaluation des expressions arithm´etiques • Pour ´eviter les erreurs, il est possible de convertir explicitement des donn´ees d’un certain type en un autre. Par exemple: int i=3,j=2,m ; double r=3.4 ; m = (double(i)/j)*r ; Donne... 5 !
  • 44. Evaluation des expressions Evaluation des expressions arithm´etiques • Pour ´eviter les erreurs, il est possible de convertir explicitement des donn´ees d’un certain type en un autre. Par exemple: int i=3,j=2,m ; double r=3.4 ; m = (double(i)/j)*r ; Donne... 5 ! • L’´evaluation d’une expression arithm´etique ne se fait pas toujours de gauche `a droite ! Ex: (i/j)*(r/3) (d´emo)
  • 45. Structure g´en´erale d’un programme C++ Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 46. Structure g´en´erale d’un programme C++ Structure g´en´erale d’un programme Un programme C++ est r´eparti dans un ou plusieurs fichiers. Chacun peut contenir des d´efinitions/d´eclarations de fonctions, des d´efinitions de types et des d´efinitions de variables globales. Il existe une seule fonction main: c’est la fonction qui sera ex´ecut´ee apr`es la compilation. Le profil de main est : int main() ou int main( int argc, char ** argv ) pour passer des arguments. Exemple de programme complet. . .
  • 47. Structure g´en´erale d’un programme C++ Structure g´en´erale d’un programme Un programme complet: #include iostream void test(int j) { cout j endl ; } int main() { int i =20 ; cout bonjour endl ; test(i) ; }
  • 48. Proc´edures et fonctions Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 49. Proc´edures et fonctions D´efinition de fonction type nom( liste des param`etres) { corps } type est le type du r´esultat de la fonction. (void si il s’agit d’une proc´edure) La liste des param`etres (param`etres formels): type1 p1, ..., typen pn Le corps d´ecrit les instructions `a effectuer. Le corps utilise ses propres variables locales, les ´eventuelles variables globales et les param`etres formels. Si une fonction renvoie un r´esultat, il doit y avoir (au moins) une instruction return expr ; Dans le cas d’une proc´edure, on peut utiliser: return ;
  • 50. Proc´edures et fonctions Exemple int max(int a,int b) { int res=b ; if (ab) res = a ; return res ; }
  • 51. Proc´edures et fonctions Appel d’une fonction nom(liste des arguments) La liste des arguments (param`etres r´eels) est expr1, expr2, . . . exprn o`u chaque expri est compatible avec le type typei du param`etre formel pi. Exemple : int k=34, t=5, m ; m = max(k,2*t+5) ;
  • 52. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; }
  • 53. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” “y”
  • 54. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y”
  • 55. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10
  • 56. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z”
  • 57. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” “a” 10 “b” 5
  • 58. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” “a” 10 “b” 5 “res” 5
  • 59. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” “a” 10 “b” 5 “res” 10
  • 60. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” “a” 10 “b” 5 “res” 10
  • 61. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” 10
  • 62. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” 10 ———————————– z = 10
  • 63. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } Fin
  • 64. Proc´edures et fonctions Afficher le contenu d’un tableau d’entiers void AfficherTab(vectorint T) { for (int i=0 ; i T.size() ; i++) cout T[i] ; }
  • 65. Proc´edures et fonctions Saisie d’un tableau d’entiers
  • 66. Proc´edures et fonctions Saisie d’un tableau d’entiers vectorint SaisieTab() { int taille ; cout Entrer une taille : ; cin taille ; vectorint res(taille,0) ; for (int i=0 ; i taille ; i++) { cout val = ; cin res[i] ; } return res ; }
  • 67. Proc´edures et fonctions Recherche du plus grand ´el´ement
  • 68. Proc´edures et fonctions Recherche du plus grand ´el´ement int Recherche(vectorint T) { if (T.size()==0) { cout ‘‘Erreur ! Tableau vide !’’ endl ; return -1 ; } int res=T[0] ; for (int i=1 ; iT.size() ;i++) if (T[i] res) res=T[i] ; return res ; }
  • 69. Proc´edures et fonctions Recherche de l’indice du plus grand ´el´ement
  • 70. Proc´edures et fonctions Recherche de l’indice du plus grand ´el´ement int RechercheInd(vectorint T) { if (T.size()==0) { cout ‘‘Erreur ! Tableau vide !’’ endl ; return -1 ; } int res=0 ; for (int i=1 ; iT.size() ;i++) if (T[i] T[res]) res=i ; return res ; }
  • 71. Proc´edures et fonctions Port´ee des identificateurs Un identificateur XXX peut ˆetre utilis´e `a la ligne l de la d´efinition d’une fonction F ssi: XXX est une variable d´efinie dans une instruction compos´ee contenant l. XXX est un param`etre de F. (XXX est une variable globale, i.e. d´efinie hors de toute fonction.)
  • 72. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; }
  • 73. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” “y”
  • 74. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y”
  • 75. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10
  • 76. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z”
  • 77. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “a” 10 “b” 5
  • 78. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “a” 10 “b” 5 “res” 5
  • 79. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “a” 10 “b” 5 “res” 10
  • 80. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “a” 10 “b” 5 “res” 10
  • 81. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” 10
  • 82. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } “x” 5 “y” 10 “z” 10 ———————————– z = 10
  • 83. Proc´edures et fonctions Exemple int max(int a,int b) {int res=b ; if (ab) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout z = z ; } Fin
  • 84. Proc´edures et fonctions Passage de param`etres par valeur Par d´efaut, les param`etres d’une fonction sont initialis´es par une copie des valeurs des param`etres r´eels. Modifier la valeur des param`etres formels dans le corps de la fonction ne change pas la valeur des param`etres r´eels.
  • 85. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; }
  • 86. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” “y”
  • 87. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y”
  • 88. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10
  • 89. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10
  • 90. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10 “a” 10 “b” 5
  • 91. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10 “a” 10 “b” 5 “aux” 5
  • 92. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10 “a” 10 “b” 10 “aux” 5
  • 93. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10 “a” 5 “b” 10 “aux” 5
  • 94. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10
  • 95. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10 ———————————– x = 5
  • 96. Proc´edures et fonctions Essai de permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; }
  • 97. Proc´edures et fonctions Passage des param`etres par r´ef´erence Pour modifier la valeur d’un param`etre r´eel dans une fonction, il faut passer ce param`etre par r´ef´erence. Une r´ef´erence sur une variable est un synonyme de cette variable, c’est-`a-dire une autre mani`ere de d´esigner le mˆeme emplacement de la m´emoire. On utilise le symbole pour la d´eclaration d’une r´ef´erence: Dans la liste des param`etres de la d´efinition d’une fonction, type pi d´eclare le param`etre pi comme ´etant une r´ef´erence sur le ieme param`etre r´eel vi .
  • 98. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; }
  • 99. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” “y”
  • 100. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y”
  • 101. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10
  • 102. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10
  • 103. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10“a” “b”
  • 104. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 5 “y” 10“a” “b” “ aux ” 5
  • 105. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 10 “y” 10“a” “b” “ aux ” 5
  • 106. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 10 “y” 5“a” “b” “ aux ” 5
  • 107. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 10 “y” 5
  • 108. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } “x” 10 “y” 5 ——————————— x = 10
  • 109. Proc´edures et fonctions Permutation void permut(int a,int b) {int aux = b ; b = a ; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout x = x ; } Fin
  • 110. Proc´edures et fonctions Passage par r´ef´erence Il faut que les param`etres r´eels soient compatibles avec un passage par r´ef´erence. . . permut(x,5) n’est pas possible ! Usage “bizarre” des r´ef´erences dans la liste des param`etres: const type p Id´ee: le passage par r´ef´erence est plus efficace que le passage par valeur car il ´evite la recopie des arguments car seule l’adresse m´emoire de l’argument est communiqu´ee `a la fonction.
  • 111. Proc´edures et fonctions Exercice . . . Algorithmes de tri Comment trier un tableau d’entiers ?
  • 112. Proc´edures et fonctions Exercice . . . Algorithmes de tri Comment trier un tableau d’entiers ? rechercher le plus grand ´el´ement et le placer `a la fin du tableau recherche le deuxi`eme plus grand et le placer en avant-derni`ere position etc.
  • 113. Proc´edures et fonctions Exercice . . . Algorithmes de tri Comment trier un tableau d’entiers Tab ? Pour IndFin = Tab.size()-1 ... 1 faire rechercher l’indice IMAX du plus grand ´el´ement de Tab entre les indices 0 `a IndFin. Permuter les ´el´ements plac´es en IMAX et IndFin.
  • 114. Proc´edures et fonctions Exercice . . . Algorithmes de tri Comment trier un tableau d’entiers Tab ? Pour IndFin = Tab.size()-1 ... 1 faire rechercher l’indice IMAX du plus grand ´el´ement de Tab entre les indices 0 `a IndFin. Permuter les ´el´ements plac´es en IMAX et IndFin. A la premi`ere ´etape, on s´electionne le plus grand ´el´ement et on le place `a la fin du tableau ; puis on trouve le deuxi`eme plus grand et on le place `a l’avant-derni`ere place etc.
  • 115. Proc´edures et fonctions Fonction de s´election int RechercheInd(vectorint T, int imax) { if (T.size() imax-1) { cout Erreur ! Tableau trop petit ! endl ; return -1 ; } int res=0 ; for (int i=1 ; i= imax ;i++) if (T[i] T[res]) res=i ; return res ; }
  • 116. Proc´edures et fonctions Fonction de s´election vectorint Trier(vectorint T) { vectorint Taux = T ; int aux ; for (int i=Taux.size()-1 ; i0 ; i--) { aux = RechercheInd(Taux,i) ; Permuter(Taux[aux],Taux[i]) ; } return Taux ; }
  • 117. Proc´edures et fonctions Fonction de s´election Tri in situ avec passage par r´ef´erence void Trier(vectorint T)
  • 118. Proc´edures et fonctions Fonction de s´election Tri in situ avec passage par r´ef´erence void Trier(vectorint T) { int aux ; for (int i=T.size()-1 ; i0 ; i--) { aux = RechercheInd(Taux,i) ; Permuter(T[aux],T[i]) ; } }
  • 119. R´ecursivit´e Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 120. R´ecursivit´e Fonctions r´ecursives La factorielle... int fact(int n) { assert(n=0) ; if (n==0) return 1 ; return n*fact(n-1) ; }
  • 121. R´ecursivit´e Les tours de Hanoi void Hanoi(int nb,int p1, int p2) { if (nb 0) { int p3 = 6-p1-p2 ; Hanoi(nb-1,p1,p3) ; cout On bouge le Pion nb vers p2 ; Hanoi(nb-1,p3,p2) ; } }
  • 122. Compl´ements sur les fonctions Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 123. Compl´ements sur les fonctions Valeurs par d´efaut des param`etres On peut attribuer des valeurs par d´efaut aux param`etres d’une fonction. int max(int a,int b =0) { if (ab) return a ; else return b ; }
  • 124. Compl´ements sur les fonctions Recherche dichotomique int RechDicho(vectordouble Tab,int bg, int bd,double x) { if (bg bd) return -1 ; int M = (bg+bd)/2 ; if (Tab[M]==x) return M ; if (Tab[M] x) return RechDicho(Tab,bg,M-1,x) ; else return RechDicho(Tab,M+1,bd,x) ; } int Recherche(vectordouble Tab,double x) { int taille = Tab.size() ; if (taille == 0) return -1 ; return RechDicho(Tab,0,taille-1,x) ; }
  • 125. Compl´ements sur les fonctions Recherche dichotomique int Recherche(vectordouble Tab, double x, int bg =-1, int bd =-1) { if((bg==-1)(bd ==-1)) return Recherche(Tab,x,0,Tab.size()-1) ; if (bg bd) return -1 ; int M = (bg+bd)/2 ; if (Tab[M]==x) return M ; if (Tab[M] x) return Recherche(Tab,x,bg,M-1) ; else return Recherche(Tab,x,M+1,bd) ; } Appel directement avec: Recherche(T,10.3)
  • 126. Compl´ements sur les fonctions Fonctions inline Pour de petites fonctions, il peut ˆetre plus efficace (= rapide) d’´eviter un appel de fonction et `a la place, expanser le corps de la fonction en lieu et place de chaque appel. C’est possible avec le mot cl´e inline. inline int max(int a,int b =0) { if (ab) return a ; else return b ; }
  • 127. Compl´ements sur les fonctions Le tri fusion Principe: Pour trier un tableau T entre les indices a et b: On trie entre a et a+b 2 On trie entre a+b 2 et b On construit un tableau tri´e `a partir des sous-parties tri´ees.
  • 128. Port´ee, visibilit´e, dur´ee de vie des variables void Tri fusion(vectorint T,int bg =-1, int bd =-1) { if ((bg==-1) (bd==-1)) { bg=0 ; bd=int(T.size()) -1 ; } int k ; if (bg bd) { k = (bg+bd)/2 ; Tri fusion(T,bg,k) ; Tri fusion(T,k+1,bd) ; Fusion(T,bg,k,bd) ; }
  • 129. Port´ee, visibilit´e, dur´ee de vie des variables } Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 130. Port´ee, visibilit´e, dur´ee de vie des variables Port´ee d’un identificateur La port´ee d’un identificateur correspond aux parties du programme o`u cet identificateur peut ˆetre utilis´e sans provoquer d’erreur `a la compilation. La port´ee d’une variable globale ou d’une fonction globale est ´egale au programme. La port´ee d’une variable locale va de sa d´efinition jusqu’`a la fin de la premi`ere instruction compos´ee ({...}) qui contient sa d´efinition. Deux variables peuvent avoir le mˆeme nom mais dans ce cas, elle doivent avoir deux port´es diff´erentes.
  • 131. Port´ee, visibilit´e, dur´ee de vie des variables Port´ee { int i=3 ; { int i=5 ; cout i ; // affiche 5 } cout i ; // affiche 3 } Les deux variables ont des port´ees diff´erentes ! Exemple. . .
  • 132. Port´ee, visibilit´e, dur´ee de vie des variables Visibilit´e • La visibilit´e d’une variable dit quand elle est accessible La visibilit´e est inclue dans la port´ee... • La dur´ee de vie d’une variable correspond `a la p´eriode depuis cr´eation `a sa destruction. Dur´ee de vie et port´ee co¨ıncident pour toutes les variables que nous avons ´evoqu´ees jusqu’ici. mais . . .
  • 133. Port´ee, visibilit´e, dur´ee de vie des variables Variables static L’espace m´emoire d’une variable locale d´eclar´ee static est allou´e une seule fois et n’est d´etruit qu’`a la fin du programme ! void Test(int v) { static int compteur=0 ; compteur++ ; cout compteur -eme appel de Test endl ; cout v = v endl ; } Sa dur´ee de vie est celle du programme.
  • 134. Port´ee, visibilit´e, dur´ee de vie des variables Hanoi (suite) Obj: compter le nombre d’appels `a la proc´edure Hanoi. void Hanoi(int nb,int p1, int p2, int affichage=0) { static int NB = 0 ; NB++ ; if (affichage == 1) { cout NB appels de Hanoi return ; } if (nb 0) { int p3 = 6-p1-p2 ; Hanoi(nb-1,p1,p3) ; cout On bouge le Pion nb vers le piquet p2 endl ; Hanoi(nb-1,p3,p2) ; } }
  • 135. Port´ee, visibilit´e, dur´ee de vie des variables Espace de noms Un programme important utilise de nombreuses biblioth`eques, fonctions etc. Pour ´eviter les probl`emes de conflit de noms, on utilise des espaces de noms (namespace) : on associe un nom `a un ensemble de variables, types, fonctions. leur nom complet est: leur nom d’espace suivi de :: et de leur nom. Ex. la fonction int fct(){...} d´efinie dans le domaine A aura pour nom complet A::fct() Les noms complets de cout et cin sont std::cout et std::cin. Pour ´eviter d’´ecrire les noms complets , on utilise: using namespace std ;
  • 136. Port´ee, visibilit´e, dur´ee de vie des variables Cr´eer un espace de nom namespace toto { int N = 10 ; int Test() { cout test... ; } } Les objets N et Test ont pour nom toto::N et toto::Test
  • 137. Compl´ements Plan 2 Types, variables... 3 Expressions 4 Instructions 5 Entr´ees - Sorties 6 Exemples 7 Evaluation des expressions 8 Structure g´en´erale d’un programme C++ 9 Proc´edures et fonctions 10 R´ecursivit´e 11 Compl´ements sur les fonctions 12 Port´ee, visibilit´e, dur´ee de vie des variables 13 Compl´ements
  • 138. Compl´ements Compl´ements - 1 Instructions suppl´ementaires: break provoque l’arrˆet de la premi`ere instruction do, for, switch ou while englobant. continue provoque (dans une instruction do, for, ou while) l’arrˆet de l’it´eration courante et le passage au d´ebut de l’it´eration suivante. switch (exp) { case cste1 : liste d’instructions1 ... case csten : liste d’instructionsn default: liste d’instructions }
  • 139. Compl´ements Compl´ements - 2 (exp) ? exp1 : exp2 vaut exp1 si exp est ´evalu´ee `a vrai et exp2 sinon. m = (i j) ? i : j var op= expr d´esigne l’expression var = var op expr (op ∈ {+,-,*,/,%}) int i=2,j=34 ; i += 2 ; j *= 10 ; j *= (i++) ; int i=2,j=34 ; i = i+2 ; j = j*10 ; j = j*i ; i = i+1 ;
  • 140. Compl´ements Compl´ements - 2 (exp) ? exp1 : exp2 vaut exp1 si exp est ´evalu´ee `a vrai et exp2 sinon. m = (i j) ? i : j var op= expr d´esigne l’expression var = var op expr (op ∈ {+,-,*,/,%}) int i=2,j=34 ; i += 2 ; j *= 10 ; j *= (i++) ; int i=2,j=34 ; i = i+2 ; j = j*10 ; j = j*i ; i = i+1 ; A la fin, on a: i==5 et j==1360
  • 142. Introduction Plan 14 Introduction 15 Regroupement de donn´ees 16 Classes C++ Champs et m´ethodes Constructeurs et destructeurs Fonctions amies Conversions entre types 17 Surcharge d’op´erateurs
  • 143. Introduction Introduction Un algorithme n’utilise pas que des objets de type int, double ou bool... ´etats et transitions lorsqu’on parle de graphes. Piquet et pions pour Hanoi Fractions Piles Un programme doit “coller” `a l’algorithme !
  • 144. Introduction De nouveaux types Il faut pouvoir d´efinir de nouveaux types de donn´ees. D´efinir des variables de ce types, les manipuler dans les fonctions etc.
  • 145. Introduction De nouveaux types Il faut pouvoir d´efinir de nouveaux types de donn´ees. D´efinir des variables de ce types, les manipuler dans les fonctions etc. Un type de donn´ees = regroupement de donn´ees + des op´erations Comme les types de base !
  • 146. Regroupement de donn´ees Plan 14 Introduction 15 Regroupement de donn´ees 16 Classes C++ Champs et m´ethodes Constructeurs et destructeurs Fonctions amies Conversions entre types 17 Surcharge d’op´erateurs
  • 147. Regroupement de donn´ees Regroupement de donn´ees Exemple: une base de donn´ees pour les notes des ´etudiants.
  • 148. Regroupement de donn´ees Regroupement de donn´ees Exemple: une base de donn´ees pour les notes des ´etudiants. Chaque fiche d’´etudiant contient : un nom et un pr´enom un num´ero d’inscription un ensemble de notes Une “base de donn´ees” pour une promo = un ensemble de fiches
  • 149. Regroupement de donn´ees Fiche d’´etudiants. . . D´efinir le type fiche: s t r u c t FicheEtudiant { s t r i n g Nom; s t r i n g Prenom ; i n t Numero ; vector double Notes ; }; Ce n’est pas ordonn´e...
  • 150. Regroupement de donn´ees Fiche d’´etudiants. . . Autre d´efinition ´equivalente pour le type fiche: s t r u c t FicheEtudiant { s t r i n g Nom, Prenom ; i n t Numero ; vector double Notes ; };
  • 151. Regroupement de donn´ees Utilisation des fiches fiche est un type comme les autres: fiche F ; d´efinit une variable F de type fiche. Une fiche contient plusieurs parties (champs), on y acc`ede par leur nom pr´ec´ed´e d’un point “.” : F.Nom d´esigne le champ (de type string) Nom de la fiche F. F.Notes[i] d´esigne le champ (de type double) Notes[i] de la fiche F. etc.
  • 152. Regroupement de donn´ees Utilisation des fiches D´efinir les champs d’une fiche: FicheEtudiant F ; F .Nom = ” Takis ”; F . Prenom = ”Jean ”; F . Numero = 1234; F . Notes [ 2 ] = 12.3 ;
  • 153. Regroupement de donn´ees Utilisation des fiches Une fonction afficher... void A f f i c h e r ( FicheEtudiant v ) { cout ”No : ” v . Numero ” − ” v . Prenom ” f o r ( i n t i =0; i v . Notes . s i z e () ; i++) cout v . Notes [ i ] ” ”; cout endl ; } demo 1-2-3
  • 154. Regroupement de donn´ees Les “struct” On utilise le type d´efini pat un struct comme n’importe quel autre type: dans les fonctions (param`etre ou r´esultat), les variables, les tableaux etc. Les affectations (param`etres de fonction, variable, etc.) se font champ `a champ.
  • 155. Classes C++ Plan 14 Introduction 15 Regroupement de donn´ees 16 Classes C++ Champs et m´ethodes Constructeurs et destructeurs Fonctions amies Conversions entre types 17 Surcharge d’op´erateurs
  • 156. Classes C++ Les classes C++ Lorsqu’on d´efinit un type de donn´ees, on fournit des fonctions de manipulation et impose leur usage: les d´etails d’impl´ementation n’ont pas `a ˆetre connus par l’utilisateur. On veut donc offrir une interface et prot´eger certaines donn´ees. Les classes permettent de regrouper des donn´ees associer des fonctions aux objets de la classe restreindre l’acc`es `a certaines donn´ees
  • 157. Classes C++ Fichier d’´etudiants On veut construire des bases de donn´ees pour stocker les fiches d’´etudiants de chaque promo. Pour chaque promo, on veut disposer des fonctions suivantes: saisir les noms, pr´enoms et num´eros des ´etudiants : (initialisation de la base) saisir des notes pour un ´etudiant afficher les notes d’un ´etudiant afficher la moyenne d’un ´etudiant afficher la moyenne pour un cours afficher la moyenne g´en´erale
  • 158. Classes C++ Fichier d’´etudiants On veut construire des bases de donn´ees pour stocker les fiches d’´etudiants de chaque promo. Pour chaque promo, on veut disposer des fonctions suivantes: saisir les noms, pr´enoms et num´eros des ´etudiants : (initialisation de la base) saisir des notes pour un ´etudiant afficher les notes d’un ´etudiant afficher la moyenne d’un ´etudiant afficher la moyenne pour un cours afficher la moyenne g´en´erale Et c’est tout !
  • 159. Classes C++ Fichier d’´etudiants Chaque promo doit contenir les donn´ees suivantes: le nombre d’´etudiants le nombre de cours la liste des cours la fiche de chaque ´etudiant
  • 160. Classes C++ Fichier d’´etudiants On int`egre donc les donn´ees suivantes dans une promo: c l a s s Promo { p r i v a t e : i n t Nbc ; i n t Nbe ; vector s t r i n g Cours ; vector FicheEtudiant Etudiants ; . . . };
  • 161. Classes C++ Comment d´efinir les fonctions associ´ees On va utiliser une autre approche que celle pr´esent´ee dans la partie A. On va prot´eger certains aspects du type Promo: la structure interne, le nom des champs... On va d´efinir des fonctions particuli`eres (fonctions membre, m´ethodes) qui seules pourront acc´eder `a la partie cach´ee du type Promo. Ces m´ethodes seront l’interface de la classe. On les d´efinit dans la classe.
  • 162. Classes C++ M´ethode - fonction membre Ces fonctions s’appliquent toujours `a un objet de la classe, plus ´eventuellement `a d’autres param`etres. Cet objet joue un rˆole particulier: on dit que l’on appelle la m´ethode sur lui. Le m´ecanisme d’appel de ces fonctions tient compte de cette diff´erence et s´epare cet objet des autres param`etres: Plutˆot que de faire Test(o,p1,...,pk), on fait: o.Test(p1,...,pk) On appelle Test comme un champ... Vision: o re¸coit le “message” ou l’ “ordre” Test.
  • 163. Classes C++ M´ethode - fonction membre Les m´ethodes sont d´eclar´ees dans la classe. Le nom complet de la m´ethode Test de la classe Toto est Toto::Test Les m´ethodes peuvent acc´eder aux champs des objets de la classe: ce sont les seules `a pouvoir le faire (ou presque) ! L’objet sur lequel elle sont appel´ees, n’apparaˆıt explicitement dans la d´efinition des m´ethodes. Par d´efaut, les champs apparaissant dans la d´efinition d’une m´ethode sont ceux de l’objet sur lequel la fonction sera appel´ee.
  • 164. Classes C++ Initialisation c l a s s Promo { p r i v a t e : i n t Nbc ; i n t Nbe ; vector s t r i n g Cours ; vector FicheEtudiant Etudiants ; p u b l i c : void I n i t i a l i s a t i o n ( ) ; void S a i s i e N o t e s ( i n t n ) ; void AfficheNotesE ( i n t n ) ; double MoyenneE ( i n t n ) ; double MoyenneC ( i n t c ) ; double MoyenneG ( ) ; };
  • 165. Classes C++ Initialisation void Promo : : I n i t i a l i s a t i o n () { cout ”Nb d ’ e t u d i a n t s : ”; c i n Nbe ; cout ”Nb de cours : ”; c i n Nbc ; Cours = vector s t r i n g (Nbc ) ; Etudiants = vector FicheEtudiant (Nbe ) ; f o r ( i n t i =0; i Nbc ; i++) { cout ” Cours ” i ” : ”; c i n Cours [ i ] ; } f o r ( i n t i =0; i Nbe ; i++) { cout ”Nom : ”; c i n Etudiants [ i ] . Nom; cout ”Prenom : ”; c i n Etudiants [ i ] . Prenom ; cout ”Numero : ”; c i n Etudiants [ i ] . Numero ; Etudiants [ i ] . Notes = vector double (Nbc ) ; } }
  • 166. Classes C++ Constructeurs M´ethodes particuli`eres appel´ees automatiquement `a chaque d´efinition d’un objet de la classe. Pour passer des arguments `a un constructeur, il suffit de faire suivre le nom de la variable par la liste des arguments : MaClasse A(i,f) ; Lorsqu’aucun argument n’est donn´e, le constructeur sans argument est appel´e. Si aucun constructeur n’est d´efini explicitement, le compilateur cr´ee un constructeur sans argument MaClasse::MaClasse() qui se contente d’appeler les constructeurs (sans argument) de chaque champ de l’objet.
  • 167. Classes C++ Constructeur copieur MaClasse (const MaClasse ) : utilis´e pour le passage des param`etres et les initialisations. Si une fonction a un param`etre A du type MaClasse, un appel de cette fonction avec une variable V de MaClasse conduit `a l’initialisation de A avec V via le constructeur copieur. Lorsqu’on d´efinit une variable V et qu’on l’initialise `a une valeur E, par l’instruction “MaClasse V=E ;”, on utilise le constructeur copieur. Diff´erence avec : “MaClasse V ; V=E ;” Le constructeur copieur cr´e´e par d´efaut fait une initialisation champ `a champ avec les champs de l’argument.
  • 168. Classes C++ Constructeur / destructeur Il existe aussi des destructeurs : on peut d´efinir un (et un seul) destructeur qui est appel´e automatiquement lorsqu’une variable locale est d´etruite (surtout utiles pour les structures de donn´ees dynamiques) Pour comprendre tous ces m´ecanismes d’appel... il faut les essayer !! cf. Constructeurs.cc
  • 169. Classes C++ Fonctions amies Si une fonction F est “amie” (friend) d’une classe C1, alors F peut acc´eder aux champs priv´es de C1. Si une classe C2 comme est “amie” de C1, toutes les fonctions membres de C2 peuvent acc´eder aux champs priv´es de C1. Ces d´eclarations se font dans la d´efinition de C1 : c l a s s C1 { . . . f r i e n d type−de−F F( param−de−F ) ; f r i e n d c l a s s C2 ; . . . };
  • 170. Classes C++ Conversions entre types Comme pour les types simples, on peut d´efinir des conversions entre les classes. Un constructeur de T1 qui prend un unique param`etre de type T2 d´efinit implicitement une conversion de T2 dans T1. (pas de composition: ne marche que pour des conversions en une ´etape) Une fonction membre operator T1() dans la classe T2 d´efinit aussi une conversion de T2 dans T1. (´evite de modifier la d´efinition de T1) Par exemple : c l a s s f r a c t i o n { p u b l i c : . . . f r a c t i o n ( i n t v ) {num=v ; den =1;} double () { r e t u r n double (num)/ den ;} };
  • 171. Surcharge d’op´erateurs Plan 14 Introduction 15 Regroupement de donn´ees 16 Classes C++ Champs et m´ethodes Constructeurs et destructeurs Fonctions amies Conversions entre types 17 Surcharge d’op´erateurs
  • 172. Surcharge d’op´erateurs Surcharge d’op´erateurs Il est possible de surcharger les op´erateurs de C++ (+, -, [ ], =, ==, . . . ): les arit´es et les priorit´es ne changent pas. Deux points de vue: fonction globale: “A op B” est vue comme l’application d’une fonction “op” `a deux arguments “A” de type TA et “B” de type TB. f r a c t i o n operator ∗( f r a c t i o n f , f r a c t i o n g ) { r e t u r n f r a c t i o n ( f . Numerateur ()∗ g . Numerateur ( ) , f . Denominateur ()∗ g . Denominateur ( ) ) ; } f r a c t i o n operator −( f r a c t i o n f ) { r e t u r n f r a c t i o n (−f . Numerateur ( ) , f . Denominateur ( ) ) ; }
  • 173. Surcharge d’op´erateurs Surcharge d’op´erateurs fonction membre: “A op B” est vue comme l’application d’une fonction “op” `a un argument “B” de type TB sur l’objet “A” de type TA. c l a s s f r a c t i o n { p r i v a t e : i n t num, den ; p u b l i c : . . . f r a c t i o n operator −(); f r a c t i o n operator ∗( f r a c t i o n h ) ; }; f r a c t i o n f r a c t i o n : : operator −() { r e t u r n f r a c t i o n (−num, den ) ; } f r a c t i o n f r a c t i o n : : operator ∗( f r a c t i o n h ) { r e t u r n f r a c t i o n (num∗h . num, den∗h . den ) ; }
  • 174. Surcharge d’op´erateurs Surcharge de cout L’op´erateur ne peut ˆetre surcharg´e que de mani`ere globale. Profil pour un type T: ostream (ostream , T ) Exemple: //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ostream operator (ostream os , f r a c t i o n f ) { os f . Numerateur () ”/” f . Denominateur ( ) ; r e t u r n os ; } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
  • 175. Quatri`eme partie IV Structures de donn´ees dynamiques
  • 176. Pointeurs Plan 18 Pointeurs 19 Pointeurs et tableaux 20 new et delete 21 structures de donn´ees dynamiques 22 Retour sur les classes
  • 177. Pointeurs Pointeurs Une variable permet de d´esigner – par un nom – un emplacement dans la m´emoire. Il est aussi possible de d´esigner directement les cases m´emoire par leur adresse. Un pointeur permet de stocker ces adresses m´emoire.
  • 178. Pointeurs Pointeurs, *, Un pointeur est typ´e : on distingue les pointeurs sur un int, sur un double, sur une fraction etc. D´efinir un pointeur: type * nom ; nom est un pointeur sur type, i.e. pouvant recevoir une adresse d´esignant un objet de type type. V repr´esente l’adresse m´emoire d’une variable V. *P d´esigne l’objet point´e par le pointeur P. i n t i , ∗ pi , k ; i =3; p i = i ; // p i pointe sur i k = (∗ p i )+5; // i d e n t i q u e `a : k=i +5 (∗ p i ) = k+2; // i d e n t i q u e `a : i = k+2 (∗ p i )++; // i c i , i =11, k=8
  • 179. Pointeurs Pointeurs et r´ef´erences Au lieu du passage par r´ef´erence, il est possible de passer (par valeur) les adresses des arguments d’une fonction et de modifier les donn´ees contenues `a ces adresses via l’op´erateur *. Fonction permut : void permut ( i n t ∗ pa , i n t ∗ pb ) { i n t aux = (∗ pa ) ; (∗ pa ) = (∗ pb ) ; (∗ pb ) = aux ;} Pour ´echanger les valeurs de i et j, on ´ecrit permut(i,j) ; (seule solution en C)
  • 180. Pointeurs et tableaux Plan 18 Pointeurs 19 Pointeurs et tableaux 20 new et delete 21 structures de donn´ees dynamiques 22 Retour sur les classes
  • 181. Pointeurs et tableaux Tableaux `a la “C” type nom[taille] ; → d´efinit un tableau d’´el´ements de type type et de taille taille (indices de 0 `a taille − 1). L’´el´ement d’indice i est d´esign´e par nom[i]. Dans “int Tab[10]”, Tab d´esigne l’adresse de la premi`ere case du tableau (i.e. Tab[0]) et le type de Tab est “const int *”. Qu’est-ce que Tab[i] ?
  • 182. Pointeurs et tableaux Tableaux `a la “C” type nom[taille] ; → d´efinit un tableau d’´el´ements de type type et de taille taille (indices de 0 `a taille − 1). L’´el´ement d’indice i est d´esign´e par nom[i]. Dans “int Tab[10]”, Tab d´esigne l’adresse de la premi`ere case du tableau (i.e. Tab[0]) et le type de Tab est “const int *”. Qu’est-ce que Tab[i] ? c’est (*(Tab+i)). i n t T [ 1 0 ] ; i n t ∗ p ; p = T [ 4 ] ; p [ 0 ] = 100; // ´equivaut `a T[ 4 ] = 100 p [ 1 ] = 200; // ´equivaut `a T[ 5 ] = 100
  • 183. Pointeurs et tableaux Pointeurs et tableaux Passer un tableau “C” en param`etre d’une fonction revient `a passer l’adresse de la premi`ere case ⇒ passage par r´ef´erence. Pour d´eclarer un param`etre T de type tableau d’entiers, on ´ecrit: int T[]. La taille doit ˆetre pass´ee avec un autre param`etre. void Tri(int T[],int taille) autres chaˆınes de caract`eres : tableaux (simples) de caract`eres se terminant par le caract`ere sp´ecial ’0’. char T[8] = exemple ; d´efinit et initialise le tableau T avec T[0]= ’e’, T[1]=’x’, . . . , T[7]=’0’.
  • 184. new et delete Plan 18 Pointeurs 19 Pointeurs et tableaux 20 new et delete 21 structures de donn´ees dynamiques 22 Retour sur les classes
  • 185. new et delete new et delete obj : allouer et d´esallouer de la m´emoire sans d´ependre la dur´ee de vie des variables. “new type ;” alloue un espace m´emoire pour contenir un objet de type type et retourne l’adresse ce cette zone m´emoire. “P = new type[N] ;” alloue un espace m´emoire capable de contenir N objets de type type ... “delete P ;” d´esalloue l’espace m´emoire d’adresse P. (ou “delete [ ] P ;”) Une zone allou´ee par new n’est d´esallou´ee que par l’appel de delete. . .
  • 186. new et delete Un peu de cin´ema ...
  • 187. structures de donn´ees dynamiques Plan 18 Pointeurs 19 Pointeurs et tableaux 20 new et delete 21 structures de donn´ees dynamiques 22 Retour sur les classes
  • 188. structures de donn´ees dynamiques Structures de donn´ees dynamiques Une structure de donn´ees dynamique ´evolue au cours du temps. Exemple de la pile: utiliser un tableau oblige `a borner la taille de la pile. On pr´ef`ere allouer de l’espace m´emoire en fonction des besoins : ajouter un ´el´ement `a la pile correspondra `a allouer (avec new) de la m´emoire, et supprimer reviendra `a d´esallouer (avec delete) la case contenant l’objet. ⇒ Le contenu de la pile sera donc ´eclat´e dans la m´emoire Pour ne pas perdre d’´el´ements, on indique `a chaque ´el´ement o`u se trouve le prochain ´el´ement. Cela correspond `a la notion de liste chaˆın´ee
  • 189. structures de donn´ees dynamiques Listes chaˆın´ees Un maillon d’une liste chaˆın´ee: c l a s s element { p u b l i c : i n t v a l ; element ∗ s u i v a n t ; }; Le champ suivant contient l’adresse du prochain ´el´ement de la liste (ou 0). On utilise l’adresse du premier ´el´ement de la liste... Parcours de liste, inversion, longueur. . . Listes doublement chaˆın´ees, circulaires, . . .
  • 190. Retour sur les classes Plan 18 Pointeurs 19 Pointeurs et tableaux 20 new et delete 21 structures de donn´ees dynamiques 22 Retour sur les classes
  • 191. Retour sur les classes Classes et pointeurs p-champ raccourci pour (*p).champ p-fct() raccourci pour (*p).fct() Lorsqu’on alloue de la m´emoire pour stocker un objet de type T, un constructeur est appel´e : soit celui sans argument (dans le cas d’un “new T”), soit un avec argument si des arguments sont pr´esents ( “new T(a1,...,aN) ;”). Dans la d´efinition des fonctions membre, on peut acc´eder `a l’adresse de l’objet courant: pointeur this.