Sie sind auf Seite 1von 54

C#

Les bases

Table des matires

Introduction ............................................................................................................................... 6
Prsentation ....................................................................................................................................... 6 Quest ce que le C# ? ......................................................................................................................... 6 .NET, quest ce que cest ? ............................................................................................................... 6 Ce quil vous faut pour crire et lancer du code C# ...................................................................... 7 Conventions ....................................................................................................................................... 7

Chapitre 1 .................................................................................................................................. 8 Premier programme .................................................................................................................. 8


Premier programme avec Visual C# ............................................................................................... 8 Examen du code source .................................................................................................................. 11 Prsentation rapide des espaces de noms ...................................................................................... 12 Les blocs ........................................................................................................................................... 12 Le squelette du programme ........................................................................................................... 13 Les commentaires............................................................................................................................ 13 Exercices dapplication ................................................................................................................... 13
Exercice 1 .................................................................................................................................................... 13 Exercice 2 .................................................................................................................................................... 13 Exercice 3 .................................................................................................................................................... 13 Exercice 4 .................................................................................................................................................... 13

Chapitre 2 ................................................................................................................................ 14 Les variables ............................................................................................................................ 14


Dfinition ......................................................................................................................................... 14 Explications ..................................................................................................................................... 14 Dclaration et affection dune variable ......................................................................................... 14 Exemple ............................................................................................................................................ 15 Examen du code .............................................................................................................................. 15 Exercice dapplication .................................................................................................................... 16
Exercice 5 .................................................................................................................................................... 16

Rutilisation dune variable ........................................................................................................... 16 Caractres spciaux ........................................................................................................................ 16 Exercices dapplication ................................................................................................................... 17
Exercice 6 .................................................................................................................................................... 17 Exercice 7 .................................................................................................................................................... 17

Les chanes de caractres ............................................................................................................... 17 Exercices .......................................................................................................................................... 18

Exercice 8 .................................................................................................................................................... 18 Exercice 9 .................................................................................................................................................... 18

Saisie de variables ........................................................................................................................... 18 Oprations sur les nombres ............................................................................................................ 19 Concatnation .................................................................................................................................. 20 Exercices .......................................................................................................................................... 21
Exercice 10 .................................................................................................................................................. 21 Exercice 11 .................................................................................................................................................. 21 Exercice 12 .................................................................................................................................................. 21 Exercice 13 .................................................................................................................................................. 21

Chapitre 3 ................................................................................................................................ 22 Les conditions .......................................................................................................................... 22


If et else ............................................................................................................................................ 22 Les oprateurs logiques .................................................................................................................. 22 Oprateurs logiques purs ............................................................................................................... 23 Vrai ou faux ..................................................................................................................................... 23 Combinaison .................................................................................................................................... 23 Un exemple ...................................................................................................................................... 24 Accolades ......................................................................................................................................... 24 Else if ................................................................................................................................................ 25 Exercices .......................................................................................................................................... 25
Exercice 14 .................................................................................................................................................. 25 Exercice 15 .................................................................................................................................................. 25 Exercice 16 .................................................................................................................................................. 25

Switch / case ..................................................................................................................................... 26


Syntaxe ........................................................................................................................................................ 26 Smantique .................................................................................................................................................. 26 Exemples ..................................................................................................................................................... 27 Exercice 17 .................................................................................................................................................. 27

Loprateur ternaire ....................................................................................................................... 27


Syntaxe ........................................................................................................................................................ 27 Exemple ....................................................................................................................................................... 27 Smantique de lexemple ............................................................................................................................. 27

Chapitre 4 ................................................................................................................................ 29 Les boucles ............................................................................................................................... 29


Faire tant que .............................................................................................................................. 29
Syntaxe ........................................................................................................................................................ 29 Smantique .................................................................................................................................................. 29 Exemple ....................................................................................................................................................... 29 Contre-exemple : une boucle interminable .................................................................................................. 29

Tant que ....................................................................................................................................... 30


Syntaxe ........................................................................................................................................................ 30 Exemple ....................................................................................................................................................... 30

La boucle for .................................................................................................................................... 30


Syntaxe ........................................................................................................................................................ 30 Exemple ....................................................................................................................................................... 31

Remarque ..................................................................................................................................................... 31

Des boucles dans des boucles.......................................................................................................... 31 Exercices .......................................................................................................................................... 32


Exercice 18 .................................................................................................................................................. 32 Exercice 19 .................................................................................................................................................. 32

Chapitre 5 ................................................................................................................................ 33 Les classes ................................................................................................................................ 33


Ce que vous savez sur les classes.................................................................................................... 33 Dclaration dune classe ................................................................................................................. 33 Les mthodes ................................................................................................................................... 34
Syntaxe ........................................................................................................................................................ 34 Exemple ....................................................................................................................................................... 35

Dbuguer un programme ............................................................................................................... 36 Exercices .......................................................................................................................................... 37


Exercice 20 .................................................................................................................................................. 37 Exercice 21 : Calculatrice ............................................................................................................................ 37

Les champs ...................................................................................................................................... 37


Syntaxe ........................................................................................................................................................ 37 Exemple ....................................................................................................................................................... 38

Exercice dapplication directe........................................................................................................ 38


Exercice 22 .................................................................................................................................................. 38

Les proprits .................................................................................................................................. 38


Syntaxe ........................................................................................................................................................ 38 Exemple ....................................................................................................................................................... 39

Constructeurs de classes ................................................................................................................. 40


Syntaxe ........................................................................................................................................................ 41 Exemple ....................................................................................................................................................... 41

This ................................................................................................................................................... 42 Exercice ............................................................................................................................................ 43


Exercice 23 .................................................................................................................................................. 43

Chapitre 6 ................................................................................................................................ 44 Les tableaux ............................................................................................................................. 44


Syntaxe ............................................................................................................................................. 44 Travailler avec des tableaux........................................................................................................... 46 Foreach............................................................................................................................................. 46 Exercice dapplication .................................................................................................................... 48
Exercice 24 .................................................................................................................................................. 48

Les tableaux multidimensionnels ................................................................................................... 49


Exemple de dclaration dune matrice......................................................................................................... 49 Syntaxe ........................................................................................................................................................ 49 Exemple ....................................................................................................................................................... 49

Exercices .......................................................................................................................................... 50
Exercice 25 .................................................................................................................................................. 50 Exercice 26 .................................................................................................................................................. 51

Projet ........................................................................................................................................ 52

Introduction ..................................................................................................................................... 52 Conventions de nommage ............................................................................................................... 52 Projet ................................................................................................................................................ 53


Prambule .................................................................................................................................................... 53 Projet ........................................................................................................................................................... 53 Partie codeur ................................................................................................................................................ 54 Remarques ................................................................................................................................................... 54

Pour aller plus loin .......................................................................................................................... 54

Introduction

Prsentation
Ce tutorial a pour objectif de vous apprendre matriser les bases de la programmation en C#. Il sadresse aux dbutants et ne ncessite aucune connaissance pralable en informatique. Les notions dinterfaces graphiques, de services, de gestion de donnes ou autres ne sont pas traites dans cette section. De mme les notions ou explications dont lintrt savre limit pour le dbutant ne seront pas abordes ici.

Quest ce que le C# ?
Le C# (se prononce C Sharp) est un nouveau langage de programmation cr par Microsoft et publi officiellement en 2002. Il a t spcialement conu pour tirer tous les avantages de la technologie .NET. Il permet den exploiter toutes les fonctionnalits. C# tant bas sur .NET, il bnficie dune excellente conception et se trouve tre, dans de nombreux cas, bien plus agrable et plus efficace que les anciens langages C++ et VB. C# est un langage orient objet dont les concepts et la syntaxe viennent de C++ et Java. Un programme C# doit rpondre une syntaxe 1 trs stricte. Cette syntaxe est trs proche de celle du C++. C# est un langage compil. Pour compiler du C#, il faut un compilateur 2. Cette tape sappelle la compilation. Vous pouvez raliser un grand nombre dapplications grce C#, notamment des : - Applications Windows - Pages ASP.NET - Services Web - Services Windows

.NET, quest ce que cest ?


.NET (ou DotNet) est une bibliothque recouvrant lensemble des fonctions Windows. Cest aussi un environnement dexcution pour vos applications. Les programmes ne sont plus compils pour un systme dexploitation particulier mais pour .NET. C'est-dire que nimporte quel systme dexploitation pourra exploiter votre programme du moment que .NET y est implment. .NET est scuris et facilite linteroprabilit3 des programmes. Les composants de .NET sont appels le .NET Framework.
1 2

Ensemble des rgles dcriture. Programme qui traduit un langage, le langage source, en un autre, appel langage cible, en prservant la signification du texte source. 3 Il sagit de la communication des programmes entre eux.

