IFT Programmation 1. Tableaux. Au programme. Stockage d information. Définitions. [Tasso :9] et [Niño : 22.1]

Documents pareils
Java Licence Professionnelle CISII,

TD3: tableaux avancées, première classe et chaînes

Généralités sur le Langage Java et éléments syntaxiques.

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Cours 1: Java et les objets

Plan du cours. Historique du langage Nouveautés de Java 7

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Chap III : Les tableaux

as Architecture des Systèmes d Information

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Bases de programmation. Cours 5. Structurer les données

Langage Java. Classe de première SI

ACTIVITÉ DE PROGRAMMATION

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation impérative

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Chapitre 2. Classes et objets

Cours d initiation à la programmation en C++ Johann Cuenin

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if


Initiation à la programmation en Python

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Les structures. Chapitre 3

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TP, première séquence d exercices.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Qu est-ce que la programmation?

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Chapitre I Notions de base et outils de travail

Introduction à MATLAB R

Algorithmique, Structures de données et langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

I. Introduction aux fonctions : les fonctions standards

TP1. Outils Java Eléments de correction

Examen Médian - 1 heure 30

TP3 : Manipulation et implantation de systèmes de fichiers 1

4. Groupement d objets

Programmation C++ (débutant)/instructions for, while et do...while

Gestion distribuée (par sockets) de banque en Java

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Conventions d écriture et outils de mise au point

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Le langage C. Séance n 4

UE Programmation Impérative Licence 2ème Année

Programmation C. Apprendre à développer des programmes simples dans le langage C

Corrigé des exercices sur les références

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Architecture des Systèmes d Information Architecture des Systèmes d Information

Algorithmique I. Algorithmique I p.1/??

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Une introduction à Java

Algorithmique et Programmation, IMA

Chapitre 10 Arithmétique réelle

Programme Compte bancaire (code)

Premiers Pas en Programmation Objet : les Classes et les Objets

GOL502 Industries de services

Utilisation d objets : String et ArrayList

BONNE NOUVELLE, À PARTIR DE DEMAIN 15 AOÛT 2014, l inscription en ligne sera disponible à partir du site de l ARO.

Programmer en JAVA. par Tama

Statistiques Descriptives à une dimension

INITIATION AU LANGAGE JAVA

Le prototype de la fonction main()

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

LES TYPES DE DONNÉES DU LANGAGE PASCAL

PROGRAMMATION PAR OBJETS

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Les chaînes de caractères

Programmation en Java IUT GEII (MC-II1) 1

C f tracée ci- contre est la représentation graphique d une

Programmation par les Objets en Java

Les fichiers. Chapitre 4

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

1. Langage de programmation Java

Traduction des Langages : Le Compilateur Micro Java

Introduction au langage C

Claude Delannoy. 3 e édition C++

Auto-évaluation Programmation en Java

< Atelier 1 /> Démarrer une application web

GESTION DES FICHIERS C/UNIX

Flux de données Lecture/Ecriture Fichiers

Chapitre VI- La validation de la composition.

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Quelques algorithmes simples dont l analyse n est pas si simple

Initiation à la Programmation en Logique avec SISCtus Prolog

Solutions du chapitre 4

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

TD/TP PAC - Programmation n 3

La Clé informatique. Formation Excel XP Aide-mémoire

Logiciel de Base. I. Représentation des nombres

Cours d algorithmique pour la classe de 2nde

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

STAGE IREM 0- Premiers pas en Python

Initiation. àl algorithmique et à la programmation. en C

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Transcription:

IFT 1010 - Programmation 1 Tableaux Sébastien Roy & François Duranleau Département d informatique et de recherche opérationelle Université de Montréal automne 2004 [Tasso :9] et [Niño : 22.1] Au programme Concept des tableaux Déclaration et instanciation Indexation Tableaux en Java Bornes des tableaux Limite des tableaux Tableaux d objets Tableaux à deux dimensions Tableaux à N dimensions 1 Stockage d information Limite du seul usage de types simples ou des objets tels que présentés jusqu ici : on ne peut pas traiter une quantité arbitraire d information à la fois. Et si la quantité d élément à manipuler et à conserver en mémoire n était pas connue au moment de la compilation? Ex. : Trier des nombres lus au clavier. Soit un programme qui manipule 8 colis postal à la fois. On aurait les déclarions suivantes : ColisPostal c1, c2, c3, c4, c5, c6, c7, c8 ; Et si on voulait maintenant 9 colis? 1000? On a besoin d une façon de stocker des ensembles arbitraires d information les tableaux. 2 Définitions Tableau Une structure composée d une séquence contiguë de variables, toutes de même type. Cellule Élément d un tableau. Il s agit du sous-ensemble de l espace mémoire du tableau où est stocké l une de ses variables. : Un tableau de 5 entiers (rappel : un entier prend 4 octets en mémoire). Cellules: Octets: Cellule 1 Cellule 2 Cellule 3 Cellule 4 Cellule 5 0 4 8 12 16 20 3

