Post on 04-Apr-2015
Bases de la programmation en C++ 1
Les Types de données complexes Les variables traditionnelles ne permettent de stocker qu’une donnée à la fois.
Lourdeur de programmation.
Besoin de types plus évolués.
Les structures.Peuvent contenir des données hétérogènes
Les tableaux.Permettent de stocker plusieurs données de même type
Bases de la programmation en C++ 2
Les structures
Définition d’un type personnalisé à partir des types de base.
Exemple:
On déclare une structure « Date », qui contient:
Un jour (de type entier).
Un mois (de type entier).
Une année (de type entier).
On a alors créé le type Date.
Bases de la programmation en C++ 3
Déclaration d’un type structure
On définit un nouveau type.
On utilise ce type pour déclarer les variables
struct NomStructure{ Type1 NomChamp1; Type2 NomChamp2; ….};
struct NomStructure NomVariable ;
Pas obligatoire en C++
Bases de la programmation en C++ 4
Exemple de déclaration
struct Client{ unsigned int Age ; unsigned float Taille ;
};
struct Client Jean, Philippe;
Client Paul;
Déclaration de 3 variables de type Client
Déclaration du type structure Client
Bases de la programmation en C++ 5
Exemple de déclaration
struct Client{
unsigned int Age ;
unsigned float Taille ;
} Jean ;
struct {
unsigned int Age ;
unsigned float Taille ;
} Jean ;
ou
Attention on ne pourra pas réutiliser ce type de structure
(le type n’a pas été déclaré)
Déclaration du type structure Client et d’une variable de type Client
Déclaration d’une variable de type structure (pas de nom pour la structure)
Bases de la programmation en C++ 6
Accès à un champ d’une structure
Les éléments d’une structure sont accédés par un point, suivi du nom du champ de la structure à accéder.
Exemples
NomStructure . NomChamp
struct Client{ unsigned int Age ; unsigned float Taille ;
};
struct Client Jean, Philippe;
Client Paul;
Jean. Age = 22;Jean. Taille = 180;
cin >> Philippe.Taille;
cout << Jean. Age ;
Philippe = Jean;
Bases de la programmation en C++ 7
struct Date{ int Jour ; int Mois ; int Annees ;
};
int main (){ //déclaration avec affectation Date Anniv={22,04,1978};
Date Demain; Demain = Anniv; cout<< Demain.mois<<endl; return 0; }
Exemple de déclaration / affectationstruct Date{ int Jour ; int Mois ; int Annees ;
};
int main (){ Date Anniv; //déclaration simple Anniv.Jour = 22; //affectation Anniv.Mois = 04; //affectation Anniv.Années = 1978; //affectation cout<< Anniv.Mois<<endl; return 0; }
Cette structure est visible par toutes les fonctions du fichiers
L’affectation marche mais pas la comparaison ‘==‘
Bases de la programmation en C++ 8
Exemple d’imbrication de structures
struct Date{ int Jour ; int Mois ; int Annees ;
};
struct Personne{ float taille; Date date_naissance;
};
int main (){ Personne Paul; //déclaration simple
//déclaration avec affectation Personne Jean={180,{6,8,1985} }; // on aurait aussi pu écrire // Personne Jean={180, 6,8,1985 };
Paul. date_naissance. Jour = 5; Paul. date_naissance. Mois = 12; Paul. date_naissance. Annees = 1984; Paul. Taille=179;
Jean={182,{6,9,1983} };
}
Uniquement à la déclaration
Bases de la programmation en C++ 9
Exemple de passage de structure en paramètre
struct Client{ int Age ; float Taille ;
};
Client plus_grand (Client c1, Client c2) { if (c1. Taille > c2. Taille )
return c1; else
return c2;}
int main (){ Client Max; Client Jean = {23,180.0 }; Client Paul = {22,190.0 }; Max = plus_grand(Jean, Paul );
cout<< Max.age; // la console va inscrire 22 }
Bases de la programmation en C++ 10
Les tableaux
Suite de n données du même type, stockées de manières consécutive en mémoire.Un tableau est donc une suite de cases (espace mémoire) de même taille. La taille de chacune des cases est conditionnée par le type de donnée que le tableau contient.
Les éléments du tableau peuvent être: des données de type simple: int, char, float, long, double, ...
(la taille d'une case du tableau est alors le nombre d'octets sur lequel la donnée est codée).
des tableaux. des structures.
Lorsque le tableau est composé de données de type simple, on parle de tableau monodimensionnel (ou vecteur)
Lorsque celui-ci contient lui même d'autres tableaux on parle alors de tableaux multidimensionnels (aussi matrice ou table)
Bases de la programmation en C++ 11
Les tableaux unidimensionnels
Déclaration d’un tableau:
Exemple: un tableau de 10 entiers
type Nom_du_tableau [Nombre d'éléments] ;
Le type d’élément que contient le tableau
(int, char, etc…)
Le nom de la variable de type tableau
Entier qui détermine le nombre d’élément
du tableauPas de variable!
int tab [10]; int int int int int int int int int int
Bases de la programmation en C++ 12
Accéder aux éléments
On accède à un élément par son indice.
(numéro d’ordre dans le tableau)
Syntaxe:
Règles:L'indice du premier élément du tableau est 0 Un indice est toujours positif L'indice du dernier élément du tableau est égal au nombre
d'éléments - 1
Exemple: un tableau de 10 entiers
Nom_du_tableau [indice]
int tab [10]; int int int int int int int int int int
0 1 2 3 4 5 6 7 8 9Indices
Bases de la programmation en C++ 13
Exemple de manipulation
Manipulation des éléments comme des variables normales:
//Déclaration d’un tableau de 10 entiers ( [0….9] ).int Toto[10];
Int h=10;int Toto[h]; //erreur de compilation! H est une variable et pas une constante
//On affecter la valeur 6 au huitième élémentToto[7] = 6;
//On affecte au 10ème élément le résultat de l'addition des éléments 1 et 2Toto[9] = Toto[0] + Toto[1];
//On affecte 5 au (i+2)ème élémentint i = 3;Toto[i+2] = 5;
Bases de la programmation en C++ 14
Initialisation d’un tableau
Valeur par valeur (bof…)
int Toto[10]; //déclaration
//InitialisationToto[0]=8;Toto[1]=32;//etc…
Utilisation d’une boucle (mieux!)
int Toto[10]; //déclarationint Indice; //var locale
for (Indice = 0; Indice < 10; Indice++) { Toto[Indice] = 0; }
A la déclarationint 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
Bases de la programmation en C++ 15
Restriction
On ne peut pas affecter une série de valeurs en dehors de la déclaration.
On ne peut pas affecter un tableau à un autre.
On ne peut pas comparer deux tableaux.
int t[3] = {4, 5, 8}; // OK
int t[3] ;t = {1, 2, 6, 5}; // ERREUR
int x[3] ,int y[3] ; // déclaration de deux tableaux d’entier…x = y; // ERREUR
int x[3] ,int y[3] ; // déclaration de deux tableaux d’entier…if(x == y) // ERREUR
Bases de la programmation en C++ 16
Exemple : produit scalaire de deux vecteurs
int main(){ int u[10], v[10]; // déclaration de deux vecteurs de 10 éléments : entrées int Produit_scalaire = 0; //sortie int ind; // var local cout<< "saisie de u"<<endl; for (ind=0;ind<10;ind++) // saisie des 10 éléments du vecteur u cin >> u[ind];
cout<< "saisie de v"<<endl; for (ind=0;ind<10;ind++) // saisie des 10 éléments du vecteur v cin >> v[ind];
for (ind=0;ind<10;ind++) // calcul du produit scalaire Produit_scalaire = Produit_scalaire + u[ind] * v[ind] ;
cout<< "Le produit scalaire de u et v est: "<< Produit_scalaire <<endl;
return 0;}
Bases de la programmation en C++ 17
Les tableaux Multidimensionnels Déclaration d’un tableau:
Exemple: un tableau d’entiers à 2 dimensions (3 lignes, 4 colonnes)
type Nom_du_tableau [dim1][dim2]…[dimn] ;
Le type d’élément que contient le tableau
(int, char, etc…)
Le nom de la variable de type tableau
Nombre d’élément dans chaque dimension
int tab [3][4];
Tableau[0][0] Tableau[0][1] Tableau[0][2] Tableau[0][3]
Tableau[1][0] Tableau[1][1] Tableau[1][2] Tableau[1][3]
Tableau[2][0] Tableau[2][1] Tableau[2][2] Tableau[2][3]
Bases de la programmation en C++ 18
Initialisation d’un tableau
Valeur par valeur
int Toto[3][5]; //déclaration
//InitialisationToto[0][0]=8;Toto[1][2]=32;//etc…
Utilisation d’une boucleint Toto[3][5]; //déclarationint i,j; //var locale
for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { Toto[i][j] = 0; } }
A la déclarationint Toto[3][5] = {1, 2, 6, 5, 2, 1, 9, 8, 1, 5,8,3,6,7,9};
// de la forme:// { [0][0] , [0][1] , [0][2] , [0][3] , [0][4] , [1][0] , [1][1] , [1][2] , [1][3] ,etc ….}
Bases de la programmation en C++ 19
Passage de tableaux en paramètre
Cas monodimensionnel.
Cas Multidimensionnel.
void Fonction( int x[ ] ){ ….. …..}
int main(){ int tab[20]; ….. Fonction ( tab);
}
Ne pas préciser la taille du tableau
Pas de passage par valeur ou référence
Le tableau d’origine peut être modifié
dans tout les cas!
void Fonction( int x[ ][4] ){ ….. …..}
int main(){ int tab[10][4]; ….. Fonction ( tab);
}
Ne pas préciser la première taille
Bases de la programmation en C++ 20
Transtypages
Permet de changer le type d’une valeur.
Exemple:
(type) expression
Type désiré Expression à convertir
int i=5, j=2;float result1;float result2;
Result1 = i / j; // Result1 prend la valeur 2
Result2 =(float) i / (float) j; // Result2 prend la valeur 2.5// i et j ont été transformés en float pour cette opération
Bases de la programmation en C++ 21
Exercice4
Boite à outils pour vecteurFaire entrer 2 vecteurs à l’utilisateur (taille = 3)Faire entrer un operateur (‘*’ ou ‘+’)(produit scalaire, addition)Rendre le produit vectoriel ou l’addition des deux vecteurUtiliser 2 fonctions Addition et produit_scalaire. float produit_scalaire(int u[ ], int v[ ])
void Addition (int u[ ], int v[ ],int Result[ ])
Declarer une structure homme Date naissance; Reel taille; int age.
Faire une fonction qui retourne le plus agé de 2 hommes.L’appeler dans le main