21
IFT 1179, Hiver 2009 (par Le Van N.) Chapitre 1 : Les éléments de base du C# 1 La DESI (Direction de l’Enseignement de Service en Informatique : www.desi.umontreal.ca ) offre des cours de service en programmation depuis 1983. Au début, on enseignait des langages Fortran, Cobol et Pascal. Le langage C a été introduit vers 1986 et il a remplacé le Pascal vers 1992. Le C++ (une extension de C) a été enseigné depuis 1996 pour la programmation orientée objet. Le Java s’ajoute vers 2000. À compter de l’automne 2005, la DESI ajoute le langage C# avec, temporairement, le seul cours IFT 1179. C’est un langage qui est basé principalement sur C++, Java et aussi certains styles du VB. Comme c’est le dernier né des langages modernes de la programmation, C# essaie de profiter les points forts de ses prédécesseurs en éliminant certaines complexités du C++, en ajoutant ses propres nouveautés pour rendre le langage plus complet que le Java. La DESI vient de réformer ses cours de programmations et la POO se présente dès le premier cours IFT 1810 (C suivi de Java). Durant la période de transition (automne 2005, hiver 2006), la DESI accepte au IFT 1179 des étudiants qui connaissent la programmation traditionnelle (comme le C) mais ne connaissent pas encore la POO. Ce texte a pour but de vous permettre de saisir des explications en classe au lieu de copier toujours des programmes écrits au tableau et qui sont disponibles sur le site de notre cours : www.iro.umontreal.ca/~dift1179 Bonne chance et bon succès! Le Van Nguyen [email protected] tél : (514) 343-7410 bureau : 2196, André-Aisenstadt

La DESI ( Direction de l’Enseignement de Service en ... · IFT 1179, Hiver 2009 (par Le Van N.) Chapitre 1 : Les éléments de base du C# 2 A) Quelques mots sur la POO : Dans notre

Embed Size (px)

Citation preview

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 1

La DESI (Direction de l’Enseignement de Service en Informatique : www.desi.umontreal.ca) offre des

cours de service en programmation depuis 1983. Au début, on enseignait des langages Fortran, Cobol et Pascal. Le langage C a été introduit vers 1986 et il a remplacé le Pascal vers 1992. Le C++ (une extension de C) a été enseigné depuis 1996 pour la programmation orientée objet. Le Java s’ajoute vers 2000. À compter de l’automne 2005, la DESI ajoute le langage C# avec, temporairement, le seul cours IFT 1179. C’est un langage qui est basé principalement sur C++, Java et aussi certains styles du VB. Comme c’est le dernier né des langages modernes de la programmation, C# essaie de profiter les points forts de ses prédécesseurs en éliminant certaines complexités du C++, en ajoutant ses propres nouveautés pour rendre le langage plus complet que le Java. La DESI vient de réformer ses cours de programmations et la POO se présente dès le premier cours IFT 1810 (C suivi de Java). Durant la période de transition (automne 2005, hiver 2006), la DESI accepte au IFT 1179 des étudiants qui connaissent la programmation traditionnelle (comme le C) mais ne connaissent pas encore la POO. Ce texte a pour but de vous permettre de saisir des explications en classe au lieu de copier toujours des programmes écrits au tableau et qui sont disponibles sur le site de notre cours :

www.iro.umontreal.ca/~dift1179 Bonne chance et bon succès!

Le Van Nguyen [email protected] tél : (514) 343-7410 bureau : 2196, André-Aisenstadt

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 2

A) Quelques mots sur la POO : Dans notre vie quotidienne, on travaille très souvent avec des objets : Un tableau dans une salle de cours est un objet. Il dispose de ses propres informations :

- en bois - de couleur noir - mesure 2.4 mètre de largeur et 1.9 mètre de

hauteur - etc ...

On peut fabriquer (construire) un tableau par plusieurs manières : en bois, en métal, en plastique, . . . de telle mesure, de telle couleur, . . . Que peut-on faire avec un tableau ?

- écrire au tableau

- laver le tableau

- effacer le tableau

- etc …

Une porte est un autre objet. On peut construire une porte par plusieurs manières : en bois, en métal, en pailles, . . . Que peut-on faire avec une porte ?

- ouvrir la porte

- fermer la porte

- etc … C’est la même chose en programmation orientée objet (POO) : Quels sont ses champs d’information (ses attributs) ? Comment construire (instancier) un objet ? Quelles sont les méthodes qu’on peut appliquer sur l’objet? En français, on est habitude avec l’écriture écrire au tableau, . . .

