Calculer les pourcentages

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Calculer les pourcentages

Message par Micoute »

Bonjour à tous, au cas où ça peut vous servir, je vous offre ce module pour calculer les pourcentages.

Code : Tout sélectionner

;Pourcentages
 
 DeclareModule Pourcentage
   
  Structure Calcul  
    Augmentation.f
    Reduction.f
    ValeurFinale.f  
  EndStructure
  
  Global MonCalcul.Calcul
      
Declare CalculerPourcentage(ValeurTotale.f, ValeurPartielle.f)
Declare CalculerValeurPartielle(Pourcentage.f, ValeurTotale.f)
Declare CalculerValeurTotale(ValeurPartielle.f, Pourcentage.f)
Declare CalculReduction(ValeurInitiale.f, Pourcentage.f)
Declare CalculAugmentation(ValeurInitiale.f, Pourcentage.f)
Declare CalculerTauxVariation(ValeurInitiale.f, ValeurFinale.f)

EndDeclareModule

Module Pourcentage

Procedure CalculerPourcentage(ValeurTotale.f, ValeurPartielle.f)
  Protected Resultat.f
  Resultat = 100 * (ValeurPartielle / ValeurTotale)
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerPourcentage(360, 216) ;60

Procedure CalculerValeurPartielle(Pourcentage.f, ValeurTotale.f)  
  Protected Resultat.f
  Resultat = (Pourcentage * ValeurTotale) / 100
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerValeurPartielle(360, 60) ;216

Procedure CalculerValeurTotale(ValeurPartielle.f, Pourcentage.f)
  Protected Resultat.f
  Resultat = 100 * (ValeurPartielle / Pourcentage)
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerValeurTotale(216, 60) ;360

Procedure CalculReduction(ValeurInitiale.f, Pourcentage.f)
  Protected.f Reduction, ValeurFinale
  MonCalcul\Reduction = ValeurInitiale * (Pourcentage / 100)
  MonCalcul\ValeurFinale = ValeurInitiale * (1 - Pourcentage / 100)
  ProcedureReturn Reduction
EndProcedure

;CalculReduction(360, 40)
;Debug MonCalcul\Reduction ;144
;Debug MonCalcul\ValeurFinale ;216

Procedure CalculAugmentation(ValeurInitiale.f, Pourcentage.f)
  
  Protected.f Augmentation, ValeurFinale
  
  MonCalcul\Augmentation = ValeurInitiale * (Pourcentage / 100)
  MonCalcul\ValeurFinale = ValeurInitiale * (1 + Pourcentage / 100)
  
EndProcedure

;CalculAugmentation(360, 40)
;Debug MonCalcul\Augmentation ;144
;Debug MonCalcul\ValeurFinale ;504

Procedure CalculerTauxVariation(ValeurInitiale.f, ValeurFinale.f)
  Protected Resultat.f
  Resultat = 100 * (ValeurFinale - ValeurInitiale) / ValeurInitiale
  ProcedureReturn Resultat
EndProcedure

;Debug CalculerTauxVariation(360, 216) ;-40
EndModule