Instanciation La méthode d instanciation (ou d allocation) des tableaux varient beaucoup d un langage à l autre. En Java, on crée un tableau ainsi : Type[] nomdutableau ; nomdutableau = new Type[ combien ] ; où Type est le type de chaque cellule du tableau. combien est une expression de type entier qui indique combien de cellules le tableau contiendra. Évidemment, cette valeur doit être 1. nomdutableau est une référence sur l espace mémoire totale du tableau. int[] tab = new int[ 5 ] ; tab 0x28572956 0x28572956 0x28572956+4 0x28572956+8 0x28572956+12 0x28572956+16 Cellule 1 Cellule 2 Cellule 3 Cellule 4 Cellule 5 La première cellule est au début du bloc de mémoire. La seconde est 4 octets plus loin, la troisième 8, etc.. 4 5 Initialisation En Java, la valeur initiale de chaque cellule est 0 pour les nombres, le caractère 0 pour les caractères, ou null pour les objets (y compris les chaînes de caractères). Avertissement : ce n est pas le cas de tous les langages!! Il faut être vigilent. Il est possible d instancier un tableau avec des valeurs initiales comme ceci : int[] tab = -4, 50, 80, 0, 1 ; tab 0x28572956 Cellule 1: 0x28572956!4 Cellule 2: 0x28572956+4 50 Type[] nom = valeur 1, valeur 2,..., valeur N ; Cellule 3: 0x28572956+8 80 où valeur i (i = 1..N) est la valeur initiale de la i e cellule. Le tableau résultant aura N cellules. Cellule 4: Cellule 5: 0x28572956+12 0x28572956+16 0 1 6 7

Indexation Un tableau peut être considéré comme un objet, mais sa composition est uniforme et sa taille totale en mémoire n est pas définie par une classe. L attribut est à la classe ce que la cellule est au tableau (du point de vue composition). Avec des classes, pour accéder à un attribut, on fait quelque chose comme instance.attribut Comment accéder à une cellule d un tableau? Par indexation. Indexation En reprenant l exemple du tableau de 5 entiers, on peut réécrire l adresse de chaque cellule ainsi : tab 0x28572956 0x28572956+4*0 0x28572956+4*1 0x28572956+4*2 0x28572956+4*3 0x28572956+4*4 Cellule 1 Cellule 2 Cellule 3 Cellule 4 Cellule 5 => index = 0 => index = 1 => index = 2 => index = 3 => index = 4 Une indexation naturelle en découle : 1 re cellule 0, 2 e cellule 1, etc.. 8 9 Indexation en Java Soit un tableau contenant N cellules. Pour accéder à la i e cellule (i = 1..N), la syntaxe en Java est : nomdutableau[ i 1 ] De façon plus générale, on écrit : nomdutableau[ index ] où index est une expression entière dont l évaluation donne l index qu on désirer accéder. Cette valeur doit être entre 0 et N 1. On peut se servir de l indexation pour accéder à une valeur d une cellule ou pour y en affecter une autre. Remarque : Certains langages permettent des indexations plus arbitraires (p.ex. Pascal, Modula). 1 Lecture de N notes au clavier // Lecture du nombre de notes à lire System.out.print( "Combien de notes? " ); int N = Keyboard.readInt(); // Instanciation du tableau de notes double[] notes = new double[ N ]; // Lectures des notes for( int i = 0; i < N; ++i ) System.out.print( "Entrez la notes no. " + (i + 1) + ": " ); notes[ i ] = Keyboard.readDouble(); 10 11

2 Particularité de Java Calculer la moyenne des N notes lus au clavier // (fait suite à l exemple 1) double moy = 0.0; // la moyenne // Effectuer d abord la sommation des notes for( int i = 0; i < N; ++i ) moy += notes[ i ]; // Calcul final de la moyenne (somme / nombre total) moy /= N; Un tableau en Java est en réalité bel et bien un objet, mais il n a pas de classe propre à lui. Les tableaux en Java ont un attribut : length. Soit tab une référence sur un tableau quelconque, alors tab.length donne la longueur (i.e. le nombres de cellules) du tableau. Note : Il est impossible de modifier la valeur de cet attribut. Sa valeur est fixée lors de l instanciation du tableau. Comme dans la grande majorité des langages, les tableaux sont passés par références en paramètre des fonctions. 12 13 Fonction qui initialise un tableau d entiers avec une suite contiguë de valeurs commançant par une valeur donnée : public static void iota( int[] tab, int init ) for( int i = 0; i < tab.length; ++i ) tab[ i ] = init + i; d appel : int[] suite = new int[ 10 ]; // Ici, suite[ i ] == 0 pour tout i iota( suite, 0 ); // Maintenant, suite[ i ] == i pour tout i 14 Bornes des tableaux Soit un tableau t de longueur N, les index valides sont entre 0 et N 1 inclusivement (ou bien t.length - 1). Que se passe-t-il si on fait t[ i ], où i est un nombre négatif ou N? Le programme plante!! En Java, il y aura un message d erreur indiquant une ArrayIndexOutOfBoundsException. Attention : dans quelques langages, notamment de C/C++, il n y a pas de vérification de bornes, et le programme ne plante pas nécessairement, quoiqu il se produira certainement des bogues bizarres. Même si le langage effectue une vérification de bornes, il faut être rigoureux! 15