pour décrire l’action d’écriture sur l’objet tableau. En POO, le style d’écriture est du genre : tableau.écriture() dont l’interprétation est : appliquer la méthode d’écriture sur l’objet tableau. De la même manière : porte.fermer() représente l’action fermer appliquée sur l’objet porte.

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 3

B) Trois formes d’accès en C# : ( pour comprendre et programmer rapidement en C# )

1. forme 1 (très fréquente) :

objet.méthode (……..) Appliquer une méthode sur l’objet

Exemples : pour l’objet "Bonsoir" de la classe string "Bonsoir".ToUpper() retourne "BONSOIR" "Bonsoir".IndexOf('o') retourne 1 (le caractère ‘o’ se trouve à l’indice 1)

2. forme 2 (assez fréquente) :

Classe.méthode static(……..)

Utiliser une méthode static d’une classe ou

d’un type de base (int, double, . . .) Exemples : Math.Sqrt(16.0) retourne 4.0 (la racine carrée de 16.0)

int.Parse(" 25 ") retourne 25 (valeur entière) string.CompareOrdinal("Bonsoir","bonsoir") retourne -32 Important : si l’appel de la méthode est fait dans la même classe,

on peut omettre le nom de la classe. (cas souvent des classes pour tester d’autres classes, …)

3. forme 3 (peu fréquente) :

classe.champ static

Accès à un champ (attribut) static d’une classe ou

d’un type de base (int, double, . . .)

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 4

Exemples : Math.PI vaut 3.14159… (valeur PI de la classe Math)

int.MaxValue vaut 2 147 483 647 (l’entier le plus grand)

double.MinValue est le réel le plus petit

C) Convention d’écriture en C# : ( pour comprendre rapidement des exemples écrits en C# )

1. variable premier mot en minuscules, début d’un nouveau mot en majuscule

Exemples : taille, nbPers, tailleMax, etc ….

2. constante

très souvent en tous majuscules :

Exemples : const int MAX_AGE = 125; const double BAR_INTRA = 0.02;

perimetre = 2 * Math.PI * rayon; de temps à autre, on rencontre des constantes dont le début de chaque

mot est en majuscule :

Exemples : int maxiAge = int.MinValue; double minTaille = double.MaxValue;

3. nom de classe ou de méthode :

le début de chaque mot est en majuscule :

Math, Console, Rectangle, Cercle, StringBuilder, etc …

WriteLine, ReadLine, Length, Main, Afficher, Perimetre, etc …

D) Allure d’un projet simple en C#:

Premier exemple d’introduction :

/* Fichier Introd1.cs (1er exemple d'introduction au langage C#) * * Ce programme écrit en mode interactif permettant de * - saisir la taille d'une personne en nombre * de pieds et de pouces tapés au clavier * - convertir la taille en mètre * en sachant que 1 pied = 0.3048 mètre * et que 1 pied = 12 pouces * - afficher la taille dans 2 systèmes (impérial et métrique) * - saisir et afficher le poids (un réel, en kg) * * Le programme fonctionne pour plusieurs personnes tant que

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 5

* l'usager décide de continuer. * * Le but de cet exemple est d'avoir un petit aperçu * du langage C# * * System.Console.Write : utiliser la méthode écriture (Write) de la * classe Console de l'espace de nom System * (en pratique : afficher à l'écran) * * System.Console.WriteLine : comme System.Console.Write mais changer * de ligne (Line) après avoir affiché * * System.Console.ReadLine : utiliser la méthode lecture jusqu'à la * fin de la ligne (ReadLine) pour retourner toute la ligne lue * * chaine.ToUpper() : retourner une chaîne en lettres majuscules * * Si on utilise la déclaration : using System; * on pourra omettre le mot System. partout dans ce programme. * (voir les autres exemples) * * Préparé par Le Van N. pour IFT 1179 */ class Introd1 { static void Main(string[] args) { // PIED_EN_METRE est une "const"ante de type réel, // sa valeur vaut 0.3048 const double PIED_EN_METRE = 0.3048; // 1 pied vaut 0.3048 mètre (12 pouces) char reponse; // Oui ou non si l'usager veut continuer do { // répéter le même traitement // saisie du nombre de pieds tapé au clavier System.Console.Write("Entrez le nombre de pieds dans la taille "); string strPieds = System.Console.ReadLine(); // une chaîne de caractères est retournée // convertir la chaîne en entier int nbPieds = int.Parse(strPieds); // conversion d'une chaîne en entier // saisie du nombre de pouces tapé au clavier System.Console.Write("Entrez le nombre de pouces dans la taille "); int nbPouces = int.Parse(System.Console.ReadLine()); /* l'affichage ici utilise l'opérateur de concaténation + * => une expression numérique sera convertie en chaîne de caractères * avant de concaténer à une autre chaîne */ System.Console.WriteLine("La taille en systeme imperial : " + nbPieds + " pied(s) et " + nbPouces + " pouces\n"); // conversion en système métrique double taille = (nbPieds + nbPouces / 12.0) * PIED_EN_METRE; // affichage la taille en metre System.Console.WriteLine("La taille " + taille + " metre\n");

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 6

// saisie le poids en kg System.Console.Write("Quel est son poids en kg (ex. 67,8) ? "); double poids = double.Parse(System.Console.ReadLine()); // affichage le poids avec un peu de format System.Console.WriteLine("Le poids : {0, 6:F2} kg\n", poids); // saisir la réponse de l'usager s'il veut continuer ou non System.Console.Write("\nVoulez-vous continuer (o/n) ? "); // conversion la chaîne tapée en MAJUSCULES et prendre le 1er caractère reponse = System.Console.ReadLine().ToUpper()[0];

} while (reponse == 'O'); } } /* Exécution: Entrez le nombre de pieds dans la taille 5 Entrez le nombre de pouces dans la taille 9 La taille en systeme imperial : 5 pied(s) et 9 pouces La taille 1,7526 metre Quel est son poids en kg (ex. 67,8) ? 72,1 Le poids : 72,10 kg Voulez-vous continuer (o/n) ? o Entrez le nombre de pieds dans la taille 5 Entrez le nombre de pouces dans la taille 11 La taille en systeme imperial : 5 pied(s) et 11 pouces La taille 1,8034 metre Quel est son poids en kg (ex. 67,8) ? 58,9 Le poids : 58,90 kg Voulez-vous continuer (o/n) ? n Appuyez sur une touche pour continuer... */

Explications sommaires du programme:

1. Ce programme simple comporte une seule classe qui contient la méthode

principale (Main). Plus tard, un programme contient plusieurs classes.

2. La fonction principale comporte souvent des déclarations, des instructions et

surtout, des appels des méthodes (des fonctions)

3. Comme la plupart des langages d’orienté objet, C# permet la flexibilité des

déclarations : on peut mélanger des déclarations et des instructions (déclarer

où on en a besoin).

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 7

4. Affichage des informations :

a) forme complète : System.Console.Write( . . . ); ou System.Console.WriteLine( . . .);

b) forme raccoursie :

using System; // au tout début (voir Introd1_Bis.cs)

puis : Console.Write(. . .); ou

Console.WriteLine( . . .);

5. Lecture d’une ligne lue :

L’expression System.Console.ReadLine() permet de retourner la ligne lue.

6. C# est tout objet :

Les types de base en C# (int, double, …) disposent des champs et des méthodes

int.Parse(" 25 ") convertit la chaîne " 25 " en valeur entière et retourne 25 comme résultat

7. C# dispose aussi du type string qui comporte plein de méthodes permettant de

manipuler une chaîne de caractères (un des sujets du TP1)

8. C# dispose de commentaires :

/* …….

…….

*/

ou // . . .

9. Dans l’affichage : System.Console.WriteLine("La taille en metre : {0}", taille); {0} désigne une seule expression à afficher Si on veut afficher la taille, le pois et l’âge, une instruction possible sera : System.Console.WriteLine("La taille {0} metre, age : {1} ans " + " et poids : {2} kg", taille, age, poids);

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 8

Exemple d’introduction utilisant using System;

Attention aux sauts de lignes sous Word /* Fichier Introd1_Bis.cs (comme Introd1.cs) * SAUF : * using System; permettant d'omettre partout System. * * Préparé par Le Van N. pour IFT 1179 */

