La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

6. Les types utilisateurs et les structures de données

Présentations similaires


Présentation au sujet: "6. Les types utilisateurs et les structures de données"— Transcription de la présentation:

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


Télécharger ppt "6. Les types utilisateurs et les structures de données"

Présentations similaires


Annonces Google