IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Avis programme C# [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Août 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 14
    Par défaut Avis programme C#
    Bonjour tout le monde,

    j'ai crée un programme et j'aimerais avoir votre avis, si je pourrais améliorer des trucs/simplifier etc... Voici le programme: (str, i, dbl, ... = prof qui oblige)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Roulette
    {
        class Program
        {
            const string NOM_PROG = "Roulette";
            const string VERSION = "1.0.1";
            const int NB_MIN = 0;
            const int NB_MAX = 10;
            const int SOLDE = 1000;
            const int SOLDE_MIN = 1;
            static void Main(string[] args)
            {
                int iSolde = 1000, iSoldeMiser, iNombre, iNombreTire;
                int compteur;
                for (compteur = 0; compteur < 50; compteur++)
                {
                    Random r = new Random();
                    iNombreTire = r.Next(NB_MAX + 1);
     
                    Console.Write(" ----------------------------------------\n| Bienvenue dans {0} version {1}  |\n ----------------------------------------\n", NOM_PROG, VERSION);
                    if (iSolde < 0)
                    {
                        iSolde *= -1;
                    }
                    Console.WriteLine("Votre solde est de {0}.-", iSolde);
                    Console.WriteLine("Entrer un nombre entre {0} et {1}", NB_MIN, NB_MAX);
                    iNombre = Convert.ToInt32(Console.ReadLine());
                    while (!(iNombre <= NB_MAX && iNombre >= NB_MIN))
                    {
                        if (iNombre >= NB_MAX | iNombre <= 0)
                        {
                            Console.WriteLine("Le nombre entré n'est pas valide");
                            iNombre = Convert.ToInt32(Console.ReadLine());
                        }
                    }
                    Console.WriteLine("Entrer le montant que vous voulez miser entre 1 et {0}", iSolde);
                    iSoldeMiser = Convert.ToInt32(Console.ReadLine());
                    while (!(iSoldeMiser <= iSolde && iSoldeMiser >= SOLDE_MIN))
                    {
                        if (!(iSoldeMiser >= iSolde && iSoldeMiser <= SOLDE_MIN))
                        {
                            Console.WriteLine("Le nombre entré n'est pas valide");
                            iSoldeMiser = Convert.ToInt32(Console.ReadLine());
                        }
                    }
     
                    if (iNombre == iNombreTire)
                    {
                        Console.WriteLine("Bravo, vous avez gagné {0}.- !!", iSoldeMiser * 10);
                        iSolde = iSoldeMiser * 10 + iSolde - iSoldeMiser;
                    }
                    else
                    {
                        Console.WriteLine("Vous avez perdu {0}.- !!, le nombre était {1}", iSoldeMiser, iNombreTire);
                        iSolde = iSoldeMiser - iSolde;
                    }
                    if (iSolde != 0)
                    {
                        Console.WriteLine("Voulez-vous rejouer ? o/n");
                        Console.ReadKey();
                        Console.Clear();
                    }
                    else
                    {
                        Console.WriteLine("Vous avez tout perdu. Au revoir");
                        Console.WriteLine("\nPresser une touche pour terminer le programme ... ");
                        Console.ReadKey();
                        return;
                    }
                }
            }
        }
    }

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonsoir,

    Alors :

    Tes if dans les while sont inutiles , tu peux très bien faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                    while (!(iNombre <= NB_MAX && iNombre >= NB_MIN))
                    {
                            Console.WriteLine("Le nombre entré n'est pas valide");
                            iNombre = Convert.ToInt32(Console.ReadLine());
                    }
     
                    Console.WriteLine("Entrer le montant que vous voulez miser entre 1 et {0}", iSolde);
                    iSoldeMiser = Convert.ToInt32(Console.ReadLine());
     
                    while (!(iSoldeMiser <= iSolde && iSoldeMiser >= SOLDE_MIN))
                    {
                            Console.WriteLine("Le nombre entré n'est pas valide");
                            iSoldeMiser = Convert.ToInt32(Console.ReadLine());
                    }
    Sinon a part ça , ça va.

    Juste des petites choses , du genre , le choix de ne pas rejouer n'est pas pris en compte et la variable SOLDE ne sert a rien.

    Aussi , bon dans ton cas ce n'est pas grave du tout mais il faut faire gaffe et prendre de bonnes habitudes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                for (compteur = 0; compteur < 50; compteur++)
                {
                    Random r = new Random();
    Cela peut être extrêmement problématique si tu instancie a chaque tour de boucle un nouveau Random.Autant le remonté un peu plus haut (hors de la boucle), ca marchera tout aussi bien

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Mes remarques dans le code :

    Citation Envoyé par iCaRBon_Gold Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Roulette
    {
        class Program
        {
            // NOM_PROG et VERSION sont des éléments qu'on trouve dans le fichier généré automatiquement par Visual Studio "Assembly.cs".
            // Il vaut mieux se servir de ce qui est offert en standard. Mais bon, après ça peut venir du prof donc on va pas chipoter.
            const string NOM_PROG = "Roulette";
            const string VERSION = "1.0.1";
     
            // Là, y'a des jolies constantes... En général, ça sert à éviter les "MagicNumbers" dans le code...
            const int NB_MIN = 0;
            const int NB_MAX = 10;
            const int SOLDE = 1000;
            const int SOLDE_MIN = 1;
            static void Main(string[] args)
            {
                // Alors il sort d'où ce MagicNumber ? Utilise la constante SOLDE à la place.
                int iSolde = 1000, iSoldeMiser, iNombre, iNombreTire;
                int compteur;
                // Encore un MagicNumber, c'est quoi ce 50 ?
                for (compteur = 0; compteur < 50; compteur++)
                {
                    // Si tu redéclare Random() à chaque itération, tu vas générer toujours les mêmes séries de nombres aléatoires. Il y a mieux comme aléatoire...
                    Random r = new Random();
                    // Ok, et si NB_MIN passe à 1 ? Utilise r.Next(NB_MIN, NB_MAX + 1) à la place.
                    iNombreTire = r.Next(NB_MAX + 1);
     
                    Console.Write(" ----------------------------------------\n| Bienvenue dans {0} version {1}  |\n ----------------------------------------\n", NOM_PROG, VERSION);
                    // Euh... Si j'ai une dette, la banque, non seulement me l'efface, mais m'offre la valeur absolue de ma dette ?
                    if (iSolde < 0)
                    {
                        iSolde *= -1;
                    }
                    // Accessoirement, pour gérer de la monnaie avec la bonne locale, on peut utiliser {0:C}
                    Console.WriteLine("Votre solde est de {0}.-", iSolde);
                    Console.WriteLine("Entrer un nombre entre {0} et {1}", NB_MIN, NB_MAX);
                    // Si je tapes "toto va à la plage", il se passe quoi ? Utilise plutôt int.TryParse()
                    iNombre = Convert.ToInt32(Console.ReadLine());
                    while (!(iNombre <= NB_MAX && iNombre >= NB_MIN))
                    {
                        // Euh... C'est quoi ce if ? Et ce MagicNumber ? Mauvais copier/coller de l'écran de ton voisin, non ? Accessoirement, le OU LOGIQUE c'est || pas | qui est le OU BINAIRE et qui fait pas trop la même chose...
                        if (iNombre >= NB_MAX | iNombre <= 0)
                        {
                            Console.WriteLine("Le nombre entré n'est pas valide");
                            // int.TryParse()
                            iNombre = Convert.ToInt32(Console.ReadLine());
                        }
                    }
                    Console.WriteLine("Entrer le montant que vous voulez miser entre 1 et {0}", iSolde);
                    // int.TryParse()
                    iSoldeMiser = Convert.ToInt32(Console.ReadLine());
                    while (!(iSoldeMiser <= iSolde && iSoldeMiser >= SOLDE_MIN))
                    {
                        // Et donc le if il sert à quoi ?
                        if (!(iSoldeMiser >= iSolde && iSoldeMiser <= SOLDE_MIN))
                        {
                            Console.WriteLine("Le nombre entré n'est pas valide");
                            // int.TryParse()
                            iSoldeMiser = Convert.ToInt32(Console.ReadLine());
                        }
                    }
     
                    // Juste comme ça, parce que moi j'aime bien faire les choses dans l'ordre : on choisi un nombre PUIS on lance la roulette. Pas l'inverse. Donc le r.Next(int, int) devrait ête lancé ici et non en début de boucle.
                    if (iNombre == iNombreTire)
                    {
                        // Pourquoi faire deux-fois le même calcul quand on peut passer par une variable intermédiaire "iGain" ?
                        Console.WriteLine("Bravo, vous avez gagné {0}.- !!", iSoldeMiser * 10);
                        iSolde = iSoldeMiser * 10 + iSolde - iSoldeMiser;
                    }
                    else
                    {
                        Console.WriteLine("Vous avez perdu {0}.- !!, le nombre était {1}", iSoldeMiser, iNombreTire);
                        // Ah, ok, j'ai compris le coup de la dette... t'as pas l'impression qu'elle est à l'envers ta soustraction ? et -= c'est pour les chèvres ?
                        iSolde = iSoldeMiser - iSolde;
                    }
                    // Perso, je préfère un test sur > 0 car on sait jamais... Mais bon, vu le bug 2 lignes plus haut, je comprends ton test...
                    if (iSolde != 0)
                    {
                        // Alors, je répond "n", et... bah faut jouer quand même ? Et si je tapes "x" ?
                        Console.WriteLine("Voulez-vous rejouer ? o/n");
                        Console.ReadKey();
                        Console.Clear();
                    }
                    else
                    {
                        Console.WriteLine("Vous avez tout perdu. Au revoir");
                        Console.WriteLine("\nPresser une touche pour terminer le programme ... ");
                        Console.ReadKey();
                        return;
                    }
                }
            }
        }
    }
    Bon, sinon, sorti de ça, ça à l'air de marchouiller un peu, c'est déjà pas mal

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    J'oubliais... Et niveau using... Si tu laisses que System comme référence, ça doit suffit...

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Août 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 14
    Par défaut
    Merci pour tes conseils.. Je vais mieux étudier tout ça ce soir. J'ai fait quelque truc bizarre parce que a la base on était juste censé dire si on gagné ou perdu. Les while /for j'ai essayé plusieurs truc et quand j'ai réussi j'ai préféré ne plus y toucher... En tout cas merci!
    Citation Envoyé par StringBuilder Voir le message
    J'oubliais... Et niveau using... Si tu laisses que System comme référence, ça doit suffit...

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Août 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 14
    Par défaut
    Ah et j'ai une question sur la boucle for. Est-ce qu'on peut faire une boucle qui ne s'arrête jamais ? Il faut mettre quoi à la place du < 50 ?
    Merci d'avance

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Plusieurs solutions :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    while (true)
    {
         // DoSomething
         if (sortir)
         {
              break;
         }
    }
     
    for (;;)
    {
         // DoSomething
         if (sortir)
         {
              break;
         }
    }
     
    for (int i = 0; true; i++)
    {
         // DoSomething
         if (sortir)
         {
              break;
         }
    }
     
    // Mais la solution propre (et de loin, les autres devraient te valoir un zéro pointé si le prof est exigeant)
    bool bContinuerAJouer = true;
    while (bContinuerAJouer)
    {
         // DoSomething
         if (sortie)
         {
              bContinuerAJouer = false;
         }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Avis programme Java
    Par -The_Reaper- dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 20/09/2010, 15h30
  2. Avis : Programmation avec jbuilder
    Par makker73 dans le forum JBuilder
    Réponses: 2
    Dernier message: 15/12/2009, 12h38
  3. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12
  4. Avis programmation Servlet/JSP
    Par Seth77 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 08/08/2006, 18h20
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo