[..] Algorithme spécifique

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
hardfloor
Niveau 4
Niveau 4
Messages : 69
Enregistré le : mer. 31 juil. 2013 09:37
Status : Hors ligne

[..] Algorithme spécifique

#1

Message par hardfloor »

Bonjour à tous,
voilà J'ai besoin de l'aide d'un matheux^^ :D
Je veux créer un algo assez complexe à réaliser et j'ai besoin de vous.
Voici mon code pour exemple:

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Local $total
Local $var1 = "20";<== Tranche Max supportée  -
Local $var2 = "300"; Valeur du point B
Local $var3 = "400"; Valeur du point C
Local $var4 = "500"; Valeur du point D
local $don1 = "200"; valeur à ajouter à $var2 si la saisie B est comprise dans la tranche $var1
local $don2 = "220"; valeur à ajouter à $var3 si la saisie C est comprise dans la tranche $var1
local $don3 = "230"; valeur à ajouter à $var4 si la saisie D est comprise dans la tranche $var1
Local $B, $C, $D
#Region ### START Koda GUI section ### Form=
$Form1_1 = GUICreate("Form1", 616, 439, 192, 124)
$Label1 = GUICtrlCreateLabel("Jeux de cartes", 192, 56, 224, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("A", 112, 152, 27, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input1 = GUICtrlCreateInput("0", 152, 160, 121, 21)
$Label3 = GUICtrlCreateLabel("B", 108, 206, 26, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input2 = GUICtrlCreateInput("0", 149, 214, 121, 21)
$Label4 = GUICtrlCreateLabel("C", 109, 257, 28, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input3 = GUICtrlCreateInput("0", 149, 265, 121, 21)
$Label5 = GUICtrlCreateLabel("D", 112, 310, 28, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input4 = GUICtrlCreateInput("0", 152, 318, 121, 21)
$Label6 = GUICtrlCreateLabel("Total", 109, 363, 81, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Input5 = GUICtrlCreateInput("0", 213, 371, 121, 21)
$Button1 = GUICtrlCreateButton("calculer", 432, 376, 113, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
             $A = $var1 * GUICtrlRead($Input1) ; Ici on mutiplie la tranche par la quantité désirée
             $B = $var2 * GUICtrlRead($Input2)
             $C = $var3 * guictrlread($Input3)
             $D = $var4 * GUICtrlRead($Input4)
             $total = $B + $C + $D
           GUICtrlSetData($input5, $total)
    EndSwitch
WEnd
 
Alors il y a plein de variables qui ne sont pas utilisées, c'est normal! c'est pour vous :mrgreen:

Alors sérieusement,
on va prendre l'exemple du jeu de carte!
Donc la carte B a pour valeur 300, la carte C = 400 et la carte D = 500. La valeur A represente une tranche soit 1 = 20 cartes.

Le fonctionnement:
L'utilisateur doit rentrer un nombre dans le champs A ==> Exemple, il rentre 10 donc 10 * 20 = 200 cartes
(Cela signifie que le calcul va se baser sur cette tranche de 200 cartes bonus)

L'utilisateur va maintenant rentrer en B = 30, en C = 100 et en D = 100
On s'aperçoit que le total de cartes entrées est de 230!
Le principe doit être le suivant, en se basant sur la tranche de carte bonus (qui est de 200 ici):
1) On ajoute la valeur $don1 à la variable $var2 dans la limite des 30 (Valeur entrée en B)
Donc ==> nouvelle valeur de $var2 = (300 + 200)
==> ($var2 + $don1) x 30
==> 500 x 30
Il nous reste (200 - 30) 170 cartes bonus encore

Puisqu'il nous reste 170 cartes, on passe au controle de C:
On ajoute la valeur $don2 à la variable $var3 dans la limite des 170
Donc ==> nouvelle valeur de $var3 = (400 + 220)
==> ($var3 + $don2) x 100 (100 étant la valeur entrée en C)
==> 620 x 100

Il nous reste (170 - 100) 70 cartes bonus encore
Ici on remarque que D = 100 et qu'il nous reste 70 cartes........
On ne pourra appliquer le bonus que sur 70 carte et il restera 30 cartes à leur valeur initiale!!
Ce qui donne ==> nouvelle valeur de $var4 = (500 + 230)
==> ($var4+ $don3) x 70
==> 730 x 70
Et 30 cartes valeur initiale:
==> $var4 x 30
==> 500 x 30
Donc total $var4 = (($var4+ $don3) x 70) + ($var4 x 30))

Après c'est une addition classique de B, C et D

Voilà, j'espère que vous allez comprendre ce que j'attends!
Le but étant toujours de faire la soustraction des cartes bonus de B vers D
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Algorithme spécifique

#2

Message par timmalos »

Ceci devrait être ok. C'est très peu commenté n'hesitez pas à poser des questions si besoin est :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $total
Global $tranche = 20 ;<== Tranche Max supportée  -

Global $var2 = 300; Valeur du point B
Global $var3 = 400; Valeur du point C
Global $var4 = 500; Valeur du point D

Global $don1 = 200; valeur à ajouter à $var2 si la saisie B est comprise dans la tranche $var1
Global $don2 = 220; valeur à ajouter à $var3 si la saisie C est comprise dans la tranche $var1
Global $don3 = 230; valeur à ajouter à $var4 si la saisie D est comprise dans la tranche $var1
Global $B=0, $C=0, $D=0
#Region ### START Koda GUI section ### Form=
$Form1_1 = GUICreate("Form1", 616, 439, 192, 124)
$Label1 = GUICtrlCreateLabel("Jeux de cartes", 192, 56, 224, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("A", 112, 152, 27, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input1 = GUICtrlCreateInput("0", 152, 160, 121, 21)
$Label3 = GUICtrlCreateLabel("B", 108, 206, 26, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input2 = GUICtrlCreateInput("0", 149, 214, 121, 21)
$Label4 = GUICtrlCreateLabel("C", 109, 257, 28, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input3 = GUICtrlCreateInput("0", 149, 265, 121, 21)
$Label5 = GUICtrlCreateLabel("D", 112, 310, 28, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x008000)
$Input4 = GUICtrlCreateInput("0", 152, 318, 121, 21)
$Label6 = GUICtrlCreateLabel("Total", 109, 363, 81, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Input5 = GUICtrlCreateInput("0", 213, 371, 121, 21)
$Button1 = GUICtrlCreateButton("calculer", 432, 376, 113, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            $Bonus = $tranche * GUICtrlRead($Input1) ; Ici on mutiplie la tranche par la quantité désirée
            $B = GUICtrlRead($Input2);30
            $C = guictrlread($Input3);100
            $D = GUICtrlRead($Input4);100
            $total = $B + $C + $D
            algo($B,$Bonus)
            algo($C,$Bonus)
            algo($D,$Bonus)
            $total = $B + $C + $D

           GUICtrlSetData($input5, $total)
    EndSwitch
WEnd

Func algo(ByRef $value,ByRef $bonus)
    If($value<$bonus) Then ;Si notre bonus est superieur
        $bonus=$bonus - $value
        $value = $value*($var2+$don1)
    Else ;sinon, le modulo va calculer le restant a appliquer.
        $value = $bonus*($var2+$don1) + Mod($value,$bonus)*$var2
        $bonus=0
    EndIf
EndFunc
Répondre