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 :

débutant en programmation


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut débutant en programmation
    salut a tous ,


    je suis un debutant en programmation ( environ 2 semaine ) et je voudrais savoir comment faire pour creer un programme qui nous donne toutes les possibilités de combinaisons de 5 chiffres (les chiffres appartiennent à [ 1 ; 8 ] et un chiffre ne peut pas apparaitre plus d'une fois dans la combinaison) .

    J'ai reussi a creer une fonction qui me donne ces combinaisons et je l'ai mise dans une boucle .

    Le probleme est que les combinaisions que la fonction me sort sont quelques fois identiques entre elles (par exemple la 2eme combinaison est la meme que la 50eme )
    (pour creer cette fonction j'ai utilisé de rand() )

    D'apres un petit calcul , il y a 6720 combinaison differentes.


    merci pour vos conseils.

  2. #2
    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 Re: débutant en programmation
    Citation Envoyé par swing
    je suis un debutant en programmation ( environ 2 semaine ) et je voudrais savoir comment faire pour creer un programme qui nous donne toutes les possibilités de combinaisons de 5 chiffres (les chiffres appartiennent à [ 1 ; 8 ] et un chiffre ne peut pas apparaitre plus d'une fois dans la combinaison) .
    C'est un problème d'algorithmes. Le bon forum est ... "Algorithmes"
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    si tu veux toutes tes combinaisons, il y a deux méthodes :
    - la première est l'iteration : tu fais autant de boucles imbriqués que de nombre (dans ton cas 5) et ces boucles vont de 1 à 8.
    - La deuxième, plus propre, est faire par récursivité, mais si tu débute, ca ne sera pas forcément tres clair.

    Bon courage
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #4
    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 ToTo13
    si tu veux toutes tes combinaisons, il y a deux méthodes :
    Tu as bien tout lu ?
    un chiffre ne peut pas apparaitre plus d'une fois dans la combinaison
    De toutes façons, ce n'est pas une question de langage.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    oups, je n'avais pas fait gaffe qu'un chiffre peux apparaitre plusieurs fois.
    Mea culpa

    Bon, la méthode reste valide, mais il faut juste tester avant d'écrire la combinaison, quelle est bien valide.
    D'ailleur, pour éliminer pas mal de cas, tu meux modifier les boucles de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    pour i qui va de 1 à 8
       pour j qui va de i+1 à 8
          pour k qui va de j+1 à 8
             pour l qui va de k+1 à 8
                pour m qui va de l+1 à 8
    Cela limite les itérations, mais il faut quand meme tester que la combinaison est valide.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Citation Envoyé par swing
    (pour creer cette fonction j'ai utilisé de rand()

    Si rand est initialisé avec time(NULL) on ne peut sortir un nouveau nombre aléatoire que toute les secondes!

    Il faudrait voir avec l'horloge systeme pour en générer à une plus grande fréquence.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Citation Envoyé par ToTo13
    D'ailleur, pour éliminer pas mal de cas, tu meux modifier les boucles de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    pour i qui va de 1 à 8
       pour j qui va de i+1 à 8
          pour k qui va de j+1 à 8
             pour l qui va de k+1 à 8
                pour m qui va de l+1 à 8
    Cela limite les itérations, mais il faut quand meme tester que la combinaison est valide.
    Ca ne donne pas toutes les combinaisons!
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut merci pour vos reponses
    Je vous remercie pour vos reponses.

    Je pense que la fonction rand() n'est pas la meilleur pour ce genre de probleme a resoudre.

    J'ai pensé faire une boule qui me donne tous les nombres de 12345
    à 87654 , ca m'en donne plus de 75000 .
    Maintenant il faut tester tous les nombres que la boucle me donne pour ne pas affiché ceux ou il y a un 0 , un 9 ou deux 6 par exemples.

    C'est surement avec des if , else if , ect mais je ne suis pas encore très à l'aise avec ca vu mon niveau en programmation.

    Pourriez vous me donner un coup de main pour banir les combinaisons indesirables ?

    merci en tout cas.

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Quel est le but final?

    Faire des combinaisons aléatoires de 5 chiffres avec tous les chiffres différents?


    Est-ce que trouver TOUTES les combinaisons possibles est vraiment important?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Là, il y a confilt entre deux objectifs dont l'un seul est le bon:
    • Au début, j'ai cru ce que seriousme hésite à croire, c'est-à-dire que tu voulais générer aléatoirement un "arrangement de 5 chiffres parmi 8". Ici, la fonction rand() t'aurait été utile.
    • Mais à la lecture des posts suivants, on remarque tu tu veux LISTER tous les "arrangement de 5 chiffres parmi 8" possibles (pour information, il y en a nPr(8,5)=6720, que l'on trouvera au bout d'un arbre de profondeur 4 ou 5).

    Je considère ici la seconde option.

    Ainsi, pour gérer ces possibilités, algorithmiquement, je conseillerais l'utilisation d'une liste d'où l'on retirerait/désactiverait les valeurs prises. Et comme la structure des choix est en arbre, un algorithme récursif ne serait pas inapproprié.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    En tout cas lister 75000 nombres pour en extraire 6720 n'est pas une solution appropriée.

    J'essaie un algorithme qui rejoint ce qu'a dit Médinoc.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut
    j'aime bien utiliser les files.
    On peut travailler avec une file de structures.
    La file est initialisée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
        char amettre[8] = "12345678";
        char mis[6] = "";
    }
    On travaille en C !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Tant que la file n'est pas vide
       defiler un élément e1
       pour tous les caractères c différents de 0 de la chaîne amettre de e1 faire
         créer un élément e2 en ajoutant en fin de chaîne amettre le caractère c
         remplacer c dans mis pas '0'
         si la chaîne mis est complète alors
            afficher la chaîne mis
         sinon
           enfiler l'élément e2 dans la file
         fin si
      fin pour
    fin tant que
    C'est absolument inefficace, mais c'est une manière de faire.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par seriousme
    Citation Envoyé par swing
    (pour creer cette fonction j'ai utilisé de rand()

    Si rand est initialisé avec time(NULL) on ne peut sortir un nouveau nombre aléatoire que toute les secondes!
    Bien sur que non, a chaque appel de rand() le nombre est different.

  14. #14
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    En effet!

    Mais quel était alors le probleme de génération de nombre aléatoire avec cette méthode?

    Le truc qu'on montre à tous les débutants...et qui montre que des nombres générés a intervale de temps trop court sont identiques.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  15. #15
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par seriousme
    Le truc qu'on montre à tous les débutants...et qui montre que des nombres générés a intervale de temps trop court sont identiques.
    Le cas que tu decris se produit lors d'une mauvaise utilisation de srand() et rand() si avant chaque appel a rand() un appel a srand(time(NULL)) est effectue. Lors de l'utilisation correct (c'est a dire un seul appel a srand() en debut de programme) il n'y a aucun souci.

  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 seriousme
    Mais quel était alors le probleme de génération de nombre aléatoire avec cette méthode?

    Le truc qu'on montre à tous les débutants...et qui montre que des nombres générés a intervale de temps trop court sont identiques.
    Il faut que srand() avec time() soit appelé une fois au début du programme. Si on lance le programme plusieurs fois dans le même seconde, on aura le même résultat.
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Merci beaucoup de ces explications.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

Discussions similaires

  1. [Débutant] Un programme avec char
    Par amira dans le forum C
    Réponses: 10
    Dernier message: 02/12/2006, 19h54
  2. Débutant en programmation
    Par tryskeljp dans le forum Windows
    Réponses: 3
    Dernier message: 23/05/2006, 15h45
  3. Bibliographie du parfait débutant en Programmation
    Par Switch28 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 26/09/2005, 14h23
  4. [vidéo] Débutant en programmation vidéo
    Par FFF dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 01/09/2005, 13h46
  5. [Débutante] Compréhension programme - mode debug
    Par bolo dans le forum Assembleur
    Réponses: 14
    Dernier message: 07/01/2005, 18h33

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