Representation Graphique de fonctions

Abdelelansari Messages postés 21 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 29 mars 2008 - 9 févr. 2008 à 21:44
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 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








 

2 réponses

Abdelelansari Messages postés 21 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 29 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                              

                                          
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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

Private Sub MenuValeurs_Click()
  Vals.Show
End Sub

Private Sub Menuz?ro_Click()
  valzero.Show
End Sub

Private Sub quitter_Click()
  End
End Sub, ----
(Coloration syntaxique automatique par Kenji)

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
0
Rejoignez-nous