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 :

Reranger aléatoirement un tableau [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Reranger aléatoirement un tableau
    Bonjour,

    J'ai un soucis avec mon code, je n'obtiens pas le résultat voulu.


    J'ai un tableau de mot (français et traduction en anglais) que j'initialise


    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
     
     
    private mot[] biblio = new mot[10];
    initialiser_bdd(biblio);
     
    private void initialiser_bdd(mot[] F)
        {
             int i = 0;
             F[i] = new mot("âne", "donkey"); i++;
             F[i] = new mot("boeuf", "beef"); i++;
             F[i] = new mot("canard", "duck"); i++;
             F[i] = new mot("chat", "cat"); i++;
             F[i] = new mot("cheval", "horse"); i++;
             F[i] = new mot("chien", "dog"); i++;
             F[i] = new mot("cochon", "pig"); i++;
             F[i] = new mot("coq", "cock"); i++;
        }
    je souhaite afficher l'ensemble des mots français aléatoirement sans que deux fois le même mot soit affiché. Pour cela, j'ai crée un tableau vide et une fonction estPasPresent() qui teste si le mot est pas présent dans un tableau de mot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    private mot[] rand = new mot[10];
     
    private Boolean estPasPresent (mot m,mot[] t, int dimension)
    {
            for(int i = 0; i<dimension ; i++)
            {
                if (m.motfrancais == t[i].motfrancais) {return false; break;}
            }
            return true;
    }
    J'ai testé ce code, il fonctionne. Par contre quand j'utilise cette fonction pour ranger aléatoirement un tableau :

    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
     
     
     Random rdm1 = new Random();
     int returnValue;
     
     returnValue = rdm1.Next(0,8); 
     rand[0] = biblio [returnValue];
     
     for (int i = 1; i < 8; i++)
     {
       do
       {  
          returnValue = rdm1.Next(0,8);
          rand[i] = biblio [returnValue];
       } while (estPasPresent (rand[i],rand,8));
     }

    J'obtiens :

    //cochonchiencochoncanardcochoncoqcanardcochon
    //boeufcochonchatcochonchatchatcanardcoq
    //ânechevalchatâneâneboeufchatboeuf

    Si quelqu'un peut m'aider. Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    Quelques petites remarques:

    • le do while s'execute au moins une fois donc tu peux essayer de pousser un element deja present.
    • pourquoi utiliser des array plutot que des listes ?
    • est un overkill: le return te fera deja sortir de la methode.
    • ligne 7 : "rand[0] = biblio [returnValue];" C'est voulu ? cela


    voila, le premier point devrait aider a la resolution, les autres te permettrons de faire peut etre plus elegant.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Bien vu : "tu peux essayer de pousser un element deja present."

    Je revois mon algorithme.

    Merci.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    J'ai trouvé cela, il y a surement mieux mais ça marche :

    Création de deux tableaux de mot :

    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
     
    private mot[] biblio = new mot[70];
    private mot[] rand = new mot[70];
     
    class mot
    {
            private string _motfrancais;
            private string _motenglais;
     
            public mot(string MF, string MA)
            {
                this._motfrancais = MF;
                this._motenglais = MA;
            }
     
            public string motfrancais { get { return _motfrancais; } set { _motfrancais = value; } }
            public string motanglais { get { return _motenglais; } set { _motenglais = value; } }
    }
    Initialisation des deux tableaux :

    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
     
    private void initialiser_bdd(mot[] F)
    {
            int i = 0;
             F[i] = new mot("âne", "donkey"); i++;
             F[i] = new mot("boeuf", "beef"); i++;
             F[i] = new mot("canard", "duck"); i++;
             F[i] = new mot("chat", "cat"); i++;
             F[i] = new mot("cheval", "horse"); i++;
             F[i] = new mot("chien", "dog"); i++;
             F[i] = new mot("cochon", "pig"); i++;
             F[i] = new mot("coq", "cock"); i++;
     }  
     
     protected void Page_Init (object sender, EventArgs e)
     {
         initialiser_bdd(biblio);
         initialiser_bdd(rand);
     }
    Procédure pour permuter les noms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    private void permuter(mot[] m, int i, int j)
       {
            string temp;
            temp = m[i].motfrancais;
            m[i].motfrancais = m[j].motfrancais;
            m[j].motfrancais = temp;
       }
    Code pour mélanger de façon aléatoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    protected void Page_Load (object sender, EventArgs e)
       {
            Random rdm1 = new Random();
            int returnValue;
     
            for (int i = 0; i < 8; i++)
            {
                permuter (rand, i, rdm1.Next(0,7));
            }
        }
    Résultat :

    canard cochon coq âne cheval chien boeuf chat
    coq cochon boeuf chat chien canard cheval âne
    boeuf chien chat canard cochon coq âne cheval
    coq boeuf cheval chien cochon canard âne chat

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

Discussions similaires

  1. [XL-2010] Grille aléatoire en tableau
    Par Cyber Tonton dans le forum Excel
    Réponses: 12
    Dernier message: 19/11/2013, 17h27
  2. [eZ Publish] Problème d'utilisation d'un template operator de mélange aléatoire de tableau
    Par azrael62 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 11/07/2012, 14h34
  3. Tirage aléatoire dans TABLEAU
    Par french_aspi dans le forum MATLAB
    Réponses: 1
    Dernier message: 20/08/2008, 17h45
  4. remplir aléatoirement un tableau
    Par babar56 dans le forum C
    Réponses: 17
    Dernier message: 09/04/2007, 14h42
  5. parcourir un tableau aléatoirement
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/12/2004, 13h44

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