Structurer ses données : les tableaux Introduction à la programmation
Plan du document Introduction Introduire la notion de type Types primitifs Types composés Tableaux de type primitif Page 2
Notion de type Classer les variables selon L'ensemble des valeurs que peut prendre la variable L'ensemble des opérations permises sur ces valeurs Motivations Clarté, lisibilité : mieux comprendre ce qui est fait Vérification : contrôle de type (à la compilation) Généricité : choisir le bon opérateur Efficacité : optimisation des opérations sur les valeurs Page 3
Classification Première classification types primitifs définis explicitement Deuxième classification Types élémentaires (atomiques) Types composés (tableaux et classes) types élémentaires composés Page 4
Types primitifs Tous prédéfinis, le programmeur ne peut pas en définir Types numériques entiers : byte, short, int, long réels : float, double Types non numériques boolean (deux valeurs "true" et "false") char Ne permettent pas de représenter des collections, des ensembles structurés de données... Page 5
Types composés Motivations Composer les types pour décrire des structures de données Type composé Construit à partir d'autres types Notion de composant - Type des composants - Organisation des composants - Accès aux composants Exemples : tableaux et classes Page 6
Plan du document Introduction Introduire la notion de type Types primitifs Types composés Tableaux de type primitif Page 7
Type composé Tableau Problème : modéliser un compte bancaire Solutions Solution 1 : mémoriser l état du compte à l aide d une variable solde - Vue ponctuelle du compte. Pas d historique. Solution 2 : garder trace de l ensemble des dépôts et des retraits (collection ordonnée) - Tableau listant toutes les opérations - 2 tableaux : 1 pour les débits, 1 pour les crédits Page 8
Tableau listant toutes les opérations Principe : 1 élément du tableau = 1 opération sur le compte bancaire Un dépôt = ajouter un élément au tableau des opérations avec une valeur positive Un retrait = ajouter un élément au tableau des opérations avec une valeur négative Solde = somme des éléments du tableau Page 9
Exemple État initial lesopérations 0 0 0 0 0 0 0 0 0 0 Déposer 500 Retirer 100 Déposer 200 lesopérations lesopérations 500 0 0 0 0 0 0 0 0 0 500-100 0 0 0 0 0 0 0 0 lesopérations Solde : 500 100 + 200 = 600 500-100 200 0 0 0 0 0 0 0 Page 10
Tableau de débits et tableau de crédits Principe : Un dépôt = ajouter un élément au tableau des dépôts avec une valeur positive Un retrait = ajouter un élément au tableau des retraits avec une valeur positive Solde = somme des dépôts somme des retraits Page 11
Exemple État initial Déposer 500 Retirer 100 déposer200 Solde : (500 + 200 ) - (100) = 600 lesdepots lesretraits lesdepots lesretraits lesdepots lesretraits lesdepots lesretraits 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 500 0 0 0 0 100 0 0 0 0 500 200 0 0 0 100 0 0 0 0 Page 12
Notion de tableau Caractéristiques Collection indicée d'éléments de même type Taille fixe : cardinal (Indice) Accès aux composants par indice indice 0 1 2 3 4 untableau 320 12 150 0 982 3ème élément : untableau[2] Page 13
Création d'un tableau tableau int [] untableau = new int [5] ; Type des composants nom de la variable Allocation de mémoire Taille du tableau mémorisée dans : untableau.length Dernier élément : untableau[untableau.length-1] Non modifiable untableau.length = 5 ; Page 14
Accès aux éléments d'un tableau nomdutableau[valeurdeindice] montableau[i] = 10; // i compris entre 0 et int x; x = montableau[i]; nbelt-1 Erreur classique : être en dehors des limites du tableau! Les indices débutent en 0 montableau 9 1 5 0 montableau.length - 1 Page 15
Création d'un tableau avec valeurs initiales int [] untableau = { 1, 2, 4, 8, 16 }; Indice 1 2 4 8 16 0 4 Taille du tableau : 5 indice de 0 à 4 Création du tableau Initialisation des éléments avec les valeurs spécifiées Page 16
Manipulation de tableau Somme des éléments d un tableau int indice, somme = 0 ; for ( indice = 0; indice < nbelt; indice++ ) { // traitement de l'élément à la position donnée par indice System.out.println("Entrez la valeur de l element " + indice); } montableau[indice] = Lire.i(); for ( indice = 0; indice < nbelt; indice++ ) { // traitement de l'élément à la position donnée par indice somme = somme + montableau[indice]; } System.out.println("la somme vaut : " + somme ); Page 17
Les comptes bancaires // Définition des variables double [] lesdepots = new double[5]; double [] lesretraits = new double[5]; int nombrededepots = 0; int nombrederetraits = 0; double montant; double sommedepots, sommeretraits, solde; // Faire un dépôt System.out.println("Entrez le montant du depot"); lesdepots[nombrededepots] = Lire.d(); nombrededepots ++; // Faire un retrait System.out.println("Entrez le montant du retrait"); lesretraits[nombrederetraits] = Lire.d(); nombrederetraits ++;.. CompteBancaire.java Page 18
Les comptes bancaires (suite) // calcul somme des depots sommedepots = 0; for ( int i=0; i < nombrededepots; i=i+1 ) { sommedepots = sommedepots + lesdepots[i]; } System.out.println("Somme des depots" + sommedepots); // calcul somme des retraits sommeretraits = 0; for ( int i=0; i < nombrederetraits; i=i+1 ) { sommeretraits = sommeretraits + lesretraits[i]; } System.out.println("Somme des retraits" + sommeretraits); solde = sommedepots sommeretraits ; System.out.println("Solde" + solde); CompteBancaire.java Page 19