Page 3 sur 4

Publié : dim. 16/oct./2005 10:55
par Heis Spiter
Voila Sigma majucule (Σ) et Pi majuscule (Π) :

Code : Tout sélectionner

Procedure SigmaM(Limite, Indice, Exp)
  Total = 0
  For k = Indice To Limite Step 1
    Total = Total + Pow(k, Exp)
  Next k
  ProcedureReturn Total
EndProcedure

Procedure PiM(Limite, Indice, Exp)
  Total = 1
  For k = Indice To Limite Step 1
    Total = Total * Pow(k, Exp)
  Next k
  ProcedureReturn Total
EndProcedure
Corrigez (et prévenez-moi :P), si j'ai commis des erreurs...

Publié : lun. 10/avr./2006 12:57
par scaraber
Salut
voici un petit code pour convertir des angle en radian degre etc
Dite moi ce que vous en pencer

"ConvertAngle(Angle,enter,sortie)" se trouve dans ma lib qui est en download dans la partie annonce
voici son code:

Code : Tout sélectionner

ProcedureDLL.f ConvertAngle(Angle.f,typeentre,typesorti)
  PI.f = 3.1415926
  
  If typesorti=1
    If typeentre=2
      Angles.f=180 * (Angle.f) / 200
    EndIf
    If typeentre=3
      Angles.f=180 * (Angle.f) / PI.f
    EndIf   
  EndIf  
  
  If typesorti=2
    If typeentre=1
      Angles.f=200 * (Angle.f) / 180
    EndIf
    If typeentre=3
      Angles.f=200 * (Angle.f) / PI.f
    EndIf   
  EndIf  
  
  If typesorti=3
    If typeentre=2
      Angles.f=PI.f * (Angle.f) / 200
    EndIf
    If typeentre=1
      Angles.f=PI.f * (Angle.f) / 180
    EndIf   
  EndIf  

  If typesorti=typeentre
    Angles.f=Angle.f
  EndIf 
  
  ProcedureReturn Angles.f
EndProcedure

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #CheckBox_0
  #CheckBox_1
  #CheckBox_2
  #CheckBox_3
  #CheckBox_4
  #CheckBox_5
  #String_0
  #String_1
  #Frame3D_0
  #Frame3D_1
  #Button_0
