bases de la programmation en c++ 1 les types de données complexes les variables traditionnelles ne...

21
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

Upload: avery-peyre

Post on 04-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 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

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

Page 2: 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

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.

Page 3: 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

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++

Page 4: 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

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

Page 5: 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

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)

Page 6: 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

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;

Page 7: 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

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 ‘==‘

Page 8: 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

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

Page 9: 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

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 }

Page 10: 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

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)

Page 11: 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

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

Page 12: 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

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

Page 13: 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

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;

Page 14: 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

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

Page 15: 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

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

Page 16: 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

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;}

Page 17: 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

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]

Page 18: 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

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 ….}

Page 19: 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

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

Page 20: 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

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

Page 21: 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

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