• Aucun résultat trouvé

Et voici un nouveau TP qui va nous permettre de récapituler un peu tout ce que nous avons vu.

Au programme, des if, des switch, des méthodes, des boucles et... de la ligne de commande bien sûr !

Grâce à nos connaissances grandissantes, nous arrivons à augmenter la difficulté de nos exercices et c'est une bonne chose. Vous verrez que dans le moindre petit programme, vous aurez besoin de toutes les notions que nous avons apprises. Allez, ne traînons pas trop et à vous de jouer travailler.

Instructions pour réaliser le TP

L’objectif de ce TP est de réaliser un petit programme qui permet d’effectuer une opération mathématique à partir de la ligne de commande.

Il va donc falloir écrire un programme que l'on pourra appeler avec des paramètres. En imaginant que le programme s'appelle « MonProgramme », on pourrait l'utiliser ainsi pour faire la somme de deux nombres :

MonProgramme somme 2 5

Ce qui renverra bien sûr 7.

Pour effectuer une multiplication, nous pourrons faire :

MonProgramme multiplication 2 5

et nous obtiendrons 10.

Enfin, pour calculer une moyenne, nous pourrons faire :

MonProgramme moyenne 1 2 3 4 5

ce qui renverra 3.

Les règles sont les suivantes :

Il doit y avoir 2 et seulement 2 nombres composant l’addition et la multiplication La moyenne peut contenir autant de nombres que souhaité

Si le nombre de paramètres est incorrect, alors le programme affichera un message d’aide explicite Si le nombre attendu n’est pas un double correct, on affichera le message d’aide

Plutôt simple non ?

Alors, à vous de jouer, il n’y a pas de subtilité.

Correction

STOP.

Je relève les copies.

J’ai dit qu’il n’y avait pas de subtilité, mais j’ai un peu menti en fait. J’avoue, c’était pour que vous alliez au bout du développement sans aide.

Pour vérifier que vous avez trouvé la subtilité, essayez votre programme avec les paramètres suivants :

MonProgramme addition 5,5 2,5

Obtenez-vous 8 ?

C’était à peu près la seule subtilité, il fallait juste savoir qu’un nombre à virgule s’écrivait avec une virgule plutôt qu’avec un point. Si nous écrivons 2.5, alors le C# ne sait pas faire la conversion.

En vrai, c’est un peu plus compliqué que ça et nous le verrons dans un prochain chapitre, mais l’écriture du nombre à virgule est dépendant de ce qu’on appelle la culture courante que l’on peut modifier dans les paramètres « horloge, langue et région » du panneau de configuration de Windows. Si l’on change le « format de la date, de l’heure ou des nombres » on change la culture courante, et la façon dont les nombres à virgules (et autres) sont gérés est différente. Nous en reparlerons plus précisément dans un chapitre ultérieur.

Quoiqu'il en soit, voici ma correction du TP : Code : C#

static void Main(string[] args) { if (args.Length == 0) { AfficherAide(); } else {

string operateur = args[0]; switch (operateur) { case "addition": Addition(args); break; case "multiplication": Multiplication(args); break; case "moyenne": Moyenne(args); break; default: AfficherAide(); break; } } }

static void AfficherAide() {

Console.WriteLine("Utilisez l'application de la manière suivante :");

Console.WriteLine("MonProgamme addition 2 5");

Console.WriteLine("MonProgamme multiplication 2 5"); Console.WriteLine("MonProgamme moyenne 2 5 10 11"); }

static void Addition(string[] args) { if (args.Length != 3) { AfficherAide(); } else { double somme = 0;

for (int i = 1; i < args.Length; i++) {

double valeur;

if (!double.TryParse(args[i], out valeur)) { AfficherAide(); return; } somme += valeur; }

Console.WriteLine("Résultat de l'addition : " + somme); }

}

static void Multiplication(string[] args) {

} else

{

double resultat = 1;

for (int i = 1; i < args.Length; i++) {

double valeur;

if (!double.TryParse(args[i], out valeur)) { AfficherAide(); return; } resultat *= valeur; } Console.WriteLine("Résultat de la multiplication : " + resultat); } }

static void Moyenne(string[] args) {

double total = 0;

for (int i = 1; i < args.Length; i++) {

double valeur;

if (!double.TryParse(args[i], out valeur)) { AfficherAide(); return; } total += valeur; }

total = total / (args.Length - 1);

Console.WriteLine("Résultat de la moyenne : " + total); }

Disons que c’est plus long que difficile...

Oui je sais, lors de l’addition et de la multiplication, j’ai parcouru l’ensemble des paramètres alors que j’aurais pu utiliser uniquement args[1] et args[2]. L’avantage c’est que si je supprime la condition sur le nombre de paramètres, alors mon addition pourra fonctionner avec autant de nombres que je le souhaite… Vous aurez remarqué que je commence mon parcours à l’indice 1, d’où la pertinence de l’utilisation de la boucle for plutôt que la boucle foreach.

Notez quand même l’utilisation du mot clé return afin de sortir prématurément de la méthode en cas de problème. Évidemment, il y a plein de façons de réaliser ce TP, la mienne en est une, il y en a d'autres.

J’espère que vous aurez fait attention au calcul de la moyenne. Nous retirons 1 à la longueur du tableau pour obtenir le nombre de paramètres. Il faut donc faire attention à l’ordre des parenthèses afin que le C# fasse d'abord la soustraction avant la division, alors que sans ça, la division est prioritaire à la soustraction.

Sinon, c'est l'erreur de calcul assurée, indigne de notre superbe application.

Aller plus loin

Ce code est très bien. Sisi, c'est moi qui l'ai fait .

Sauf qu'il y a quand même un petit problème ... d'ordre architectural.

Il a été plutôt simple à écrire en suivant l'énoncé du TP mais on peut faire encore mieux. On peut le rendre plus facilement maintenable en le ré-architecturant différemment.

Observez le code suivant : Code : C#

static void Main(string[] args) {

bool ok = false; if (args.Length > 0) {

string operateur = args[0]; switch (operateur) { case "addition": ok = Addition(args); break; case "multiplication": ok = Multiplication(args); break; case "moyenne": ok = Moyenne(args); break; } } if (!ok) AfficherAide(); }

static void AfficherAide() {

Console.WriteLine("Utilisez l'application de la manière suivante :");

Console.WriteLine("MonProgamme addition 2 5");

Console.WriteLine("MonProgamme multiplication 2 5"); Console.WriteLine("MonProgamme moyenne 2 5 10 11"); }

static bool Addition(string[] args) {

if (args.Length != 3) return false; double somme = 0;

for (int i = 1; i < args.Length; i++) {

double valeur;

if (!double.TryParse(args[i], out valeur)) return false;

somme += valeur; }

Console.WriteLine("Résultat de l'addition : " + somme); return true;

}

static bool Multiplication(string[] args) {

if (args.Length != 3) return false; double resultat = 1;

for (int i = 1; i < args.Length; i++) {

double valeur;

if (!double.TryParse(args[i], out valeur)) return false; resultat *= valeur; } Console.WriteLine("Résultat de la multiplication : " + resultat); return true; }

{

double total = 0;

for (int i = 1; i < args.Length; i++) {

double valeur;

if (!double.TryParse(args[i], out valeur)) return false;

total += valeur; }

total = total / (args.Length - 1);

Console.WriteLine("Résultat de la moyenne : " + total); return true;

}

Nous n'affichons l'aide plus qu'à un seul endroit en utilisant le fait que les méthodes renvoient un booléen indiquant si l'opération a été possible ou pas.

D'une manière générale, il est important d'essayer de rendre son code le plus maintenable possible, comme nous l'avons fait ici. Voilà, j'espère que vous aurez réussi ce TP.

Vous pouvez bien sûr compléter notre calculatrice élémentaire en y rajoutant des notions plus compliquées, comme la racine carrée ou la mise à la puissance. À ce propos, comme les méthodes Math.Sqrt() ou Math.Pow(), il existe de nombreuses méthodes permettant de faire des opérations de toutes sortes. Vous pouvez les consulter à cette adresse dans la documentation en ligne. (oui, je suis d'accord, ce n'est pas tous les jours que nous aurons envie de calculer la tangente hyperbolique d'un angle ... mais sait-on jamais ).

En tous cas, n'hésitez pas à faire des variations sur les différents TP que je vous ai proposés, il est toujours intéressant de sortir des sentiers battus.

Voilà pour cette partie.

Non, nous ne savons pas encore tout, loin de là !

Nous avons simplement continué à plonger dans les bases du C#. Grâce à cette partie, vous avez pu commencer à faire des programmes un peu plus rigolos en lisant les saisies utilisateurs à partir du clavier. Vous avez également pu mettre un premier pas dans le monde très important des conversions entre les types.

Bien sûr, vous devez impérativement essayer d'en créer d'autres. Plus vous pratiquerez et plus vous deviendrez à l'aise avec les différents concepts.

N'hésitez pas à chercher des informations dans la documentation en ligne si besoin. Il y a beaucoup de ressources sur internet, votre curiosité pourrait vous amener à découvrir des bonnes surprises...

Dans la prochaine partie, nous continuerons à étudier la syntaxe du C# et nous découvrirons le C# comme un langage orienté objet.

C'est une très vaste partie avec pas mal de théorie.

Partie 3 : Le C#, un langage orienté objet

Bienvenue dans cette nouvelle partie. Dans les précédentes, vous avez pu découvrir les bases du C#. Nous avons vu beaucoup de choses, mais finalement, nous avons volontairement éclipsé une très grosse notion liée au développement en C#, à savoir que le C# est un langage orienté objet.

Dans cette partie, nous allons découvrir ce qu’est l’orienté objet puis nous allons voir comment utiliser le C# dans cette optique. Il est important avant de continuer d’avoir bien compris le début du tutoriel et de s’être entraîné afin de ne pas se laisser dérouter par les notions que nous avons vues et de se concentrer sur l’essentiel de cette partie.

Bon courage et bonne lecture .