Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'Aide Code

    6 septembre 2019 à 15:54:37

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApp5
    {
    class Program
    {
    private static void DisplaySet(HashSet<int> set) /// fonction affichant les chiffres
    {
    Console.Write("{");
    foreach (int i in set)
    {
    Console.Write(" {0}", i);
    }
    Console.WriteLine(" }");
    }
    static void Main(string[] args)
    {

    var a = new Random() ;
    HashSet<int> M_3 = new HashSet<int>();


    for (int i = 0; i < 7; i++)
    {


    M_3.Add(a.Next(1, 49));

    }
    Console.WriteLine(M_3.Count);
    DisplaySet(M_3);


    }
    }

    }

    Bonjour a tous et a toutes , je vien vous demander de l'aide sur ce petit bout de programme
    j'effectue actuellement le tutoriel de C# qui demande d'afficher les chiffre gagnant du loto,
    soit 7 chiffre entre 1 et 49 .
    J'ai du fouiller de partout sur la documentation de microsoft pour trouver les 3/4 du code,
    peut etre que je manque de logique ( merci de m'indiquer les autre voix possible pour atteindre
    le but de l'exercice).

    Le probleme avec ce code , c'est qu'il m'affiche parfois une suite de 5 ou 6 chiffre ,
    en general lorsque je le lance la premiere fois la suite de 7 chiffre s'affiche , puis si je
    relance le programme , il m'affiche que 6 ou 5 ( pas vu autre chose sur 10/15 essaie).
    J'aurais voulu savoir d'ou cela pouvait il venir ? les cache memoire ?

    Et si quelque ame bienveiante ,orthographiquement clémente, pouvait m'éclairer sur
    les erreurs que j'ai pu faire et les incompréhension des méthode/objet utilisé

    Je vous en remercie .


    -
    Edité par xexo 6 septembre 2019 à 16:03:28

    • Partager sur Facebook
    • Partager sur Twitter
      6 septembre 2019 à 16:28:02

      A droite les outputs.
      A votre avis ??
      Une fois que vous aurez trouvé : MSDN - HashSet<T>
      Je vous conseille de lire les remarques.

      -
      Edité par LilyKianii 6 septembre 2019 à 16:28:39

      • Partager sur Facebook
      • Partager sur Twitter
        6 septembre 2019 à 16:40:24

        Salut,

        Le problème avec la notion de "set", c'est que les différentes valeurs doivent obligatoirement être uniques lors de l'ajout d'un élément : Si une valeur existe déjà et que l'on essaye de la rajouter "une deuxième fois" (ou une troisième ou une enième fois), elle ne sera pas ajoutée, parce qu'elle existe justement déjà.

        Le problème avec les générateurs aléatoires, c'est que ce n'est pas du "vrai" aléatoire, comme celui que tu obtiens lorsque tu mélange un jeu de cartes, et que tu ne remet pas la carte tirée dans le tas par exemple (ce que l'on appelle un "tirage sans remise") : c'est ce que l'on appelle du "pseudo aléatoire", dans le sens où les valeurs sont obtenues sur base d'une "suite logique" (qui n'a -- forcément -- absolument rien d'aléatoire, vu que générée par un ordinateur) initialisée à l'aide d'une "graine" particulière.

        Il se peut donc, lorsque l'on demande "un certain nombre de valeurs" dans un intervalle "relativement réduit" au générateur aléatoire, que l'on obtienne ... plusieurs fois la même valeur, parce qu'ils effectuent ce que l'on appelle un "tirage avec remise": à chaque tirage, chaque valeur présente la même probabilité de sortir que toutes les autres. (cf le paradoxe des anniversaires).

        Quand on prend ces deux problèmes ensemble, on se rend compte que, si l'on ajoute à un set les valeurs obtenues par "un certain nombre" de tirages, comme il se peut que une ou plusieurs valeurs "sortent" plusieurs fois, il n'y a "rien de bien anormal" au fait que l'on se retrouve avec un set qui ne contienne pas un nombre de valeurs correspondant au nombre de tirages effectués.

        Si ton but est d'obtenir un nombre bien déterminé de valeurs aléatoires, tu ne dois donc pas baser ta logique sur le nombre de tirages effectués, mais bien sur ... le nombre de valeurs différentes que tu as effectivement obtenues; par exemple, sur le nombre de valeurs que contient ton set ;)

        • Partager sur Facebook
        • Partager sur Twitter
        Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
          6 septembre 2019 à 16:40:36

          merci pour le lien je lis les remarque , le morceau de code a l'air de fonctionner a merveille , je vous remercie .
          • Partager sur Facebook
          • Partager sur Twitter
            6 septembre 2019 à 16:51:02

            xexo a écrit:

            merci pour le lien je lis les remarque , le morceau de code a l'air de fonctionner a merveille , je vous remercie .

            Lisez les remarques d'abord !!! Grrrr

            • Partager sur Facebook
            • Partager sur Twitter
              6 septembre 2019 à 16:51:44

              private static void DisplaySet(HashSet<int> set) /// fonction affichant les chiffres
                      {
                          Console.Write("{");
                          foreach (int i in set)
                          {
                              Console.Write(" {0}", i);
                          }
                          Console.WriteLine(" }");
                      }
                      static void Main(string[] args)
                      {

                          var a = new Random();
                          HashSet<int> M_3 = new HashSet<int>();


                          for (int i = 0; i < 100; i++)
                          {


                              M_3.Add(a.Next(1, 49));

              LIgne EXTRA           if (M_3.Count >= 7)
                                             break;

                          }
                          Console.WriteLine(M_3.Count);
                          DisplaySet(M_3);
                         }

              J'ai rajouter la ligne EXTRA avec l'instruction break , apres une dizaine d'essaie on dirait que le probleme est resolu , mais comme tu fait part d'une notion importante a laquel mon cerveau n'aurait jamais penser tout seul , ce code est il vraiment correct ou ce peut il que parfois certain chiffre ne s'ajoute pas ?

              PS = il m'est arriver d'avoir plusieurs fois le meme chiffre dans le HASHSET ( fonction que j'ai trouver sur GOOGLE par la recherche " suprimer doublon tableau ...") deux chiffre peuvent ils avoir une valeur differente ?? j'ai cru comprendre que le HASHSET etait un tableau sans doublon .

              Je vous remercie encore tout les deux pour vos explications .

              PS(for lily)= c'est dur de quitter l'IDE ^^ .

              -
              Edité par xexo 6 septembre 2019 à 16:52:58

              • Partager sur Facebook
              • Partager sur Twitter
                6 septembre 2019 à 17:02:52

                xexo a écrit:

                J'ai rajouter la ligne EXTRA avec l'instruction break , apres une dizaine d'essaie on dirait que le probleme est resolu , mais comme tu fait part d'une notion importante a laquel mon cerveau n'aurait jamais penser tout seul , ce code est il vraiment correct ou ce peut il que parfois certain chiffre ne s'ajoute pas ?

                On ne peut pas vraiment dire que le problème est résolu...

                Imaginez que vous tombiez 100 fois sur la même valeur ??

                -
                Edité par LilyKianii 6 septembre 2019 à 17:05:07

                • Partager sur Facebook
                • Partager sur Twitter
                  6 septembre 2019 à 17:03:51

                  Je tiens a préciser que le tuto que je suis actuellement n'a pas abordé la notion d'objet et certaine notion du site microsoft sont assez abstraite pour moi encore , la notion d'objet , collection ... je crois meme pas que le cour est cité une fois le mot array pour l'instant , ce qui rend la lecture de ces texte assez compliquer .Le peu que j'ai compris et que cette ENSEMBLE n'est pas trié ? donc pas de possibilité d'y acceder par M_3[]?

                              exemple : "" La HashSet<T> classe est basée sur le modèle de jeux mathématiques et fournit des opérations de jeu de performances élevées similaires à l’accès aux clés Dictionary<TKey,TValue> des Hashtable collections ou. En termes simples, la HashSet<T> classe peut être considérée comme une Dictionary<TKey,TValue> collection sans valeurs.""

                  Je me suis peut etre trop avancer a chercher des fonctions qui ferait tout pour moi alors que l'exercice me demande de le réaliser autrement IDK .

                  PS lily = je ne plus envoyer de mess pour 24 H , j'ai deja taper le (1,5) , merci me voila encore dans de beau drap =) sa me laisse 24h pour comprendre qu'est-ce qui se passe et lire les remarque tranquillement .

                  -
                  Edité par xexo 6 septembre 2019 à 17:10:33

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 septembre 2019 à 17:20:40

                    Ce que vous citez soulève des contraintes auxquelles vous n'êtes pas (ne devriez pas) être soumis pour le moment.

                    Ce qu'il faut retenir de HashSet, c'est que chaque valeur contenue doit être unique.

                    Ce que nous retenons aussi de l'intervention de Koala, c'est que chaque numéro peut sortir plusieurs fois d'un tirage sur l'autre. Vous voyez le loto avec les bouboules à la télé ? Dans notre cas, à chaque fois que vous tirez un numéro, vous remettez la boule dedans.

                    Maintenant mixons les deux !
                    Imaginons que sur un tirage malchanceux, vous tiriez 100 fois la même boule : Vous n'aurez jamais qu'une seule valeur dans votre HashSet...

                    -
                    Edité par LilyKianii 6 septembre 2019 à 17:21:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 septembre 2019 à 17:24:37

                      c'est trop tard lily j'ai deja taper la ligne que vous avez effacer ^^ , je suis perdu mais je vais trouver pourquoi sa fait sa

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 septembre 2019 à 17:26:48

                        Bon, ça sent l'exercice de base du C d'il a 40 ans qui pue la naphtaline.

                        Pour faire ce genre d'exercice CORRECTEMENT en C#, il faut pas mal de notion avant de commencer.

                        Ça sent le cours très très moyen, voire pas bon du tout.

                        https://stackoverflow.com/questions/1651619/optimal-linq-query-to-get-a-random-sub-collection-shuffle

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                          7 septembre 2019 à 0:37:48

                          haha merci sa me reconforte tout sa ,pourtant il est ecrit que le tuto /cour a était mis a jour le 4 juillet 2019 ^^.

                          Je cherchais a esseyer d'utiliser Monogame et ilest écrit que le C# est indispensable pour utiliser a bien ce logiciel.Peut etre me suis je tromper.

                          le Java est il mieux ?

                          var a = new Random();
                                      List<int> M_3 = new List<int>();
                                      M_3.Add(a.Next(1, 50));

                                      for (int i = 0; i >= 0; i++)
                                      {
                                          foreach (int c in M_3)
                                          {
                                              int Chif = a.Next(1, 50);
                                              if (Chif != c)
                                                  M_3.Add(Chif);
                                          }
                                          if (M_3.Count <= 7)
                                           break;
                                      }

                                      Console.WriteLine(M_3.Count);
                                      for (int i =0; i< 7;i++)
                                      {
                                          Console.WriteLine(M_3[i]);
                                      }

                          Je continue avec cette histoire , j'ai changer le code , remis une List a la place du  HashSet il me semble que  ce code devrait fonctionner? merci de m'eclairer je n'est aucune information de la part du debug.

                          new code

                            var a = new Random();
                                      List<int> M_3 = new List<int>();
                                      M_3.Add(a.Next(1, 50));

                                      for (int i = 0; i >= 0; i++)
                                      {
                                          int Chif = a.Next(1, 50);


                                          for (int f = 0; f <= M_3.Count; f++)
                                          {
                                              if (Chif == M_3[f])
                                              { continue; }

                                              M_3.Add(Chif);
                                          }
                                         
                                          if (M_3.Count <= 7)
                                           break;
                                      }

                                      Console.WriteLine(M_3.Count);
                                      for (int i =0; i< 7;i++)
                                      {
                                          Console.WriteLine(M_3[i]);
                                      }
                                  }

                          ici je vous met le meme morceau de code mais avec des boucle for imbriquer , ce code ne m'affiche aucune erreur au demarrage , juste un message console comme le dernier me disant que l'index du tableau est manquant negatif ou inferieur....

                          j'ai pourtant esseyer de changer mais quand je lis le code j'ai vraiment l'impression que les variable sont bonne et devrait etre transmise .

                          -
                          Edité par xexo 7 septembre 2019 à 11:11:14

                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 septembre 2019 à 10:57:20

                            Vous n'avez pas lu l'article que j'ai donné en lien.

                            La manière la plus efficace de faire ce genre d'exercice, c'est de créer une collection avec les "49 boules", les mélanger (shuffle) et de prendre les 7 premières de la collection mélangée, c'est tout.

                            Vos codes, aussi bien JAVA que C# montre que vous ne maitrisez pas correctement les différentes types de boucle (comme les "do/while").

                            Pour faire cet exercice, même à la "JAVA", il ne faut qu'une boucle "do/while" (l'absence de liste nativement en C en faisait un exercice d'introduction aux tableaux, bien pérave, mais en C# et en JAVA, les List, c'est fantastique).

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                            Besoin d'Aide Code

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown