• Aucun résultat trouvé

IFT 1179 : Programmation en C#

N/A
N/A
Protected

Academic year: 2022

Partager "IFT 1179 : Programmation en C#"

Copied!
11
0
0

Texte intégral

(1)

IFT 1179 : Programmation en C#

Classe ArrayList (suite) :

Une partie de ce résumé vient du lien de Microsoft :

http://msdn.microsoft.com/library/fre/default.asp?ur l=/library/FRE/cpref/html/frlrfsystemcollectionsarra ylistclasstopic.asp

L’espace de nom (namespace)

System.Collections contient plusieurs classes dont ArrayList (liste tableau), Stack (pile), SortedList (liste triée), ...

La classe ArrayList implémente l'interface IList à l'aide d'un tableau dont la taille augmente dynamiquement selon les besoins.

Constructeurs :

public ArrayList();

Initialise une nouvelle instance de la classe ArrayList qui est vide et possède la capacité initiale par défaut (16)

Exemple : ArrayList divi100 = new ArrayList() ; public ArrayList(int);

Initialise une nouvelle instance de la classe ArrayList qui est vide et a la capacité initiale spécifiée.

Exemple : ArrayList stat = new ArrayList(65) ; // pour 65 stations de metro au maximum

Quelques propriétés :

Capacity représente le nombre d'éléments que ArrayList est capable de stocker. Count représente le nombre réel d'éléments stockés dans ArrayList.

Capacity est toujours supérieur ou égal à Count. Si Count excède Capacity lors de l'ajout d'éléments, la capacité de la liste est doublée en réallouant automatiquement le tableau interne.

Quand la valeur de Capacity est explicitement définie, le tableau interne est aussi réalloué pour prendre en compte la capacité spécifiée. Si la valeur zéro est explicitement définie pour Capacity, le Common Language Runtime lui attribue plutôt la capacité par défaut. La capacité par défaut est 16.

(2)

On parcourt une liste (tableau) dans deux sens :

for (int i = 0 ; i < liste.Count ; i++) . . .

OU

for (int i = liste.Count -1 ; i >= 0; i--) . . .

Quelques méthodes

1) Pour ajouter un nouvel élément à la liste :

p u b l i c v i r t u a l int A d d ( object value ) ;

Ajoute un objet à la fin de ArrayList.

p u b l i c v i r t u a l void I n s e r t ( int index, object value ) ;

Insère un élément dans ArrayList à l'index spécifié.

2) Pour supprimer un élément de la liste :

p u b l i c v i r t u a l void R e m o v e ( object obj ) ;

Cette méthode effectue une recherche linéaire ; par conséquent, la durée d'exécution moyenne est proportionnelle à Count. Autrement dit, cette méthode est une opération O(n), où n correspond à Count.

Cette méthode détermine l'égalité en appelant Object.Equals.

Dans des collections d'éléments contigus, telles que des listes, les éléments qui suivent l'élément supprimé remontent pour occuper la position libérée. Si la collection est indexée, les index des éléments déplacés sont également mis à jour. Ce comportement ne s'applique pas aux collections dont les éléments sont regroupés de manière conceptuelle en compartiments, par exemple, les tables de hachage.

p u b l i c v i r t u a l void R e m o v e A t ( int index ) ;

Dans des collections d'éléments contigus, telles que des listes, les éléments qui suivent l'élément supprimé remontent pour occuper la position libérée. Si la collection est indexée, les index des éléments déplacés sont également mis à jour. Ce comportement ne s'applique pas aux collections dont les éléments sont regroupés de manière conceptuelle en compartiments, par exemple, les tables de hachage.

(3)

3) Recherche d’un élément de la liste :

p u b l i c v i r t u a l int I n d e x O f ( object value ) ;

Dans ArrayList, la recherche est effectuée vers le bas, en commençant au premier élément et jusqu'au dernier.