using System; class Introd1_Bis { static void Main(string[] args) { // PIED_EN_METRE est une "const"ante de type réel, sa valeur vaut 0.3048 const double PIED_EN_METRE = 0.3048; // 1 pied vaut 0.3048 mètre (12 pouces) char reponse; // Oui ou non si l'usager veut continuer do { // répéter le même traitement // saisie du nombre de pieds tapé au clavier Console.Write("Entrez le nombre de pieds dans la taille "); string strPieds = Console.ReadLine(); // une chaîne de caractères est retournée // convertir la chaîne en entier int nbPieds = int.Parse(strPieds); // conversion d'une chaîne en entier // saisie du nombre de pouces tapé au clavier Console.Write("Entrez le nombre de pouces dans la taille "); int nbPouces = int.Parse(Console.ReadLine()); /* l'affichage ici utilise l'opérateur de concaténation + * => une expression numérique sera convertie en chaîne de caractères * avant de concaténer à une autre chaîne */ Console.WriteLine("La taille en systeme imperial : " + nbPieds + " pied(s) et " + nbPouces + " pouces\n"); // conversion en système métrique double taille = (nbPieds + nbPouces / 12.0) * PIED_EN_METRE; // affichage la taille en metre Console.WriteLine("La taille " + taille + " metre\n"); // saisie le poids en kg Console.Write("Quel est son poids en kg (ex. 67,8) ? "); double poids = double.Parse(Console.ReadLine()); // affichage le poids avec un peu de format Console.WriteLine("Le poids : {0, 6:F2} kg\n", poids); // saisir la réponse de l'usager s'il veut continuer ou non Console.Write("\nVoulez-vous continuer (o/n) ? "); // conversion la chaîne tapée en MAJUSCULES et prendre le 1er caractère reponse = Console.ReadLine().ToUpper()[0]; } while (reponse == 'O');

} }

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 9

/* Exécution: Entrez le nombre de pieds dans la taille 5 Entrez le nombre de pouces dans la taille 9 La taille en systeme imperial : 5 pied(s) et 9 pouces La taille 1,7526 metre Quel est son poids en kg (ex. 67,8) ? 72,1 Le poids : 72,10 kg Voulez-vous continuer (o/n) ? o Entrez le nombre de pieds dans la taille 5 Entrez le nombre de pouces dans la taille 11 La taille en systeme imperial : 5 pied(s) et 11 pouces La taille 1,8034 metre Quel est son poids en kg (ex. 67,8) ? 58,9 Le poids : 58,90 kg Voulez-vous continuer (o/n) ? n Appuyez sur une touche pour continuer... */ En ajoutant la déclaration : using System; on omet partout System. Et obtient les mêmes résultats. Exemple d’introduction utilisant quelques fonctions (niveau du TP1)

/* Fichier Introd1_Bis2.cs (comme Introd1_Bis.cs) * SAUF : * on utilise quelques fonctions * * Préparé par Le Van N. pour IFT 1179 */ using System; class Introd1_Bis2 { static int LireEntier(string message) { Console.Write(message); return int.Parse(Console.ReadLine()); } static double LireReel(string message) { Console.Write(message); return double.Parse(Console.ReadLine()); }

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 10

static void Main(string[] args) { // PIED_EN_METRE est une "const"ante de type réel, sa valeur vaut 0.3048 const double PIED_EN_METRE = 0.3048; // 1 pied vaut 0.3048 mètre (12 pouces) char reponse; // Oui ou non si l'usager veut continuer do { // répéter le même traitement int nbPieds = LireEntier("Entrez le nombre de pieds dans la taille "); int nbPouces = LireEntier("Entrez le nombre de pouces dans la taille "); Console.WriteLine("La taille en systeme imperial : " + nbPieds + " pied(s) et " + nbPouces + " pouces\n"); // conversion en système métrique double taille = (nbPieds + nbPouces / 12.0) * PIED_EN_METRE; // affichage la taille en metre Console.WriteLine("La taille " + taille + " metre\n"); // saisie le poids en kg double poids = LireReel("Quel est son poids en kg (ex. 67,8) ? "); // affichage le poids avec un peu de format Console.WriteLine("Le poids : {0, 6:F2} kg\n", poids); // saisir la réponse de l'usager s'il veut continuer ou non Console.Write("\nVoulez-vous continuer (o/n) ? "); // conversion la chaîne tapée en MAJUSCULES et prendre le 1er caractère reponse = Console.ReadLine().ToUpper()[0]; } while (reponse == 'O');

} } /* Exécution: Entrez le nombre de pieds dans la taille 5 Entrez le nombre de pouces dans la taille 9 La taille en systeme imperial : 5 pied(s) et 9 pouces La taille 1,7526 metre Quel est son poids en kg (ex. 67,8) ? 72,1 Le poids : 72,10 kg Voulez-vous continuer (o/n) ? o Entrez le nombre de pieds dans la taille 5 Entrez le nombre de pouces dans la taille 11 La taille en systeme imperial : 5 pied(s) et 11 pouces La taille 1,8034 metre Quel est son poids en kg (ex. 67,8) ? 58,9 Le poids : 58,90 kg Voulez-vous continuer (o/n) ? n Appuyez sur une touche pour continuer... */

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 11

