[R] Calcul de promotion

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

[R] Calcul de promotion

#1

Message par ApoKLypsWarrior »

Bonjour,

Je viens ici pour vous poser une question. Je suis actuellement en train de créer mon petit programme qui permet de calculer automatiquement les prix sans promotion, avec promotion et une petite astuce trouvée.
J'arrive parfaitement à faire ce dont j'ai envie, mais je ne pense pas que ce soit la meilleure des façons.

Nous avons en tout 4 ComboBox :
- Une pour choisir la classe
- Une pour choisir l'item
- Une pour choisir le niveau actuel de l'item
- Une pour choisir le niveau désiré de l'item
► Afficher le texteExemple de ma fonction calcul
Voici un exemple de ma fonction calcul.

Je stock donc auparavant dans une variable le prix sans promotion ($coLvlx), je lis ensuite la ComboBox du niveau actuel et du niveau désiré.
Je fais cela jusqu'à $ReadComboLvlActuel = 2 And $ReadComboLvlVoulu = 15, puis je recommence mais cette fois-ci avec un If $ReadComboLvlActuel = 3 afin que toute les possibilité soit prise en compte.
Je me retrouve donc rapidement avec un code de plus de 4000 lignes.

Auriez-vous une astuce pour ce genre de calcul ?

Désolé si ce n'est pas trop bien expliqué..

Cordialement,
Apo.
Modifié en dernier par ApoKLypsWarrior le ven. 20 févr. 2015 14:18, modifié 1 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Calcul de promotion

#2

Message par timmalos »

Il faudrait arriver à exprimer la formule de calcul quel que soit le niveau, vous n'auriez alors pas besoin de toutes ces étapes !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Calcul de promotion

#3

Message par mikell »

Je vois pas bien le rapport entre les différentes variables donc le code ci-dessous peut être inexact, mais en principe ça peut se faire avec des boucles For

Code : Tout sélectionner

If $ReadComboLvlActuel = 2 Then
  For $i = 2 to 5
      If $ReadComboLvlVoulu = $i Then
           $cubit += Eval("coLvl" & $i)
           $kittuning = $cubit / 1000
     EndIf 
  Next
Edit
Mais timmalos a raison, une formule générale dans une fonction serait plus simple et plus efficace
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Calcul de promotion

#4

Message par ApoKLypsWarrior »

Bonjour,

Tout d'abord merci de vos réponses.

Timmalos, effectivement c'est ce que je cherchais à faire mais je ne trouve pas.

Mikell, je vais essayer de cette façon, elle m'a l'air sympathique et prendra déjà beaucoup moins de place.
Est-ce possible de mettre une boucle For dans une boucle For ?
Je m'explique : Le LvlActuel doit ce faire de 2 à 14 et le LvlVoulu de 3 à 15.

Encore merci pour vos réponses.

EDIT : Mikell, votre boucle ne fonctionne pas car si le niveau actuel est 2 et que le niveau voulu est 5 alors il doit ajouté le niveau 3 + 4 + 5, or la il ne fait qu'afficher le prix du niveau voulu.

Cordialement,
Apo.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Calcul de promotion

#5

Message par mikell »

Hum désolé je n'ai pas compris grand'chose à l'explication :mrgreen:
Peut-être comme ça ?
► Afficher le texte
Et oui, on peut "emboiter" des boucles For
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Calcul de promotion

#6

Message par ApoKLypsWarrior »

Merci pour cette aide, néanmoins ce n'est pas terminé. Je vais encore vous embêter un bout de temps :mrgreen:

Voici comment j'ai adapter le code :

Code : Tout sélectionner

For $i = $ReadComboLvlActuel to 15
                If $ReadComboLvlVoulu = $i Then
                    Local $cubit      ; réinitialise la variable
                    For $k = $ReadComboLvlActuel to $i
                        $cubit += Eval("coLvl" & $k)  ; par exemple si $i = 4, $coLvl2+$coLvl3+$coLvl4
                    Next
                    $kittuning = $cubit / 1000
                EndIf
            Next
A première vu, il m'a l'air correct, mais... Lorsque je lance la fonction calcul, le programme se ferme en me disant (si celui-ci est compilé) qu'une variable est utilisée avant d'être déclaré. Je n'arrive pas à trouver l'erreur. $cubit est déclaré, à moins que je ne me trompe..

Je vous remercie encore de m'aider et de vous penchez sur mon problème.

Cordialement,
Apo.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Calcul de promotion

#7

Message par mikell »

Voui certes mais là ça devient *un peu* compliqué, vu que je n'ai pas la moindre idée sur la nature des données entrées ni sur le calcul qui doit être effectué
Quel est le nom de la variable responsable de l'erreur ?
Est-ce que le script fonctionne correctement si non compilé ?
Un exemple serait le bienvenu (avec code testable si possible)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Calcul de promotion

#8

Message par ApoKLypsWarrior »

Le nom de la variable ... Aucune idée, car lorsque le script n'est pas compilé celui-ci fonctionne mais ce ferme lors de l'utilisation de la fonction calcul.

Voici les données :
► Afficher le texte
Voici un code testable, et nous voyons bien dans celui-ci que c'est la variable $cubit qui pose problème.

EDIT : Si je met la variable comme ceci dans la fonction _Information($cubit), elle serai donc bien déclaré ?

Cordialement,
Apo.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Calcul de promotion

#9

Message par mikell »

Ah ça yest j'ai compris Image
Comme quoi avec un code complet ça va tout de suite mieux

Si tu dois utiliser certaines variables dans plusieurs fonctions il faut les déclarer en Global en tête de script (et ne pas les redéclarer ensuite)
D'une manière générale il est déconseillé de déclarer une variable en global dans une fonction
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Calcul de promotion

#10

Message par ApoKLypsWarrior »

Bonjour,

Je vous remercie ça fonctionne à merveille est prend beaucoup moins de place, mais... Encore une dernière erreur.

Dans la fonction _Information(), j'utilise la fonction $cubit afin d'afficher les cubits nécessaire à l'amélioration. Le problème étant que lorsque la variable est sollicitée elle ne s'affiche pas. Elle est pourtant bien utilisé pour la variable $cubit20 = $cubit * 0.80 qui elle fonctionne et s'affiche.

J'ai refais également la boucle afin qu'il ne prenne pas en compte le niveau actuel mais seulement l'amélioration :

Code : Tout sélectionner

For $i = $ReadComboLvlActuel To 15
                If $ReadComboLvlVoulu = $i Then
                    Local $cubit
                    For $k = $ReadComboLvlActuel + 1 To $i
                        $cubit += Eval("coLvl" & $k)
                    Next
                    $kittuning = $cubit / 1000
                EndIf
            Next
Je tiens à vous remercier pour votre aide, et surtout merci je ne savais pas que l'on pouvait déclarer plusieurs variable en une ligne et sans donnée.

Cordialement,
Apo.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Calcul de promotion

#11

Message par mikell »

Hum tu as lu mon code en diagonale et zappé une explication :mrgreen:
Enlève "Local $cubit " et mets "$cubit = 0" pour réinitialiser la variable
Le fait de déclarer $cubit en local lui enlève son statut global (c.f. le fichier d'aide : Language Reference / Variables)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Calcul de promotion

#12

Message par ApoKLypsWarrior »

Ah bah que c'est parfait tout ça !

Désolé pour mon idiotie :mrgreen:

Un grand merci à vous et bonne continuation, je reviendrai surement vous voir bientôt !

Biz.
Répondre