Le .NET Framework est une sorte de machine virtuelle vous permettant dexcuter vos applications .NET (et donc C#) et dinteragir avec elles Remarque : Le .NET Framework ne fonctionne que sous Windows. Pour programmer sous Linux ou MacOs, il vous faut utiliser Mono ou DotGNU qui ont un fonctionnement similaire au Framework mais pour dautres plateformes.

Ce quil vous faut pour crire et lancer du code C#


.NET fonctionne sur Windows 98, 2000, XP et versions plus rcentes Pour crire du code C#, le bloc note suffit. Il vous faut ensuite un compilateur C# et le .NET Framework pour lancer vos programmes. Il est toutefois conseill et prfrable dutiliser un EDI 4 qui regroupe un logiciel de traitement de texte spcialis au langage (reconnaissance des mots cls5, etc.), un compilateur, un dbugger, et autres outils facilitant le dveloppement dapplications. Parmi les EDI, les plus connus sont : - Microsoft Visual C# payant ou version Express moins dveloppe - Borland C# Builder payant ou version dessai limit dans le temps - SharpDevelop gratuit mais moins pouss que les prcdents Nous utiliserons ici Visual C# Express 2005, qui est un excellent EDI, dans sa version anglaise pour vous habituer ds le dbut au fait que lunivers de la programmation fonctionne principalement en anglais. Vous ne pourrez linstaller que sous Windows XP minimum. Le Framework et autres composants ncessaires sont automatiquement installs.

Conventions
Voici quelques exemples des conventions de ce tutorial, ceci afin den simplifier la lecture et la comprhension : Les termes importants sont en gras. Les mots cls tels que if, else, while, class apparaissent comme ceci. Un bloc de code que vous pouvez excuter est plac dans une fentre de ce style :

static void Main() { Fonction(); }

Les conseils, les suggestions et les informations sont prsents comme ceci. Les informations importantes sont mentionnes de cette manire : Ceci est une information importante, ne loubliez pas !

Pour des raisons videntes de mise en page, lorsque le code sortira de la seule ligne do il aurait du se trouver, le caractre signalera que la ligne prcdente et courante ne forment quune.

4 5

Editeur de Dveloppement Intgr Ensemble des mots prdfinis par le langage de programmation.

Chapitre 1 Premier programme

Premier programme avec Visual C#


Aprs avoir install Visual C#, vous disposez de tous les composants ncessaires pour raliser votre premier programme. Commencez par ouvrir Visual C#. Par dfaut, dans Dmarrer Tous les programmes Vous arrivez alors sur la page daccueil de Visual C#. Faites File New Project

Microsoft Visual C# 2005 Express Edition

Vous arrivez alors sur cette fentre :

Faites File

New Project

Slectionnez Empty Project, littralement projet vide, renommez le HelloWorld et validez.

Slectionnez Empty Project , littralement projet vide, renommez le HelloWorld et validez.

Le projet a t cr. Voyons un peu quoi ressemble notre EDI.

En 1, il sagit de la bote outils, cest ici que seront regroupes tous les composants pour crer trs rapidement des applications Windows avec interface graphique nous nen feront donc pas lusage dans cette section. En 2 nous avons notre rapport derreur : il sagit dun outil nous permettant de savoir si notre programme ne prsente pas derreurs et nous facilitant ainsi leurs corrections. En 3, il sagit tout simplement de la barre dtat, qui nous indique la plupart du temps ce que fait notre EDI. En 4, il sagit de lditeur de proprits des fentres Windows nous nen aurons pas lutilit ici. En 5, il sagit de lun des principaux composants de Visual C# : lexplorateur de solutions littralement. Cest ici que viendront se placer tous les fichiers, images, ou autres composants que vous ajouterez votre solution. La diffrence entre une solution et un projet est dordre hirarchique : un projet ne peut contenir que des fichiers alors quune solution peut contenir plusieurs projets diffrents. En 6e position nous avons un raccourci trs pratique, nous permettant dexcuter notre programme. Et enfin, le n 7 cest ici que vous taperez votre code, ici quapparatront tous les fichiers que vous ouvrirez depuis le Solution Explorer. Un projet est reprsent par licne et une solution, par licne .

Revenons sur notre petit programme. Le but de ce programme est simple : afficher Hello World dans la Console. Vous devez donc crer un fichier C# pour y placer le code. Un fichier C Sharp a pour extension .cs. Pour ajouter un fichier votre projet, vous devez faire un clic droit sur le projet en question, ici le projet HelloWorld, et faites Add New Item. L, une multitude de templates soffrent vous. Choisissez le template Code File , renommez le MainEntryPoint.cs et validez en appuyant sur Add.

Le fichier MainEntryPoint.cs est alors ajout votre projet, dans le Solution Explorer et une page blanche saffiche dans lcran principal de Visual C#.

Copiez-y alors le code suivant : class MainEntryPoint { static void Main() { System.Console.Write("Hello World"); System.Console.Read(); return; } } Excutez alors le programme : soit en cliquant sur le raccourci (item n 6 dans la prsentation prcdente), soit en allant dans le menu Debug et en cliquant ensuite sur Start Debugging, ou encore, en appuyant sur F5. Rsultat : Une jolie fentre souvre, cest la Console, et affiche Hello World nous laissant gentiment le temps de lire jusqu ce que nous appuyions sur une touche. La fentre se ferme alors.

Examen du code source6


La premire ligne du programme dclare une classe : MainEntryPoint. Inutile den savoir plus pour le moment car il sagit dune notion orient objet accessible un niveau plus lev. Nous y reviendrons plus loin dans ce tutorial. Nous avons ensuite une fonction7 Main(). Cest ici que commence vritablement notre programme. Tout programme en C# commence par une fonction Main(). En effet, il faut que lors de lexcution du programme, celui-ci sache par o commencer Il commence donc par cette fonction Main(). Cette fonction Main() se termine par return;. Cela signifie quelle ne doit rien retourner : elle doit retourner void (vide en anglais). Cette fonction doit tre dclare comme statique (static). Nous reviendrons plus tard sur ce mot cl. Le reste du code est assez explicite. System.Console.Write("Hello World"); signifie que nous allons crire dans la console. Nous passons la fonction Write le texte correspondant au texte que nous voulons afficher, entre guillemets. System.Console.Read(); signifie que nous allons lire dans la console. Ou pour tre plus clair, nous attendons que lutilisateur entre quelque chose dans la console pour pouvoir lire ce quil y a entr. Ici, cela quivaut attendre que lutilisateur appuie sur la touche Entrer. Lexpression suivante tant le return;, notre programme sarrte ici. Le mot System qui se trouve devant le mot Console signifie que nous allons chercher les fonctions permettant daccder la console dans System. Autrement dit, si nous voulons accder la console, il faut que le compilateur sache que nous allons la chercher dans System et pas ailleurs. Le problme, cest que si nous voulons afficher 300 lignes dans notre console en attendant chaque fois que lutilisateur appuie sur une touche entre chaque nouvelle ligne, va nous faire un paquet de code rajouter devant tout nos Console.Write et autres

6 7

Le code source reprsente le programme sous sa forme textuelle (en C#). Une fonction est constitue dlments qui sexcutent les uns aprs les autres. On peut la considrer comme un groupe dautres fonctions.

A ce problme, une solution, dire au compilateur que les fonctions que nous employons se trouvent dans System. Nous avons pour cela notre disposition le mot cl using. Notre petit programme devient alors : using System; class MainEntryPoint { static void Main() { Console.Write("Hello World"); Console.Read(); return; } } Il sagit du mme programme mais en version allge Vous pouvez tester Remarque : Le nom du fichier et de la classe peuvent tre diffrents, cela na aucune incidence sur le programme.

Prsentation rapide des espaces de noms


Un espace de noms peut se dfinir comme tant un groupement logique de fonctions (contenues dans des classes). Exemples : - Lespace de noms System.Windows.Forms contiendra toutes les fonctions ncessaires la bonne ralisation dune application Windows qui utilise des Form. - Lespace de noms System.Design.Drawing2D permettra de dessiner des lments simples (un rectangle, un cercle, etc.). Pour accder aux fonctions appartenant un espace de noms donn, il suffit de linclure dans le fichier source en question par lintermdiaire du mot cl using (cf. le code ci-dessus) et selon un schma simple : using <nom de lespace de noms>; System est un espace de noms.

Les blocs
La partie de programme situe entre deux accolades, une ouvrante et une fermante, est appele bloc. Je conseille de prendre lhabitude de faire une tabulation aprs le retour la ligne qui suit laccolade. Puis retirer cette tabulation aprs laccolade fermante du bloc. { Tabulation Tout le code est frapp cette hauteur } Retrait de la tabulation Tout le code est frapp cette hauteur Cette mthode permet de contrler la fermeture des accolades et de leurs correspondances.

Le squelette du programme
On peut dfinir le squelette dun programme C# de la faon suivante : //Ajout des espaces de noms principaux class MaClass { static void Main() { //Appels de fonctions Console.Read(); /*Facultatif mais permet d'attendre que lutilisateur valide (en mode console)*/ return; //Fin du programme, tous c'est bien droul } }

Les commentaires
Les commentaires doivent permettre quelquun qui ne connait pas le C# de pouvoir lire et comprendre ce qui se passe. Les commentaires sont indispensables tout bon programme. Il y a deux faons de placer des commentaires : soit en utilisant /*Commentaire*/, soit en utilisant //Le reste de la ligne est un commentaire o le commentaire se termine la fin de la ligne (cf. le squelette du programme).

Exercices dapplication
Exercice 1 Raliser un programme qui crit Coucou . Exercice 2 Ecrire un programme qui : - affiche Bonjour, appuyez sur une touche SVP. - attend quon appuie sur une touche - affiche Merci davoir appuy sur une touche. Au revoir. Exercice 3 Commenter le programme de lexercice 2. Exercice 4 Ecrire un programme qui crit Je fais du C# maintenant ! . Astuces : Utilisez Console.WriteLine("monTexte"); pour afficher tu texte et revenir la ligne ensuite. Vous pouvez forcer la console attendre que vous appuyez sur une touche avant de fermer en faisant Debug Start Without Debugging ou Ctrl+F5. Conseil : Ne faites pas de copier/coller, reprenez tout zro pour vrifier que vous tes bien capables de faire ces petits exercices.

Chapitre 2 Les variables

Dfinition
Une variable associe un nom une valeur qui peut ventuellement varier au cours du temps. Plus prcisment une variable dnote une valeur.

Explications
Comme son nom lindique, une variable varie. Vous pouvez vous reprsenter une variable comme tant une bote dans laquelle on met quelque chose, c'est--dire quon crit quelque chose, ou dont on apprend quelque chose, c'est--dire quon lit ce quelque chose. Pour lire une variable, on peut utiliser la fonction Console.Write (ou Console.WriteLine). Pour donner une valeur une variable, on utilise loprateur daffection =. Une variable ne peut contenir quune seule chose la fois. Si vous mettez une seconde donne dans une variable, la prcdente est efface. Le nom dune variable est appel identificateur.

Dclaration et affection dune variable


Pour dclarer une variable, on utilise la syntaxe suivante : <type> <identificateur>; Un identificateur ne peut commencer par un chiffre et ne peut contenir de tirets - . La syntaxe pour affecter une valeur une variable est la suivante : <identificateur> = valeur; Il est galement possible de dclarer et daffecter une variable : <type> <identificateur> = valeur; Exemples de types : int : entier char : caractre double : rel

Exemple
Voici un petit programme illustrant tout ce qui a t vu prcdemment. using System; class MainEntryPoint { static void Main() { //Etape 1 : Dclaration de l'entier premiereLettre int premiereLettre; //Affection de l'entier premiereLettre la valeur 67 premiereLettre = 67; //Etape 2 : Dclaration du caractre secondeLettre char secondeLettre; //Affectation du caractre secondeLettre la valeur de O secondeLettre = 'O'; /*Etape 3 : Dclaration et affection du caractre derniereLettre la valeur de Q*/ char derniereLettre = 'Q'; //Etape 4 : Affiche la valeur contenue dans la variable premiereLettre Console.Write("{0}", premiereLettre); //Affiche la valeur contenue dans secondeLettre Console.Write("{0}", secondeLettre); /*Affiche la valeur contenue dans derniereLettre et va la ligne*/ Console.WriteLine("{0}", derniereLettre); //Etape 5 : Affiche Au revoir et va la ligne Console.Write("Au revoir\n"); //Fin du programme return; } } Lancez ce petit programme grce lastuce signale dans le chapitre prcdant et essayez de comprendre ce qui se passe.

Examen du code
A ltape 1, on met 67 dans la variable premiereLettre. A ltape 2, on met la valeur de O dans la variable secondeLettre. A ltape 3, on met la valeur de Q dans la variable troisiemeLettre. Remarque : En informatique, tout nest que nombre, cest pour que je dis la valeur de O et non O. En effet, on stocke dans la variable la valeur Unicode correspondante la lettre O. Nous reviendrons sur ce point plus tard. A ltape 4, on affiche premiereLettre : Console.Write("{0}", premiereLettre); va remplacer le {0} par la valeur contenue dans premiereLettre.

De mme pour les autres valeurs. A ltape 5, on affiche Au revoir et on va la ligne. Le retour la ligne est garanti par un caractre spcial : \n. Ainsi, Console.Write("Au revoir\n"); est identique Console.WriteLine("Au revoir");. Le {rang} signifie que le programme doit remplacer ce {rang} par la variable n rang qui se trouve dans la suite des instructions. Exemple : Console.WriteLine("{0}{1}{2}", var1, var2, var3); /*{0} sera remplac par la valeur de var1, {1} par celle de var2 et {2} par celle de var3*/ revient au mme que Console.Write("{0}", var1); //{0} sera remplac par la valeur de var1 Console.Write("{0}", var2); //{0} sera remplac par la valeur de var2 Console.WriteLine("{0}", var3); //idem mais avec var3 Remarque : Laffectation dun caractre se fait toujours grce loprateur daffectation = mais il faut placer le caractre entre guillemets simples, sinon le compilateur indiquera une erreur.

Exercice dapplication
Exercice 5 En utilisant ce qui a t fait prcdemment, afficher 62 369 12 e 15 c.

Rutilisation dune variable


Dans lexplication de ce quest une variable, il est dit : Une variable ne peut contenir quune seule chose la fois. Si vous mettez une seconde donne dans une variable, la prcdente est efface. . Par consquent i = 5; i = 19; i = 17; i contient la valeur 17 la fin.

Caractres spciaux
Nous avons vu que pour faire un retour chariot, c'est--dire un retour la ligne, nous pouvions utiliser soit Console.WriteLine, mais le retour chariot na lieu quen fin de ligne obligatoirement, soit \n que nous placions dans notre texte l o nous voulions faire un retour la ligne. \n est un caractre spcial. Les caractres spciaux commencent tous par le caractre de suffixe \ . Cela permet au compilateur de faire la diffrence par exemple entre \n et n. Il existe environ une dizaine de caractres spciaux dont voici les principaux : \n \t \ fait un retour chariot fait une tabulation permet de crer un caractre contenant la valeur du quote.

\"

affiche un guillemet.

Exemples dutilisations : Console.WriteLine("Je cite : \"Ceci est une citation\""); affichera : Je cite : "Ceci est une citation". char c = \; stocke la valeur de (se dit quote en informatique, et non pas apostrophe qui est du franais) dans la variable c de type caractre.

Exercices dapplication
Exercice 6 En utilisant les variables, crire un programme qui affiche : Bonjour 666 Exercice 7 De la mme manire, crire un programme qui affiche : B o n BonBon 4 2 1 421 Remarque : Si vous navez quune seule variable passer afficher dans la Console et rien dautre, vous pouvez crire directement : Console.Write(maVariable); et ceux, quelque soit le type de la variable : que ce soit un entier (int), une chane de caractres (string), un caractre (char)

Les chanes de caractres


Les chanes de caractres sont tout simplement des caractres qui se suivent les uns les autres. Exemple : Coucou, cest moi ! est une chane de caractres. Ct mmoire, on pourrait reprsenter une chane de caractre comme tant un tableau de caractres (la notion de tableau sera aborde plus loin) : C o u c o u , c \ e s t m o i ! \0

Remarque : Le caractre \0 est un caractre spcial marquant la fin dune chane de caractres. Crer une chane de caractres est trs simple en C#. On utilise pour cela le type string. Pour donner une valeur (ici du texte) notre chane de caractres, on place le texte entre des guillemets. Exemple : string chane = "Coucou, c'est moi !"; Voici un programme simple illustrant lutilisation dune string : using System; class MainEntryPoint {

static void Main() { //Dclare une chane de caractres contenant Coucou, c'est moi ! string maChaine = "Coucou, c'est moi !"; //Affiche : Coucou, c'est moi ! Console.WriteLine(maChaine); Console.Read(); return; } } Il existe plusieurs fonctions permettant de convertir un type string en un autre type (int par exemple). Retenez en une pour linstant : Convert.ToInt32(maChaine); fonction qui retourne une variable de type int. Exemple dutilisation : int a = Convert.ToInt32("12"); ou encore string maChaine = "12"; int a = Convert.ToInt32(maChaine); Si la chane de caractre ne contient pas une valeur susceptible dtre convertie en entier, cette fonction retourne une erreur et le programme sarrte. Exemple dun programme erron : int a = Convert.ToInt32("Coucou"); Ici, il est impossible de transformer Coucou en un entier, le programme sinterrompt en vous rapportant quune erreur sest produite.

Exercices
Exercice 8 Ecrire un programme utilisant le type string pour afficher une chane de caractres : Bonjour, comment allez-vous ! Exercice 9 De la mme manire, crire un programme qui : - stocke dans une variable Salut ! - affiche cette chane de caractres - la remplace par une valeur de type entire (exemple : 42 o 42 est une chane de caractres) - affiche la chane de caractres suivie du message : est stock dans une variable de type string . - convertie la chane de caractres en un entier et stocke sa valeur dans une nouvelle variable - affiche cette valeur suivie du message : est stock dans une variable de type int .

Saisie de variables
Nous avons vu prcdemment que lorsque nous voulions marquer une pause jusqu ce que lutilisateur appuie sur la touche Entrer, nous devions utiliser la fonction Console.Read();. Cette fonction nous

permet de saisir des donnes et de les placer dans des variables. Elle nous renvoie effectivement une variable de type entier. Exemple : int a = Console.Read(); Le problme cest que cette fonction retourne absolument tout ce que lutilisateur entre, y compris la valeur du retour chariot lorsque celui-ci valide. Il ne sagit donc pas dune trs bonne solution pour saisir des variables via la console. Alors comment faire ? Eh bien, vous avez peut-tre remarqu que lorsque vous saisissiez Console.Read, votre EDI vous proposait automatiquement dautres fonctions, et notamment, Console.ReadLine. La diffrence entre Console.Read et Console.ReadLine est subtile mais trs simple : Console.Read renvoie un entier alors que Console.ReadLine renvoie une string. Ct utilisateur, on ne voit pas la diffrence : lorsquon appuie sur la touche Entrer, on termine en mme temps la saisie de notre variable. Exemple dutilisation de Console.ReadLine : string myString = Console.ReadLine(); Application : using System; class MainEntryPoint { static void Main() { //Dclare une chane de caractres string myString; Console.Write("Entrez quelque chose : "); /*Affecte la valeur entre par l'utilisateur la chane de caractres myString*/ myString = Console.ReadLine(); //Affiche ce que l'utilisateur a tap avec un petit message Console.WriteLine("Vous avez entr : {0}", myString); Console.Read(); return; } }

Oprations sur les nombres


Les oprateurs de bases en programmation sont les mmes que les oprateurs mathmatiques que vous employez depuis votre plus tendre enfance, savoir : - loprateur + pour laddition : additionne 2 entiers entre eux - loprateur pour la soustraction : soustrait 2 entiers entre eux - loprateur * pour la multiplication : multiplie 2 entier entre eux - loprateur / pour la division : divise le 1er entier par le 2nd et tronque le rsultat - loprateur % qui permet de connatre le reste dune division euclidienne (que vous navez probablement jamais vu)

Exemple dutilisation : int int int int int int a b c d e f = = = = = = 2; 3; a + b; //c = 5 c + 12; //d = 17 a*b; //e = 3*2 = 6 c%a; //5%2 = 1 car 5 = 2*2 + 1

De mme avec les autres oprateurs. Les priorits tablies en mathmatiques sont respectes. C'est--dire que : 3 + 5*2 3 + (5*2) (3+5)*2 Il existe des raccourcis sur les oprateurs permettant dallger un peu le code et den faciliter la lecture. Il est ainsi possible daffecter une variable et deffectuer une opration en mme temps (dun point de vue uniquement visuel). Ces oprateurs sont +=, -=, *=, /=, %=, ++ et --. Exemples : int i = 0; i += 12; i -= 12; i *= 5; i /= 5; i %= 2; i++; i--; //La // // // // // // // variable doit avoir t initialis au pralable. i = i + 12; i = i 12; i = i * 5; i = i / 5; i = i % 2; i += 1; i = i + 1; i -= 1; i = i 1;

Remarque : Loprateur ++ est appel oprateur dincrmentation et loprateur --, oprateur de dcrmentation.

Concatnation
La concatnation est une opration visant regrouper plusieurs chanes de caractres entre elles. Elle seffectue par lintermdiaire de loprateur + et ne peut avoir lieu quentre types string. Les autres oprateurs ne semploient pas sur les types string. On peut se reprsenter une concatnation comme tant une opration mettant bout bout les chanes de caractres (ou string) entre elles. Exemple : string a = "Coucou,"; string b = " cest moi !"; string c = a + b; //c contient "Coucou, cest moi !" Remarque : Il est possible de concatner autant de chanes de caractres entre elles quon le veut. Ainsi, Console.WriteLine("Vous avez entr : {0}", myString); peut galement scrire

Console.WriteLine("Vous avez entr : " + myString); dans la prcdente application.

Exercices
Exercice 10 Raliser un programme qui : - demande lutilisateur dentrer un morceau de texte - affiche le morceau de texte avec un petit message de remerciement - attend que lutilisateur appuie sur une touche avant de quitter Exercice 11 Raliser un programme qui : - demande lutilisateur dentrer un entier - stocke cet entier dans un type int - affiche la valeur contenue dans la variable de type int Exercice 12 Raliser une petite calculatrice trs simple qui : - demande lutilisateur dentrer une valeur a - demande lutilisateur dentrer une valeur b - stocke ces valeurs dans des variables de types int - effectue la somme de ces 2 valeurs - affiche laddition complte avec son rsultat - attend que lutilisateur appuie sur une touche avant de quitter Exercice 13 Reprendre le programme de lexercice 12 en changeant lopration pour la remplacer par chacune des 4 autres. C'est--dire que ce programme fera : - une addition et affichera lopration complte - une soustraction et affichera lopration complte - une multiplication et affichera lopration complte - une division et affichera lopration complte - une division avec reste et affichera lopration complte en prcisant le reste.

Chapitre 3 Les conditions

If et else
Ces conditions ont pour syntaxe : if (condition vraie) { instructions 1 } else { instructions 2 } ce qui signifie : si (la condition est vraie, est vrifie) { alors, faire instructions 1 } sinon { faire instructions 2 }

Les oprateurs logiques


Ils servent comparer deux nombres entre eux. Libell strictement infrieur strictement suprieur gal diffrent infrieur ou gal suprieur ou gal Oprateur < > == != <= >=

Ne pas confondre = et == = est loprateur daffection et permet donc dattribuer une valeur une variable alors que == est loprateur dgalit, il sagit dune condition vrifiant que deux variables ont la mme valeur ou non.

Oprateurs logiques purs


Ce sont des oprateurs logiques permettant de combiner des expressions logiques. Libell And (et) Or (ou) Not (non) | se nomme pipe en informatique (se prononce paillp). Oprateur && || !

Vrai ou faux
Une condition retourne soit true (vrai) si elle est vrifie, soit false (faux) si elle ne lest pas. true et false sont des valeurs de type boolen. Le type boolen ne peut contenir que ces deux valeurs : true ou false. Il semploie comme nimporte quel autre type except quil est impossible deffectuer des oprations sur des boolens. Le type boolen ne sert qu stocker une valeur : soit true, soit false. Le mot cl permettant de dclarer une variable comme tant de type boolen est : bool. true peut tre assimil la valeur 1 ou toute autre valeur non nulle. false peut tre assimil la valeur 0. alors, loprateur logique Or (||) correspond une addition : || true false true true true false true false + 1 0 1 2 1 0 1 0

et loprateur logique And (&&) correspond une multiplication : && true false true true false false false false * 1 0 1 1 0 0 0 0

Remarques : !true = false et !false = true Toutes ces proprits sont tablies dans lalgbre de Bool.

Combinaison
Toutes les oprations logiques peuvent se combiner entre elles. Exemple : if (a == 5 && b == 2) Vous pouvez placer chaque condition entre parenthses

Exemple : if ((a == 5) && (b == 2)) et jouer sur les conditions analyser en priorit Exemple : if ((a == 5) && (b == 2 || c == 3)) est diffrent de if ((a == 5 && b == 2) || c == 3) En effet, pour que la premire condition renvoie true, il faut que a vaille 5 et il suffit ensuite que b soit gal 2 ou que c soit gal 3. Dans ce cas, la condition renvoie true, sinon false. Alors que la seconde condition vrifie si a vaut 5 et b vaut 2, si cest le cas elle renvoie true, sinon elle vrifie que c vaut 3, si oui, alors la condition renvoie true, sinon false. Rsultats : En posant a 5, b 2 et c = 3, alors : - la premire condition renvoie false - la seconde condition renvoie true

Un exemple
using System; class MainEntryPoint { static void Main() { //Demande une valeur Console.Write("Entrez une valeur : "); string input = Console.ReadLine(); //Transforme la chane de caractres entre en un entier int valeur = Convert.ToInt32(input); //Condition : si la valeur entre est strictment suprieure 10 if (valeur > 10) { //alors afficher... Console.WriteLine("Vous avez entre une valeur strictement suprieure 10."); } else { //sinon afficher Console.WriteLine("Vous avez entre une valeur infrieure ou gale 10."); } //Histoire d'avoir le temps de lire la rponse ;)... Console.Read(); } } Remarque : Jusqu prsent, tous les exemples avaient un return la fin de la fonction Main. Celui ne retournant aucune valeur, il est possible de lomettre sans quaucune erreur ou problme napparaisse.

Accolades
Les accolades entourant les blocs dinstructions dune condition peuvent tre omises si le bloc nest constitu que dune seule instruction.

Exemple : if (a == 2) Console.Write ("a vaut 2"); else Console.Write ("a ne vaut pas 2");

Else if
if (condition 1) { instructions 1 } else { if (condition 2) { instructions 2; } else { instructions 3; } } peut scrire avec else if comme tant : if (condition 1) { instructions 1 } else if (condition 2) { instructions 2; } else { instructions 3; } Remarque : Vous pouvez imbriquer autant de if, de else if, de else que vous le souhaitez, il ny a pas de limite.

Exercices
Exercice 14 Raliser un programme qui : - demande lutilisateur dentrer une valeur - affiche si cette valeur est positive ou ngative ou gale 0 Exercice 15 Raliser un programme qui : - demande lutilisateur dentrer une valeur - affiche si cette valeur est comprise entre 0 et 10 ou non. Exercice 16 Raliser un programme qui : - demande lutilisateur dentrer un caractre

affiche si celui-ci est une voyelle ou une consonne

Aide : Pour transformer une string en char, utilisez la fonction Convert.ToChar(myString); qui retourne un char. Pour comparer un caractre un autre, rappelez-vous comment vous faisiez pour affecter une valeur un type char. Astuce : Il est plus rapide de vrifier si la lettre en question est une voyelle (6 cas possibles seulement) plutt que de vrifier sil sagit dune consonne (20 cas possibles).

Switch / case
Syntaxe : switch (/*variable*/) { case /*valeur 1*/: //instructions break; case /*valeur 2*/: //instructions break; case /*valeur 3*/: //instructions break; //etc. default: //instructions break; } revient au mme que if (/*variable*/ == /*valeur 1*/) { //instructions 1 } else if (/*variable*/ == /*valeur 2*/) { //instructions 3 } else if (/*variable*/ == /*valeur 3*/) { //instructions 3 } //etc. else { //instructions par dfaut } Smantique8 : On passe une variable switch. La valeur de cette variable sera compare chaque valeur se trouvant aprs chaque case. Ds que la valeur correspond, linstruction se trouvant dans le case est lance le break signifie que lon peut dsormais sortir de linstruction conditionnelle (c'est--dire, du switch).Tant quaucun break nest rencontr, les

1 2 3

par dfaut

Signification et objectif du code

conditions suivantes sont testes et si elles sont vrifies, leurs instructions correspondantes sont galement excutes jusqu ce que lon rencontre un break. Exemples : switch (a) //a est un entier { case 1: Console.WriteLine("a break; case 16: Console.WriteLine("a break; case 36: Console.WriteLine("a break; default: Console.WriteLine("a break; } ou encore switch (country) //country est de type string { case "uk": case "usa": Console.WriteLine("Your language is english"); /*si usa ou si uk*/ break; case "fr": Console.WriteLine("Votre langue est le franais"); /*si fr uniquement*/ break; default: Console.WriteLine("Your language is neither english nor french"); break; } Petit exercice dapplication directe : Exercice 17 Rcrire lexercice 16 avec un switch / case. dune valeur quelconque vaut un"); vaut seize"); vaut trente six"); ne vaut ni un, ni seize, ni trente six");

Loprateur ternaire
Syntaxe : <condition> ? <si vrai faire> : <sinon faire>; Exemple : int a = 8; int b = (a == 8) ? 2 : 3; Smantique de lexemple: On dclare une variable a et on linitialise une valeur de 8.

A la ligne suivante, on dclare b et on linitialise la valeur 2 si a vaut 8 sinon (si a vaut toute autre valeur que 8), la valeur 3. Remarque : Cet exemple peut scrire avec un if et un else de la manire suivante : int a = 8; int b = 0; /*Il est conseill de toujours initialiser une variable lors de sa dclaration*/ if (a == 8) b = 2; else b = 3;

Chapitre 4 Les boucles

Une boucle est constitue dun bloc de code contenant des instructions. Lintrt dutiliser une boucle est simple : il sagit deffectuer plusieurs fois la mme opration sans pour autant avoir la rcrire chaque nouvelle fois que nous en avons besoin. Il sagit dune tche rptitive. Par exemple : Nous voulons implmenter un programme qui nous calcule un nombre exposant un autre nombre ( = ). Alors comment faire ? On ne va pas crer toutes les conditions (si = 0, si = 1, si = 2, si = 3) et pour leur dire chaque fois de faire la mme chose (en loccurrence multiplier par lui-mme une fois de plus chaque fois quon passe la condition suivante le code serait interminable ou limit quelques cas Non, on ne va pas faire comme . On va utiliser une boucle qui va rpter ( -1) fois lopration de multiplier par luimme.

Faire tant que


Syntaxe : do { //instructions } while (condition); Smantique : Le programme rentre dans la boucle pour la premire fois lorsquil rencontre le mot cl do. Il excute alors toutes les instructions se trouvant dans le bloc de code de la boucle. Lorsquil rencontre le mot cl while, il vrifie si la condition quil contient est vraie ou fausse. Si celle-ci est vraie, il revient au dbut de la boucle et rexcute toutes les instructions. En revanche, si elle est fausse, il sort de la boucle et continue dexcuter le code se trouvant aprs la boucle. Exemple : int a = 0; do { a++; } while (a != 10); //On cre une variable a et on linitialise 0 //On incrmente a (a = a + 1) // tant que a est diffrent de 10, on continue

Contre-exemple : une boucle interminable int a = 0; do { a += 2; } while (a != 11); //On cre une variable a et on linitialise 0 //On ajoute 2 a // cette condition ne sera jamais vraie.

Faites attention votre condition de fin de boucle, celle-ci doit tre valide pour quitter la boucle.

Tant que
Cette boucle est quasiment la mme que la prcdente avec une petite diffrence qui a son importance. Syntaxe : while (condition) { //instructions } A premire vue, cest pareil. Il ny a que la syntaxe qui change eh ben non ! La principale diffrence fait toute la diffrence : cest le fait que la condition se trouve au dbut de la boucle et non plus la fin. Que se passe-t-il alors ? Le programme arrive au dbut de notre boucle et rencontre notre condition. Il vrifie si celle-ci est vraie ou fausse. Si elle est fausse, les instructions sont excutes. A la fin des instructions, on revient au dbut de la boucle : on vrifie sa condition et si Si la condition est vraie, la boucle se termine en sautant les instructions et le programme continue dexcuter le reste du code. La principale diffrence entre un dowhile et un simple while, cest que le dowhile oblige les instructions tre excutes au moins une fois alors que le while (tout seul) peut trs bien lempcher ds le dpart. Exemple : //Lutilisateur entre une valeur entire a while (a > 10) // tant que a est diffrent de 10, on { a--; //dcrmente a } Dans cet exemple, la boucle ne sexcutera que si lutilisateur entre une valeur strictement suprieure 10. Dans un autre cas (10, -2, 7), les instructions contenues dans la boucle de sexcuteront jamais. En revanche, dans lexemple qui suit, les instructions sont excutes une fois minimum, la condition ntant vrifie quaprs. //Lutilisateur entre une valeur entire a do { a--; //dcrmente a } while (a > 10) ; // tant que a est diffrent de 10, on

La boucle for
Celle-ci permet dexcuter un nombre fini de fois les instructions se trouvant en son sein. Syntaxe : for (i = point de dpart; i < point darriv; i+pas) { //instructions } i est une variable. On lui passe une valeur en entrant dans la boucle. Cette valeur est sa valeur de dpart. Les instructions sont ensuite excutes. On revient au dbut de la boucle. La condition est teste. Si vraie, la boucle est termine et les instructions quelle contient ne sont pas rexcutes. Si fausse, on ajoute i la valeur pas et on excute nouveau les instructions

Exemple : using System; class MainEntryPoint { static void Main() { Console.WriteLine("Un message va vous tre affich 10 fois !"); Console.Read(); /*Voici notre boucle. On cre un variable entire i qu'on initialise 0 afin de traiter 10 fois la boucle comme annonc prcedemment. Cette boucle continuera tant que i sera infrieur 10.*/ for (int i = 0; i < 10; i++) { Console.WriteLine("Fois n " + i.ToString()); Console.WriteLine("Bonjour !"); } Console.Read(); } } Regardez ce qui se passe lors de lexcution. Remarque : Les variables dclares dans les boucles for, ou pour les boucles for, sont gnralement appeles i, j, k, l Cette pratique remonte aux annes 60 o les chercheurs avaient alors dcids dutiliser ces noms de variables en tant que compteurs de boucles. Astuce : Vous pouvez omettre, comme pour le if, les accolades sil ny a quune seule une instruction. for (int i = 0; i < 10; i++) Console.WriteLine("Bonjour !");

Des boucles dans des boucles


Vous avez parfaitement le droit dimbriquer des boucles dans dautres boucles, cest sans limite. Exemples : while (a > 1) { for (int i = 0; i < 10; i++) b++; } ou encore for (int i = 0; i < 10; i++) for (int j = 0; j < 15; j++) b++; Etc.

Exercices
Exercice 18 Ecrivez de 3 faons diffrentes le programme prsent dans lintroduction de ce chapitre. C'est--dire, crivez un programme qui : - demande lutilisateur dentrer une valeur et une valeur - affiche la valeur Pour calculer , vous vous servirez de ce qui a t vu prcdemment. C'est--dire que vous calculerez dabord avec une boucle dowhile, puis avec une boucle while, puis avec une boucle for sans oublier danticiper le cas extrme o = 0 ( est un entier naturel). Exercice 19 Ecrire un programme qui : - demande lutilisateur dentrer un entier : soit 1, soit 2, soit 3, soit 4 - si lutilisateur appuie sur 1, affiche "Vous avez entr 1." puis reviens au dbut. - si lutilisateur appuie sur 2, affiche "Vous avez entr 2." puis reviens au dbut. - si lutilisateur appuie sur 3, affiche "Vous avez entr 3." puis reviens au dbut. - si lutilisateur appuie sur 4, affiche "Le programme va se fermer." et attend que lutilisateur appuie sur une touche avant de quitter. Astuce : Pour lexercice 18, vous serez trs vite limit par le choix de vos nombres et de vos exposants si vous utilisez des entiers, car ils ont une limite, un nombre maximal ne pas dpasser (qui se fixe par 2 31 pour les int et par 232 pour les uint). Je vous conseille dutiliser des double dans lexercice 18 pour stocker , pour et vous utilisez le type uint car il ne peut contenir que des entiers positifs (entiers naturels), ce que vous nous voulons (les ngatifs ne seront pas tolrs ici). Vous vous servirez donc de la fonction UInt32.TryParse pour les conversions vers le type uint de la mme manire que vous vous serviez de Int32.TryParse (confre correction des exercices prcdents). Aide : Pour lexercice 19, songez ce que signifie "si 1, si 2, si 3, revient au dbut". Vous pouvez galement le voir par la ngation du 4 ou en utilisant un boolen pour dire si le programme doit se terminer ou pas et vous aurez la solution. Pensez prendre en compte le fait que lutilisateur peut entrer autre chose que ce qui lui est demand.

Chapitre 5 Les classes

Ce que vous savez sur les classes


A vrai dire, rien et pourtant, vous vous en servez depuis le dbut de ce tutorial, sans en connatre le fonctionnement ni la place centrale quelles occupent en C#. Revoyons un peu notre tout premier programme : using System; class MainEntryPoint { static void Main() { Console.Write("Hello World"); Console.Read(); return; } } Que faisons-nous ici ? A la ligne 3, on dclare une classe dont le nom est MainEntryPoint. On ouvre ensuite les accolades de notre classe puis on les ferme tout la fin. On cre ensuite la fonction Main, fonction principale et obligatoire tout programme C#. Cest donc dans la classe, entre ses accolades quon peut dclarer des fonctions. A partir de ces lments, on peut dj tablir un schma prsentant la structure dune classe. class <nom de la classe> { //fonctions }

Dclaration dune classe


Syntaxe : La syntaxe dune classe est ni plus ni moins celle dcrite au dessus, c'est--dire : class <nom de la classe> { //fonctions }

Vous pouvez dclarer autant de classes que vous voulez dans votre fichier source. Par exemple : class <nom de la classe 1> { //fonctions } class <nom de la classe 2> { //fonctions } class

Les mthodes
Super je sais dclarer une classe maintenant sauf que sert rien puisquil ny a rien dedans. En plus je ne sais mme pas quoi cela pourrait servir. Cest vrai que pour linstant ne sert rien. Tout ce que vous avez appris mettre dans une classe, cest une fonction Main. Mais il ne peut y avoir quune seule fonction Main par programme, donc vous tes dj bloqu. Pas de panique, jarrive on va dabord remplir un peu notre classe avec des mthodes. Une mthode est une fonction, cest pareil, mais on va voir par la suite, que, parmi les fonctions quune classe peut implmenter, il y en a qui nont pas la mme syntaxe que les mthodes et qui vont donc porter un nom diffrent. Syntaxe : <modificateur daccs> <type de retour> <nom de la mthode>(<arguments>) { //instructions } Les classes peuvent agir entre elles. Elles peuvent appeler les fonctions dautres classes. Pour viter quelles nappellent tout et nimporte quoi, il faut leur donner des autorisations daccder directement telle ou telle fonction. Cest le rle du modificateur daccs de permettre ou de refuser une classe trangre daccder certaines fonctions, ou au contraire de lautoriser le faire. Parmi les quelques modificateurs daccs, nous allons en retenir deux pour linstant : public et private. public autorise une autre classe accder la fonction alors que private le lui interdit. Le type de retour est un type, comme ceux que nous avons vu auparavant, qui va dterminer quelle valeur la mthode devra renvoyer lorsquelle se terminera. Si le type de retour est dclar comme tant un entier (int), la mthode devra obligatoirement renvoyer un entier. Pour renvoyer une valeur, ou rien du tout, on utilise le mot cl return, suivi de la valeur quil doit retourner. Le mot cl return indique, quoi quil en soit, que la fonction est sur le point de se terminer. Le nom de la mthode est simplement le nom que vous souhaitez donner votre mthode. Gnralement celui-ci indique ce que celle-ci va effectuer. Les arguments sont des variables que lont passe la mthode lors de son appel dans le programme. Il peut y en avoir aucun, un seul ou plusieurs. Il ny a pas de limites. Les limites seront celles que vous fixerez au moment de la saisie de votre mthode ( pfou ! yen a marre, 42e argument, jarrte ) Une fonction commence par une accolade ouvrante et se termine par une accolade fermante. Si ce cours ntait que thorique, il vous resterait encore probablement toute une page dexplications sur comment utiliser, lancer une fonction. Comment crer une classe et lappeler, etc., mais nous allons voir tout cela tout de suite laide dun exemple.

Exemple : using System; class MainEntryPoint { static void Main() { //Cration d'un objet MaClass dont le nom est myClass MaClass myClass = new MaClass(); //On fonce sur la mthode publique Go myClass.Go(); } } class MaClass { /*La fonction principale de la classe MaClass, c'est elle qui fait tout !*/ public void Go() { Console.WriteLine("Programme somme : "); string val1, val2; Console.Write("Saisissez la 1ere valeur : "); val1 = Console.ReadLine(); Console.Write("Saisissez la 2nd valeur : "); val2 = Console.ReadLine(); int valeur1 = Convert.ToInt32(val1), b = Convert.ToInt32(val2); Console.Write(valeur1.ToString() + " + " + b.ToString() + " = "); //Jusque l, pas de problme, c'est du dj vu. /*Ici, on appelle la mthode prive SommeDe qui n'est accessible que lorsqu'on se trouve dans MaClass. A partir d'ici, le programme bifurque et va dans la mthode SommeDe en lui passant les valeurs de valeur1 pour a et de b pour b*/ int somme = sommeDe(valeur1, b); /*Ici somme vaut s. On affiche somme et effectivement, il s'affiche la mme valeur que celle de s.*/ Console.WriteLine(somme.ToString() + "\nMerci..."); Console.Read(); } /*Cette mthode est prive, on ne peut y accder que dans cette classe*/ private int sommeDe(int a, int b) { /*Lorsqu'on arrive ici, la valeur de a est la mme que celle de valeur1 (vue au dessus) et la valeur de b est la mme que celle de b (vue au dessus)*/ //Somme de a et b stock dans s int s = a + b; //On renvoie s return s; } Cet exemple est autoguid, les commentaires devraient suffire comprendre ce qui sy passe. Mais nous } allons quand mme faire un petit tour dedans pour voir ce quil sy passe.

Dbuguer un programme
Le dbogage vous permet de suivre pas pas lvolution de votre programme et de contrler ainsi ce quil sy passe. Nous allons dbuguer ici lexemple prcdent. Pour ce faire, commencez par poser un breakpoint sur la 1ere ligne de notre fonction Main (ce qui doit correspondre la ligne 8 du programme). Pour poser un breakpoint, cliquez dans la marge grise sur la ligne correspondant lendroit o vous vous voulez le placer. Un point rouge saffiche ds que le breakpoint est fix.

Puis excutez le programme (Start Debugging ou F5). Celui-ci sinterrompt quasi immdiatement marquant dune flche jaune le breakpoint que vous venez de poser. La flche jaune indique la ligne o vous vous trouvez lors de votre dbogage. Vous constaterez galement quun nouveau panneau est apparu en bas de votre EDI. Notamment les panneaux Locals et Watch qui vous permettent de voir en temps rel ce qui se passe dans votre programme. Allez dans le panneau Locals si vous ny tes pas dj. Vous pouvez dj constater quil affiche une ligne, et en lisant le tableau vous savez que la variable myClass a pour valeur null et quelle est de type MaClass. Appuyez ensuite sur F10 pour avancer dun pas dans votre programme (la liste des commandes de dbogage se trouve dans le menu Debug). Nous avons dsormais pass la 1 ere ligne qui cre un objet MaClass et le met dans la variable myClass. Vous noterez qu prsent, notre variable myClass a chang de valeur. Sa valeur est de type {MyClass} maintenant. Tout cest bien droul jusqu prsent. La prochaine ligne est myClass.Go(). Si vous faites F10 sur cette ligne, vous allez passer par-dessus, mais on a envie de voir ce quil a dedans, donc on va faire un Step Into (F11) et bingo on a chang de classe et on se retrouve dans notre mthode publique Go qui appartient la classe MaClass. Vous constaterez en mme temps que dans le panneau Locals, la variable myClass a disparu mais quelle a cde sa place dautres biens plus nombreuses. Ce sont en fait toutes les variables accessibles depuis la fonction en cours (do le nom du panneau : Locals). On en dduit que les variables ont une porte limite.

En poursuivant le dbogage, vous pourrez voir que les valeurs vont changes au fur et mesure que vous avancerez dans la mthode. Notez bien le fonctionnement de la mthode sommeDe. Elle calcule une valeur, la renvoie et cette valeur renvoye est stocke dans la variable somme de la mthode Go. Vous pouvez vous dplacer volont dans une mthode en bougeant la flche jaune o vous souhaitez reprendre le dbogage. Vous pouvez galement modifier les valeurs de vos variables tout instant. Il vous suffit pour cela de cliquer dans la colonne valeur sur la ligne de la variable dont vous voulez modifier le contenu puis de valider une fois la modification termine.

Exercices
Exercice 20 Crez un programme qui demande lutilisateur dentrer son anne de naissance puis qui calcule, partir de lanne courante, lge de la personne en question et laffiche. Votre fonction Main ne fait aucune des tches cites ci-dessus. Dans la classe effectuant tout le travail, vous sparerez chacune des actions exiges par cet exercice dans une mthode diffrente (il y en a donc 3 en tout). Exercice 21 : Calculatrice Cette calculatrice, dont le menu correspond limage ci-dessous, devra faire en sorte que : A et B soient deux entiers chaque choix possible (sauf le 1 et le 7) soit trait et affich dans une mthode diffrente la fonction Main neffectue aucune des tches du menu, ni mme ne laffiche laffichage du menu est gr par une mthode qui renvoie un entier correspondant au choix de lutilisateur avant dafficher le menu, on nettoie la console (on la vide) lutilisateur doit avoir le temps de pouvoir lire les rsultats, quils soient bons ou mauvais. Aide : Dans lexercice 20, pour connatre lanne actuelle lorsque le programme est excut, utilisez DateTime.Today.Year qui renvoie un entier. Dans lexercice 21, pour nettoyer la console, utilisez la mthode Clear que celle-ci propose. Pour traiter le choix n1 dans un switch/case, vous devrez crer de nouvelles variables, temporaires ; le switch/case ne le tolrera que si vous placez le code, entre le case et le break de celui-ci, dans un bloc.

Les champs
Vous avez remarqu lors du dbogage que les variables avaient une porte limite la fonction dans laquelle on les dclarait. Il est donc impossible dappeler une mme variable A dclare dans une fonction F depuis une autre fonction G. Le problme qui se pose est donc : Comment faire pour que la variable soit accessible partout dans notre classe, et plus encore La solution ce problme est simple : nous devons utiliser des champs (fields en anglais). Syntaxe : <modificateur daccs> <type> <identificateur>; Pas grand-chose de nouveau donc. Vous vous servez dsormais couramment de types et didentificateurs lorsque vous dclarez une variable dans une fonction. Quant aux modificateurs daccs, ce sont les mmes que ceux utiliss pour les mthodes. Leur utilisation est identique : ils servent dterminer si telle ou telle classe le droit daccder la variable.

Ils se dclarent directement dans la classe, au mme titre quune fonction. Lorsque le modificateur daccs nest pas prcis, la variable est prive (private). Exemple : class MaClass { private int maVariable; private string maChane; public double monReel; //fonctions }

Exercice dapplication directe


Exercice 22 Reprendre lexercice 21 en faisant en sorte de navoir plus aucun paramtre passer aux mthodes de calculs ni celle de laffichage du menu et rcrivez le choix n1 dans une mthode, exploitant dornavant les champs.

Les proprits
Bien quil puisse paratre tentant de donner tous ses champs un accs public, cela est en ralit trs dconseill, car dans ce cas, un module externe pourrait effectuer des manipulations interdites sur la variable ce qui risquerait de faire boguer le programme. Par exemple, imaginez que vous vous trouvez dans un muse et que tous les objets qui sy trouvent sont public .Cela voudrait dire, que vous, visiteur, avez tout fait le droit de manipuler lobjet comme bon vous semble. Heureusement ce nest pas le cas, vous navez que le droit de voir, de regarder, mais pas de modifier Les proprits ont le mme but. Elles servent dire si la variable le droit dtre lu ou dtre crite ou les deux. Syntaxe : <modificateur daccs> <type> <nom de la proprit> { get { //instructions } set { //instructions } } Vous remarquez quune proprit est diffrente dune mthode : - une proprit na jamais darguments, do la disparition des parenthses - une proprit contient au moins un des deux accesseurs (get ou set) suivi dau moins une instruction Si vous utilisez laccesseur get, celui-ci doit obligatoirement retourner une valeur du mme type que celui dfinit pour la proprit. Ce type sera donc forcment diffrent de void (vide).

Si vous utilisez laccesseur set, vous naurez pas de valeur retourner. Vous pourrez au contraire modifier une variable grce la valeur passe par la mthode set. Cette valeur est stocke dans un mot cl : value. Ce mot cl nest disponible que dans laccesseur set dune proprit. Par consquent le type dune proprit sera toujours diffrent de void. Exemple : Voici un petit exemple qui illustre comment utiliser les proprits conjointement avec des mthodes. Nous avons ici une classe Animal. Cette classe contient le nom de lanimal et son sexe que nous allons stocker sous forme boolenne. Nous crerons notre animal grce une mthode deux arguments. Nous voulons avoir le droit de modifier le nom de lanimal (ce que lon peut faire aussi couramment) mais pas son sexe (difficile de changer le sexe dun animal en principe). Nous utiliserons une mthode dans le but de rcapituler toutes ses informations sous la forme dune chane de caractres. using System; class MainEntryPoint { static void Main() { //On cre une instance d'Animal, contenue dans ani. Animal ani = new Animal(); //On cre un animal qui s'appele Norbert et qui est un mle. ani.Crer("Norbert", true); /*On demande le rcapitulatif de l'animal que l'on stocke dans animalString.*/ string animalString = ani.Rcapitulatif(); //On affiche animalString Console.WriteLine(animalString); //On change le nom de l'animal ani.Nom = "Nestor"; //On affiche directement le rcapitulatif Console.WriteLine(ani.Rcapitulatif()); //Admirez le rsultat. Console.Read(); } } class Animal { //Champs private string nom; private bool estUnMale; //Proprits /*Cette proprit nous permet d'obtenir et de modifier le nom de l'animal*/ public string Nom { get { return nom;

} set { /*Ici nous sommes sur que value est de type string car c'est le type de la proprit.*/ nom = value; } } /*Cette proprit ne permet que de connatre le sexe de l'animal, mais pas de le modifier*/ public bool EstUnMale { get { return estUnMale; } } /*Cette mthode deux argument permet d'affecter les deux champs de la classe animal*/ public void Crer(string nomDuBestio, bool estMale) { nom = nomDuBestio; estUnMale = estMale; } //Cette mthode nous renvoie une chaine de caractres public string Rcapitulatif() { //Dbut de la chaine... string recap = "Animal : " + nom + " de sexe "; /*... et sa fin, rpondant d'une condition ternaire : s'il n'est pas male, alors c'est une femelle*/ recap += estUnMale ? "male." : "femelle."; //Retourne la chaine de caractres return recap; } } Cet exemple est galement autoguid. Si vous avez du mal comprendre ce qui se passe, faites un petit dbogage, aide toujours. Remarquez que la variable nom nest pas confondue avec la proprit Nom, et de mme pour la variable estUnMale et la proprit EstUnMale. Cela est du au fait que C# est sensible la casse9. Par consquent, pour le programme, une variable qui sappelle variable est diffrente dune autre qui sappelle Variable ou encore VARIABLE, etc. Nous reviendrons sur la casse et les conventions de nommage plus loin dans ce tutorial.

Constructeurs de classes
Vous aurez probablement remarqu dans lexemple prcdent un petit dtail un peu embtant : il sagit de la mthode Crer. Cette mthode tant disponible tout le temps pour notre Animal, nous pouvions en ralit changer son sexe ds que nous en avions envie. Ce nest pas une super bonne technique donc.

Le fait de diffrencier les lettres minuscules des lettres majuscules

Ce dont nous avons besoin cest dune mthode (pour passer quelques paramtres) qui ne soit accessible quune seule fois (lors de la cration de la classe par exemple) et qui puisse remplir nos champs. Cette mthode particulire existe et a pour nom : constructeur. Un constructeur de classe est une mthode en tout point identique aux autres mthodes sauf : - quil doit porter le nom exact de sa classe (en respectant la casse) - quil na pas de type de retour Syntaxe : class MaClass { //champs public MaClass(<arguments>) { //code de construction } //proprits, mthodes } Un constructeur est appel lors de la cration de la classe, jamais un autre moment. Un constructeur peut tre dclar private si vous souhaitez le rendre invisible aux autres classes. Si vous ne spcifiez pas de constructeur, le compilateur vous en cre un par dfaut. Celui-ci se contente gnralement dinitialiser tout les champs de sa classe : les string une chane vide, les type valeurs (int et autres) 0 et les boolens false. Pour toute autre manipulation vous devez crire votre propre constructeur. Exemple : Reprenons lexemple prcdent en y modifiant quelques lignes. Modifiez la fonction Crer en la transformant en un constructeur : /*Ce constructeur deux argument permet d'affecter les deux champs de la classe animal*/ public Animal(string nomDuBestio, bool estMale) { nom = nomDuBestio; estUnMale = estMale; } Maintenant retournez dans la fonction Main et modifiez le dbut : //On cre une instance d'Animal, contenue dans ani. Animal ani = new Animal(); //On cre un animal qui s'appele Norbert et qui est un mle. ani.Crer("Norbert", true); en /*On cre une instance dAnimal, contenue dans ani. instance est une Animal qui sappele Norbert et qui est mle.*/ Animal ani = new Animal("Norbert", true); Cette

Vous aurez remarqu quen retapant new Animal( , Visual C# vous a automatiquement propos de rajouter une chane de caractres (string) et un boolen pour construire votre Animal

Dsormais, il ny a plus aucun litige possible : nous avons un seul animal dun seul sexe et il nous est impossible de le changer sauf si lon change danimal, ce qui correspond un modle raliste. Dbuggez cet exemple en plaant deux breakpoint : - un sur la 1ere ligne du constructeur - un sur la ligne qui instancie ani (Animal ani = new Animal("Norbert", true);)

This
this est un mot cl disponible depuis nimporte quel endroit dans une classe. Il permet davoir accs avec certitude aux membres dune classe. Les membres dune classe sont tout ce qui se trouve dans la classe, c'est--dire : - des constructeurs - des champs - des mthodes - des proprits Exemple dutilisation : Reprenons encore une fois notre exemple, dsormais favoris, Animal. Le dbut de notre classe ressemble ceci : private string nom; private bool estUnMale; public Animal(string nomDuBestio, bool estMale) { nom = nomDuBestiaux; estUnMale = estMale; } Il apparat que nomDuBestio nest pas un identificateur trs appropri et trop familier. Si un chef de projet passe derrire il risque de ne pas trop apprcier Tout en restant explicite sur ce quil est demand dentrer pour le nomDuBestio , il faut trouver un autre identificateur, et, nayant pas beaucoup dimagination, nous choisissons de reprendre tout simplement le mot nom comme identificateur. Sauf que : nom = nom; Tout le monde sy perd et surtout le compilateur. Pas de panique, vous venez dapprendre un nouveau mot cl, spcialement conu pour cibler les membres dune classe. Or ici, cest le champ nom que nous voulons cibler. Ce bout de code devient donc : private string nom; private bool estUnMale; public Animal(string nom, bool estUnMale) { this.nom = nom; this.estUnMale = estUnMale; } Notez que jen ai profit pour modifier lidentificateur du boolen, ce qui ntait pas du tout oblig.

De cet exemple, on dduit que la variable prfre dans une fonction est toujours la variable locale (aidez vous du dbogage pour le vrifier). Une variable locale na quune porte limite, elle se limite au bloc dans lequel elle est cre.

Exercice
Exercice 23 En utilisant tout ce qui a t vu prcdemment, crez un programme rpondant aux contraintes suivantes : - une classe doit lancer le programme, elle ne fait rien dautre - une classe soccupe de rpartir les tches entre affichage et traitement des donnes - une classe contient toutes les donnes Ce programme permet lutilisateur dentrer le nom dun album de musique ainsi que son artiste. Un menu lui proposera : - (1) dentrer les donnes - (2) dafficher les donnes - (Q) de quitter Vous devrez utiliser : au moins un constructeur, au moins une proprit, au moins une mthode. Vos champs seront privs. Astuce : Vous pouvez considrer une classe comme les autres types (int, double, float, char, string, etc.). Cela signifie que vous pouvez dclarer une classe Y dans lun des champs dune classe X et manipuler comme bon vous semble votre classe Y depuis votre classe X. Exemple : private MyClass myClass;

Chapitre 6 Les tableaux

Syntaxe
Les tableaux servent stocker une suite dlments conscutifs. Ils peuvent tre unidimensionnel ( une seule ligne) ou multidimensionnel. Dclaration dun tableau unidimensionnel : <type> [] <identificateur> = new <type>[<taille du tableau>]; Exemples : //Un tableau d'entiers 4 cases int[] tableauEntiers = new int[4]; //Un tableau de caractres 20 cases char[] tableauCars = new char[20]; //Un tableau de chanes de caractres 10 cases string[] tableauStrings = new string[10]; Vous ntes pas oblig de fixer la taille du tableau avant la compilation. Une variable peut la dfinir. Exemple : //Cette variable peut tre modifie pendant l'excution... int tailleDuTableau = 12; /*...il s'en suivra que le tableau aura toujours la taille que contient la variable tailleDuTableau au moment de sa dclaration (du tableau)*/ string[] tableauDeStrings = new string[tailleDuTableau]; Il existe deux types de tableaux multidimensionnels : les matrices qui sont des tableaux comportant le mme nombre de colonnes que de lignes et les autres tableaux dont on peut dterminer prcisment la taille pour chaque ligne et pour chaque colonne. Dclaration dune matrice : <type> [,] <identificateur> = new <type>[<taille de la matrice>,<taille de la matrice>]; Le nombre de virgules entre les crochets indique si le tableau est bidimensionnel, tridimensionnel, quadridimensionnel, etc. A chaque virgule, une nouvelle dimension est cre. Ce qui a t vu pour un tableau unidimensionnel, vaut pour toute matrice. Exemples : //Une matrice 2D d'entiers 4x4 cases int[,] tableauEntiers = new int[4,4];

//Une matrice 5D de 20x20x20x20x20 caractres char[,,,,] tableauCars = new char[20,20,20,20, 20]; //Une matrice 3D de 10x10x10 chanes de caractres string[,,] tableauStrings = new string[10,10,10]; //et //Cette variable peut tre modifie pendant l'excution... int tailleDeLaMatrice = 6; /*...il s'en suivra que la matrice aura toujours la taille que contient la variable tailleDeLaMatrice*/ string[,] matriceDeStrings = new string[tailleDeLaMatrice, tailleDeLaMatrice]; Vous pouvez crer des matrices dautant de dimensions que vous le voulez. Les tableaux multidimensionnels non matriciels seront traits plus loin. Pour accder une valeur dans un tableau, la syntaxe est la suivante : <identifiant du tableau>[<position>]; Exemple : using System; class MainEntryPoint { static void Main() { /*Stockage de la taille du tableau dans une variable de manire pouvoir s'en servir facilement par la suite*/ int tailleDuTableau = 10; //Cration de notre tableau, un tableau d'entiers int[] tableau = new int[tailleDuTableau]; //Quelques consignes Console.WriteLine("N'entrez que des nombres N (" + tailleDuTableau + " au total) sinon le programme buggera."); Console.WriteLine("{0} < N < {1}.", int.MinValue, int.MaxValue); /*La boucle qui va permettre l'utilisateur de remplir le tableau avec des valeurs*/ for (int i = 0; i < tailleDuTableau; i++) { //Affichage de la position actuelle dans le tableau Console.Write("N[{0}] = ", i); //Demande l'utilisateur d'entrer quelque chose string chane = Console.ReadLine(); /*Rempli la case en cours avec ce quelque chose en le transformant en un entier (si possible, sinon : bug)*/ tableau[i] = Int32.Parse(chane); } Console.WriteLine("\nAffichage des valeurs entre.\n"); //Boucle d'affichage des valeurs contenues dans le tableau for (int i = 0; i < tailleDuTableau; i++) { Console.Write("Valeur de la case {0} : {1}", i, tableau[i]); Console.ReadLine(); } } }

Pour davantage de dtails, le dbuggeur est votre ami En informatique, on compte toujours partir de 0. Cela signifie quun tableau de 10 cases stend de la case 0 la case 9 (ce qui fait bien 10 cases) et que la case 10 nexiste pas.

Travailler avec des tableaux


Les tableaux sont traits en C# comme des types part entire. Il est donc trs facile de travailler avec. Par exemple, la mthode Length vous permettra de connatre la taille de votre tableau. Exemple : monTableau.Length; //renvoi un entier indiquant la taille du tableau

La classe Array possde galement un bon nombre de mthodes statiques effectuant des oprations sur les tableaux. Si les lments du tableau font partis des types prdfinis, il est possible de trier ces lments par ordre ascendant ou descendant. Nous utilisons pour cela la mthode Sort. Exemple : Array.Sort(monTableau); De mme, pour inverser lordre de ces lments, la mthode statique Reverse de la classe Array nous le fait bien gentiment. Exemple : Array.Reverse(monTableau);

Foreach
Exemple : using System; class MainEntryPoint { static void Main() { string[] noms = new string[]{ "Nicolas", "Jean", "Fabrice", "Michel", "Maxime" }; Console.WriteLine("Avant le \"Reverse\""); foreach (string nom in noms) Console.WriteLine("Nom : " + nom); Console.ReadLine(); Array.Reverse(noms); Console.WriteLine("Aprs le \"Reverse\""); foreach (string nom in noms) Console.WriteLine("Nom : " + nom); Console.ReadLine(); } }

Cet exemple se passe de commentaires. Vous devriez tre capable, en excutant le programme ou mme en le dbuggant si besoin est, de comprendre ce qui sy passe. Ici, nous apprenons deux nouvelles choses : - il est possible de remplir un tableau en mme temps quil est dclar - foreach est une boucle mais cette boucle diffrente des autres rencontres jusqu prsent Commenons par la premire : string[] noms = new string[]{ "Nicolas", "Jean", "Fabrice", "Michel", "Maxime" }; Nous crons un tableau de chanes de caractres dont lidentifiant est nom, et, dans le mme temps, nous informons le compilateur que "Nicolas" doit occuper la 1ere case de ce tableau, "Jean" la seconde, "Fabrice" la troisime, etc. jusqu notre dernier prtendant, celui fixant la taille du tableau. Dans notre exemple, la taille du tableau est donc fixe 5. Cette technique de remplissage de tableau sapplique tous les types de tableaux (entiers, rel, etc.) de toutes dimensions. Exemples : //une matrice trois dimension, pas vident du premier coup int[, ,] valeurs = new int[2, 2, 2]{ { //1er item {100, 101}, //1er item du 1er item {110, 111} //2e item du 1er item }, { //2e item {200, 201}, //1er item du 2e item {210, 211} //2e item du 2e item } }; /*trois dimension, cela complique un peu quand mme, voyons un exemple plus comprhensible */ char[,] cars = new char[3, 3]{ //une matrice de 3 colonnes par 3 lignes {'a','z','e'}, //1ere ligne {'r','t','y'}, //2e ligne {'u','i','o'} //3e ligne }; Quoi quil en soit, la rgle est toujours la mme : les crochets contiennent la taille du tableau, ses dimensions les accolades contiennent ses items. Les items sont spars par des virgules. Vous ntes pas oblig de mentionner la taille du tableau lorsque vous le crez de cette manire, le compilateur se charge votre place de calculer le nombre ditems quil contient. Toutefois, si vous prcisez que ce tableau est une matrice, il faut respecter le fait quil doit comporter autant de ligne que de colonnes et ceux, dans toutes ses dimensions. De plus, les mots cls new <type> ne sont pas obligatoires lorsque le tableau est instanci de cette faon. Si vous prcisez les donnes que doit contenir le tableau, le compilateur se chargera pour vous de mettre convenablement en forme votre tableau ou matrice. Du coup, on peut rcrire notre liste de noms : string[] noms = { "Nicolas", "Jean", "Fabrice", "Michel", "Maxime" }; Une fois que la taille du tableau est fixe, celle-ci nest plus modifiable. Il faudra crer un nouveau tableau et y copier les donnes de lancien afin dagrandir ou de rtrcir loriginal.

Venons en maintenant au deuxime point : la boucle foreach Cette boucle permet de parcourir par itration une collection. Pour simplifier, on peut dire quune collection est un objet contenant dautres objets. Cest le cas de notre tableau de chanes de caractres noms. foreach se dplace dans noms et chaque itration, chaque objet rencontr dans cette variable, foreach retourne cet objet. Ici nous savons quil sagit dune chane de caractres string. Nous demandons donc ce que cet objet retourn, sous forme de string, soit stock dans la variable nom (sans s), pour pouvoir lexploiter. Exemple : int[] table; //Tableau d'entiers //On le remplie quelque part... //...et on affiche tout ce qu'il contient foreach (int Z in table) //Affichage de Z foreach (int Z in table) veut dire littralement : pour chaque entier Z dans table (qui est un tableau dentiers). Je pense que cette traduction devrait bien vous aider comprendre le fonctionnement de cette boucle. foreach est trs pratique, mais attention, il y a des restrictions. Il est en effet impossible daffecter une variable cre par cette boucle. Ainsi : foreach (int Z in table) Z = 10; est interdit. Ne comptez donc pas dessus pour remplir vos tableaux. Pensez y plutt lors quil sagira de les afficher

Exercice dapplication
Exercice 24 Crez un programme qui dcompose un nombre entr par lutilisateur en un produit de nombres premiers. Une proprit devra renvoyer le tableau dentiers en question. Ce tableau aura t rempli par une mthode se trouvant dans la mme classe. Ce programme aura laspect suivant : - lutilisateur entre un nombre (vitez den entrer un trop grand du style 100 chiffres) - la factorisation en nombres premiers de son nombre est affiche sous la forme monNombre = 2*3*5*7**N o N est le plus grand nombre premier de la multiplication. Aide : Utilisez une boucle for et/ou while commenant 2 et servant vous en pour effectuer la division euclidienne (% = modulo) du nombre. Si celle-ci renvoie 0, le nombre est divisible par le module en question et vous pouvez stocker le module et diviser le nombre par celui-ci. Noubliez pas de vrifier nouveau que le nombre nest plus divisible par ce mme module avant de lincrmenter. Exemple : Oula, compliqu ce quil dit. Voyons ceci avec un exemple : 10374 (que nous appellerons N) sous la forme dun algorithme qui ne mrite pas ce titre et qui nest pas termin (je vous laisse ce soin l). Dbut de la boucle N modulo 2 = 0 donc 2 divise N donc on stocke 2 dans la 1 ere case de notre tableau On divise N par 2 et on stocke la valeur dans N On recommence : N modulo 2 : est diffrent de 0, on passe Et on recommence avec 3, on refait tous les tests prcdents et puis on continue avec 4, 5, etc., jusqu ce que N soit gal 1 : cest fini, on sort de la boucle.

Astuce : Etant donn que la taille du tableau ne peut tre connu avant que celui-ci soit rempli, crez en un de taille suffisante, plus grand que ncessaire. Vous pourrez ensuite en crer un autre en purant le prcdant de toutes les cases contentant un 0 (tant vides).

Les tableaux multidimensionnels


Vous avez dj vu au dbut de ce chapitre comment crer des matrices. Les matrices sont des tableaux multidimensionnels particuliers car elles comportent autant de lignes, de colonnes dans chacune de leurs dimensions. Exemple de dclaration dune matrice : int[,] tableauEntiers = new int[4,4]; Les autres tableaux, ceux qui ne sont pas matriciels se crent de la mme manire que les tableaux unidimensionnels : chaque groupe de crochets reprsente une dimension. Syntaxe : <type>[][] tableau; Les signifient que vous pouvez placer autant de dimensions (de crochets) que vous le voulez. Si vous aviez le droit avec une matrice ou un tableau unidimensionnel de prciser la taille de chacune de leurs dimensions en mme temps que leur dclaration, cest bien parce que ces tableaux-ci sont des cas particuliers. Pour un tableau multidimensionnel classique , vous ne pouvez prciser la taille que de la 1 ere dimension. Pour les autres dimensions, il faudra le faire plus loin dans le code. Exemple : int[][] tableauEntiers = new int[4][]; tableauEntiers[0] = new int[10]; tableauEntiers[1] = new int[5]; tableauEntiers[2] = new int[4]; tableauEntiers[3] = new int[7]; Ce tableau peut donc se reprsenter comme ceci en fin de compte :

Par contre il est interdit de faire : int[][] tableauEntiers = new int[4][4]; Lavantage de ce genre de tableaux est que vous pouvez en tirez autant de sous tableaux que le dsirez. Voyons cela par un morceau de code : int[][] tableauEntiers = new int[5][]; //on remplie ce tableau foreach (int[] tableauNumOne in tableauEntiers) foreach (int valeur in tableauNumOne) //traitement

Il est possible de rpter ce schma pour les tableaux tridimensionnel, quadridimensionnels, etc. Autre exemple : int[][][][] tableauEntiers = new int[5][][][]; //on remplie ce tableau foreach (int[][][] tableauNumOne in tableauEntiers) foreach (int[][] tableauNumTwo in tableauNumOne) foreach (int[] tableauNumThree in tableauNumTwo) foreach (int valeur in tableauNumThree) //traitement Par contre, lorsquil sagit dune matrice, le traitement est diffrent : int[, ,] tableauEntiers = new int[5,5,5]; foreach (int valeur in tableauEntiers) //traitement Vous ne pourrez donc tirer aucun tableau dune matrice. Pour savoir combien de dimensions comporte un tableau, utilisez la proprit Rank. Exemple : int nombreDeDimensions = tableau.Rank; Pour connatre la taille dune des dimensions du tableau, servez vous de la mthode GetLength(int dimension). Exemple : int nombreDeDimensions = tableau.GetLength(3); /*donne la taille de la 4e dimension (on compte toujours partir de 0)*/

Exercices
Exercice 25 En vous basant sur lexercice 23, rcrire ce programme en y ajoutant quelques fonctions : - lorsque lutilisateur lance le programme, celui-ci lui demande combien dalbums il compte ajouter. Lutilisateur doit entrer un nombre qui servira dterminer la taille du tableau contenant les donnes. - le menu devra proposer deux nouveaux choix : celui de pouvoir accder directement aux informations dun album par lintermdiaire de son numro. Les donnes de cet album pourront tre soit modifies, soit simplement affiches (ce qui nous fait bien 2 items de plus dans notre menu). - lorsque lutilisateur entre les donnes (lien (1) de lancien menu), il devra entrer toutes les donnes et remplir donc intgralement le tableau ; il en va de mme lorsquil voudra les afficher (lien (2)). Vous devrez anticiper les ventuels bugs gnrs par lutilisateur. Aide : Passons en revue les problmes qui vous sont poss : - demande de valeur lutilisateur, en tenant compte des erreurs possibles (lutilisateur entre un mot ou une phrase par exemple). Pour remdier ce problme utiliser la fonction TryParse de la classe Int32. Un petite exemple : Int32.TryParse(maChaine, out monEntier); Noubliez pas le mot cl out, sans quoi vous aurez une erreur la compilation. - le menu, plus un problme pour vous maintenant Pensez bien crer une fonction part entire pour afficher le menu

un tableau contenant un certain nombre dalbums (dfinit par son nom et son artiste), ce nombre tant fix par lutilisateur ds le dbut du programme Cest ici quun problme plus srieux apparat. Dans lexercice 23 vous utilisiez deux champs diffrents dans une classe cre spcialement pour remplir le rle dalbum, et bien quil puisse paratre tentant de transformer ces champs, qui sont de simples variables, en tableaux, il ne faut pas, ce nest pas la bonne mthode. Revoyons le problme : tableau contenant un certain nombre dalbums . Si on suit ce qui est crit l, cela signifie que nous navons ni un tableau de noms dalbums, ni un tableau de noms dartistes, mais un tableau regroupant le tout : un tableau dalbums. Mais quest quun album ? Vous lavez dj dfinit dans lexercice 23 et depuis, un album na toujours pas chang. Il suffit donc de se dire que le nom de la classe reprsentant un album (que nous nommeront Album ici) est un type, et quon peut crer partir dun type un tableau contenant un certain nombre de fois ce genre de donnes. Par consquent un tableau dalbums aura la forme suivante : Album[] myAlbums; Le fonctionnement de tableaux de classes (ici la classe Album) est exactement le mme que celui des autres tableaux rencontrs auparavant. - le programme doit anticiper les entres utilisateurs errones. Pensez utilisez les conditions, les boolens et les boucles while. Exemple : tant que lutilisateur nentre pas un nombre, on lui redemande de Exercice 26 Ce programme-ci consiste calculer la moyenne dune classe. Il doit permettre lutilisateur de : - changer le nombre dlves (limit 10 lors du lancement du programme), la liste des anciens lves est alors supprime - rentrer toutes les notes de chaque lve (il peut y avoir plusieurs notes pour un seul lve) - changer les notes dun lve en particulier (il devra rentrer toutes les notes de celui-ci nouveau) - afficher la moyenne de la classe - afficher la moyenne de chaque lve, puis terminer par celle de la classe - afficher la moyenne dun lve en particulier - quitter le programme bien entendu Vous devrez grer les ventuelles erreurs provoques par lutilisateur et apporter une interface utilisateur conviviale (toujours sur la console) en utilisant des tableaux de notes ou autres Pensez bien dfinir, avant de commencer, ce quest un lve, une classe ( class) dans cet exercice et comment les implmenter. Vous tes libre de personnaliser ce programme du moment que les conditions tablies ci-dessus sont remplies. Aide : Une ligne dans la console fait 80 (caractres) de large. Remarques : Pour davantage de prcision, utilisez un type flottant pour les moyennes.

Projet

Introduction
Ce projet a pour but dattester que tous les points traits auparavant dans ce tutorial ont bien t acquis et que vous tes capable devant un problme donn, de le rsoudre et darriver crer le logiciel correspondant.

Conventions de nommage
Afin que votre projet soit lisible et facilement comprhensible par dautres programmeurs de la communaut C#, il faut respecter certaines conventions. Casse des noms : Dans la plupart des cas, utilisez la casse Pascal pour les noms. La casse Pascal signifie que la premire lettre de chaque nom est une majuscule : AfficherCustomer, SupprimerEmploye, AfficherEmployeSupprime. Vous remarquerez que les espaces de noms et les classes de bases du Framework respectent cette casse. Il est fortement dconseill de sparer les mots par des traits de soulignement (underscore) : Afficher_Customer est donc dconseill. Dans dautres langages, il tait habituel de nommer les constantes en utilisant seulement des majuscules. Ce nest pas conseill en C#, ces noms sont plus difficiles lires. Utilisez la casse Pascal : const int MaConstante; Soyez cohrents lorsque vous nommez vos mthodes, champs, classes Par exemple, ne fates pas EmployeAfficher et SupprimerEmploye mais plutt AfficherEmploye et SupprimerEmploye ou vice versa. Ou encore, fates AfficherErreurEmploye, AfficherErreurCustomer plutt que AfficherEmployeErreur et AfficherErreurCustomer. Etc. Une autre convention est galement utilise. Il sagit de la casse chameau que lon emploie dans les cas o les variables sont locales, prives. La casse chameau est quasiment identique la casse Pascal sauf que la premire lettre est une minuscule : public int AdditionStringFormat(string format, int a, int b); ou private string key; public string Key { get { return key; } }

Dans les autres cas, ceux o les variables sont publiques ou protges, la casse pascale sera utilise de prfrence. C# est sensible la casse. Par consquent variable est diffrent de Variable ou encore de VARIABLE mais noubliez pas que votre assemblage (votre code) peut tre appel par dautres langages comme VB.NET. Or VB.NET nest pas sensible la casse. Par consquent en VB. NET, variable, Variable ou VARIABLE sont identiques. Prenez donc bien soin de ne pas rendre accessible hors de lassemblage des variables dont les identifiants ne diffrent que par la casse. Dans lexemple prcdant key est priv et nest donc pas accessible hors de lassemblage, seul Key le sera.

Projet
Prambule : Vous aurez besoin dans ce projet dutiliser certaines classes que vous navez jusqualors jamais utilises. Cest comme . Vous ne pourrez, de toute faon, probablement jamais connatre lintgralit des classes proposes par C#, ni comment les utiliser, tellement il y en a. Cependant, vous avez votre disposition le merveilleux outil quest Internet et tout ce quil offre par la mme occasion. Vous pourrez notamment trouver de laide sur le site de MSDN (Microsoft Developer Network) ddi la programmation dans la partie Library (bibliothque) ou encore, si vous utilisez Visual Studio, cette aide est disponible directement depuis lEDI en cliquant sur lun des liens proposs par le menu daide. Laide propose par MSDN devrait vous permettre de trouver rponses vos questions si vous cherchez correctement. Cependant si vous ne trouvez pas ce que vous cherchez sur MSDN, alors vous pourrez toujours aller rechercher (ou poster si besoin est) sur les nombreux forums de programmation disponibles sur internet. Projet : Le projet ici est trs simple : raliser un logiciel permettant de lister ses DVD. Ce logiciel sera accessible uniquement par la console. Le menu doit proposer les liens suivants : - Ajouter un DVD - Editer un DVD - Supprimer un DVD - Afficher la liste complte - Rechercher un DVD - Rinitialiser la liste - Enregistrer la liste - Ouvrir une liste Un DVD est dcrit par : - une cl, unique pour chaque DVD - un nom, le titre du DVD - un ralisateur (son nom) - une petite liste des acteurs principaux - un ou des genres Pour diter ou supprimer un DVD, il faudra obligatoirement utiliser sa cl, le dsignant ainsi avec certitude. Laffichage de la liste complte doit tre le plus compact possible tout en restant clair. Celui-ci doit prendre un minimum de place.

La recherche dun DVD propose lutilisateur dentrer un nom de DVD. Celui-ci peut entrer le nom exact ou simplement les premires lettres. Quoi quil en soit, lorsquil valide, la liste des DVD - dont les titres commencent ou correspondent avec ce quil a entr - doit safficher. Rinitialiser la liste signifie la remettre zro (reset), la liste est donc vide. Les fonctions enregistrer et ouvrir demandent lutilisateur dentrer le chemin complet du fichier dans lequel il veut enregistrer sa liste et la liste est ensuite soit charge, soit sauve suivant un algorithme personnel (lintrt ici nest pas de crer le meilleur algorithme possible mais simplement denregistrer la liste pour pouvoir la rcuprer plus tard). Partie codeur : Une seule classe devra soccuper de linterface graphique (limite ici la console). La ou les autres classes ncessaires nauront donc aucun appel de dessin dans la console faire. Cela permettra de rutiliser facilement votre code par la suite pour dvelopper, par exemple, une interface plus pousse. Ce qui a t trait dans ce tutorial est suffisant pour raliser ce programme except au sujet de quelques classes qui vous seront nouvelles. Cependant, une bonne conception, pratique et facilement rutilisable, peut ncessiter des connaissances plus pousses dans certains domaines du langage. Fates au mieux. Vous pouvez bien sur vous documenter pour amliorer la conception du logiciel. Vous naurez pas le droit dutiliser lespace de nom System.Collections ni ses nuds sous-jacents. Autrement dit, la classe ArrayList, les Generics ou tout autre classe appartenant ces espaces de noms sont interdit ici. Il en va de mme pour lespace de nom System.Data. La classe Array est galement interdite. Vous navez pas non plus le droit dutiliser XML pour sauvegarder. Remarques : - Vous pourrez (et mme devrez) sparer vos diffrentes classes dans diffrents fichiers. - Vous tes totalement libre en ce qui concerne laffichage dans la console. A vous de voir ce qui vous plait le mieux. Vous pouvez galement perfectionner ce petit programme. Par exemple en ajoutant des options dans le mode recherche, en ajoutant de nouveaux liens dans le menu principal, etc. Ne perdez cependant pas de vue que ce programme est cens pouvoir tre remis entre les mains dun simple utilisateur de votre PC et que par consquent, ce logiciel doit rester le plus clair et le plus facile dutilisation possible. - Une fois que vous penser avoir termin ce projet, fermez Visual Studio et lancez directement votre application comme un utilisateur normal et regardez alors si tout se prsente et fonctionne comme prvu. - Pour info pratique : la console peut loger 80 caractres en tout sur sa largeur.

Pour aller plus loin


Rcrivez ce programme en utilisant la classe System.Collections.ArrayList. Crez vos propres espaces de noms pour ce programme. Rcrivez ce programme en utilisant les Generics. Un peu plus difficile : Optimisez votre code afin den minimiser la quantit (surcharge de mthodes, rutilisation du code, etc.).

Bonne prog !

Das könnte Ihnen auch gefallen