Exemple d’introduction (tableaux, fonctions, tri, …) :

/* Fichier Introd2.cs (deuxième exemple d'introduction en C#) * * Ce programme, écrit en C#, permettant de * - déclarer + initialiser 2 tableaux de poids et de sexe * d'un groupe de 7 personnes * - d'afficher le contenu de ces deux tableaux * - de compter + d'afficher * . le nombre de femmes; * . le nombre d'hommes * - de déterminer + d'afficher le poids le plus léger * . des femmes * . des hommes * - de trier selon les poids puis ré-afficher les tableaux. * * Préparé par Le Van N. pour IFT 1179 */ using System; class Introd2 { /* * ------------------------------------------------------------------------- * - Auteurs : Tremblay Nicole, IFT 1179, Hiver 2009 - * - Charbonneau Pierre - * ------------------------------------------------------------------------- * - Cette fonction permet d'afficher le contenu de deux tableaux - * - poids et sexe d'un groupe de nbPers personnes avec un en-tête - * ------------------------------------------------------------------------- * - Dernière mise à jour : jeudi 15 janvier 2009 - * ------------------------------------------------------------------------- */ static void Afficher(double[] poids, char[] sexe, int nbPers, string message) { Console.WriteLine("Infos des personnes " + message); Console.WriteLine("Rang Poids Sexe"); // l'indice i, un réel pour le poids, une chaîne de caractères pour le sexe for (int i = 0; i < nbPers; i++) Console.WriteLine("{0, 3:D}) {1, 10:F2} {2, 15:S}", i, poids[i], sexe[i] == 'F' ? "feminin" : "masculin"); Console.WriteLine(); }

/* * ------------------------------------------------------------------------- * - Auteur : Charbonneau Pierre - * ------------------------------------------------------------------------- * - Cette fonction permet de déterminer et de retourner le poids le plus - * - léger des personnes d'un sexe donné (voulu) - * ------------------------------------------------------------------------- * - Dernière mise à jour : jeudi 22 janvier 2009 - * ------------------------------------------------------------------------- */

static double PlusLeger(char sexeVoulu, char[] sexe, double[] poids, int nbPers) { double mini = double.MaxValue; // l'entier le plus grand for (int i = 0; i < nbPers; i++) if (sexe[i] == sexeVoulu && poids[i] < mini) mini = poids[i]; return mini; }

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 12

/* * ------------------------------------------------------------------------- * - Auteurs : Tremblay Nicole, IFT 1179, Hiver 2009 - * - Charbonneau Pierre - * ------------------------------------------------------------------------- * - Cette fonction permet de trier le contenu de deux tableaux - * - poids et sexe d'un groupe de nbPers personnes selon leurs poids - * - (tri par sélection du IFT 1810) - * ------------------------------------------------------------------------- * - Dernière mise à jour : jeudi 15 janvier 2009 - * ------------------------------------------------------------------------- */

static void Trier(double[] poids, char[] sexe, int nbPers) { for (int i = 0; i < nbPers - 1; i++) { int indMin = i; for (int j = i + 1; j < nbPers; j++) if (poids[j] < poids[indMin]) indMin = j; if (indMin != i) // on permute les poids et les sexes { double tempoReel = poids[i]; poids[i] = poids[indMin]; poids[indMin] = tempoReel; char tempoCar = sexe[i]; sexe[i] = sexe[indMin]; sexe[indMin] = tempoCar; } } } static void Main(string[] args) { // déclarer et initialiser le contenu de deux tableaux double[] poids = { 72.6, 58.1, 78.3, 65.4, 80.2, 60.8, 72.3 }; char[] sexe = { 'M', 'F', 'M', 'M', 'M', 'F', 'F' }; int nbPers = poids.Length; // le nombre d'éléments du tableau des poids Afficher(poids, sexe, nbPers, "apres les declarations et initialisations des 2 tableaux"); Console.WriteLine("Le nombre de personne :"); Console.WriteLine(" - de sexe feminin : {0, 3:D} ", compteur('F', sexe, nbPers)); Console.WriteLine(" - de sexe masculin : {0, 3:D} ", compteur('M', sexe, nbPers)); Console.WriteLine(); Console.WriteLine("Le poids le plus leger : "); Console.WriteLine(" - des femmes : {0, 6:F1} kg", PlusLeger('F', sexe, poids, nbPers)); Console.WriteLine(" - des hommes : {0, 6:F1} kg", PlusLeger('M', sexe, poids, nbPers)); Trier(poids, sexe, nbPers); Afficher(poids, sexe, nbPers, "apres le tri selon les poids\n"); }

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 13

/* * ------------------------------------------------------------------------- * - Auteur : Tremblay Nicole, IFT 1179, Hiver 2009 - * ------------------------------------------------------------------------- * - Cette fonction permet de compter et de retourner le nombre de - * - personnes d'un sexe voulu (donné) - * ------------------------------------------------------------------------- * - Dernière mise à jour : jeudi 15 janvier 2009 - * ------------------------------------------------------------------------- */

static int compteur(char sexeVoulu, char[] sexe, int nbPers) { int n = 0; for (int i = 0; i < nbPers; i++) if (sexe[i] == sexeVoulu) n++; return n; } } /* Exécution: Infos des personnes apres les declarations et initialisations des 2 tableaux Rang Poids Sexe 0) 72,60 masculin 1) 58,10 feminin 2) 78,30 masculin 3) 65,40 masculin 4) 80,20 masculin 5) 60,80 feminin 6) 72,30 feminin Le nombre de personne : - de sexe feminin : 3 - de sexe masculin : 4 Le poids le plus leger : - des femmes : 58,1 kg - des hommes : 65,4 kg Infos des personnes apres le tri selon les poids Rang Poids Sexe 0) 58,10 feminin 1) 60,80 feminin 2) 65,40 masculin 3) 72,30 feminin 4) 72,60 masculin 5) 78,30 masculin 6) 80,20 masculin Appuyez sur une touche pour continuer... */

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 14

/* Fichier Introd3.cs (informations sur des stations de métro) * Ce programme sera expliqué en classe pour : * - réviser (ou introduire) la notion de POO * (Programmation orientée objet) * - introduire le type string en C# (avec méthodes) * Voir l'exécution pour le but du programme * Le Journal Métro a publié les statistiques de la fréquence * des métros à Montréal, par exemple : * COTE-DES-NEIGES(26)3509564 * la station COTE-DES-NEIGES était classée 26 ième en 2003. * la fréquentation en 2004 à cette station est de 3 509 564 * passagers. */ using System; class Introd3 { static void Afficher(string station) { int indice1 = station.IndexOf('('), indice2 = station.IndexOf(')'); string nomStation = station.Substring(0, indice1); int rang2003 = int.Parse(station.Substring(indice1+1, indice2-indice1-1)); int freq2004 = int.Parse(station.Substring(indice2+1)); Console.WriteLine("Nom de la sation : {0}", nomStation); Console.WriteLine("son rang en 2003 : {0}", rang2003); Console.WriteLine("sa frequence en 2004: {0}", freq2004); Console.WriteLine(); } static void Main(string[] args) { string station1 = "COTE-DES-NEIGES(26)3509564", station2 = "UNIVERSITE-DE-MONTREAL(38)2610922"; Afficher(station1); Afficher(station2); } } /* Exécution: Nom de la sation : COTE-DES-NEIGES son rang en 2003 : 26 sa frequence en 2004: 3509564 Nom de la sation : UNIVERSITE-DE-MONTREAL son rang en 2003 : 38 sa frequence en 2004: 2610922 Press any key to continue */

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 15

Explications sommaires du programme:

1. Ce programme simple comporte une seule classe qui contient la méthode

principale (Main). On déclare et initialise deux chaînes de caractères

représentantes de la fréquence aux deux stations de métro.

2. On appelle la méthode Afficher pour afficher la fréquence à ces deux stations.

Veuillez noter que l’appel : Afficher(station1); est la version raccourcie de Introd3.Afficher(station1);

3. Quelques méthodes de string utilisées dans la méthode Afficher :

a) chaine.IndexOf(caractere) retourne l’indice d’un caractère dans une chaîne

"Bonsoir". IndexOf(‘o’) retourne 1

"Bonsoir". IndexOf(‘z’) retourne -1 (on ne trouve pas la lettre z)

b) chaine.Subtring(indice du début, longueur) retourne une sous-chaîne

de telle longueur à partir de tel indice

"Bonsoir". Subtring(3, 2) retourne "so"

c) chaine.Subtring(indice du début) retourne une sous-chaîne à partir de tel indice jusqu’à

la fin de la chaîne

"Bonsoir". Subtring(3) retourne "soir"

4. On a déjà vu la conversion de string en entier :

int.Parse(" 25 ") convertit la chaîne " 25 " en valeur entière et retourne 25 comme résultat

Quatrième exemple d’introduction :

/* Fichier Introd4.cs (informations sur des stations de métro) * C'est le même que Introd3.cs sauf qu'on utilise la méthode * Split pour décomposer une chaîne en plusieurs mots grâce aux * séparateurs des mots (ici les deux caractères ( et ) * * Voir l'exécution pour le but du programme */ using System; class Introd4 { static void Afficher(string station) { char[] separateurs = {'(', ')'}; // délimiteurs des mots string[] infos = station.Split(separateurs, 5); // décomposer en (au max.) 5 mots

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 16

string nomStation = infos[0]; int rang2003 = int.Parse(infos[1]); int freq2004 = int.Parse(infos[2]); Console.WriteLine("Nom de la sation : {0}", nomStation); Console.WriteLine("son rang en 2003 : {0}", rang2003); Console.WriteLine("sa frequence en 2004: {0}", freq2004); Console.WriteLine(); } static void Main(string[] args) { string station1 = "COTE-DES-NEIGES(26)3509564", station2 = "UNIVERSITE-DE-MONTREAL(38)2610922"; Afficher(station1); Afficher(station2); } } /* Exécution: Nom de la sation : COTE-DES-NEIGES son rang en 2003 : 26 sa frequence en 2004: 3509564 Nom de la sation : UNIVERSITE-DE-MONTREAL son rang en 2003 : 38 sa frequence en 2004: 2610922 Press any key to continue */

Explications sommaires du programme: C’est le même que Introd3.cs Dans ce programme, on utilise une autre manière pour décomposer la chaîne

représentante une station en 3 mots :

string[] mots = chaine.Split( char[] séparateurs, int nbMaxMots) ;

Cette méthode sera utile pour un des numéros de votre TP1. (automne 2005).

Pour string, veuillez consulter les exemples disponibles sur Web et les liens suivants :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfstring.asp

et :

http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/cpref/html/frlrfSystemStringClassTopic.asp

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 17

E) Quelques types et leurs informations:

1. Le type int

Pour les entiers dont les valeurs varient entre -2 147 483 648 et

2 147 483 647 et occupent 32 bits (4 octets).

Deux champs d’information :

publ ic const int MinValue; Cette constante vaut -2 147 483 648

p ub l i c c on s t int Ma xV al u e ; Cette constante vaut 2 147 483 647

Plusieurs méthodes dont :

public static int Parse(string);

qui permet de convertir une chaîne en entier et retourne cet entier.

Exemples :

int age = int.Parse("19"); // age vaut 19 ans

int nbCafe = int.Parse(" 3 "); // 3 tasses de café consommé par jour

Les usagers peuvent travai l ler auss i avec d’autres types entiers

comme : short , ushort, uint , long, etc …

(u pour unsigned : pas de signe => valeur >= 0)

Pour af f icher un entier :

Les instructions :

int age = 25; Console.WriteLine("Age vaut " + age + " ans"); Console.WriteLine("Age vaut {0} ans", age); Console.WriteLine("Age vaut {0, 5} ans", age); Console.WriteLine("Age vaut {0, 5:D} ans", age); Console.WriteLine("L'entier le plus grand vaut {0}", int.MaxValue); Console.WriteLine("L'entier le plus grand vaut {0, 15:N}", int.MaxValue);

