Abdelelansari
Messages postés21Date d'inscriptionsamedi 12 janvier 2008StatutMembreDernière intervention29 mars 2008
-
9 févr. 2008 à 21:44
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024
-
11 févr. 2008 à 14:52
Option Explicit
Dim xmin As Double
Dim xmax As Double
Dim pas As Double
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Public Sub Dessine()
Dim larg As Integer
Dim haut As Integer
Dim x As Double
Dim y As Double
Dim ymax As Double
Dim ymin As Double
Dim kx As Double
Dim ky As Double
Cls
larg = ScaleWidth
haut = ScaleHeight
xmin = Val(Vals.MinX.Text)
xmax = Val(Vals.MaxX.Text)
pas = (xmax - xmin) / larg
ymin = Val(Vals.ymi.Text)
ymax = Val(Vals.yma.Text)
kx = larg / (xmax - xmin)
a = Val(Vals.vala.Text)
b = Val(Vals.valb.Text)
c = Val(Vals.valc.Text)
d = Val(Vals.vald.Text)
repg.Show
If (ymax > 0 And ymin > 0) Or (ymin < 0 And ymax < 0) Then
ky = (haut / ymax) / 2
Else
ky = haut / (ymax - ymin)
End If
If Vals.axe.Value = 1 Then
If xmin <= 0 Then
Line (kx * Abs(xmin), 0)-(kx * Abs(xmin), haut), RGB(255, 255, 255)
Else
Line (0, 0)-(0, haut), RGB(255, 255, 255)
End If
Line (0, haut / 2)-(larg, haut / 2), RGB(255, 255, 255)
End If
For x = xmin To xmax Step pas
y = fonction(x)
PSet ((x - xmin) * kx, (haut / 2 - y * ky)), RGB(0, 255, 0)
Next x
End Sub
Public Function fonction(x As Double) As Double
Select Case UCase(Vals.Combo1.Text)
Case "AX+B"
fonction = a * x + b
Case "SIN(AX+B)"
fonction = Sin(a * x + b)
Case "COS(AX+B)"
fonction = Cos(a * x + b)
Case "AEXP(BX)"
fonction = a * Exp(b * x)
Case "LOG(AX+B)"
fonction = Log(a * x + b)
Case "TAN(AX+B)"
fonction = Tan(a * x + b)
Case "AX^2+BX+C"
fonction = a * x ^ 2 + b * x + c
Case "AX^3+BX^2+CX+D"
fonction = a * x ^ 3 + b * x ^ 2 + c * x + d
End Select
End Function
Public Function Maxi() As Double
Const DX As Double = 0.01
Dim x As Double
Maxi = 0
valzero.valz.Clear
For x = xmin To xmax Step pas
If fonction(x) > Maxi Then Maxi = fonction(x)
If fonction(x) < DX And fonction(x) > -DX Then
valzero.valz.AddItem Format(x, "0.00")
End If
Next x
End Function
Public Function Mini() As Double
Dim x As Double
Mini = 10000000
For x = xmin To xmax Step pas
If fonction(x) < Mini Then Mini = fonction(x)
End If
Next x
End Function
Private Sub Form_Resize()
Dessine
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub MenuValeurs_Click()
Vals.Show
End Sub
Private Sub Menuzéro_Click()
valzero.Show
End Sub
Private Sub quitter_Click()
End
End Sub
Abdelelansari
Messages postés21Date d'inscriptionsamedi 12 janvier 2008StatutMembreDernière intervention29 mars 2008 9 févr. 2008 à 21:59
Salu tout le monde
Je demande à ceux qui s'interesse à ce genre de programme de bien vouloir m'aider à le coriger et surtout les fonctions :
Function Maxi()
Function Mini()
Private Sub MenuValeurs_Click()
Vals.Show
End Sub
Private Sub Menuzéro_Click()
valzero.Show
End Sub
Mes salutatios les plus distingueés
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 11 févr. 2008 à 14:52
Bonjour
Ne met pas réponse Acceptée si ton pb n'est pas solutionné, tu auras moins de visite.
Ensuite, ton code est vraiment indigeste :
- Pas de commentaire (on ne sais pas ce qu'il doit faire, on peut le deviner, mais .... )
- Mise en forme pour le moins illisible, regarde juste ton code colorisé et correctepent indenté :
Option Explicit
Dim xmin As Double
Dim xmax As Double
Dim pas As Double
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Public Sub Dessine()
Dim larg As Integer
Dim haut As Integer
Dim x As Double
Dim y As Double
Dim ymax As Double
Dim ymin As Double
Dim kx As Double
Dim ky As Double
Cls
larg = ScaleWidth
haut = ScaleHeight
xmin = Val(Vals.MinX.Text)
xmax = Val(Vals.MaxX.Text)
pas = (xmax - xmin) / larg
ymin = Val(Vals.ymi.Text)
ymax = Val(Vals.yma.Text)
kx = larg / (xmax - xmin)
a = Val(Vals.vala.Text)
b = Val(Vals.valb.Text)
c = Val(Vals.valc.Text)
d = Val(Vals.vald.Text)
repg.Show
If (ymax > 0 And ymin > 0) Or (ymin < 0 And ymax < 0) Then
ky = (haut / ymax) / 2
Else
ky = haut / (ymax - ymin)
End If
If Vals.axe.Value = 1 Then
If xmin <= 0 Then
Line (kx * Abs(xmin), 0)-(kx * Abs(xmin), haut), RGB(255, 255, 255)
Else
Line (0, 0)-(0, haut), RGB(255, 255, 255)
End If
Line (0, haut / 2)-(larg, haut / 2), RGB(255, 255, 255)
End If
For x = xmin To xmax Step pas
y = fonction(x)
PSet ((x - xmin) * kx, (haut / 2 - y * ky)), RGB(0, 255, 0)
Next x
End Sub
Public Function fonction(x As Double) As Double
Select Case UCase(Vals.Combo1.Text)
Case "AX+B"
fonction = a * x + b
Case "SIN(AX+B)"
fonction = Sin(a * x + b)
Case "COS(AX+B)"
fonction = Cos(a * x + b)
Case "AEXP(BX)"
fonction = a * Exp(b * x)
Case "LOG(AX+B)"
fonction = Log(a * x + b)
Case "TAN(AX+B)"
fonction = Tan(a * x + b)
Case "AX^2+BX+C"
fonction = a * x ^ 2 + b * x + c
Case "AX^3+BX^2+CX+D"
fonction = a * x ^ 3 + b * x ^ 2 + c * x + d
End Select
End Function
Public Function Maxi() As Double
Const DX As Double = 0.01
Dim x As Double
Maxi = 0
valzero.valz.Clear
For x = xmin To xmax Step pas
If fonction(x) > Maxi Then Maxi = fonction(x)
If fonction(x) < DX And fonction(x) > -DX Then
valzero.valz.AddItem Format(x, "0.00")
End If
Next x
End Function
Public Function Mini() As Double
Dim x As Double
Mini = 10000000
For x = xmin To xmax Step pas
If fonction(x) < Mini Then Mini = fonction(x)
End If
Next x
End Function
Private Sub Form_Resize()
Dessine
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Ensuite, évite "End" pour fermer ton programme, ferme-le correctement, tu économisera du temps et des roussources.
Ne met pas d'accent dans les noms d'objet, de variable, de fonction, car parfois certaines personnes ne les affichent pas correctement (voir quelques lignes plus haut (environ 10 lignes).
Ensuite à la place de recalculer à chaque fois ta fonction, utilises un tableau :
à la place de :
If Min>Fonction(x) Then Min=fonction(x)
Utilises plutot un tableau dans lequel toutes les valeurs ourant été calculées :
Dim ltNb() as double
Redim ltNb(0 to NbItem-1) 'Pour mémoriser tous les points (Item)
Ensuite :
For x=0 to NbItem-1
ltNb(x)=Fonction(Depart+x*(Fin-Depart)
Next x
Puis à la place de :
Public Function Mini() As Double
Dim x As Double
Mini = 10000000
For x = xmin To xmax Step pas
If fonction(x) < Mini Then Mini = fonction(x)
End If
Next x
End Function
Code plutot comme cela, tu gagneras en temps d'execution (et pas qu'un peu sur certains graphiques) :
Public Function Mini() As Double
Dim i As Long
Dim lMin as double
lMin = ltNb(LBound(ltNb))
For i = LBound(ltNb) To UBound(ltNb)
If ltNb(i) < Mini Then
lMin = ltNb(i)
End If
Next x
Mini=lMin
End Function
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site