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

WinDev Discussion :

Génération nombre aléatoire


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut Génération nombre aléatoire
    Bonjour,

    Voila mon petit probleme :

    J'aimerais générer des nombre aléatoire mais dont le total fasse un tel chiffre.
    En gros je veux que 3 chiffres aléatoires fassent 13 par exemple.
    Cela fonctionne en php mais en Wlangage ça coince.

    j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    InitHasard()
     
    TANTQUE (total<>13)
    	caract1=Hasard(0, 9)
    	caract2=Hasard(0, 9)
    	caract5=Hasard(0, 9)
    	total=Val(caract1)+Val(caract2)+Val(caract5)
    FIN
    Si quelqu'un à une solution plus fonctionnelle

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    pourquoi ne pas chercher 2 nombres et faire le complément à 13 sur le 3e ... ?

    Sinon, c'est vraiment au petit bonheur la chance comme on dit !

    à bientôt,

    Nicolas

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Pour ajouter un peu de cohérence à ton code, il faut bien comprendre que le résultat de Hasard(0,9) te donne un nombre entier et non pas un caractère ! La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    total=Val(caract1)+Val(caract2)+Val(caract5)
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    total=caract1+caract2+caract5
    sachant que caract1, caract2 et caract5 devraient être des entiers ...

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    En effet, générer 2 chiffres (entre 1 et 6, par ex.), et compléter à 13 avec le troisième sera plus rapide et moins aléatoire.

  5. #5
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Tu peux aussi laisser la génération entre 0 et 9 mais faire un test au moment de la génération du deuxième nombre pour voir si le totale du nombre 1 et 2 n'est pas supérieur à ton total.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nValeurTotale est entier = 13
    nNombre1 est un entier
    nNombre2 est un entier
    nNombre3 est un entier
    InitHasard()
    nNombre1 = Hasard(0,9)
    nNombre2 = Hasard(0,9)
    TANTQUE nNombre1 + nNombre2 > nValeurTotale
    	nNombre2 = Hasard(0,9)
    FIN
    nNombre3 = nValeurTotale - (nNombre1 + nNombre2)
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses.

    J'ai essayé la methode de Nicolas mais même problème, pour un total de 15 avec 3 chiffre, le programme me donne 150 au lieu du total de 15 (537 par exemple)

  7. #7
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Bonjour,
    Moi je ne comprends pas ton exemple et "la methode de Nicolas" c'est pas très clair. Qu'à tu fais exactement car sa solution semble très simple à mettre en oeuvre?
    «Un problème bien défini est un problème à moitié résolu.»

  8. #8
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    Si jamais, les variables sont de type chaine, il est normale que la concaténation se fasse selon le même principe des chaines.
    Donc vérification si les variables sont de type 'entiers'.
    De plus, si le résultat est incorporé dans une trace ou dans une info, il faut penser à mettre les calculs entre parenthèse, sinon, même des variables numeriques sont considérées alors comme des chaines (type cast en c++)

    info ou trace ("resultat = "+(entiers1+entiers2+entiers3) )

    Une fois cela fait, comme vérification, je suis comme klbsjpolp, je ne comprends pas car c'est le plus simple qui puisse exister...
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Je vais essayer d'être le plus clair possible.
    Je veux générer 3 chiffres aléatoire dont le total de chaque chiffre doit faire une certaine somme.

    Exemple : je veux un total de 10, les chiffres générés devrait etre du style 4,2,4 par exemple ou 0,5,5 etc ...

    Sauf que en windev le résultat est du style 1,0,0 (il prend les 2 premiers chiffres pour un 10).

    Mon code est le suivant (marche en php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    total,caract1,caract2,caract5 sont des entiers
     
    InitHasard()
     
     
    TANTQUE (total<>15)
    	caract1=Hasard(0, 9)
    	caract2=Hasard(0, 9)
    	caract5=Hasard(0, 9)
    	total=caract1+caract2+caract5
    FIN

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    bonjour,

    pixel016 a dit :
    Citation Envoyé par pixel016 Voir le message
    Sauf que en windev le résultat est du style 1,0,0 (il prend les 2 premiers chiffres pour un 10).
    Comment exploites-tu le résultat ?


    chez moi le code suivant marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    total,caract1,caract2,caract5 sont des entiers
     
    InitHasard()
     
     
    TANTQUE (total<>15)
    	caract1=Hasard(0, 9)
    	caract2=Hasard(0, 9)
    	caract5=Hasard(0, 9)
    	total=caract1+caract2+caract5
    FIN
    Info("Résultat :",caract1,caract2,caract5)
    j'ai comme résultat par exemple
    caract1 = 4
    caract2 = 8
    caract5 = 3

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    En fait mon but final est de générer une chaine de caractère avec des chiffres et des lettres du style 52d835Fg.

    Donc pour être précis, je veux que mon premier caractère (5), mon deuxieme (2) et mon cinquième (8) fasse un total de 15.

    Les autres caractère sont générés au hasard comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    i est un entier
    POUR i=1 A 1
    	// Génération aléatoire du caractère ASCII d'une majuscule
    	nNombre = Hasard(70,80)
    	// On construit la chaîne
    	caract3+=Caract(nNombre)
    FIN
    A la fin j'ai une chaine finale du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chaine_finale est une chaine
    chaine_finale=caract1+caract2 ....  etc
    Mais lors ce que je fait un trace de chaine_finale cela m'affiche un truc du genre : 10Kb534J , ce qui n'est pas bon

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    bon, d'après ce que je crois comprendre ton problème vient du fait que dans la construction de ta chaine finale tu concatènes à la fois des caractères et des numériques et windev doit faire l'addition des numériques quand il voit un + entre 2. Alors peut être la solution c'est de forcer les numériques en chaine pendant la concaténation. Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaine_finale=NumériqueVersChaîne(caract1)+NumériqueVersChaîne(caract2)+caract3.........
    Ami calmant J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    En effet c'est ce que je venais de comprendre, c'est bien ça la solution.

    Merci beaucoup

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

Discussions similaires

  1. Génération nombres aléatoires
    Par vincent1989 dans le forum R
    Réponses: 2
    Dernier message: 26/05/2014, 19h14
  2. [Math / Random] Génération nombre aléatoire compris entre deux bornes
    Par oligig dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 30/06/2013, 17h23
  3. Problème génération nombre aléatoires
    Par Pim'Ouss dans le forum Général Java
    Réponses: 3
    Dernier message: 15/10/2010, 12h25
  4. Génération de n nombres aléatoires différents
    Par progfou dans le forum Probabilités
    Réponses: 3
    Dernier message: 13/12/2005, 18h29
  5. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 14h20

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