Correction TP1 Exercice 4.

Slides:



Advertisements
Présentations similaires
Chap. 4 Recherche en Table
Advertisements

Portée des variables VBA & Excel
C++ 6ème cours Patrick Reuter maître de conférences
Introduction à la programmation objet Langage Java
GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
TP T1 Suivant INTENTIONS PEDAGOGIQUES Ce TP vise à faire analyser et justifier les choix technologiques retenus par le constructeur. Pour la détection.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Chap. 1 Structures séquentielles : listes linéaires
ALGORTHME DE COMPOSITION INTRODUCTION PRINCIPES DE BASE LES ETAPES CONCLUSION.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Programmation orientée objet
Récursivité.
Les algorithmes: complexité et notation asymptotique
Les pointeurs 1. Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Nécessite de bien connaitre le fonctionnement de.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde COURS 3 : Programmation impérative Résumé du cours précédent.
Classes abstraites et Interfaces
L’utilisation des bases de données
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Quelle est la vitesse d’un solide en rotation ?
Une nouvelle structure de données : les tableaux
Introduction à la programmation objet Langage Java
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
CSI1502 Principes fondamentaux en conception des logiciels
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Plan cours La notion de pointeur et d’adresse mémoire.
Programmation Orienté Objet en C++ Ricard julien.
Structures de données IFT-2000
Le langage C Structures de données
(Vient du grec et signifie « Peut prendre plusieurs formes »)
Le Bloc Case Cours LCS N°3 Présenté par Mr: LALLALI.
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Les pointeurs Suite.
PHP 3° PARTIE : GESTION DE FICHIERS ET DE REPERTOIRES
La notion de type revisitée en POO
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
La Modélisation Orientée Objet Concevoir un programme : modélisation du problème à résoudre Notion de programme : machine de Turing Pouvoir d’expression.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Cours 7 Classes locales Clonage Divers: tableaux.
Tutorat en bio-informatique
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Réaliser par: Sadok Amel Cheboui hassiba
Strings et Tableaux en Java
Cours LCS N°4 Présenté par Mr: LALLALI
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Héritage Conception par Objet et programmation Java
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Transcription de la présentation:

Correction TP1 Exercice 4

Enoncé On veut écrire un programme qui permet de gérer une liste de notes grâce à un tableau de taille variable On créé la classe note : Note nom : string prenom : string valeur : int Note(string,string,int) ~Note() void affiche()

Et les pointeurs? L’avantage des pointeurs, c’est de pouvoir créer et détruire à volonté des notes : Note *ptr; ptr=new Note("thib", "Lelore",12); ptr->affiche(); delete ptr; ptr=new Note("Gaston", "Fourien",18);

Source d’erreurs Où est l’erreur : Note *ptr; ptr=new Note("thib", "Lelore",12); ptr=new Note("Gaston", "Fourien",18); ptr->affiche(); delete ptr;

Source d’erreurs Où est l’erreur : Note *ptr; ptr=new Note("thib", "Lelore",12); delete ptr; ptr=new Note("Gaston", "Fourien",18); ptr->affiche();

Une liste de note Le principe est d’utiliser un tableau de pointeurs : Note *tableau[6]; Tableau[0]=new Note("Lelore", "Thib",10); Tableau[1]=new Note("Fourien", "Gaston",18); Tableau[2]=new Note("Zarhi", "Fred",17); Tableau[3]=new Note("Chirac", "Jaco",4.5); Tableau[4]=new Note("Sarko", "Nico",8); Tableau[5]=new Note("Royal", "Sego",12); Lelore Thib 10 Fourien Gaston 18 Zarhi Fred 17 Chirac Jaco 4.5 Sarko Nico 8 Royal Sego 12

Nouvelle et ancienne représentation 23BA 23B7 23B3 23AF 23AB Lelore Thib 10 23A8 Fourien Gaston 18 23A7 23BA 23A6 Zarhi Fred 17 23B7 23A5 23B3 23A4 Chirac Jaco 4.5 23AF 23A3 23AB Sarko Nico 8 23A2 23A8 Royal Sego 12

Finalement Quels sont les avantages par rapport à un tableau de Note simple? Quand on écrit Note tableau[10]; On créé 10 notes vides (en utilisant le constructeur par défaut) Quand on écrit Note *tableau[10]; On créé 10 cases qui ne pointent sur rien On peut créer des Notes au besoin. Plus logique (on créé des notes quand il faut) Plus simple pas besoin de penser à créer un constructeur par défaut

Donc la fonction ajoutNote Ce qu’il faut c’est ajouter une note dans la bonne case void ajoutNote(string nom,string prenom, int note){ this->tableau[this->nb]=new Note(nom,prenom,note); this->nb=this->nb+1; } Donc on utilise une variable pour savoir dans quelle case ajouter la note (this->nb) Par contre, on a oublié de tester si on ne sort pas du tableau (si on a 10 cases et qu’on veux créer une 11ème note…)

this->tableau[i]->affiche(); Afficher les notes Pour afficher toutes les notes, il faut utiliser une boucle. Deux manières de faire : void afficherNotes(){ for(int i=0;i<this->nb;i++){ *(this->tableau[i]).affiche(); } this->tableau[i]->affiche();

Conclusion this est un pointeur ! C’est un pointeur sur nous même -> permet d’utiliser les méthodes et attributs d’un pointeur Si c’est this->, c’est les méthodes et attributs de notre classe Si c’est ptr->, c’est les méthodes et attributs de la classe de l’objet pointé…

Mais c’est pas tout… Il faut permettre de faire un tableau de différentes tailles Il faut donc faire un pointeur sur un tableau de pointeurs Deux manières : Note **tableau; Note *tableau[]; Choisissez celle que vous préférez… Ensuite, créer le tableau comme ça : tableau=new Note*[10];

Ça se complique… Bon, et le destructeur ? On a tous pensé faire delete [] this->tableau; C’est pas suffisant : Lelore Thib 10 Fourien Gaston 18 23A8 Zarhi Fred 17 23AB 23AF 23A1 Chirac Jaco 4.5 23B3 23B7 Sarko Nico 8 23BA Royal Sego 12

Ça se complique… Résultat : Lelore Thib 10 Fourien Gaston 18 Zarhi Fred 17 23AB 23AF 23A1 Chirac Jaco 4.5 23B3 23B7 Sarko Nico 8 23BA Royal Sego 12

Pour bien faire : Parcourir le tableau pour détruire chaque case Puis détruire le tableau : for (int i=0;i<this->nb;i++){ delete this->tableau[i]; } delete [] tableau; Et là, c’est bon…

Résultat : Lelore Thib 10 Fourien Gaston 18 Zarhi Fred 17 Chirac Jaco 23AB 23AF 23A1 Chirac Jaco 4.5 23B3 23B7 Sarko Nico 8 23BA Royal Sego 12