Astuces et codes utiles sur les Mathématiques

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message 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...
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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 
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Coucou

Plein de choses utiles, ici, sur wikipedia :

http://fr.wikipedia.org/wiki/Fonction_trigonométrique
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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)
Dernière modification par Chris le dim. 16/sept./2007 17:43, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

merci :D ; juste dommage, je deteste les macro !! :wink:
mais bon... :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dobro a écrit :merci :D ; juste dommage, je deteste les macro !! :wink:
mais bon... :)
T'as essayé les sardines?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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...
Image
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

J'ai mis l'énigme de la macro capricieuse ici pour éviter de surcharger ce sujet.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

..........
Dernière modification par Backup le dim. 02/oct./2011 13:05, modifié 1 fois.
Répondre