Cette méthode effectue une recherche linéaire ; par conséquent, la durée d'exécution moyenne est proportionnelle à Count. Autrement dit, cette méthode est une opération O(n), où n correspond à Count.

Cette méthode détermine l'égalité en appelant Object.Equals.

p u b l i c v i r t u a l int L a s t I n d e x O f (object value ) ;

Dans ArrayList, la recherche est effectuée vers le haut, en commençant au dernier élément et jusqu'au premier.

Cette méthode effectue une recherche linéaire ; par conséquent, la durée d'exécution moyenne est proportionnelle à Count. Autrement dit, cette méthode est une opération O(n), où n correspond à Count.

p u b l i c v i r t u a l bool C o n t a i n s ( object item ) ;

Cette méthode effectue une recherche linéaire ; par conséquent, la durée d'exécution moyenne est proportionnelle à Count. Autrement dit, cette méthode est une opération O(n), où n correspond à Count.

Cette méthode détermine l'égalité en appelant Object.Equals.

p u b l i c v i r t u a l int B i n a r y S e a r c h ( object value ) ;

Le paramètre value ainsi que chaque élément de ArrayList doivent implémenter l'interface IComparable utilisée pour les comparaisons. Si ArrayList n'est pas déjà trié selon l'implémentation IComparable, le résultat peut être incorrect.

La comparaison d' une référence null (Nothing dans Visual Basic) avec n'importe quel type est autorisée et ne génère pas d'exception lors de l'utilisation de IComparable. Lors du tri, une référence null (Nothing) est considérée comme étant inférieure à n'importe quel autre objet.

(4)

Si ArrayList contient plusieurs éléments possédant la même valeur, la méthode ne retourne qu'une des occurrences (n'importe laquelle, pas nécessairement la première).

Si ArrayList ne contient pas la valeur spécifiée, la méthode retourne un entier négatif. Vous pouvez appliquer l'opération de bits complémentaire (~) à cet entier négatif afin d'obtenir l'index du premier élément supérieur à la valeur de recherche. Lors de l'insertion de la valeur dans ArrayList, cet index devrait être utilisé comme point d'insertion pour conserver l'ordre de tri.

Cette méthode est une opération O(log2 n), où n est le nombre d'éléments compris dans la plage.

p u b l i c v i r t u a l int B i n a r y S e a r c h ( object value, IComparer comparer );

4) Tri d’une liste :

p u b l i c v i r t u a l void S o r t ( ) ;

Cette méthode utilise Array.Sort, qui se sert de l'algorithme QuickSort. Il s'agit d'une opération O(n ^2), où n correspond au nombre d'éléments à trier, avec une moyenne de (thêta)(n log n).

p u b l i c v i r t u a l void S o r t ( IComparer comparer ) ;

5) etc . . .

/* Fichier List2.cs (ArrayList des personnes) *

* Objectifs : ArrayList, ajout, insertion, tri, recherche, réflexions * Exercices :

* 1. trier + afficher selon les tailles utilisant Sort * dans le même programme

* 2. autres manières de supprimer TOUS à partir de quelques * noms (réflexions + révision)

* (à parler en classe aujourd'hui pour la révision) *

* 30 points seront posés au final sur cet exemple *

* Examens finals :

* Choix 1 : ce samedi de 10:00 à 13:00 au Z-310

* (veuillez m'écrire au plus tard jeudi le 1er décembre * avant 15:00 pour préparer la polycopie des énoncés).

*

* Choix 2 : mercredi 14 décembre de 18:30 à 21:30 *

(5)

* Mercredi le 07 décembre : * Z-310

* 18:30 -> 19:xx

* Youssef Zine présentera deux applications Windows * 19:xx ->

* Consultation + révision + ... avec Yasser */

using System;

using System.IO;

using System.Collections;

