J'ai codé ces quelques procedures pour faire de la dérivation, de l'intégration et l'évaluation de polynômes de degré 10 au maximum. En gros, je manipule seulement les coefficients du polynôme dérivé ou intégré. C'est fonctionnel mais encore en développement.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fonction Maths - Polynômes
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 15 avril 2005
; Mise à jour : 15 avril 2005
; Codé avec PureBasic V3.93
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Dériver un polynôme de degré 10
; Intégrer un polynôme de degré 9
; Évaluer d'un polynôme de degré 10 à la valeur de X spécifié.
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Structure Polynome
ax10.f
bx9.f
cx8.f
dx7.f
ex6.f
fx5.f
gx4.f
hx3.f
ix2.f
jx1.f
k.f
EndStructure
Procedure CreerPolynome(ax10.f, bx9.f, cx8.f, dx7.f, ex6.f, fx5.f, gx4.f, hx3.f, ix2.f, jx1.f, k.f)
*un_polynome.Polynome = AllocateMemory(SizeOf(Polynome))
*un_polynome\ax10 = ax10
*un_polynome\bx9 = bx9
*un_polynome\cx8 = cx8
*un_polynome\dx7 = dx7
*un_polynome\ex6 = ex6
*un_polynome\fx5 = fx5
*un_polynome\gx4 = gx4
*un_polynome\hx3 = hx3
*un_polynome\ix2 = ix2
*un_polynome\jx1 = jx1
*un_polynome\k = k
ProcedureReturn *un_polynome
EndProcedure
Procedure DeriverPolynome(*p.Polynome)
*derive.Polynome = AllocateMemory(SizeOf(Polynome))
bx9.f = *p\ax10 * 10
cx8.f = *p\bx9 * 9
dx7.f = *p\cx8 * 8
ex6.f = *p\dx7 * 7
fx5.f = *p\ex6 * 6
gx4.f = *p\fx5 * 5
hx3.f = *p\gx4 * 4
ix2.f = *p\hx3 * 3
jx1.f = *p\ix2 * 2
k.f = *p\jx1
*derive = CreerPolynome(0, bx9, cx8, dx7, ex6, fx5, gx4, hx3, ix2, jx1, k)
ProcedureReturn *derive
EndProcedure
Procedure IntegrerPolynome(*p.Polynome)
*integrale.Polynome = AllocateMemory(SizeOf(Polynome))
ax10.f = *p\bx9 / 10
bx9.f = *p\cx8 / 9
cx8.f = *p\dx7 / 8
dx7.f = *p\ex6 / 7
ex6.f = *p\fx5 / 6
fx5.f = *p\gx4 / 5
gx4.f = *p\hx3 / 4
hx3.f = *p\ix2 / 3
ix2.f = *p\jx1 / 2
jx1.f = *p\k
*integrale = CreerPolynome(ax10, bx9, cx8, dx7, ex6, fx5, gx4, hx3, ix2, jx1, 0)
ProcedureReturn *integrale
EndProcedure
Procedure.f EvaluerPolynome(*p.Polynome, ValeurX.f)
Resultat.f = *p\ax10 * Pow(ValeurX,10) + *p\bx9 * Pow(ValeurX,9)
Resultat = Resultat + *p\cx8 * Pow(ValeurX,8) + *p\dx7 * Pow(ValeurX,7)
Resultat = Resultat + *p\ex6 * Pow(ValeurX,6) + *p\fx5 * Pow(ValeurX,5)
Resultat = Resultat + *p\gx4 * Pow(ValeurX,4) + *p\hx3 * Pow(ValeurX,3)
Resultat = Resultat + *p\ix2 * Pow(ValeurX,2) + *p\jx1 * ValeurX + *p\k
ProcedureReturn Resultat
EndProcedure
Enumeration 1234
#AfficherPolynome_win
#Btn_Fermer_AfficherPolynome
#ListIcon_polynome
EndEnumeration
Procedure AfficherPolynome(*p.Polynome)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration du tableau >>>>>
Dim TexteNomTerme.s(10)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Initialisation du tableau >>>>>
TexteNomTerme(0) = "x à la 10" + Chr(10) + StrF(*p\ax10, 6)
TexteNomTerme(1) = "x à la 9" + Chr(10) + StrF(*p\bx9, 6)
TexteNomTerme(2) = "x à la 8" + Chr(10) + StrF(*p\cx8, 6)
TexteNomTerme(3) = "x à la 7" + Chr(10) + StrF(*p\dx7, 6)
TexteNomTerme(4) = "x à la 6" + Chr(10) + StrF(*p\ex6, 6)
TexteNomTerme(5) = "x à la 5" + Chr(10) + StrF(*p\fx5, 6)
TexteNomTerme(6) = "x à la 4" + Chr(10) + StrF(*p\gx4, 6)
TexteNomTerme(7) = "x à la 3" + Chr(10) + StrF(*p\hx3, 6)
TexteNomTerme(8) = "x à la 2" + Chr(10) + StrF(*p\ix2, 6)
TexteNomTerme(9) = "x à la 1" + Chr(10) + StrF(*p\jx1, 6)
TexteNomTerme(10) = "Constante" + Chr(10) + StrF(*p\k, 6)
If OpenWindow(#AfficherPolynome_win, 0, 0, 300, 220, #PB_Window_ScreenCentered, "Afficher Polynôme")
If CreateGadgetList(WindowID(#AfficherPolynome_win))
ListIconGadget(#ListIcon_polynome, 5, 5, 290, 180, "Terme", 140, #PB_ListIcon_GridLines)
AddGadgetColumn(#ListIcon_polynome, 1, "Coefficient", 145)
For item = 0 To 10
AddGadgetItem(#ListIcon_polynome, -1, TexteNomTerme(item))
Next
ButtonGadget(#Btn_Fermer_AfficherPolynome, WindowWidth() / 2 - 50, WindowHeight() - 30, 100, 25, "OK")
EndIf
EndIf
Repeat
EventID2 = WaitWindowEvent()
If EventID2 = #PB_EventGadget
Select EventGadgetID() ; La gestion des évenements
Case #Btn_Fermer_AfficherPolynome
EventID2 = #PB_EventCloseWindow
EndSelect
EndIf
Until EventID2 = #PB_EventCloseWindow
CloseWindow(#AfficherPolynome_win)
EndProcedure
AfficherPolynome(DeriverPolynome(CreerPolynome(0, 0, 0, 6, 0, 2, 4, 3, 2, 1, 1)))