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 :

Tableau et nombre aléatoire


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut Tableau et nombre aléatoire
    Bonjour,
    j'aimerai générer un nombre aléatoire (0 ou 1) dans un tableau en fonction d'un pourcentage donné.
    Par exemple pour un tableau de 10 élément si le pourcentage et de 60 alors il me génére six 1 aléatoirement dans ce tableau.
    Si quelqu'un peu m'aider.
    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    merci j'avais déjà cherché sur le forum sans trouver.
    Seulement je voudrais que dans ce tableau il y ai par exemple si le pourcentage est de 60, six 1 ni plus ni moins.
    Ya t-il un moyen?
    je sais pas si je m'explique correctement :s

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    le post cité donne tout ce qu'il faut.

    Réfléchis un peu...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    jte remercie pour tes commentaires mais j'ai refléchi avant de poster...

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doudou0088 Voir le message
    jte remercie pour tes commentaires mais j'ai refléchi avant de poster...
    Alors fait de ton mieux et poste ton code pour correction si nécessaire.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(j=0; j<10; j++)
    {	
            int res = rand() % 101; 
            if (res <= 60)
          	{
             	tab[i] = 1;
             }
             else
             {
             	tab[i] = 0;
             }
    }
    Voici mon code seulement le nombre de 1 généré est trop aléatoire avec cette méthode. J'en jvoudrais obligatoirement 6 dans tous le tableau...

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doudou0088 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
     
    for(j=0; j<10; j++)
    {	
            int res = rand() % 101; 
            if (res <= 60)
          	{
             	tab[i] = 1;
             }
             else
             {
             	tab[i] = 0;
             }
    }
    Purée... C'est si compliqué que ça de poster un code compilable ? C'est à moi de compléter le code ?

    Si on veut se faire aider, il faut faire quelques efforts, sinon, c'est pas la peine de poster...

    Ou alors tu balances n'importe quel code en te disant qu'un couillon comme moi fera ce qu'il faut pour que ça marche, c'est ça ?
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doudou0088 Voir le message
    Voici mon code seulement le nombre de 1 généré est trop aléatoire avec cette méthode. J'en jvoudrais obligatoirement 6 dans tous le tableau...
    Ah, OK. Il faut apprendre à définir correctement un problème.

    Ce que tu veux faire n'est pas un tirage aléatoire, mais simplement un mélange (shuffle).

    Tu pars d'un tableau connu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tab[10] = {1,1,1,1,1,1};
    et tu le mélanges de façon pseudo-aléatoire :

    - tirage d'un couple d'indices différents {i,j} entre 0 et 9
    - échange de données en [i] et [j]

    Tu es certain de la proportion (de 1 (6/10), mais la séquence de bits est pseudo aléatoire.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Fae,
    Citation Envoyé par doudou0088 Voir le message
    merci j'avais déjà cherché sur le forum sans trouver.
    Seulement je voudrais que dans ce tableau il y ai par exemple si le pourcentage est de 60, six 1 ni plus ni moins.
    Ya t-il un moyen?
    je sais pas si je m'explique correctement :s
    Alors ce n'est pas aléatoire !!
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    c'est pour ça que j'avais pointé dans le post cité dans ma réponse post #2

    c'est exactement la réponse à son problème, mais paraît que je comprend rien
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Destressé les gars. Je suis pas ici depuis des années. Pour l'énoncé du problème il n'était pas facile a expliquer c'est pour cela que je vous ai dit je ne sais pas si je me fait bien comprendre. Merci Emmanuel je n'y avais pas du tout pensé, je crois avoir comprit ta solution je vais essayé de voir sa.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Voila ce que j'ai fait mais mon mélange n'est pas bon car le nombre de 1 n'est pas correcte( ce qui est normal dans ce programme).
    Comment je pourrai resoudre ce problème?
    Merci

    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
     
    int main()
    {
    	int j, tmp;
    	int tab[10]= {1,1,1,1,1,1,0,0,0,0};
     
    	for(j=0; j<10; j++)	
    	{
    		int res = rand() % 10; 
     
    		tmp = tab[j];
    		tab[j] = tab[res];
    		tab[res] = tmp;
     
    		printf("[%d] = %d \n", j, tab[j]);
    	}
    }

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doudou0088 Voir le message
    Voila ce que j'ai fait mais mon mélange n'est pas bon car le nombre de 1 n'est pas correcte( ce qui est normal dans ce programme).
    Comment je pourrai resoudre ce problème?
    Merci

    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
     
    int main()
    {
    	int j, tmp;
    	int tab[10]= {1,1,1,1,1,1,0,0,0,0};
     
    	for(j=0; j<10; j++)	
    	{
    		int res = rand() % 10; 
     
    		tmp = tab[j];
    		tab[j] = tab[res];
    		tab[res] = tmp;
     
    		printf("[%d] = %d \n", j, tab[j]);
    	}
    }
    Ce code est incomplet (comportement indéfini, il manque le prototype de printf() qui est obligatoire).
    D'autre part, tu affiches n'importe quoi. Il faut séparer le mélange et l'affichage.

    Unix rules : "Do one thing, but do it well"

    Une meilleure organisation du code (réduction de la portée au strict minimum)
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main (void)
    {
       int tab[10] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 };
     
       srand ((unsigned) time (NULL));
     
       /* mélange  */
       {
          int j;
          for (j = 0; j < 10; j++)
          {
             int res = rand () % 10;
     
             int tmp = tab[j];
             tab[j] = tab[res];
             tab[res] = tmp;
     
          }
       }
     
       /* affichage */
       {
          int j;
          for (j = 0; j < 10; j++)
          {
             printf ("%2d", tab[j]);
          }
          printf (" \n");
       }
       return 0;
    }
    prépare tout naturellement à la mise en fonctions...
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    static void melanger (int tab[], size_t n)
    {
       size_t j;
       for (j = 0; j < n; j++)
       {
          /* methode naive ... */
          int res = rand () % n;
          int tmp = tab[j];
          tab[j] = tab[res];
          tab[res] = tmp;
       }
    }
     
    static void afficher (int const tab[], size_t n)
    {
       size_t j;
       for (j = 0; j < n; j++)
       {
          printf ("%2d", tab[j]);
       }
       printf (" \n");
    }
     
    int main (void)
    {
       int tab[10] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 };
     
       srand ((unsigned) time (NULL));
     
       {
          int i;
          for (i = 0; i < 5; i++)
          {
             melanger (tab, sizeof tab / sizeof *tab);
             afficher (tab, sizeof tab / sizeof *tab);
          }
       }
       return 0;
    }
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     1 0 1 1 1 0 0 1 1 0
     0 0 1 1 1 1 0 0 1 1
     0 0 1 1 0 0 1 1 1 1
     1 1 0 1 1 0 0 1 0 1
     1 0 1 0 1 0 1 1 1 0
     
    Press ENTER to continue.
    Donc, aucun problème...
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Merci Emmanuel t'es un chef !
    Maintenant je voudrais faire la meme chose dans un tableau à 2 dimension.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab[2][10] ={{1,1,1,1,1,1,0,0,0,0},
                 {1,1,1,0,0,0,0,0,0,0}};
    comment sa marche pour le sizeof dans ce cas? c'est pareil? et le passage du tableau en parametre?

    Merci

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doudou0088 Voir le message
    Merci emmanuelle
    Dans tes rêves ! C'est Emmanuel.
    Maintenant je voudrais faire la meme chose dans un tableau à 2 dimension.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab[2][10] ={{1,1,1,1,1,1,0,0,0,0},
                 {1,1,1,0,0,0,0,0,0,0}};
    comment sa marche pour le sizeof dans ce cas? c'est pareil? et le passage du tableau en parametre?
    Nombre de lignes : sizeof tab / sizeof *tab
    Nombre de colonnes : sizeof *tab / sizeof **tab

    Fait de ton mieux et poste ton code.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Tableau de nombres aléatoires distincts
    Par cabiste007 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 11/04/2015, 09h05
  2. Avoir un tableau de nombres aléatoires pour le PVC
    Par naou18 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 08/12/2012, 17h46
  3. remplir un tableau par des nombre aléatoires
    Par logo98 dans le forum Débuter
    Réponses: 7
    Dernier message: 06/03/2009, 23h22
  4. Extraire un nombre aléatoire d'un tableau
    Par lolow dans le forum LabVIEW
    Réponses: 10
    Dernier message: 29/05/2007, 17h01

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