Académique Documents
Professionnel Documents
Culture Documents
Les tableaux 1
1) Définition
▪ Problématique ?
Exemple
Pour conserver simultanément les notes de 10 étudiants, il nous faut 10 variables différentes.
→ Pour effectuer des opérations telles que la somme des notes, la moyenne, la recherche de la note la plus élevée, etc., vous devez
1
Les tableaux 2
1) Définition
▪ Un tableau est une collection d'éléments de données similaires stockés dans des emplacements de mémoire contigus.
▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)
▪ La déclaration et l'utilisation des tableaux en C++ sont les mêmes que celles du langage C.
Mémoire
Les tableaux 3
► Déclaration
▪ Pour déclarer un tableau à une dimension en C++, on utilise la syntaxe suivante :
➢ Syntaxe :
type NomTableau [Taille];
➢ Exemples :
int TabEntiers [10] ; // Cette déclaration définit un tableau d’entiers de taille 10
float TabReels [20] ; // Cette déclaration définit un tableau de réels de taille 20
▪ La taille d’un tableau peut également être déclarée comme une constante:
const int N=10 ; // Cette déclaration définit la taille du tableau sous forme d’une constante
int TabEntiers [N] ; // Cette déclaration définit un tableau d’entiers de taille N
2
Les tableaux 4
➢ Exemple :
Tab [4] ; // Accéder à l’élément numéro 5 de tableau Tab
Les tableaux 5
► Initialisation du tableau
▪ Pour initialiser un tableau à une dimension en C++, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille] = {Valeur1, Valeur2,…, Valeur_N-1} ;
➢ Exemple :
int Tab [5] = {1,2,3,4,5} ; // Cette déclaration définit un tableau d’entiers de taille (5) initialisé par les valeurs (1, 2, 3, 4, 5)
➔ Le nombre des valeurs d'initialisation ne peut pas dépasser la taille du tableau, mais il peut être inférieur.
➔ Les éléments qui ne sont pas initialisés explicitement seront initialisés implicitement (automatiquement) à 0
3
Les tableaux 6
3) Tableaux multidimensionnels
► Déclaration
▪ En plus des tableaux à une seule dimension (vecteur), le C++ autorise la déclaration des tableaux à plusieurs dimensions.
▪ Pour déclarer un tableau multidimensionnel, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille_D1] [Taille_D2] … [Taille_Dn]; // Taille_Di désigne la taille de la ième dimension
➢ Exemple :
Pour déclarer un tableau de deux dimensions (une matrice)
int Tab [2][5] ; // Cette déclaration définit un tableau d’entiers à 2 dimensions avec 2 lignes et 5 colonnes
0 1 2 3 4
Taille du tableau 2D : 2 lignes | 5 colonnes
0
Tab Premier indice (ligne) : 0 | Dernier indice (ligne) : 1
1 Premier indice (colonne) : 0 | Dernier indice (colonne) : 4
Les tableaux 7
3) Tableaux multidimensionnels
➢ Exemple :
Pour accéder à un tableau à deux dimensions :
Tab [1][3] ; // Accéder à l’élément situé dans la 1ère ligne / 3ème colonne de tableau Tab
0 1 2 3 4
0 Taille du tableau 2D : 2 lignes | 5 colonnes
Tab
Premier indice (ligne) : 0 | Dernier indice (ligne) : 1
1
Premier indice (colonne) : 0 | Dernier indice (colonne) : 4
4
Les tableaux 8
3) Tableaux multidimensionnels
► Initialisation du tableau
▪ Pour initialiser un tableau multidimensionnel en C++, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille_D1] [Taille_D2] … [Taille_Dn] = {Valeur1,1,…, Valeur_N*N} ;
➢ Exemple :
L’initialisation d’un tableau à deux dimensions peut être effectué de deux manières :
int Tab [2][5] = {1,2,3,4,5,6,7,8,9,10} ; // Initialisation élément par élément du tableau 2d d’entiers (1ère méthode)
int Tab [2][5] = { {1,2,3,4,5},{6,7,8,9,10} } ; // Initialisation ligne par ligne du tableau 2d d’entiers (2ème méthode)
➔ Les éléments qui ne sont pas initialisés explicitement seront initialisés implicitement (automatiquement) à 0
0 1 2 3 4
0 1 2 3 4 5
Tab
1 6 7 8 9 10
Les tableaux 9
Remarques :
❑ Les indices peuvent être des expressions arithmétiques :
Tab [2*i] ou Tab[i+3][j-2]
5
Les tableaux 10
➢ Exemple :
int Tab [3] = 10 ; Tab [3] ++ ; // Tab [3] vaut 11
Les tableaux 11
6
Les tableaux 12
int TabOriginal [5] = {1, 2, 3, 4, 5}; // Copiez les éléments de l'ancien tableau dans le nouveau
int nouvelle_taille = 10; // Nouvelle taille souhaitée for (int i = 0; i < 5; i++) {
int NouvTab[nouvelle_taille]; // Créez un nouveau tableau NouvTab[i] = TabOriginal[i];
}
// Vous pouvez maintenant utiliser NouvTab avec une taille de 10.
Les tableaux 13
7
Les tableaux 14
0 1 2 3 4 5 0 1 2 3 4 5
Étape 4 : 10 20 40 50 60 10 20 40 40 50 60
0 1 2 3 4 5
Étape 5 : 10 20 30 40 50 60
Les tableaux 15
8
Les tableaux 16
Étape 3 :
Position de l’élément à Décalage des éléments
supprimer
0 1 2 3 4 5 0 1 2 3 4 5
10 20 30 40 50 60 20 30 40 50 60 60
0 1 2 3 4 5
Étape 4 : 20 30 40 50 60 60
Les tableaux 17
➢ Exemple :
int T1 [4] = {2, 3, 5, 7};
Solution ?
int T2 [4] ;
Utiliser une boucle pour copier les
T2 = T1 ; // instruction incorrecte. ×
éléments un par un
9
Les tableaux 18
Les tableaux 19
10
Les tableaux 20
Les tableaux 21
► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions.
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
11
Les tableaux 22
► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions (Taille 2×4).
Solution :
Les tableaux 23
► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
➢ Principe :
▪ Le tri à bulle consiste à parcourir le tableau, par exemple de gauche à droite, en comparant les éléments côte à côte et en les
permutant s'ils ne sont pas dans le bon ordre.
▪ Au cours d'une passe du tableau, les plus grands éléments remontent de proche en proche vers la droite comme des bulles vers
la surface.
▪ Condition d’arrêt ?
On s'arrête dès que l'on détecte que le tableau est trié : si aucune permutation n'a été faite au cours d'une passe.
… ? ? …
i i+1
12
Les tableaux 24
► Exercices
➢ Exemple : Donnée : Tableau de 5 entiers [N=5] || Parcours du tableau 0 → N-1
Test = vrai (il y a une permutation) || Test = Faux (pas de permutation)
Les tableaux 25
► Exercices
➢ Exemple :
borne Test = Vrai
13
Les tableaux 26
► Exercices
➢ Exemple :
borne Test = Vrai
Les tableaux 27
► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
Solution :
14
Les chaînes de caractères
1) Introduction
▪ Une chaîne de caractères est un type particulier de données qui se présente comme une série de caractères alphanumériques.
▪ C++ fournit les deux types suivants pour la représentation des chaînes de caractères :
15
Les chaînes de caractères 2
▪ Elles sont d’ailleurs déclarées de la même manière que les autres types de variables .
► Déclaration
➢ Syntaxe
string NomChaine ;
➢ Exemple
16
Les chaînes de caractères 4
► Initialisation
➢ Syntaxe
➢ Exemple
► Saisie
➢ Exemple
Réponse :
string ch; // Déclaration d’une variable “ch” de type “string”
cin ne peut lire qu’un seul mot et non pas
getline(cin, ch); une chaine (suite de mots)
Exemple :
cin >>chaine ; (avec chaine= "Bonjour LSI2“)
Bonjour
17
Les chaînes de caractères 6
► Affichage
➢ Syntaxe
➢ Exemple
► Manipulation
#include <string>
→ Le fichier <string> contient également de nombreuses fonctionnalités permettant de simplifier l'utilisation et la manipulation de chaînes.
18
Les chaînes de caractères 8
► Manipulation
→ il est possible de faire une affectation d’une chaine à une autre en utilisant l’opérateur (=).
➢ Syntaxe : ch1 = ch2; // ch1 est la chaine destination et ch2 est la chaine source
► Manipulation
→ La concaténation se fait en copiant la deuxième chaine à la fin de la première en utilisant l’opérateur (+).
19
Les chaînes de caractères 10
► Manipulation
→ Pour obtenir la longueur d'une chaîne, il est possible d’utiliser l’une des deux fonctions : length() ou size()
➢ Syntaxe : NomChaine. length() ; // déterminer le nombre de caractères dans la chaine en utilisant la fonction length()
NomChaine. size() ; // déterminer le nombre de caractères dans la chaine en utilisant la fonction size()
► Manipulation
→ Cela revient à effectuer une comparaison avec la simple utilisation des opérateurs habituels (==, !=, >, etc.).
→ La comparaison se fait caractère par caractère entre les chaînes sur la base de l'ordre alphabétique (exemple: "A" < "B").
➢ Syntaxe : ( ch1== ch2 ), (ch1 != ch2), (ch1 > ch2), … // comparaison entre les deux chaines ch1 et ch2
cout << (ch1 > ch2); // Affiche (0 ) → 1er caractère de ch1 « B », 1er caractère de ch2 « S » (B vient avant le S dans l’alphabet)
cout << (ch1 < ch2); // Affiche ( 1 ) → 1er caractère de ch1 « B », 1er caractère de ch2 « S » (B vient avant le S dans l’alphabet)
20
Les chaînes de caractères 12
► Manipulation
▪ La comparaison de deux chaînes caractère se fait en utilisant les codes ASCII des caractères des deux chaines.
Ch1 B o n j o u r Ch2 S a l u t
Code 66 111 110 106 111 117 114 83 97 108 117 116
ASCII
66 < 83
► Manipulation
▪ La recherche de la première occurrence d’un caractère ou d’une sous chaine dans une chaine se fait à travers la fonction find().
→ Elle retourne la position de la première occurrence du caractère « c » ou de la sous-chaine « s_ch » dans la chaine « chaine »
→ Elle retourne une constante (string::npos) représentant une non-position ➔ ce qu’on cherche ne figure pas dans « chaine »
➢ Syntaxe : ch1.find(ch2) // chercher la première occurrence de la sous chaine « ch2 » dans la chaine « ch1 »
ch1.find(ch2) ; // renvoie 0 → la première occurrence de la chaine « ch2 » dans la chaine « ch1 » est dans la position 0
ch1.find(c) ; // renvoie 3 → la première occurrence du caractère « j » dans la chaîne « ch1 » est dans la position 3
21
Les chaînes de caractères 14
► Manipulation
▪ L’insertion d’un caractère ou d’une sous chaîne dans une chaîne principale se fait à travers la fonction insert().
→ Cette fonction admet comme paramètres le caractère ou la sous-chaîne à insérer et la position d’insertion.
→ Elle retourne la chaîne « chaîne1 » qui contient le résultat de l’insertion de la « chaîne2 » dans la « chaîne1 »
➢ Syntaxe : ch1.insert(pos, ch2) ; // Insertion de la sous chaine « ch2 » dans la chaine « ch1 » à une position pos
ch1.insert(pos, ch2) ; // Insertion de la chaine « ch2 » dans la chaine « ch1 » à partir de la position 3
► Manipulation
▪ La suppression d’un caractère ou d’une sous chaîne dans une chaîne principale se fait à travers la fonction erase ().
→ Cette fonction admet comme paramètres la position de début de la sous-chaîne à supprimer et sa longueur (nbr de caractères).
→ Elle retourne la chaîne « chaîne1 » qui contient le résultat de la suppression de la « chaîne2 » dans la « chaîne1 ».
➢ Syntaxe : ch1.erase(pos, lg) ; // Suppression de la sous chaine qui débute de la position pos avec une longueur lg dans « ch1 »
22
Les chaînes de caractères 16
► Manipulation
▪ Conversion en majuscule
▪ Pour convertir une chaine en majuscule , il faut appeler la bibliothèque algorithm et appliquer la fonction suivante:
// paramètre 3 chaine. begin() est pour indiquer la position à partir de laquelle la conversion commence
► Manipulation
▪ Conversion en minuscule
▪ Pour convertir une chaine en minuscule , il faut appeler la bibliothèque algorithm et appliquer la fonction suivante :
// paramètre 3 chaine. begin() est pour indiquer la position à partir de laquelle la conversion commence
23
Les chaînes de caractères 18
► Exercice
Écrire un programme qui permet de supprimer toutes les voyelles d’une chaîne de caractères.
Solution 1 :
► Exercice
0 1 2 3
i =0 | i<4 (ch.size() ) M O I S
0 1 2 3 0 1 2 0 1 0 1
i =1 | i<4 (ch.size() ) M O I S M I S M S M S
Sortie : MIS
→ Le programme ne fonctionne pas correctement × Solution ?
→ Normalement la sortie doit être : MS
24
Les chaînes de caractères 20
► Exercice
Écrire un programme qui permet de supprimer toutes les voyelles d’une chaîne de caractères.
Solution 2 :
25