Limite des tableaux Une fois qu un tableau a été instancié, on ne peut plus changer sa longueur. Il faut connaître le nombre d éléments à manipuler. Tableaux d objets Rappel : le type de chaque cellule d un tableau peut être n importe quoi. peut aussi être un objet. Cependant, en Java, un objet est toujours manipulé avec une référence. un tableau d objets est en fait un tableau de références sur des objets. Rappel : dans un tel cas, lors de l instanciation du tableau, toutes les références sont initialisées à null. Ne pas oublier de créer les objets pour chaque cellule! 16 17 Lecture de N colis postaux : ColisPostal[] colis = new ColisPostal[ N ]; for( int i = 0; i < colis.length; ++i ) colis[ i ].lire(); Ça plante! car colis[ i ] == null pour tout i. Il faut plutôt faire ceci : // instanciation du tableau ColisPostal[] colis = new ColisPostal[ N ]; // instanciation de chaque colis for( int i = 0; i < colis.length; ++i ) colis[ i ] = new ColisPostal(); // Enfin, la lecture for( int i = 0; i < colis.length; ++i ) colis[ i ].lire(); 18 19

Tableaux à deux dimensions Rappel : le type de chaque cellule d un tableau peut être n importe quoi. peut aussi être un tableau. Pour déclarer un tableau à deux dimensions : Type[][] nom ; i.e. on déclare un tableau de tableaux. Cependant, l instanciation est plus particulière : nom = Type[ N 1 ][ N 2 ] ; où N 1 est la longueur de la première dimension (i.e. combien de sous-tableaux) et N 2 est la longueur de la seconde dimension (i.e. de chaque sous-tableau). 20 Tableaux à deux dimensions Soit Type[][] tab = new Type[ N 1 ][ N 2 ] ; Alors tab[ i ] (i = 1..N 1 ) permet d accéder au soustableau à l index i. Pour accéder à la cellule (i, j) (j = 1..N 2 ), il suffit d écrire : tab[ i ][ j ] On peut aussi connaître la longueur d un sous-tableau à l index i ainsi : tab[ i ].length Cependant, ils sont tous de même longueurs. Remarque : Il est possible de créer un tableau à deux dimensions où les tableaux de la seconde dimension ont une longueur différente. Consultez un livre de référence Java pour savoir comment. 21 Déclaration et instanciation : int[][] tab = new int[ 5 ][ 3 ] ; tab Cellule 0: Cellule 1: Cellule 2: Cellule 3: Cellule 4: Cellule 0,0 Cellule 1,0 Cellule 2,0 Cellule 3,0 Cellule 4,0 Cellule 0,1 Cellule 0,2 Cellule 1,1 Cellule 1,2 Cellule 2,1 Cellule 2,2 Cellule 3,1 Cellule 3,2 Cellule 4,1 Cellule 4,2 Initialisation : int i, j; // première dimensions for( i = 0; i < tab.length; ++i ) // seconde dimensions for( j = 0; j < tab[ i ].length; ++j ) // Attention à ne pas se tromper dans l ordre des index! tab[ i ][ j ] = (i + j) % 2; // une valeur quelconque Exercice : Écrivez un bout de code pour afficher ce tableau dans un rectangle 5 3. 22 23

Tableaux à N dimensions On peut directement généraliser pour avoir un tableau à N dimensions, i.e. des tableaux de tableaux de tableaux de tableaux de... autant fois que N. Déclaration : mettre autant de paire de crochets qu il y a de dimensions. Instanciation : ajouter un nombre entre crochets pour chaque dimension. Indexation : ajouter un index entre crochets pour chaque dimensions. La 1 re paire de crochets correspond à la 1 re dimensions. La 2 e paire correspond à la 2 e dimensions. etc. Déclaration Type[] nom ; En résumé où Type est n importe quoi (types de base, classes, tableaux). Déclaration initialisée Type[] nom = val 1,..., val N ; où N est la longueur du tableau, et val i est la valeur de la i e cellule. Instanciation nom = new Type[ combien ] ; où combien est le nombre de cellules. nom.length sera égal à combien. Indexation nom[ index ] où index est un entier entre 0 et nom.length. 24 25