Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAugustin André Modifié depuis plus de 6 années
1
6. Les types utilisateurs et les structures de données
Les tableaux automatiques Alias de types Structures Énumérations Joan S. Morales - Introduction à l'algo. et la programmation
2
Les tableaux automatiques
Introduction Déclaration Accès et débordements Initialisation et notation Exemples Tri par sélection Joan S. Morales - Introduction à l'algo. et la programmation
3
Introduction Écrire l’algorithme suivant: Solution:
« Lire dix nombres, pour ensuite les afficher dans l’ordre inverse de la lecture. » Solution: cin >> Nombre1; cin >> Nombre2; cin >> Nombre3; … cout << Nombre3; cout << Nombre2; cout << Nombre1; .. Pas très beau! Et pour mille nombres?? Joan S. Morales - Introduction à l'algo. et la programmation
4
Introduction (suite) Avec un tableau!
Comment mémoriser un grand nombre de valeurs de même type, sans utiliser un nombre correspondant de variables et tout en laissant accessible n’importe laquelle de ces valeurs? Avec un tableau! Joan S. Morales - Introduction à l'algo. et la programmation
5
Déclaration d’un tableau en C++
En C++, un tableau de N éléments regroupe sous un seul nom N objets de même type, consécutifs en mémoire. On accède aux éléments d’un tableau par leur indice, qui varient de 0 à N-1 (ce qui fait bien N éléments au total). N doit être connu à la compilation (donc pas une variable) et doit avoir une valeur entière strictement positive. Syntaxe: Type Tableau[N]; Exemple: int DesEntiers[5] = { 8, 7, 3, -20, 7 }; Joan S. Morales - Introduction à l'algo. et la programmation
6
Accès aux éléments Chaque élément d’un tableau est numéroté à l’aide d’un indice Le premier élément est à l’indice 0 Le dernier élément est à l’indice N-1 On utilise l’opérateur [] pour lire ou écrire un élément du tableau, comme les strings! Joan S. Morales - Introduction à l'algo. et la programmation
7
Accès aux éléments (exemple)
const int N = 10; float MonTableau[N]; MonTableau[2] = 4.75f; cout << MonTableau[2] ; MonTableau[7] = MonTableau[2] * 2; cout << MonTableau[7]; Joan S. Morales - Introduction à l'algo. et la programmation
8
Les débordements Accès à un élément hors du tableau Exemple subtil
Indice < 0 ou Indice >= N Exemple subtil const int N = 10 ; float Tableau[N]; int i = 1; while (i <= N) { Tableau[i] = 23.0f; i++; } Joan S. Morales - Introduction à l'algo. et la programmation
9
Initialisation à la déclaration
const int N = 5; int UnTableau[N] = {45, 85, 12, 38, 17}; On peut initialiser un tableau avec des valeurs de type adéquat à la déclaration en entourant ces valeurs d’accolades (suivies d’un ;) Il est possible d’initialiser moins d’éléments que le tableau n’en contient vraiment, le reste des éléments seront initialisés à zéro (0) int Sommes[N] = {0}; Joan S. Morales - Introduction à l'algo. et la programmation
10
Passer un tableau en paramètre
Un tableau passé en paramètre est toujours un passage par référence: pas besoin de mettre le & Un tableau ne contient pas d’informations sur son nombre d’éléments, il faut donc toujours passer en paramètres le nombre d’éléments Joan S. Morales - Introduction à l'algo. et la programmation
11
Exemple int main() { const int N=10; int Tableau[N]; InitTableau(Tableau,N); } void InitTableau(int Tab[], int Nb) for(int i=0;i<Nb;++i) Tab[i] = 3; Pas de & Joan S. Morales - Introduction à l'algo. et la programmation
12
À éviter… La bonne technique: void Afficher(int Tab[Taille]){ … }
Ne rien mettre entre les [] À éviter… void Afficher(int Tab[Taille]){ … } const int Taille = 5; void Afficher(int Tab[]) { for(int i=0;i<Taille;i++) { … } } La bonne technique: void Afficher(int Tab[],int Taille) Ne fonctionne qu'avec un tableau de 5 éléments!! Joan S. Morales - Introduction à l'algo. et la programmation
13
Afficher un tableau void AfficherTableau(int T[], int Nb) { for (int i=0; i<Nb; i++) cout << T[i] << " "; } cout << endl; Joan S. Morales - Introduction à l'algo. et la programmation
14
Calculer la somme d’un tableau
int CalculerSomme(int T[], int Nb) { int Somme = 0; for (int i=0; i<Nb; i++) Somme += T[i]; } return Somme; Joan S. Morales - Introduction à l'algo. et la programmation
15
Inverser un tableau void InverserTableau(int T[], int Nb) { int Temp; for (int i=0; i<Nb/2; i++) Temp = T[i]; T[i] = T[Nb-i-1]; T[Nb-i-1] = Temp; } Joan S. Morales - Introduction à l'algo. et la programmation
16
Trouver le plus petit élément
int TrouverPlusPetit(int T[], int Nb) { int PlusPetit = T[0]; for (int i=1; i<Nb; i++) if(T[i]<PlusPetit) PlusPetit = T[i]; } return PlusPetit; Joan S. Morales - Introduction à l'algo. et la programmation
17
Trouver la position du plus petit élément
int TrouverPlusPetit(int T[], int Nb) { int Position = 0; for (int i=1; i<Nb; i++) if(T[i]<T[Position]) Position = i; } return Position; Joan S. Morales - Introduction à l'algo. et la programmation
18
Tri par sélection Sur Wikipedia
On aura besoin des variables i, j et PlusPetit. Pour chaque position i du tableau (sauf la dernière − rendu là, le tableau sera déjà trié): On considère au départ l’élément à la position i comme étant le plus petit. On retient la position du plus petit dans la variable PlusPetit. On parcourt tout le reste du tableau (les positions qui viennent après i dans le tableau, jusqu’à la fin). Pour chacune de ces positions j: Si le nombre à la position j est plus petit que le nombre à la position i, on considère que c’est lui le plus petit. On retient la position du nouveau plus petit dans la variable PlusPetit. On échange le nombre à la position PlusPetit avec celui à la position i. Si on veut être plus efficace : on vérifie avant que PlusPetit et i ne contiennent pas la même chose! Sur Wikipedia Joan S. Morales - Introduction à l'algo. et la programmation
19
Le tableaux à 2 dimensions (ou la matrice)
On déclare une matrice de NbLignes et de NbColonnes de la façon suivante: Type Tableau[NbLignes][NbColonnes]; Exemple: char Matrice[2][3] = { {'a','b','c'} , {'d','e','g'} }; 3 colonnes de 0 à 2 1 2 a b c d e g 2 lignes de 0 à 1 Joan S. Morales - Introduction à l'algo. et la programmation
20
Les tableaux à 2 dimensions (utilisation)
On accède à une case de la matrice avec le numéro de la ligne de 0 à NbLignes-1, puis le numéro de la colonne de 0 à NbColonnes-1: Tableau[Ligne][Colonne] Exemples: cout << Matrice[0][0]; // affiche a cout << Matrice[0][1]; // affiche b cout << Matrice[1][0]; // affiche d Matrice[1][2] = 'f'; // Remplace le // g par un f Joan S. Morales - Introduction à l'algo. et la programmation
21
Les tableaux à 2 dimensions et le nombre de colonnes
error C2087: 'Tab2D' : indice manquant Le nombre de colonnes d'un tableau à 2 dimensions doit toujours être spécifié à la déclaration: const int NbColonnes = 3; int Matrice[][NbColonnes] = { {1,2,3}, {4,5,6}}; et au passage par paramètre: void Afficher(int Tab2D[][NbColonnes]); Joan S. Morales - Introduction à l'algo. et la programmation
22
Les tableaux à 2 dimensions Parcourir le tableau
Pour parcourir un tableau à une dimension, il nous fallait une boucle. Pour parcourir un tableau à 2 dimensions, il nous faudra 2 boucles! for (int i=0; i<NbLignes; i++) { for (int j=0; j<NbColonnes; j++) Matrice[i][j] = i*j; } Joan S. Morales - Introduction à l'algo. et la programmation
23
Les types utilisateurs
Types de données définis par le programmeur Il y a plusieurs sortes de types utilisateurs: Alias de types Énumérations Structures Classes Etc. Joan S. Morales - Introduction à l'algo. et la programmation
24
Les alias de types Donner à un type un nouveau nom
Masquer, aux programmeurs qui se servent d’une bibliothèque, les types qui y sont réellement utilisés Donne la possibilité au concepteur de la bibliothèque de modifier les types sans que cela n’entraîne de modifications aux programmes Simplification syntaxique Comme une constante pour les types!! Joan S. Morales - Introduction à l'algo. et la programmation
25
Alias de types (exemple 1)
Joan S. Morales - Introduction à l'algo. et la programmation
26
Alias de types (exemple 2)
sdlclg.h sdlclg.cpp main.cpp Joan S. Morales - Introduction à l'algo. et la programmation
27
Les énumérations Déclarer une liste, une série de constantes dont les valeurs nous importent peu Améliore la lisibilité du programme et facilite son entretien Déclaration: enum NomDuType { Element1, Element2, Element3 }; Par défaut, le premier élément a la valeur 0, le deuxième 1, etc. On peux modifier les valeurs attribuées Joan S. Morales - Introduction à l'algo. et la programmation
28
Exemples Joan S. Morales - Introduction à l'algo. et la programmation
29
Utilisation enum JourSemaine { Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche }; int main() { JourSemaine Aujourdhui; Aujourdhui = Lundi; Commentaire(Aujourdhui); } void Commentaire(JourSemaine Jour) if(jour==Samedi || jour==Dimanche) { cout << "C'est la fin de semaine!!"; } else { cout << "C'est la semaine."; } Joan S. Morales - Introduction à l'algo. et la programmation
30
Exemple (sdlclg) #include "sdlclg.h«
Joan S. Morales - Introduction à l'algo. et la programmation
31
Exemple (sdlclg) #include "sdlclg.h" int main() { // ... Evenement e = AttendreEvenement(); if(e==EVHaut) { PosYBonhomme--; } if(e==EVDroite) { PosXBonhomme++; } } Joan S. Morales - Introduction à l'algo. et la programmation
32
Les structures Créer un nouveau type de données qui regroupe plusieurs variables et ces variables peuvent être de types différents (contrairement aux tableaux). On ne peut pas utiliser une structure sans déclarer une variable. On accède aux éléments d’une structure avec l’opérateur point (.). Joan S. Morales - Introduction à l'algo. et la programmation
33
Exemple Déclaration du nouveau type Personne (cette déclaration irait très bien dans un .h) struct Personne { string Nom; int Age; }; int main() Personne Moi; Moi.Nom = "Joan"; Moi.Age = 37; cout << Moi.Nom; cout << Moi.Age; } N’oubliez pas le ; ici Déclaration de la variable Moi qui est de type Personne Accès à l’élément Nom de la variable Moi Personne.Nom Joan S. Morales - Introduction à l'algo. et la programmation
34
Passer une structure en paramètre
Une variable de type structure est une variable comme une autre et peut donc être passée en paramètre par valeur ou par référence: int main() void Lire(Personne& Qqun) { Personne Moi; cin >> Qqun.Nom; Lire(Moi); cin >> Qqun.Age; Afficher(Moi); } void Afficher(Personne Qqun) cout << Qqun.Nom; cout << Qqun.Age; Joan S. Morales - Introduction à l'algo. et la programmation
35
Une structure de structures
struct Point { int x; int y; }; struct Droite Point Debut; Point Fin; int main() { Droite a; a.Debut.x = 10; a.Debut.y = 20; a.Fin.x = 30; a.Fin.y = 40; } Joan S. Morales - Introduction à l'algo. et la programmation
36
Un tableau de structures
struct Personne { string Nom; int Age; }; int main() Personne Groupe[40]; Groupe[0].Nom ="Paul"; Groupe[0].Age = 18; Groupe[1].Nom ="Georges"; Groupe[1].Age = 17; // ... } On peut utiliser une boucle pour accéder aux éléments du tableau... Joan S. Morales - Introduction à l'algo. et la programmation
37
Vers l’infini et plus loin encore!
struct Compte { float Taux; float Solde; }; struct Client string Nom; Compte Liste[2]; int main() Client Banque[5]; Banque[0].Liste[0].Solde = 100.0f; } Joan S. Morales - Introduction à l'algo. et la programmation
38
La beauté des structures...
Sans: int main() { string Nom1; string Nom2; string Nom3; int Age1; int Age2; int Age3; // ... x10 cin >> Nom1; cin >> Age1; cin >> Nom2; cin >> Age2; cin >> Nom3; cin >> Age3; } Avec: struct Personne { string Nom; int Age; }; int main() Personne Groupe[10]; for(int i=0;i<10;i++) cin >> Groupe[i].Nom; cin >> Groupe[i].Age; } Joan S. Morales - Introduction à l'algo. et la programmation
39
Joan S. Morales - Introduction à l'algo. et la programmation
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.