EndEnumeration
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 182, 358,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Convertisseur d'angles")
    If CreateGadgetList(WindowID())
      CheckBoxGadget(#CheckBox_0, 30, 30, 90, 20, "Degré")
      CheckBoxGadget(#CheckBox_1, 30, 60, 100, 20, "Grade")
      CheckBoxGadget(#CheckBox_2, 30, 90, 90, 20, "Radian")
      CheckBoxGadget(#CheckBox_3, 30, 180, 90, 20, "Degré")
      CheckBoxGadget(#CheckBox_4, 30, 210, 100, 20, "Grade")
      CheckBoxGadget(#CheckBox_5, 30, 240, 100, 20, "Radian")
      StringGadget(#String_0, 30, 120, 100, 20, "")
      StringGadget(#String_1, 30, 270, 100, 20, "", #PB_String_ReadOnly)
      Frame3DGadget(#Frame3D_0, 20, 10, 140, 140, "Angle à convertir")
      Frame3DGadget(#Frame3D_1, 20, 160, 140, 150, "Angle converti")
      ButtonGadget(#Button_0, 20, 320, 140, 30, "Convertir")
      
    EndIf
  EndIf
EndProcedure
Open_Window_0()
Repeat
  
  EventID=WindowEvent()
  If EventID=#PB_Event_Gadget
    Select  EventGadgetID() 
      Case #Button_0
  If GetGadgetState(#CheckBox_0)=1
    enter=1
  ElseIf GetGadgetState(#CheckBox_1)=1
    enter=2
  ElseIf GetGadgetState(#CheckBox_2)=1
    enter=3
  EndIf

  If GetGadgetState(#CheckBox_3)=1
    sortie=1
  ElseIf GetGadgetState(#CheckBox_4)=1
    sortie=2
  ElseIf GetGadgetState(#CheckBox_5)=1
    sortie=3
  EndIf
  Angle.f=ValF(GetGadgetText(#String_0))
  Angles.f=ConvertAngle(Angle,enter,sortie)
  SetGadgetText(#String_1,StrF(Angles.f))
  EndSelect 
  EndIf 
Until EventID=#PB_Event_CloseWindow 

Publié : mer. 17/mai/2006 19:40
par Dr. Dri
J'ai mis à jour mon post en prenant en compte les nouveautés (macros, assembleur en ligne plus clair, #PI) de la V4 ^^

Dri :)

Publié : ven. 04/août/2006 23:53
par Flype
Coucou

Plein de choses utiles, ici, sur wikipedia :

http://fr.wikipedia.org/wiki/Fonction_trigonométrique

Publié : sam. 10/févr./2007 17:57
par Dr. Dri
Ca fait longtemps que personne n'a rien posté alors j'ai ajouté trois fonctions de probabilités (dans mon premier post)

Dri

Publié : dim. 16/sept./2007 14:58
par Chris
Allez, hop!
Je remonte ce topic. (Enfin... y a pas besoin de le remonter, puisqu'il ne descend pas, vu qu'il est en post-it. Mais bon... Je me comprend!) :roll:

J'ai commencé à faire un petit fichier de macros regroupant les différentes formules pour le calcul de périmètres, surfaces, volumes, et tout ce qui concerne la géométrie en général.

J'ai à peu près tout piqué dans l'aide, et j'ai aussi essayé d'ajouter des calculs qui découlent des "standards", comme par exemple, calculer la longueur d'un rectangle par rapport à sa surface et à sa hauteur. Enfin, bref, des choses de ce genre, quoi.

Mais bon. Comme les maths et moi, on est un peu en froid depuis quelques années, je vous met le code ici, et si vous trouvez des erreurs ou des méthodes plus simple, vous pourrez toujours les modifier.

Code : Tout sélectionner

#RadToDeg = 180.0 / #PI
#RadToGrd = 200.0 / #PI
#DegToRad = #PI / 180.0
#DegToGrd = 200 / 180.0
#GrdToRad = #PI / 200.0
#GrdToDeg = 180 / 200.0

;{- Conversions d'Angles (Macros sauvagement piquées à Dr. Dri)
;/ An   = Angle
;-
Macro DegToRad(An)                ; Degrés en Radians
  ((An) * #DegToRad)
EndMacro

Macro DegToGrd(An)                ; Degréss en Grades
  ((An) * #DegToGrd)
EndMacro

Macro RadToDeg(An)                ; Radians en Degrés
  ((An) * #RadToDeg)
EndMacro

Macro RadToGrd(An)                ; Radians en Grades
  ((An) * #RadToGrd)
EndMacro

Macro GrdToRad(An)                ; Grades en Radians
  ((An) * #GrdToRad)
EndMacro

Macro GrdToDeg(An)                ; Grades en Degrés
  ((An) * #GrdToDeg)
EndMacro
;}

;{- Carré
;/ Co   = Longueur du côté
;/ Di   = Longueur de la diagonale
;/ Su   = Surface
;/ Pe   = Périmètre
;-
Macro Peri_Carre(Co)              ; Périmètre du carré
  Co*4
EndMacro

Macro Surf_Carre(Co)              ; Surface du carré
  Co*Co
EndMacro

Macro Diag_Carre(Co)              ; Diagonale du carré
  Co*Sqr(2)
EndMacro

Macro CoteFromSurf(Su)            ; Longueur du côté par rapport à la surface
  Sqr(Su)
EndMacro

Macro CoteFromDiag(Di)            ; Longueur du côté par rapport à la diagonale
  Di/Sqr(2)
EndMacro

Macro CoteFromPeri(Pe)            ; Longueur du côté par rapport au périmètre
  Pe/4
EndMacro
;}

;{- Rectangle
;/ Lo   = Longueur
;/ La   = Largeur
;/ Hy   = Hypoténuse
;/ Su   = Surface
;/ Pe   = Périmètre
;/ Ca   = Longueur du côté adjacent à l'hypoténuse
;/ Ln   = Longueur d'un côté quelconque (sauf hypoténuse)
;-
Macro Peri_Rect(Lo, La)           ; Périmètre du rectangle
  (Lo + La) * 2
EndMacro

Macro Surf_Rect(Lo, La)           ; Surface du rectangle
  Lo * La
EndMacro

Macro Diag_Rect(Lo, La)           ; Calcul de l'hypoténuse
  Sqr(Pow(Lo, 2) + Pow(La, 2))
EndMacro

Macro Angle_Rect(Ca, Hy)          ; Calcul des angles
  ACos(Ca/Hy)/0.0174533
EndMacro

Macro L_Rect(Hy, Ln)              ; Calcul de la largeur ou de la longueur par rapport à l'hypoténuse
  Sqr(Pow(Hy, 2) - Pow(Ln, 2))
EndMacro
;}

;{- Cercle
;/ Ra   = Rayon
;/ Di   = Diamètre
;/ Su   = Surface
;/ La   = Longueur de l'arc
;-
Macro Peri_Cercle_R(Ra)           ; Périmètre du cercle par rapport au rayon
  2 * #PI * Ra
EndMacro

Macro Peri_Cercle_D(Di)           ; Périmètre du cercle par rapport au diamètre
  #PI * Di
EndMacro

Macro Surf_Cercle_R(Ra)           ; Surface du cercle par rapport au rayon
  #PI * (Pow(Ra, 2))
EndMacro

Macro Surf_Cercle_D(Di)           ; Surface du cercle par rapport au diamètre
  #PI/4 * Pow(Di, 2)
EndMacro

Macro Ra_Cercle_S(Su)             ; Rayon du cercle par rapport à sa surface
  Sqr(Su / #PI)
EndMacro

Macro Di_Cercle_S(Su)             ; Diamètre du cercle par rapport à sa surface
  Sqr(Su / (#PI/4))
EndMacro

Macro Peri_Cercle_S(Su)           ; Perimètre du cercle par rapport à sa surface
  #PI * Sqr(Su / (#PI/4))
EndMacro

Macro Lng_Arc_Cercle(Ra, An)      ; Longueur d'un arc de cercle
  #PI * Ra * (An / 180)
EndMacro

Macro Lng_Crd_Cercle(Ra, An)      ; Longueur de la corde
  2 * Ra * Sin(DegToRad(An)/2)
EndMacro

Macro Surf_Arc_Cercle(Di, An)     ; Surface d'un arc de cercle
  #PI * Pow(Di,2) * An /1440 
EndMacro

Macro Surf_Arc_From_LArc(La, Ra)   ; Surface d'un arc de cercle par rapport à la longueur de l'arc
  La * Ra / 2 
EndMacro
;} 
  
;{- Parallelogramme
;/ Lo = Longueur 
;/ Ha = Hauteur 
;/ La = Largeur 
;/ Su = Surface 
;/ Pe = Périmètre
;-
Macro Peri_Para(Lo, La)           ; Périmètre du parallelogramme
  Lo*2 + La*2
EndMacro

Macro Surf_Para(Lo, Ha)           ; Surface du parallelogramme
  Lo * Ha
EndMacro
;}

;{- Trapeze
;/ Gb = Grande Base
;/ Pb = Petite Base
;/ Ha = Hauteur
;/ Su = Surface
;/ Pe = Périmètre
;/ C1 = Côté 1
;/ C2 = Côté 2
;-
Macro Surf_Trapeze(Gb, Pb, Ha)    ; Surface du trapèze
  ((Gb + Pb) * Ha) / 2
EndMacro

Macro Peri_Trapeze(Gb, Pb, C1, C2); Périmètre du trapèze
  Gb + Pb + C1 + C2
EndMacro
;}



;/ Tests

Debug "--- Angles ---"
Debug DegToRad(180)
Debug DegToGrd(180)
Debug RadToDeg(#PI)
Debug RadToGrd(#PI)
Debug GrdToRad(200)
Debug GrdToDeg(200)
Debug ""
Debug "--- Carré ---"
Debug Peri_Carre(10)
Debug Surf_Carre(10)
Debug Diag_Carre(10)
Debug CoteFromSurf(100)
Debug CoteFromDiag(14.1421356)
Debug CoteFromPeri(40)
Debug ""
Debug "--- Rectangle ---"
Debug Peri_Rect(30, 40)
Debug Surf_Rect(30, 40)
Debug Diag_Rect(30, 40)
Debug Angle_Rect(40, 50)
Debug L_Rect(50, 40)
Debug ""
Debug "--- Cercles ---"
Debug Peri_Cercle_R(50)
Debug Peri_Cercle_D(100)
Debug Surf_Cercle_R(50)
Debug Surf_Cercle_D(100)
Debug Ra_Cercle_S(7853.98193359375)
Debug Di_Cercle_S(7853.98193359375)
Debug Peri_Cercle_S(7853.98193359375)
Debug Lng_Arc_Cercle(50, 180)
Debug Lng_Crd_Cercle(50, 180)
Debug Surf_Arc_Cercle(100, 180)
Debug Surf_Arc_From_LArc(157.0796, 50)
Debug ""
Debug "--- Parallelogrammes ---"
Debug Peri_Para(100, 60)
Debug Surf_Para(100, 60)
Debug ""
Debug "--- Trapèze ---"
Debug Surf_Trapeze(100, 90, 80)
Debug Peri_Trapeze(100, 90, 85, 85)

Publié : dim. 16/sept./2007 15:31
par Backup
merci :D ; juste dommage, je deteste les macro !! :wink:
mais bon... :)

Publié : dim. 16/sept./2007 15:34
par Chris
Dobro a écrit :merci :D ; juste dommage, je deteste les macro !! :wink:
mais bon... :)
T'as essayé les sardines?

Publié : dim. 23/sept./2007 2:52
par Dr. Dri
@Chris
Dans tes macros mets toujours les calculs entre parenthèse. Sinon tu peux avoir de mauvaises surprises de priorité de calcul.

Code : Tout sélectionner

Macro onze()
  10 + 1
EndMacro

Debug onze()
Debug onze() * 10 ;11 * 10 = 110
Dri

Publié : dim. 23/sept./2007 7:47
par Chris
Dr. Dri a écrit :@Chris
Dans tes macros mets toujours les calculs entre parenthèse. Sinon tu peux avoir de mauvaises surprises de priorité de calcul.

Code : Tout sélectionner

Macro onze()
  10 + 1
EndMacro

Debug onze()
Debug onze() * 10 ;11 * 10 = 110
Dri
Ah oui! ... Effectivement 8O
Je le ferais.

Publié : mer. 26/sept./2007 0:52
par Ollivier
C'est vrai que les macros ne sont pas encore tip top au poil nickel. Je les utilise de moins en moins, et pourtant c'est un régal si elle fonctionnait à 100%.

Le souci est dès qu'on rentre trop de calcul dans une macro, elle plante. Idem, quand une macro en utilise une autre.

J'espère que ce tir sera rectifié dans les prochaines mises à jour car un code blindé de macro, c'est du temps et de la vitesse gagnés, avec une bonne présentation de programme structuré et plus simple encore qu'une procédure puisqu'on a pas tous les types et remaniements de variables à faire comme dans une procédure. Cette dernière ne devient utile que pour la récursivité.

@chris

Merci pour ces calculs qui me font penser à un petit prog sympa de géométrie. Qui sait : ça me tentera d'en faire une ébauche...

Publié : mer. 26/sept./2007 17:49
par Dr. Dri
Ollivier a écrit :C'est vrai que les macros ne sont pas encore tip top au poil nickel. Je les utilise de moins en moins, et pourtant c'est un régal si elle fonctionnait à 100%.
C'est le principe des macros de remplacer le code, donc si tu ne mets pas de parenthèse c'est normal d'obtenir ce résultat

Dri

Publié : mer. 26/sept./2007 17:53
par Flype
@dri: oui je pense pareil.

je suis pas sûr du tout de ce que t'avances Ollivier.

montre moi des macros qui marchent pas et on en reparle mais franchement je les utilise trèèèèès souvent et sans problème. faut juste savoir ce qu'on fait et notamment bien gérer les parenthèses quitte à en mettre trop que pas assez.

une macro N'EST PAS une procédure. trop de gens font pas la différence...

Publié : mer. 26/sept./2007 18:17
par Ollivier
J'ai mis l'énigme de la macro capricieuse ici pour éviter de surcharger ce sujet.

Publié : ven. 20/mars/2009 23:41
par Backup
..........