Console.WriteLine("L'entier le plus grand vaut {0, 15:N0}",

int.MaxValue);

font afficher :

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 18

Age vaut 25 ans

Age vaut 25 ans

Age vaut 25 ans

Age vaut 25 ans

L'entier l e plus grand vaut 2147483647

L'entier l e plus grand vaut 2 147 483 647,00

L'entier l e plus grand vaut 2 147 483 647

2. Le type double

Pour les réels dont les valeurs varient dans -1,79769313486232E+308 et

1,79769313486232E+308 qui occupent 64 bits (8 octets).

Deux des (autres) champs d’information :

publ ic const double MinValue; Cette constante vaut -2 147 483 648

p ub l i c c on s t double M axV a l u e; Cette constante vaut 2 147 483 647

La méthode de conversion : double.Parse(string) retourne un réel

Les instructions :

double taille = 1.72; double poids = double.Parse(" 65,2 "); Console.WriteLine("La taille vaut " + taille + " metre "); Console.WriteLine("Le poids vaut {0} ou {1,6} ou {2, 6:F1} ou " + " {3,6:F2}",poids, poids, poids, poids); Console.WriteLine("Le reel le plus grand vaut {0}", double.MaxValue); Console.WriteLine("Le reel le plus petit vaut {0}", double.MinValue);