CompilerIf #PB_Compiler_IsMainFile
  
  Enumeration Fenetres
    #Fenetre_Pourcentage
  EndEnumeration
  
  Enumeration Gadgets
    #Container_Pourcentage
    #Container_ValeurTotale
    #Container_Augmentation
    #Container_ValeurPartielle
    #Container_Reduction
    #Container_Variation
    
    #Btn_Pourcentage
    #Btn_ValeurTotale
    #Btn_Augmentation
    #Btn_ValeurPartielle
    #Btn_Reduction
    #Btn_Variation
    
    #Txt_CalculPourcentage
    #Txt_CalculValeurTotale
    #Txt_CalculAugmentation
    #Txt_CalculValeurPartielle
    #Txt_CalculReduction
    #Txt_CalculVariation  
    #Txt_Pourcentage
    #Txt_ValeurTotale
    #Txt_ValeurFinale
    #Txt_ValeurPartielle
    #Txt_ValeurFinaleReduction
    #Txt_Variation
    #Txt_Reduction
    #Txt_Augmentation
    
    #Txt_PourcentageValeurtotale
    #Txt_PourcentageValeurPartielle  
    #Txt_ValTotValeurPartielle
    #Txt_ValTotPourcentage
    #Txt_AugValeurInitiale
    #Txt_AugAugmentation
    #Txt_ValPartValeurTotale
    #Txt_ValPartPourcentage
    #Txt_RedValeurInitiale
    #Txt_RedReduction
    #Txt_VarValeurInitiale
    #Txt_VarValeurFinale
    
    #Str_PourcentageValeurTotale
    #Str_PourcentageValeurPartielle
    #Str_valpartvaltot
    #Str_Pourcentagevaltot
    #Str_initaug
    #Str_Augaug
    #Str_totvalpart
    #Str_Pcvalpart
    #Str_InitRed
    #Str_Redred
    #Str_Initvar
    #Str_Finalevar
  EndEnumeration
  
  Enumeration Polices
    #Police
  EndEnumeration
  
  Global.f Vt, Vt2, Vt3, Vp, Vp2, Vp3,Pc, Pc2, Pc3, Pc4, Pc5, Pc6, Vi, Vi2, V3, Vf, Vf2
  Global Evenement
  
  Procedure Ouvrir_Fenetre_Pourcentage()
    If OpenWindow(#Fenetre_Pourcentage, 448, 22, 617, 517, "Pourcentages", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
      
      ContainerGadget(#Container_Pourcentage, 5, 5, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculPourcentage, 10, 10, 270, 20, "Calcul du pourcentage (%)", #PB_Text_Center)
      TextGadget(#Txt_PourcentageValeurtotale, 10, 45, 110, 20, "Valeur totale :", #PB_Text_Right)
      TextGadget(#Txt_PourcentageValeurPartielle, 10, 75, 110, 20, "Valeur partielle :", #PB_Text_Right)
      TextGadget(#Txt_Pourcentage, 10, 125, 270, 20, "Pourcentage :", #PB_Text_Center)
      StringGadget(#Str_PourcentageValeurTotale, 130, 40, 115, 20, "")
      StringGadget(#Str_PourcentageValeurPartielle, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Pourcentage, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_Variation, 310, 5, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculVariation, 10, 10, 270, 20, "Calcul de variation", #PB_Text_Center)
      TextGadget(#Txt_VarValeurInitiale, 10, 45, 110, 20, "Valeur initiale :", #PB_Text_Right)
      TextGadget(#Txt_VarValeurFinale, 10, 75, 110, 20, "Valeur finale :", #PB_Text_Right)
      TextGadget(#Txt_Variation, 10, 125, 270, 20, "Variation : ", #PB_Text_Center)
      StringGadget(#Str_Initvar, 130, 40, 115, 20, "")
      StringGadget(#Str_Finalevar, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Variation, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_ValeurTotale, 5, 335, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculValeurTotale, 10, 10, 270, 20, "Calcul de la valeur totale", #PB_Text_Center)
      TextGadget(#Txt_ValTotValeurPartielle, 10, 45, 110, 20, "Valeur partielle :", #PB_Text_Right)
      TextGadget(#Txt_ValTotPourcentage, 10, 75, 110, 20, "Pourcentage :", #PB_Text_Right)
      TextGadget(#Txt_ValeurTotale, 10, 125, 270, 20, "Valeur totale : ", #PB_Text_Center)
      StringGadget(#Str_valpartvaltot, 130, 40, 115, 20, "")
      StringGadget(#Str_Pourcentagevaltot, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_ValeurTotale, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_ValeurPartielle, 310, 335, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculValeurPartielle, 0, 10, 290, 20, "Calcul de la valeur partielle", #PB_Text_Center)
      TextGadget(#Txt_ValPartValeurTotale, 10, 45, 110, 20, "Valeur totale :", #PB_Text_Right)
      TextGadget(#Txt_ValPartPourcentage, 10, 75, 110, 20, "Pourcentage :", #PB_Text_Right)
      TextGadget(#Txt_ValeurPartielle, 10, 125, 270, 20, "Valeur partielle : ", #PB_Text_Center)
      StringGadget(#Str_totvalpart, 130, 40, 115, 20, "")
      StringGadget(#Str_Pcvalpart, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_ValeurPartielle, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_Augmentation, 5, 170, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculAugmentation, 10, 10, 270, 20, "Calcul d'une augmentation", #PB_Text_Center)
      TextGadget(#Txt_AugValeurInitiale, 10, 45, 110, 20, "Valeur initiale :", #PB_Text_Right)
      TextGadget(#Txt_AugAugmentation, 10, 75, 110, 20, "Augmentation %", #PB_Text_Right)
      TextGadget(#Txt_ValeurFinale, 10, 125, 270, 20, "Valeur finale : ", #PB_Text_Center)
      TextGadget(#Txt_Augmentation, 10, 100, 270, 20, "Augmentation (valeur) : ", #PB_Text_Center)
      StringGadget(#Str_initaug, 130, 40, 115, 20, "")
      StringGadget(#Str_Augaug, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Augmentation, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ContainerGadget(#Container_Reduction, 310, 170, 300, 160, #PB_Container_Raised)
      TextGadget(#Txt_CalculReduction, 10, 10, 270, 20, "Calcul d'une réduction", #PB_Text_Center)
      TextGadget(#Txt_RedValeurInitiale, 10, 45, 110, 20, "Valeur initiale :", #PB_Text_Right)
      TextGadget(#Txt_RedReduction, 10, 75, 110, 20, "Réduction % :", #PB_Text_Right)
      TextGadget(#Txt_ValeurFinaleReduction, 10, 125, 270, 20, "Valeur finale : ", #PB_Text_Center)
      TextGadget(#Txt_Reduction, 10, 100, 270, 20, "Réduction (valeur) : ", #PB_Text_Center)
      StringGadget(#Str_InitRed, 130, 40, 115, 20, "")
      StringGadget(#Str_Redred, 130, 70, 115, 20, "")
      ButtonGadget(#Btn_Reduction, 255, 70, 30, 20, "Ok")
      CloseGadgetList()
      
      ; Gadget Fonts
      For i = #Txt_CalculPourcentage To #Txt_Augmentation
        SetGadgetFont(i, LoadFont(#Police, "DejaVu Sans", 10, #PB_Font_Bold|#PB_Font_HighQuality))
      Next i
      
    EndIf
  EndProcedure
  
  Ouvrir_Fenetre_Pourcentage()
  
  ; Boucle principale
  Repeat
    Evenement = WaitWindowEvent()
    Select Evenement
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Btn_Pourcentage
            Vt = ValF(GetGadgetText(#Str_PourcentageValeurTotale))
            Vp = ValF(GetGadgetText(#Str_PourcentageValeurPartielle))
            Pc = Pourcentage::CalculerPourcentage(Vt, Vp)
            If GetGadgetText(#Str_PourcentageValeurTotale) <> "" And GetGadgetText(#Str_PourcentageValeurPartielle) <> ""
              SetGadgetText(#Txt_Pourcentage, "Pourcentage :" + StrF(Pc) + " %")
            EndIf
            
          Case #Btn_ValeurTotale
            Vp2 = ValF(GetGadgetText(#Str_valpartvaltot))
            Pc2 = ValF(GetGadgetText(#Str_Pourcentagevaltot))
            Vt2 = Pourcentage::CalculerValeurTotale(Vp2, Pc2)
            If GetGadgetText(#Str_valpartvaltot) <> "" And GetGadgetText(#Str_Pourcentagevaltot) <> ""
              SetGadgetText(#Txt_ValeurTotale, "Valeur totale : " + StrF(Vt2))
            EndIf
            
          Case #Btn_Augmentation
            Vi = ValF(GetGadgetText(#Str_initaug))
            Pc3 = ValF(GetGadgetText(#Str_Augaug))
            If GetGadgetText(#Str_initaug) <> "" And GetGadgetText(#Str_Augaug) <> ""            
              Pourcentage::CalculAugmentation(Vi, Pc3)
              SetGadgetText(#Txt_Augmentation, "Augmentation (valeur) : " + StrF(Pourcentage::MonCalcul\Augmentation,2))
              SetGadgetText(#Txt_ValeurFinale, "Valeur finale : " + StrF(Pourcentage::MonCalcul\ValeurFinale,2))
            EndIf
            
          Case #Btn_ValeurPartielle
            Vt3 = ValF(GetGadgetText(#Str_totvalpart))
            Pc4 = ValF(GetGadgetText(#Str_Pcvalpart))
            If GetGadgetText(#Str_totvalpart) <> "" And GetGadgetText(#Str_Pcvalpart) <> ""
              Vp3 = Pourcentage::CalculerValeurPartielle(Pc4, Vt3)
              SetGadgetText(#Txt_ValeurPartielle, "Valeur partielle : " + StrF(Vp3))
            EndIf
            
          Case #Btn_Reduction
            Vi2 = ValF(GetGadgetText(#Str_InitRed))
            Pc5 = ValF(GetGadgetText(#Str_Redred))
            If GetGadgetText(#Str_InitRed) <> "" And GetGadgetText(#Str_Redred) <> ""
              Pourcentage::CalculReduction(Vi2, Pc5)
              SetGadgetText(#Txt_Reduction, "Réduction (valeur) : " + StrF(Pourcentage::MonCalcul\Reduction,2))
              SetGadgetText(#Txt_ValeurFinaleReduction, "Valeur finale : " + StrF(Pourcentage::MonCalcul\ValeurFinale,2))
            EndIf
          Case #Btn_Variation
            Vi3 = ValF(GetGadgetText(#Str_Initvar))
            Vf2 = ValF(GetGadgetText(#Str_Finalevar))
            If GetGadgetText(#Str_Initvar) <> "" And GetGadgetText(#Str_Finalevar) <> ""
              Pc6 = Pourcentage::CalculerTauxVariation(Vi3, Vf2)
              SetGadgetText(#Txt_Variation, "Variation : " + StrF(Pc6) + " %")
            EndIf  
        EndSelect
        
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Fenetre_Pourcentage
            CloseWindow(#Fenetre_Pourcentage)
            Break
        EndSelect
    EndSelect
  ForEver
  
CompilerEndIf
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Calculer les pourcentages

Message par Bernie »

Merci micoute de ton partage
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Calculer les pourcentages

Message par Kwai chang caine »

Je n'avais pas remarqué qu'il y avait autant de type de pourcentages différents 8O
En tout cas merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calculer les pourcentages

Message par Micoute »

Mais de rien, mon bon KCC !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre