Académique Documents
Professionnel Documents
Culture Documents
Cours 1
S. El Abdellaoui
Mohamed
El Nabil
Abdellaoui SaïdSaidi 2017 / 2018
Introduction
Mohamed
El Nabil
Abdellaoui SaïdSaidi 2
Introduction
Créé en 1980
Langage évolué et structuré
Possède les fonctionnalités de la programmation orienté objet (P.O.O)
Caractéristique du langage C++
Structuré et modulaire
Mohamed
El Nabil
Abdellaoui SaïdSaidi 3
Structure d’un programme C++
Les étapes permettant l‟édition, la mise au point, l‟exécution d'un programme C++
Programme
Bibliothèque Editeur de liens Exécutable
Bibliothèque (*.exe)
Mohamed
El Nabil
Abdellaoui SaïdSaidi 4
Structure d’un programme C++
Chaque fichier se présente comme une suite de fonction.
Une fonction est imposée: la fonction main
Fonction principale.
Point d‟entrée du programme.
Fichier 1 Fichier n
Main Main
Fonction Fonction
Fonction Fonction
Mohamed
El Nabil
Abdellaoui SaïdSaidi 5
Structure d’un programme C++
Exemple :
#include <iostream.h> Inclusion de la bibliothèque
using namespace std; standard (ANSI) du C++
int main () Déclaration pour les E/S
{ de
int annee_creation; fonctions
int NousSommesEn;
int difference; Déclaration des variables
Mohamed
El Nabil
Abdellaoui SaïdSaidi 6
Syntaxe
Vous devez commenter votre code ! ; cela aide les lecteurs a comprendre
le code.
Mohamed
El Nabil
Abdellaoui SaïdSaidi 7
Syntaxe : Saisie et affichage des données
Entrées/sorties fournies à travers la librairie iostream :
Saisir une variable au clavier: cin
Afficher une variable ou une phrase à l‟écran: cout
Exemple :
N‟oubliez
pas d‟inclure
la bibliothèque
iostream.h
Mohamed
El Nabil
Abdellaoui SaïdSaidi 8
Les types élémentaires
Mohamed
El Nabil
Abdellaoui SaïdSaidi 9
Les Variables (1/3)
Définition d‟une valeur :
Nom :
Différenciation minuscule-majuscule
Type :
Mohamed
El Nabil
Abdellaoui SaïdSaidi 10
Les Variables (2/3)
Déclaration locale ou globale:
Variables globales :
Variables locales:
Mohamed
El Nabil
Abdellaoui SaïdSaidi 11
Les Variables (3/3)
#include <iostream.h>
using namespace std;
Déclaration de variable
const float PI = 3.14159; globale
int main ()
{
float rayon = 5.458; Déclaration de variables
float perimetre; locales
// calcul périmètre
perimetre = PI * 2* rayon;
return 0;
}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 12
Les opérateurs
Affectation : =
Opérateurs arithmétiques
Addition: + Soustraction: -
Multiplication: * Division: / (division entière dans le cas de int)
Modulo: % (reste de la division entière)
Opérateurs arithmétiques unaires (un seul opérande)
Moins unaire: - Incrémentation: ++ Decrémentation: --
Opérateurs logiques
Négation: !
ET logique: &&
OU logique: ||
Opérateurs de relation ( ils rendent 1 si la condition est vrai et 0 sinon)
< , > , <= , >= , == , !=
Mohamed
El Nabil
Abdellaoui SaïdSaidi 13
Instructions de contrôle (1/11)
Contrôler le déroulement de l‟enchaînement des instructions à
l‟intérieur d‟un programme, ces instructions peuvent être des
instructions conditionnelles ou itératives
Instructions conditionnelles : if ….else
Prototype:
Expression
if( condition ) logique
{
instruction 1
}
Vrai (!=0) Faux (=0)
else
{
instruction 2
}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 14
Instructions de contrôle (2/11)
Une valeur égale à 0 représente l‟expression logique Faux
Une valeur différente de 0 représente l‟expression logique Vrai
1 // vrai
a=5 //instruction toujours vrai
a // vrai car a est différent de 0
!a // faux car !a vaut 0
a && 7 // vrai car a && 7 vaut 1
a || 0 // vrai car a || 0 vaut 1
a && 0 // faux car a && 0 vaut 0
(a && 0) || (a && 7) // vrai
(a > 7) && (a > 3) // faux (a > 7) vaut 0 et (a > 3) vaut 1
Mohamed
El Nabil
Abdellaoui SaïdSaidi 15
Instructions de contrôle (3/11)
#include <iostream.h>
using namespace std;
int main ()
{ int a , b; //entrées
int max; //sorties
//affichage
cout << " la valeur maximal est : " << max;
return 0;
}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 16
Instructions de contrôle (4/11)
Instructions de branchement : Switch
switch (expression)
{
case constante_1 : [ suite_d'instructions_1 ] ;
case constante_2 : [ suite_d'instructions_2 ];
..............
case constante_n : [ suite_d'instructions_n ];
default : suite_d'instructions ;
Exemple : }
int a;
switch (a)
{
case 7 : a=2; //si a égal à 7 j‟affecte 2 à a
case 4 : a=3; //si a égal à 4 j‟affecte 3 à a
default : a=0; //sinon j‟affecte 0 à a
}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 17
Instructions de contrôle (5/11)
#include <iostream.h>
using namespace std;
int main ()
{
char operateur;
cin >> operateur;
switch (operateur)
{
Affiche le travail de l’opérateur
case „+‟ : cout << " addition " ; break;
que l’utilisateur a saisi
case „-‟ : cout << " soustraction " ; break;
au clavier
case „/‟ : cout << " division " ; break;
while( condition )
{
instruction
}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 19
Instructions de contrôle (7/11)
#include <iostream.h>
using namespace std;
int main ()
{ int max; //entrée
int i; // variable-local
int somme; // sortie
// pre-condition: max >0
// post-relation: somme = 1 + … + max
Calcul de la somme des entiers
i = 1; // initialisation
de 1 à max somme = 0; // initialisation
return 0;
}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 20
Instructions de contrôle (8/11)
do
{
instructions
}
while( condition ) ;
Mohamed
El Nabil
Abdellaoui SaïdSaidi 21
Instructions de contrôle (9/11)
#include <iostream.h>
int main ()
{
int max; //entrée
int i; // variable-local
int somme; // sortie
// pre-condition: max >0
// post-relation: somme = 1 + … + max
Calcul de la somme des entiers
i = 1; // initialisation
de 1 à max somme = 0; // initialisation
cin >> max; //saisie
do
{ somme = somme + i;
i = i + 1;
} while (i <= max); // on écrit en général i++
La boucle for :
Exp1 : initialisation
Exp2 : condition
Exp3 : progression
exécuter l‟instruction
Mohamed
El Nabil
Abdellaoui SaïdSaidi 23
Instructions de contrôle (11/11)
#include <iostream.h>
int main ()
{
int max; //entrée
Calcul de la somme des int i; // variable-local
entiers de 1 à max int somme; // sortie
// pre-condition: max >0
// post-relation: somme = 1 + … + max
// i = 1; // initialisation
somme = 0; // initialisation
Initialisation cin >> max; //saisie
for (i = 1 ; i<= max ; i++)
{ somme = somme + i;
Progression
// i = i + 1; // on écrit en général i++
}
cout << somme; //affichage
return 0; }
Mohamed
El Nabil
Abdellaoui SaïdSaidi 24
Rupture de séquence
Break
Mohamed
El Nabil
Abdellaoui SaïdSaidi 25
Exercice 1
Ecrire un programme qui demande à l'utilisateur de taper un entier N
et qui calcule u(N) défini par :* #include <iostream.h>
using namespace std;
u(0)=3 int main () {
u(1)=2
u(n)=n.u(n-1)+(n+1).u(n-2)+n int N,u,i=0,v,w;
cout<<"Tapez la valeur de N : ";
cin>>N; u=3; v=2;
if(N==0)w=u;
else if(N==1)w=v;
else for(i=2;i<=N;i++)
{w=i*v+(i+1)*u+i;
u=v; v=w;}
cout<< "u(" << N << ")=" <<w<< endl;
return 0; }
Mohamed
El Nabil
Abdellaoui SaïdSaidi 26
Exercice 2
Ecrire un algorithme qui calcule n! (le nombre n doit être saisie au
clavier). Utiliser une boucle for puis une boucle while.
#include <iostream.h>
using namespace std;
int main () {
int N,i,f=1;
cout << "Tapez un entier : ";
cin>>N;
for(i=2; i<=N; i++) f=f*i;
cout <<N<<"! vaut "<<f<<endl;
return 0; }
Mohamed
El Nabil
Abdellaoui SaïdSaidi 27
Les tableaux
Mohamed
El Nabil
Abdellaoui SaïdSaidi 28
Les tableaux unidimensionnels
Déclaration d‟un tableau:
int tab [10]; int int int int int int int int int int
Indices 0 1 2 3 4 5 6 7 8 9
Mohamed
El Nabil
Abdellaoui SaïdSaidi 29
Exemple de manipulation
Manipulation des éléments comme des variables normales:
int h;
int Toto[h]; // erreur de compilation! h est une variable et pas une constante
int i = 3;
Toto[i+2] = 5; // On affecte 5 au 6 ème élément
Mohamed
El Nabil
Abdellaoui SaïdSaidi 30
Initialisation d’un tableau
• A la déclaration
int Toto[10] = {1, 2, 6, 5, 2, 1, 9, 8, 1, 5}; // toutes les éléments ont une valeur
int Toto[10] = {1, 2, 6, 5}; // les éléments non définit sont initialisé à 0
// au moins un élément doit être définit
Mohamed
El Nabil
Abdellaoui SaïdSaidi 31
Restriction
On ne peut pas affecter une série de valeurs en dehors de la déclaration.
Mohamed
El Nabil
Abdellaoui SaïdSaidi 32
Exemple : produit scalaire de deux vecteurs
int main() {
Mohamed
El Nabil
Abdellaoui SaïdSaidi 33
Les tableaux Multidimensionnels
Déclaration d‟un tableau:
Mohamed
El Nabil
Abdellaoui SaïdSaidi 34
Initialisation d’un tableau
• A la déclaration
// de la forme:
// { [0][0] , [0][1] , [0][2] , [0][3] , [0][4] , [1][0] , [1][1] , [1][2] , [1][3] ,etc ….}
Mohamed
El Nabil
Abdellaoui SaïdSaidi 35
Transtypages
Permet de changer le type d‟une valeur.
(type) expression
Exemple:
Mohamed
El Nabil
Abdellaoui SaïdSaidi 36
Les pointeurs
Mohamed
El Nabil
Abdellaoui SaïdSaidi 37
La notion d’adresse
Adresses valeurs
@65775417 123
@65775416 3.2132
@65775415 ‘M’
@65775414 ‘i’
@65775413 ‘a
@65775412 ‘m’
Mohamed
El Nabil
Abdellaoui SaïdSaidi 38
Qu’est ce qu’un pointeur ?
Un pointeur est une variable qui contient l‟adresse d‟une variable.
Le stockage en mémoire de la variable (char, int, etc…) est alors sous la
responsabilité du programmeur.
On dit que le pointeur pointe sur l‟objet pointé.
Le type du pointeur est construit à partir du type de l‟objet pointé.
Exemple
Déclaration d‟un pointeur
Mohamed
El Nabil
Abdellaoui SaïdSaidi 39
Opérateur concernant les pointeurs
Mohamed
El Nabil
Abdellaoui SaïdSaidi 40
Exemple de déclaration et d’utilisation
Mohamed
El Nabil
Abdellaoui SaïdSaidi 41
Initialisation des pointeurs (1/5)
Il faut s‟assurer que les pointeur que l‟on manipule sont bien initialisé!
int * Var; // pour le compilateur Var pointe sur quelque chose (n‟importe quoi)
int * Var = NULL; // le compilateur sait que Var ne pointe sur rien
Mohamed
El Nabil
Abdellaoui SaïdSaidi 42
Initialisation des pointeurs (2/5)
Affectation à une variable existante.
int i = 2;
int * P; 65775417
P = &i;
65775416
65775415 2 i = *P
? 65775414
P 65775413 XXXXX
65775415 P
65775412
Mohamed
El Nabil
Abdellaoui SaïdSaidi 43
Initialisation des pointeurs (3/5)
int i,j; // i, j variables de type int
int * pi, *pj; // pi et pj, variables de type « pointeurs vers int »
pi=&i; // le pointeur est initialisé à &i, il pointe à l‟adresse &i, donc sur i
*pi=2; // accès à l‟élément pointé, i est mis à 2
(*pi)++; // incrémente i qui passe à 3
int i=2, j , k ;
int * p1, * p2;
p1 = &i; // p1 contient l‟adresse de i
*p1 = i; // inutile! Car pi=&i donc automatiquement *pi=i
p2 = k; // attention l‟adresse p2 prend une valeur non défini(p2 pointe n‟importe ou)
*p2 = 3; // on écrit quelque chose à un endroit inconnu ! Plantage!
Mohamed
El Nabil
Abdellaoui SaïdSaidi 44
Initialisation des pointeurs (4/5)
Allocation dynamique.
On réserve la place pour la variable pointée.
Syntaxe: Nom_Variable = new type ;
int * P;
65775417
P = new int ;
65775416
65775415 *P
65775414
?
P 65775413 XXXXX
65775415 P
65775412
Mohamed
El Nabil
Abdellaoui SaïdSaidi 45
Initialisation des pointeurs (5/5)
Allocation dynamique
Il faut penser à libérer la mémoire après utilisation !
Syntaxe: delete Nom_Variable ;
Même si on déclare un pointeur dans une fonction (local), il doit être libéré !
double * D;
D = new double ;
*D = 12.34;
delete D ; // libération de l‟espace occupé par le double
Mohamed
El Nabil
Abdellaoui SaïdSaidi 46
Arithmétique des pointeurs
Les opérateur ++, --, +, = ….. Sont définis pour les pointeurs, mais attention, ils
s‟appliquent aux adresses.
int * P;
…. //allocation
65775417 123
P ++ ;
65775416 12
P=P–2;
int * Q = P + 3; Q 65775415 156
65775414 3
65775413 9
65775412 456
P
Mohamed
El Nabil
Abdellaoui SaïdSaidi 47
Les tableaux dynamiques (1/3)
Un tableau est en fait un pointeur!
int tableau[3];
int * P = tableau ;
tableau [2] = 5 ;
*(tableau+1) = 4; 65775417
P[0]=1; // *(P+0) = 1 65775416
65775415 5
P 65775414 4
65775413 1
tableau
65775412
Mohamed
El Nabil
Abdellaoui SaïdSaidi 48
Les tableaux dynamiques (2/3)
int tab[3];
int * Ptab, x; // Ptab pointeur sur un int
Ptab = & tab [0]; // Ptab pointe sur le début du tableau
// équivalent à Ptab = tab
x = *Ptab; // équivalent à x = tab[0]
*(Ptab+ i) = 3; // équivalent à tab[i]=3, *(tab + i) = 3 , Ptab[i]=3
int n = 3;
int tab[n]; // INTERDIT
int * Ptab = new int [n]; // OK
….
delete [ ] Ptab; // désallocation du pointeur
Mohamed
El Nabil
Abdellaoui SaïdSaidi 49
Les tableaux dynamiques (3/3)
Un tableau est un pointeur constant !
int * tab1 = new int [3]; // déclaration d‟un pointeur avec allocation pour 3 éléments
int * tab2 = new int [3]; ;
Tab2 = tab1 ; //attention Tab2 pointe maintenant au même endroit que Tab1
char * chaine;
chaine = "coucou";
Mohamed
El Nabil
Abdellaoui SaïdSaidi 50
Affectation de pointeur
Erreur 65775413 31
65775412 756
tab2 = tab1
Mohamed
El Nabil
Abdellaoui SaïdSaidi 51
TD 1
52