font afficher :

La taille vaut 1,72 metre

Le poids vaut 65,2 ou 65,2 ou 65,2 ou 65,20

Le reel le plus grand vaut 1,79769313486232E+308 Le reel le plus petit vaut -1,79769313486232E+308

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 19

Voir le lien :

http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/csref/html/vclrfcsharpkeywords_pg.asp

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 20

3. Le type string

L’exemple suivant vous permet d’avoir une idée sur ce type. Les détails seront expliqués

en classe :

/* Fichier String_1.cs (1er exemple sur le type string) * Comme C# est TOUT objet, le type string dispose aussi * des champs, des methodes comme une classe : * chaine.Length : retourne la longueur d'une chaine * chaine[indice] : retourne le caractere a l'indice mentionne * chaine.ToUpper(): retourne la chaine en tous majuscules * chaine.ToLower(): retourne la chaine en tous minuscules * chaine.Substring(indDepart, longueur) : * retourne une sous-chaine de telle longueur * a partir de tel indice * chaine.Substring(indDepart) : * retourne une sous-chaine a partir de tel indice * jusqu'a la fin de la chaine * chaine.IndexOf(un caractere) : * retourne l'indice du premier caractere trouve * (-1 si introuvable) * chaine.LastIndexOf(un caractere) : * retourne l'indice du dernier caractere trouve * (-1 si introuvable) * chaine.Split(tableau de caracteres de separation, nb. maximum de * mots decomposes) * retourne un tableau de string qui contient des mots de la * chaine grace au tableau de separateur(s) des mots. * La methode Split est tres utile (entre autres) pour le TP1 * */ using System; class String1 { static void Main(string[] args) { string souhait = "Comment allez-vous? On vous souhaite une bonne session!"; Console.WriteLine("La chaine : {0} \nde longueur {1}", souhait, souhait.Length); Console.WriteLine("Le caractere a l'indice 2 : {0}", souhait[2]); Console.WriteLine("En tous majuscules : {0}", souhait.ToUpper()); Console.WriteLine("En tous minuscules : {0}", souhait.ToLower()); Console.WriteLine("Trois premiers caracteres : {0}", souhait.Substring(0, 3)); Console.WriteLine("Indice de la premiere lettre O : {0}", souhait.IndexOf('O')); Console.WriteLine("Une autre sous-chaine : {0}",

IFT 1179, Hiver 2009 (par Le Van N.)

Chapitre 1 : Les éléments de base du C# 21

souhait.Substring(20)); Console.WriteLine("Indice de la derniere lettre e : {0}", souhait.LastIndexOf('e')); Console.WriteLine("Indice de la premiere lettre f : {0}(non trouve)", souhait.IndexOf('f')); char[] separateurs = new char[] {'!', ' ', '-', '?'}; string[] mots = souhait.Split(separateurs, 15); // au max 15 mots Console.WriteLine("\nLes mots de la chaine :"); foreach(string mot in mots) if (mot.Length > 0) Console.WriteLine(mot); Console.WriteLine(); } } /* Execution: La chaine : Comment allez-vous? On vous souhaite une bonne session! de longueur 55 Le caractere a l'indice 2 : m En tous majuscules : COMMENT ALLEZ-VOUS? ON VOUS SOUHAITE UNE BONNE SESSION! En tous minuscules : comment allez-vous? on vous souhaite une bonne session! Trois premiers caracteres : Com Indice de la premiere lettre O : 20 Une autre sous-chaine : On vous souhaite une bonne session! Indice de la derniere lettre e : 48 Indice de la premiere lettre f : -1(non trouve) Les mots de la chaine : Comment allez vous On vous souhaite une bonne session Press any key to continue */