Cours07 Full
Cours07 Full
Cours07 Full
Concepts
centraux
Approfondissement
Etude de cas
Programmation I :
Cours de programmation (C++)
Tableaux
Jamila Sam
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 1 / 22
Support MOOC
Concepts
Vidéos, transparents et quiz
centraux
Approfondissement
Etude de cas
https://www.coursera.org/learn/init-prog-cpp/home/week/5
+ Semaine 5
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 2 / 22
Support MOOC
Concepts
Les vector
centraux
Tableaux
dynamiques
Tableaux statiques
taille initiale connue a priori ?
Approfondissement
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 3 / 22
Support MOOC
Concepts
Initialisation d’un tableau dynamique
centraux
Tableaux
dynamiques
Tableaux statiques
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 4 / 22
Support MOOC
Concepts
Accès direct aux éléments d’un tableau
centraux
Approfondissement tab[i]
Etude de cas
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 5 / 22
Support MOOC
Concepts
Accès aux éléments d’un tableau (2)
centraux
Tableaux
dynamiques
Tableaux statiques
Très souvent, on voudra accéder aux éléments d’un tableau en
Approfondissement effectuant une itération sur ce tableau.
Etude de cas
Il existe en fait au moins trois façons d’itérer sur un tableau :
I avec les itérations sur ensemble de valeurs
for (auto element : tableau)
for (auto& element : tableau)
I [C, C++98] avec une itération for « classique » :
for (size_t i(0); i < tableau.size(); ++i)
Lequel choisir ?
I à chaque fois que c’est possible : le premier
c EPFL 2017-18
Jamila Sam I sinon : le deuxième.
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 6 / 22
Support MOOC
Concepts
Fonctions spécifiques
centraux
Tableaux
dynamiques
Tableaux statiques
Quelques fonctions disponibles pour un tableau dynamique
Approfondissement tableau de type vector<type> :
Etude de cas
tableau.size() : renvoie la taille de tableau (type de retour :
size_t)
tableau.front() : renvoie une référence au 1er élément
tableau.front() est donc équivalent à tableau[0]
tableau.back() : renvoie une référence au dernier élément.
tableau.back() est donc équivalent à tableau[tableau.size(
tableau.empty() : détermine si tableau est vide ou non
(bool).
tableau.clear() : supprime tous les éléments de tableau (et
le transforme donc en un tableau vide). Pas de (type de) retour.
tableau.pop_back() : supprime le dernier élément de
tableau. Pas de (type de) retour.
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier tableau.push_back(valeur) : ajoute un nouvel élément de
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
valeur valeur à la fin de tableau. Pas de Programmation
(type de) retour.
I – Cours 7 : Tableaux – 7 / 22
Support MOOC
Concepts
Les tableaux multidimensionnels
centraux
Tableaux
dynamiques
Tableaux statiques
Approfondissement
Etude de cas
tableau à plusieurs dimensions : tableau de tableaux...
Le type de base d’un tableau peut être n’importe quel type, y compris
composé. En particulier, le type de base d’un tableau peut être lui même
un tableau.
Exemple :
vector<vector<int>> tab(5, vector<int>(6));
correspond à la déclaration d’un tableau de 5 tableaux de 6 entiers
tab[i] est donc un « vector<int> », c’est-à-dire un tableau
dynamique d’entiers (qui, au départ, en contient 6)
tab[i][j] sera alors le (j + 1)-ième élément de ce tableau.
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 8 / 22
Support MOOC
Concepts
Le template vector
centraux
Tableaux
dynamiques
Tableaux statiques
Approfondissement
#include <vector>
Etude de cas
Fonctions spécifiques :
int tab.size() : renvoie la taille
bool tab.empty() : détermine s’il est vide ou non
void tab.clear() : supprime tous les éléments
void tab.pop_back() : supprime le dernier élément
void tab.push_back(valeur) : ajoute un nouvel élément à
la fin
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 9 / 22
Support MOOC
Concepts
Les array
centraux
Tableaux
dynamiques
Tableaux statiques
Approfondissement
Etude de cas
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 10 / 22
Support MOOC
Concepts
Inconvénients des tableaux de taille fixe
centraux
Tableaux
dynamiques
à la C
Tableaux statiques
Approfondissement
Etude de cas
Les tableaux de taille fixe à la C :
I sont toujours passés par référence
I n’ont pas connaissance de leur propre taille
I ne peuvent pas être manipulés globalement (pas de « = »)
I ne peuvent pas être retournés par une fonction
I ont une syntaxe d’initialisation particulière
+ AUCUN avantage !
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 11 / 22
Support MOOC
Concepts
Déclaration d’un tableau de taille fixe
centraux
Tableaux
dynamiques
Tableaux statiques
Approfondissement
Etude de cas
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 12 / 22
Support MOOC
Concepts
Initialisation d’un tableau de taille fixe
centraux
Tableaux
dynamiques
Comme pour les variables de type élémentaire, un tableau de
Tableaux statiques
taille fixe peut être initialisé directement lors de sa déclaration :
Approfondissement
Exemple :
constexpr int taille(5);
Âge
/* pas encore supporté par tous les * 20
* compilateurs :-( 35
*/
array<int, taille> ages ( 26
{ 20, 35, 26, 38, 22 } ); 38
22
// alternative :
array<int, taille> ages = {
20, 35, 26, 38, 22
};
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
Concepts
Pour résumer
centraux
Tableaux
dynamiques
Tableaux statiques
Approfondissement
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 14 / 22
Support MOOC
Concepts
Les tableaux de taille fixe
centraux
Tableaux
dynamiques
Tableaux statiques
#include <array>
Approfondissement
Etude de cas
Déclaration : array<type, taille> identificateur;
Déclaration/Initialisation :
array<type, taille> identificateur =
{val1 , ... , valtaille };
Fonctions spécifiques :
size_t tab.size() : renvoie la taille
Tableau multidimentionnel :
array<array<type, nb_colonnes>, nb_lignes>
identificateur;
c EPFL 2017-18
Jamila Sam
tab[i][j] = ...;
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 15 / 22
Support MOOC
Concepts
Approfondissement
centraux
Approfondissement
Etude de cas
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 16 / 22
Support MOOC
Concepts
Types élémentaires « avancés »
centraux
Approfondissement En plus des types composés, signalons qu’il existe aussi d’autres
Etude de cas types élémentaires, dérivés des types élémentaires présentés.
Trois modificateurs peuvent être utilisés :
I pour les int et les double, on peut demander d’avoir une
plus grande précision de représentation à l’aide du
modificateur long, et même long long ( ).
Exemple : long int nb_etoiles;
I pour les int, on peut aussi demander d’avoir une moins
grande précision de représentation à l’aide du modificateur
short.
Exemple : short int nb_cantons;
I pour les int (et les char), on peut demander de travailler
avec des données non signées, à l’aide du modificateur
unsigned.
Exemple : unsigned int nb_cacahouetes;
On peut bien sûr combiner :
c EPFL 2017-18
Jamila Sam unsigned long int nb_etoiles;
& Jean-Cédric Chappelier
unsigned short int nb_cantons;
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 17 / 22
Support MOOC
Concepts
Types élémentaires « avancés »
centraux
Approfondissement
Etude de cas En C++, la taille des types n’est pas spécifiée dans la norme.
Seules indications :
I le plus petit type est char
I les inégalités suivantes sont toujours vérifiées sur les tailles
mémoires :
char ≤ short int ≤ int ≤ long int
double ≤ long double
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 18 / 22
Support MOOC
Concepts
Types élémentaires « avancés »
centraux
c EPFL 2017-18
Jamila Sam
Note : « précision » correspond au plus petit nombre x tel que
& Jean-Cédric Chappelier
1 + x 6= 1.
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 19 / 22
Support MOOC
Concepts
Etude de cas
centraux
Approfondissement
Etude de cas
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 20 / 22
Support MOOC
Concepts
Etude de cas analyse de données
centraux
Approfondissement
Etude de cas
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 21 / 22
Support MOOC
Concepts
Pour préparer le prochain cours
centraux
Approfondissement
Etude de cas
I Le prochain cours :
I de 15h15 à 16h (résumé et quelques approfondissements)
c EPFL 2017-18
Jamila Sam
& Jean-Cédric Chappelier
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Programmation I – Cours 7 : Tableaux – 22 / 22