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 :

probleme avec la fonction random


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 32
    Points
    32
    Par défaut probleme avec la fonction random
    Salut a tous ,

    Voila j'ai besoin pour mon programme de generer un tirage aleatoir de nombre compris entre 0 et 20 sans repetition .

    Il serai gentil si quelqu'un pouvai mecrir un petit bout de code me permetant de le faire .

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Il faut que tu cherches un peu dans la FAQ C avant de demander.

    http://c.developpez.com/faq/c/?page=..._random_bornes


    Ou encore (tu aurais trouver en utilisant la fonction rechercher) :

    http://emmanuel-delahaye.developpez.com/notes.htm#rand

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup , mais j'ai cherché pourtant je doit pas etre tres douer dans ce domaine.
    Merci encore!

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Par contre j'ai encore un petit soucil : je ne sais pas comment definir le fait que le nombre soit compris entre deux valeurs.

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Si c'est entre 0 et 20.

    Tu appelles la fonction alea(20) de la FAQ (il faut reprendre le source).

    Par contre, tu cherches des nombres aléatoires sans répétition... C'est un peu contradictoire. Tu cherches en fait à générer une permutation aléatoire de 21 entiers distincts entre 0 et 20 ?

    EDIT : Si c'est ça et que c'est un problème d'algorithmique, je t'invite à lire ce lien :
    http://www.developpez.net/forums/sho...d.php?t=191130

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Ca MARCHE !!!!
    Super merci beaucoup!

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    Pour coder la permutation, tu peux par exemple utiliser (sauf erreurs ):

    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
    #include <stdio.h>
    #define N 10            // N le nombre de valeurs à générer
    #define P 20            // P la valeur maximale de tes entiers aléatoires
     
    main()
    {
          srand((int)time(NULL));
     
          int tab[N], i=0, j=0, S=0, n;
     
          while (S<N)
          {
              n=rand()%P;
              j=0;
     
              while (j<S)
                    if (n==tab[j])
                    {
                                  n=rand()%P;
                                  j=0;
                    }
                    else
                        j++;
     
     
              tab[S]=n;
              S++;
     
          }
     
          for (i=0; i<N; i++)
              printf("%d ", tab[i]);
     
          getch();
    }
    L'utilisateur est supposé intelligent et ne pas rentrer un N supérieur à P

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par babar56
    Pour coder la permutation, tu peux par exemple utiliser (sauf erreurs ):
    Un des prototypes accepté du main est :

    avec un joli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return EXIT_SUCCESS;
    à la fin...

    L'utilisateur est supposé intelligent et ne pas rentrer un N supérieur à P
    Depuis quand est-ce qu'un utilisateur est intelligent ?

    Jc

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    Comme tu le dis si bien fearyourself, en l'occurence ça ne sert à rien d'autre qu'à faire joli. Et je suis persuadé que kaiko n'a rien compris à ton intervention

    Faut quand même pas se leurrer, le commun des mortels se moque pas mal de créer un code parfaitement portable, et aspire encore moins à faire partie du club très prisé des puristes de la programmation.

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par babar56
    Faut quand même pas se leurrer, le commun des mortels se moque pas mal de créer un code parfaitement portable
    Le commun des mortels ne programme pas. Mais bon, tant qu'à faire, si l'on commence à programmer, autant bien le faire.

    Et on ne répond pas uniquement pour la personne qui a posé la question, mais pour tout le monde aussi (ce forum est un partage de connaissance). Alors autant que tout le monde puisse voir des corrections exhaustives du code.

    des puristes de la programmation.
    Bah, le fait de mettre des options de compilation plus importantes à gcc permet souvent de voir des erreurs. Donc pourquoi se passait de ça ? C'est un gain de temps appréciable dans la plupart des cas.


    Enfin, je sors du sujet. Je ne reviendrais plus là dessus

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par millie
    Le commun des mortels ne programme pas. Mais bon, tant qu'à faire, si l'on commence à programmer, autant bien le faire.
    Tu sais millie, il y a des tas de gens qui écrivent comme prototype main() et qui sont catalogués "côté obscure de la force" par les puristes, et qui ne le savent même pas. Y a un moment donné où c'est quand même pas de leur faute si on leur apprend à programmer comme ça, et si ça fonctionne. Ou alors c'est un vaste complot organisé par gcc, devc++ et compagnie, pour ne pas afficher de message d'erreur à la compilation avec les paramètres standards.

    Citation Envoyé par millie
    Alors autant que tout le monde puisse voir des corrections exhaustives du code.
    Ah mais si tu te sens d'attaque pour faire des corrections exhaustives, tu vas sans doute pouvoir trouver l'erreur dans mon topic Sudoku

  12. #12
    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 babar56
    Comme tu le dis si bien fearyourself, en l'occurence ça ne sert à rien d'autre qu'à faire joli. Et je suis persuadé que kaiko n'a rien compris à ton intervention
    Mouarf toi-même. Evite de prendre les gens pour des abrutis...
    Faut quand même pas se leurrer, le commun des mortels
    n'est pas programmeur C. Quelque chose à ajouter ?
    se moque pas mal de créer un code parfaitement portable, et aspire encore moins à faire partie du club très prisé des puristes de la programmation.
    Bah et faire partie du club de ceux dont le code compile et fonctionne correctement, ça te va ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* ne compile pas en C99 et c'est un comportement indefini en C90 */
    main (void)
    {
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /* c'est un comportement indefini en C90 */
    int main (void)
    {
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /* ne compile pas en C99 */
    main (void)
    {
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /* portable C90 et C99 */
    int main (void)
    {
       return 0;
    }
    C'est pas compliqué d'écrire du code portable et correct.

    Si tu penses vraiment ce que tu écris et que tu agis de même, tu ne mérites pas d'être programmeur. Tu représentes même un danger pour cette profession et pour les utilisateurs de tes programmes qui seraient amenés à y confier leur vie... (avionique, nucléaire, espace...)

  13. #13
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Vu le nombre de personnes qui programment en C, je serais tenté de dire que réellement le commun des mortels programme en C... bien ou pas, ça c'est u autre débat !

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Mouarf toi-même. Evite de prendre les gens pour des abrutis...
    Contrairement à toi, je me base sur mon expérience récente de cours en C dans différents milieux pas forcément en rapport direct avec la programmation (faculté de mathématiques, école d'ingénieurs en géophysique). Force est de constater qu'on se moque pas mal du prototype de main et que mes enseignants ont toujours utilisés main() sans faire allusion aux prototypes standards. Donc je me garderais bien de considérer qu'une personne est un abruti quand il se trouve dans un système où cette partie du programme est tout simplement ignorée.

    Citation Envoyé par Emmanuel Delahaye
    n'est pas programmeur C. Quelque chose à ajouter ?
    Faut-il nécessairement être programmeur en C pour faire du C ? Il y a des gens qui codent chez eux et font autre chose dans la vie, et tu sais la plupart de ces gens se moquent pas mal de créer un code portable ou non.

    Citation Envoyé par Emmanuel Delahaye
    Tu représentes même un danger pour cette profession et pour les utilisateurs de tes programmes qui seraient amenés à y confier leur vie... (avionique, nucléaire, espace...)
    Si j'avais à écrire un code portable je saurais le faire. Tu te trompes donc de cible. C'est du côté des enseignants qu'il faut frapper, parce que la majorité de leurs étudiants ne font pas la démarche d'aller sur des forums de C et de voir comment on code ailleurs.

    Moi, je défends juste les gens qui codent pour le plaisir et qui se font littéralement agresser par des vieux éléphants qui brandissent leur "/* portable C90 et C99 */" comme si c'était le nouveau testament.

  15. #15
    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 babar56
    Contrairement à toi, je me base sur mon expérience récente de cours en C dans différents milieux pas forcément en rapport direct avec la programmation (faculté de mathématiques, école d'ingénieurs en géophysique).
    La programmation et l'informatique en général est un outil au service de métiers. Il est mis en oeuvre au coup par coup par les professionnels de l'informatique sur demande du client qui est spécialiste de son métier.

    Maintenant, que quelqu'un qui n'est pas programmeur professionnel utilise directement l'outil informatique pour réaliser des mini projets liés à son métier, pourquoi pas. Mais est-ce une raison pour le faire mal ? Il n'y a aucune arrière pensée élitiste quand on dit à un programmeur occasionnel qu'il ne respecte pas la norme.

    Au contraire, on cherche à aider, c'est tout. Les normes ne sont pas la pour faire chier le mode mais au contraire pour l'organiser, le rendre cohérent et compatible.

    Maintenant, si tu tiens à rester un bricoleur du dimanche, ben, faut pas venir poster sur les forums de professionnels, ou alors il faut créer une catégorie 'bidouilleurs' dans laquelle je n'irais pas perdre mon temps...

    Force est de constater qu'on se moque pas mal du prototype de main et que mes enseignants ont toujours utilisés main() sans faire allusion aux prototypes standards.
    Est-ce une raison suffisante pour envoyer paitre ceux qui font un 'rappel au règlement' ? C'est ton esprit rebelle ? Tu refuses toute autorité ? C'est ça ?

    Je sais bien qu'il y a un gros problème d'enseignement de l'informatique, et en tant que formateur indépendant, je suis en première ligne. les problèmes ont deux origines bien connues :
    • La plupart des universitaires n'ont jamais été confrontés au terrain
    • Ils se reproduisent entre-eux. (métaphore inside)


    Faut-il nécessairement être programmeur en C pour faire du C ? Il y a des gens qui codent chez eux et font autre chose dans la vie, et tu sais la plupart de ces gens se moquent pas mal de créer un code portable ou non.
    C'est pas écrit dessus... Moi aussi, je connais aussi de bons bricoleurs de maison (électricité, peinture, voire plomberie) qui ont un savoir faire et une connaissance technique qui n'a rien à envier à celle d'un professionnel. Par contre une méconnaissance des normes (distance de sécurité pour les prises de courants en milieu humide, par exemple) peut s'avérer mortelle. Donc, la prudence s'impose, l'avis d'un professionnel aussi, parfois...
    Moi, je défends juste les gens qui codent pour le plaisir et qui se font littéralement agresser par des vieux éléphants qui brandissent leur "/* portable C90 et C99 */" comme si c'était le nouveau testament.
    Agresser, faut pas exagérer. mais le C, c'est pas un langage de bidouilleur. Trop laxiste. Il faut travailler avec méthode et bien connaitre la norme pour prétendre programmer sérieusement en C. De plus, c'est plutôt spartiate comme langage...

    Pour s'amuser, il vaut mieux VB, Python, Ruby...

    Enfin, tout dépend de ce que tu entends par 'pour le plaisir...'

    Et puis se faire traiter de vieil éléphant par Babar56...

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par babar56

    Moi, je défends juste les gens qui codent pour le plaisir et qui se font littéralement agresser par des vieux éléphants qui brandissent leur "/* portable C90 et C99 */" comme si c'était le nouveau testament.
    effectivement. Si tu codes pour ton plaisir, un petit prgm rien que pour toi, aucun pb qu'il soit ou non portable.
    Pour ma part, je fais un prgm pour des clients et suivant les services qui vont l'utiliser, il doit marcher sous windows et unix. De plus, parfois ils ont des machines un peu obsolètes et je ne pense pas qu'ils soient des champions en programmation. Ce qu'ils veulent c'est compiler mon prgm, l'exécuter, et avoir accès au code source pour qu'un gars puisse le modifier un jour. Mon code doit donc prévoir pas mal de cas et... être portable !

  17. #17
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Je sais bien qu'il y a un gros problème d'enseignement de l'informatique, et en tant que formateur indépendant, je suis en première ligne. les problèmes ont deux origines bien connues :
    • La plupart des universitaires n'ont jamais été confronté au terrain
    • Ils se reproduisent entre-eux. (métaphore inside)
    A qui le dis-tu...

    Ceci étant, je me bats dans ma fac pour faire valoir les régles de base qu'on défend ici. On verra si les personnes que j'ai convaincu prendront notes et enseigneront de facon correcte le C... J'en doute

    Jc

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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