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

Macros et VBA Excel Discussion :

Distribution de points (pb mathématique je pense)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 94
    Par défaut Distribution de points (pb mathématique je pense)
    Bonjour à tous,

    Je souhaite, pour un jeu, attribuer des points mais de manière non linéaire.

    Je m'explique par un exemple (pièce jointe, le code de base est réalisé, il ne reste que la formule)

    Un joueur doit définir un chiffre entre, par exemple, 4 et 12
    Les paramètres du jeu (le joueur n'a pas connaissance de ces paramètres) sont définis comme suit :
    Chiffre attendu : 11 pour avoir le maximum de points c'est à dire 15 pts

    - SI le joueur définit le chiffre 11, alors il aura le nombre maximum de points, donc 15 pts.
    - SI le joueur définit un chiffre entre la borne mini 4 et le paramètre 11 il aura un nombre de pts allant de 1pt à 14,9 pts, par exemple. Mais je ne souhaite pas que l'attribution des pts soit linéaire.
    Par exemple :
    Chiffre 4 -> 2 pts
    Chiffre 5 -> 3,5 pts
    Chiffre 6 -> 4,2 pts
    Chiffre 7 -> 5,3 pts
    .
    .
    Chiffre 10 -> 13,5 pts
    et donc chiffre 11 -> 15 pts

    Et la même chose si le joueur choisit la borne max, c'est à dire 12, il n'aura que 13,5 pts par exemple car pour avoir le max de points, il fallait indiquer 11

    De plus, la formule doit prendre en compte les bornes min, max (4 et 12 dans notre exemple) et donc le nombre de points max (15 dans l'exemple) pour un paramètre du jeu choisi (11 dans notre exemple) car ces valeurs peuvent être modifiées, je sais je me répète...

    Autre exemple :

    -Chiffre attendu : 7 pour obtenir 15pts (bornes toujours min : 4, max : 12)
    donc
    Chiffre 4 -> 4 pts
    Chiffre 5 -> 9 pts
    Chiffre 6 -> 13,5 pts
    Chiffre 7 -> 15 pts
    Chiffre 8 -> 13,5 pts
    Chiffre 9 -> 12 pts
    Chiffre 10 -> 9 pts
    Chiffre 11 -> 6 pts
    Chiffre 12 -> 3 pts

    Les écarts de points ont été choisis de manière aléatoire mais croissants (borne min vers chiffre attendu) ou décroissants (chiffre attendu vers borne max) et non linéaires.

    Quelle formule pourrais-je mettre en oeuvre pour le calcul de ces points en fonctions des bornes et d'un maximum de points?

    Auriez-vous une idée?

    J'ai réalisé un exemple plus clair, avec déjà un peu de code qui détecte les bornes et affecte le max de points en face du chiffre saisi dans les paramètres.
    Je tourne en rond… Merci à vous tous
    Cordialement

    calcul_points.xlsm

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Citation Envoyé par lio59 Voir le message
    Les écarts de points ont été choisis de manière aléatoire mais croissants (borne min vers chiffre attendu) ou décroissants (chiffre attendu vers borne max) et non linéaires.

    Quelle formule pourrais-je mettre en oeuvre pour le calcul de ces points en fonctions des bornes et d'un maximum de points?

    Auriez-vous une idée?
    Si c'est aléatoire, comment veux-tu faire une fonction ?
    Le nombre de point max est toujours paramétrer mais le nombre de points min ?

    Si pas plus de contrainte, je procéderais comme ça :
    Un nombre de point aléatoire entre 0 et 14,99 pour la borne inf puis un nombre de point aléatoire entre le précèdent nombre et toujours 14,99 jusqu'à atteindre le chiffre cible et idem dans l'autre sens pour aller jusqu'à la borne supp.

    EDIT :
    Voila un exemple :
    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
    Sub calcul_pts_pub()
        Dim borneMin&, borneMax&, Param&, PtsParam&, decis&, i&
     
        'Affectation des valeurs aux variables
        borneMin = Range("B3").Value
        borneMax = Range("C3").Value
        Param = Range("B4").Value
        PtsParam = Range("B5").Value
        decis = Range("B8").Value
     
        For i = 13 To 53
            If Cells(i, 1) < borneMin Or Cells(i, 1) > borneMax Then
                Cells(i, 3) = 0
            ElseIf Cells(i, 1) >= borneMin And Cells(i, 1) < Param Then
                Cells(i, 3) = Application.WorksheetFunction.RandBetween(Cells(i - 1, 3) * 10, 149) / 10
            ElseIf Cells(i, 1) <= borneMax And Cells(i, 1) > Param Then
                Cells(i, 3) = Application.WorksheetFunction.RandBetween(0, Cells(i - 1, 3) * 10) / 10
            Else
                Cells(i, 3) = 15
            End If
        Next i
    End Sub
    Reste à gérer les aléa et le fait que deux valeurs ne puissent pas avoir le même score.

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Ce que tu décrits est, il me semble, une courbe de forme exponentielle. Mais je pense que ta réflexion n'est pas totalement maturée, soit mal expliquée au choix (ou alors j'ai pas compris ^^)

    les ordonnés (y) représentent le score de 2 à 15
    les abscisses (x) représentent les nombres possibles, de la valeur choisie par le joueur à la valeur Paramètre

    Par contre que ce passe t il si le joueur choisi un chiffre se trouvant après Paramètre ? il a 0 point c'est ça?

    deux comportement possible (non exhaustif)


    • la valeur 4 remporterait toujou0sr 2 points ?... si le joueur choisi 5, il aura 2 points pour 4 et 15 points pour 5. S'il choisi 6 il aura par exemple(ça sera dépendant de la structure de la formule) 2 points pour 4, 11 points pour 5 et 15 points pour 6



    • on part de la valeur choisi par l'utilisateur et on échelonne les points sur les 11 valeurs précédentes (par exemple si le joueur choisi 8, alors les points s'étaleront de 8=15points à -3=2points, ainsi le nombre 4 aurait bien une valeur comprise entre 2 et 15

    Si on suit ce résonnement, il suffit de choisir des valeurs de récompense fixes et des les décaler en fonction de la valeur choisie par le joueur, donc pas besoin de formule.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 94
    Par défaut
    Merci antonysansh
    Justement une fonction avec de l'exponentiel pourrait être une solution. Plus le joueur se rapproche du chiffre à trouver plus le nombre de points sera plus important.
    Merci pour ton code, je le testE ce week end.

    Les bornes min, max, le chiffre à trouver et les points peuvent être modifiés.

    Merci Qwazerty
    Donc oui la formule devrait se rapprocher d'une fonction exponentielle. Le repère (x,y) décrit bien l'idée.
    Ta dernière proposition pourrait être une solution en revanche les écarts de points ne peuvent être identiques en fonction de la position du chiffre à trouver entre les bornes.

    Si vous jetez un oeil sur le fichier joint. Vous verrez que vous pouvez modifier, dans le tableau paramètres, les bornes, le chiffre à trouver et les couleurs dans le tableau situé en dessous permettent de visualiser le nombre d'"échelons" entre les bornes et le chiffre à trouver.

    Exemples :

    Chiffre à trouver 11
    chiffre 2 -> 1,5 pts
    chiffre 3 -> 3 pts
    chiffre 4 -> 4,5 pts
    chiffre 5 -> 6 pts
    chiffre 6 -> 7,5 pts
    chiffre 7 -> 9 pts
    chiffre 8 -> 10,5 pts
    chiffre 9 -> 12 pts
    chiffre 10 -> 14 pts
    chiffre 11 -> 15 pts

    Chiffre à trouver 7
    chiffre 2 -> 2 pts
    chiffre 3 -> 4,5 pts
    chiffre 4 -> 7 pts
    chiffre 5 -> 10 pts
    chiffre 6 -> 13 pts
    chiffre 7 -> 15 pts

    Cordialement

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par lio59 Voir le message
    Merci antonysansh
    Si vous jetez un oeil sur le fichier joint. Vous verrez que vous pouvez modifier, dans le tableau paramètres, les bornes, le chiffre à trouver et les couleurs dans le tableau situé en dessous permettent de visualiser le nombre d'"échelons" entre les bornes et le chiffre à trouver.
    On ne joint pas de fichier à la première question. Le texte de Pierre Fauconnier est extrêmement clair.


    Dommage que les modérateurs ne l'aient pas zigouillé.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 94
    Par défaut
    merci clementmarcotte pour l'info.

    antonysansh, je viens de coller ta formule proposée dans le code. L'idée est là... j'avais "bidouillé" une formule de ce genre, mais le résultat n'est pas probant. Normal, c'est de l'aléatoire, ta réponse correspond à mes attentes et donne raison à Qwazerty.
    Connaissant la problématique, il faudrait que je trouve une formule, une fonction de type plutôt exponentiel. Cela permettrait d'obtenir des points :
    - dans l'ordre croissant entre la borne min et chiffre attendu
    - dans l'ordre décroissant entre le chiffre attendu et la borne max
    - non linéaires
    - et qui augmenteraient plus rapidement lorsque l'on s'approche du chiffre à trouver.

    Il s'agit d'un soucis mathématique et non de VBA.
    Auriez-vous une idée de formule?
    Là, clairement, je ne tourne pas en rond, je ne sais pas...
    Cordialement

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 29/10/2013, 15h34
  2. Distribution de point à distance uniforme dans une surface carrée
    Par Gannon dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 17/06/2013, 17h32
  3. syteme de distribution de points
    Par Invité dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 25/07/2007, 02h49
  4. Distribution de points?
    Par elwario91 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 15/07/2007, 11h17
  5. [Mathématiques] A quel point les utilisez vous ?
    Par Évariste Galois dans le forum Etudes
    Réponses: 138
    Dernier message: 17/08/2005, 11h20

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