class Personne : IComparable {

private string nomPre;

private char sexe;

private double taille, poids;

private int numero;

public static int codeTri;

public Personne(string nomPre, char sexe,double taille, double poids,int numero)

{

this.nomPre = nomPre.ToUpper();

this.numero = numero;

this.sexe = sexe;

this.taille = taille;

this.poids = poids;

}

public override string ToString() {

return string.Format("{0, 30:S} {1, 5:D} {2, 7:F2} {3, 8:F1}

{4, 15:S}",

nomPre, numero, taille, poids, (sexe == 'F' ? "feminin":"masculin"));

}

public int CompareTo(object obj) { Personne autre = (Personne) obj;

return nomPre.CompareTo(autre.nomPre) ; }

}

class List2 {

static ArrayList LireRemplir(string nomFichier, int borne) {

ArrayList liste = new ArrayList (borne);

Console.WriteLine("La capacite de cette liste au debut : " + liste.Capacity);

StreamReader aLire = File.OpenText(nomFichier);

string ligneLue = null;

while ( (ligneLue = aLire.ReadLine()) != null)

(6)

{

string nom = ligneLue.Substring(0, 30);

char sexe = ligneLue[30];

double taille = double.Parse(ligneLue.Substring(36, 8));

double poids = double.Parse(ligneLue.Substring(50, 8));

int num = int.Parse(ligneLue.Substring(60));

// ajouter une personne à la liste

liste.Add ( new Personne(nom, sexe, taille, poids, num) );

}

aLire.Close();

return liste;

}

static void Afficher(ArrayList pers, string mess) {

Console.WriteLine("Contenu de la liste des personnes " + mess + ":\n");

for(int i = 0; i < pers.Count; i++)

Console.WriteLine("{0,3}) {1}", i, pers[i]);

Console.WriteLine();

}

static void SupprimerTOUS(ArrayList pers, string nomRecherche) {

nomRecherche = nomRecherche.ToUpper();

for (int i = nomRecherche.Length ; i < 30; i++) nomRecherche += " ";

Personne aChercher = new Personne(nomRecherche, ' ', 0.0, 0.0, 0);

int indice = 123456, rang = 0;

while (indice >= 0) {

indice = pers.BinarySearch(aChercher);

if (indice >= 0) {

Console.WriteLine("{0, 2:D}) {1}", ++rang, pers[indice]);

pers.RemoveAt(indice);

} }

if (rang > 0)

Console.WriteLine("On a supprime {0}

personne(s)" , rang);

else

Console.WriteLine("On ne trouve pas " + aChercher);

Console.WriteLine();

(7)

}

static void Inserer(ArrayList pers, string nom, char sexe, double taille, double poids, int numero)

{

nom = nom.ToUpper();

for (int i = nom.Length ; i < 30; i++) nom += " ";

Personne aAjouter = new Personne(nom, sexe, taille, poids, numero);

int indice = pers.BinarySearch(aAjouter);

if (indice < 0)

indice = (-indice) - 1 ; pers.Insert(indice, aAjouter);

}

static void Main(string[] args) {

const int MAX_PERS = 20; // au maximum 20 personnes

ArrayList pers = LireRemplir("R:\\Met_A05.txt", MAX_PERS);

Afficher(pers, "avant le tri");

pers.Sort(); // trier la liste des personnes Afficher(pers, "apres le tri (avec CompareTo)");

Inserer(pers, "Tremblay Pierre", 'M', 1.66, 76.5, 4321);

Inserer(pers, "Arcand Denys", 'M', 2.05, 97.5, 3333);

Inserer(pers, "Robitaille Suzanne", 'F', 1.68, 64.5, 2244);

Inserer(pers, "Vaucher Lise", 'F', 1.75, 70.1, 5511);

Afficher(pers, "apres l'insertion de ces quatre personnes");

SupprimerTOUS(pers, "ROY CHANTAL");

SupprimerTOUS(pers, "Robitaille Suzanne");

SupprimerTOUS(pers, "Baba Ali");

Afficher(pers, "apres ces suppressions");

} }

/* Exécution:

La capacite de cette liste au debut : 20

Contenu de la liste des personnes avant le tri:

0) ROY CHANTAL 2754 1,63 54,9 feminin

1) MOLAISON CLAUDE 1848 1,57 62,2 masculin

(8)

2) BEDARD MARC-ANDRE 2636 1,43 80,5 masculin

3) ROBITAILLE SUZANNE 4119 1,58 60,2 feminin

4) MONAST STEPHANE 1750 1,65 61,7 masculin

5) JALBERT LYNE 2168 1,63 52,6 feminin

6) DUBE FRANCOISE 4612 1,68 67,5 feminin

7) ROBITAILLE SUZANNE 2325 1,72 65,4 feminin

8) LABELLE LISE 1512 1,79 68,0 feminin

9) RIVERIN HELENE 2340 1,71 60,8 feminin

10) MICHAUD NORMAND 3428 1,73 103,7 masculin

11) RICHER AGATHE 3563 1,65 53,1 feminin

12) BEGIN MARIE-LUCE 4101 1,62 49,0 feminin

13) ROBITAILLE SUZANNE 4371 1,48 61,5 feminin

14) DUMITRU PIERRE 3629 1,92 99,4 masculin

15) FILLION ERIC 2630 1,78 75,7 masculin

16) DESMARAIS DENISE 3215 1,75 58,7 feminin

17) TREMBLAY MARC 3529 1,79 64,9 masculin

18) TREMBLAY SYLVAIN 1538 1,83 86,2 masculin

Contenu de la liste des personnes apres le tri (avec CompareTo):

0) BEDARD MARC-ANDRE 2636 1,43 80,5 masculin

1) BEGIN MARIE-LUCE 4101 1,62 49,0 feminin

2) DESMARAIS DENISE 3215 1,75 58,7 feminin

3) DUBE FRANCOISE 4612 1,68 67,5 feminin

4) DUMITRU PIERRE 3629 1,92 99,4 masculin

5) FILLION ERIC 2630 1,78 75,7 masculin

6) JALBERT LYNE 2168 1,63 52,6 feminin

7) LABELLE LISE 1512 1,79 68,0 feminin

8) MICHAUD NORMAND 3428 1,73 103,7 masculin

9) MOLAISON CLAUDE 1848 1,57 62,2 masculin

(9)

10) MONAST STEPHANE 1750 1,65 61,7 masculin

11) RICHER AGATHE 3563 1,65 53,1 feminin

12) RIVERIN HELENE 2340 1,71 60,8 feminin

13) ROBITAILLE SUZANNE 4119 1,58 60,2 feminin

14) ROBITAILLE SUZANNE 2325 1,72 65,4 feminin

15) ROBITAILLE SUZANNE 4371 1,48 61,5 feminin

16) ROY CHANTAL 2754 1,63 54,9 feminin

17) TREMBLAY MARC 3529 1,79 64,9 masculin

18) TREMBLAY SYLVAIN 1538 1,83 86,2 masculin

Contenu de la liste des personnes apres l'insertion de ces quatre personnes:

0) ARCAND DENYS 3333 2,05 97,5 masculin

1) BEDARD MARC-ANDRE 2636 1,43 80,5 masculin

2) BEGIN MARIE-LUCE 4101 1,62 49,0 feminin

3) DESMARAIS DENISE 3215 1,75 58,7 feminin

4) DUBE FRANCOISE 4612 1,68 67,5 feminin

5) DUMITRU PIERRE 3629 1,92 99,4 masculin

6) FILLION ERIC 2630 1,78 75,7 masculin

7) JALBERT LYNE 2168 1,63 52,6 feminin

8) LABELLE LISE 1512 1,79 68,0 feminin

9) MICHAUD NORMAND 3428 1,73 103,7 masculin

10) MOLAISON CLAUDE 1848 1,57 62,2 masculin

11) MONAST STEPHANE 1750 1,65 61,7 masculin

12) RICHER AGATHE 3563 1,65 53,1 feminin

13) RIVERIN HELENE 2340 1,71 60,8 feminin

14) ROBITAILLE SUZANNE 4119 1,58 60,2 feminin

15) ROBITAILLE SUZANNE 2244 1,68 64,5 feminin

16) ROBITAILLE SUZANNE 2325 1,72 65,4 feminin

(10)

17) ROBITAILLE SUZANNE 4371 1,48 61,5 feminin

18) ROY CHANTAL 2754 1,63 54,9 feminin

19) TREMBLAY MARC 3529 1,79 64,9 masculin

20) TREMBLAY PIERRE 4321 1,66 76,5 masculin

21) TREMBLAY SYLVAIN 1538 1,83 86,2 masculin

22) VAUCHER LISE 5511 1,75 70,1 feminin

1) ROY CHANTAL 2754 1,63 54,9 feminin

On a supprime 1 personne(s)

1) ROBITAILLE SUZANNE 2325 1,72 65,4 feminin

2) ROBITAILLE SUZANNE 2244 1,68 64,5 feminin

3) ROBITAILLE SUZANNE 4119 1,58 60,2 feminin

4) ROBITAILLE SUZANNE 4371 1,48 61,5 feminin

On a supprime 4 personne(s)

On ne trouve pas BABA ALI 0 0,00 0,0 ma

sculin

Contenu de la liste des personnes apres ces suppressions:

0) ARCAND DENYS 3333 2,05 97,5 masculin

1) BEDARD MARC-ANDRE 2636 1,43 80,5 masculin

2) BEGIN MARIE-LUCE 4101 1,62 49,0 feminin

3) DESMARAIS DENISE 3215 1,75 58,7 feminin

4) DUBE FRANCOISE 4612 1,68 67,5 feminin

5) DUMITRU PIERRE 3629 1,92 99,4 masculin

6) FILLION ERIC 2630 1,78 75,7 masculin

7) JALBERT LYNE 2168 1,63 52,6 feminin

8) LABELLE LISE 1512 1,79 68,0 feminin

9) MICHAUD NORMAND 3428 1,73 103,7 masculin

10) MOLAISON CLAUDE 1848 1,57 62,2 masculin

11) MONAST STEPHANE 1750 1,65 61,7 masculin

(11)

12) RICHER AGATHE 3563 1,65 53,1 feminin

13) RIVERIN HELENE 2340 1,71 60,8 feminin

14) TREMBLAY MARC 3529 1,79 64,9 masculin

15) TREMBLAY PIERRE 4321 1,66 76,5 masculin

16) TREMBLAY SYLVAIN 1538 1,83 86,2 masculin

17) VAUCHER LISE 5511 1,75 70,1 feminin

Press any key to continue

*/

Références

Documents relatifs

A son retour dans l’entreprise, un retard important avait été pris et il a été nécessaire d’embaucher du personnel supplémentaire pour honorer les commandes.. (valeur

NE RIEN INSCRIRE AU DESSUS DE CETTE LIGNE (sauf n° de place) ANNEXE À COMPLÉTER 1. Document à rendre avec la copie d’examen

Quel est le coefficient de proportionnalité qui exprime la remise en fonction du montant des achats?. (Montant des achats) ×

Dans un langage de programmation sans orientée objet (Pascal, C, … ), il est interdit d'utiliser le même nom pour deux sous-programmes différents. Les langages C#, C++, JAVA,

Malgré que les valeurs des deux paramètres a et b ont été bien permutés dans la fonction echanger, on a modifié sur les copies de age1 et age2 et ces modifications ne sont

/* cette méthode permet de déterminer et de retourner le cercle ayant le rayon le plus grand entre le cercle courant et un autre cercle */. public Cercle plusGrand

Dans object, cette méthode compare selon la référence car les auteurs de cette méthode ne savent rien sur les classes créées plus tard pour comparter le contenu de deux objets.

Les conditions nécessaires et suffisantes pour qu’une équation de Monge appartienne à cette classe ont été données aussi dans le même Mémoire, lorsque les