Traceur de courbe

0/5 (5 avis)

Vue 19 491 fois - Téléchargée 6 673 fois

Description

Salut!

-Il trace toutes forme de courbe.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010

Salut!

-Pour quoi il est long?
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010

Merci
Messages postés
251
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008
1
Salut !

D'abord désolé de prendre la discussion en cours... Pour ma part voici ce que je dirais :

Text1 : Renommer txtExpr (expression)
Text2 : Supprimer
Text3 : Renommer txtIncr (pas du tracé)
Text4 : Renommer txtEval (évaluation)
p : Renommer picArea (la zone de dessin)
p2 : Renommer picData (les données pour le tracé)
Command1 : Renommer cmdFast (tracé rapide)
Command2 : Renommer cmdSlow (tracé lent)

ça c'est pour y voir un peu plus clair. Conventions dans les noms : un préfixe qui indique le type de contrôle (txt : TextBox ; cmd : CommandButton) suivi d'un mot ou d'une abréviation qui s'efforce d'être claire (pour celui qui a codé comme pour ceux qui regardent le code plus tard).

Ensuite, on va réorganiser l'ensemble.

a) D'abord supprimer "Dim a, c, d" qui ne sert à rien, et écrire Option Explicit tout en haut. Déclarer hors procédure :

Dim MyScript As ScriptControl
Dim StrFonction As String
Dim Result

b) Créer une procédure destinée à tracer le repère (le code correspondant est réécrit 5 fois dans ton code !) :

Private Sub DrawAxes()
picArea.Line (picArea.ScaleLeft, 0)-(picArea.ScaleWidth, 0), vbBlue
picArea.Line (0, picArea.ScaleTop)-(0, picArea.ScaleHeight), vbBlue
End Sub

On remplace RGB(0, 0, 255) par vbBlue parce que c'est la même chose. Il y a des constantes prédéfinies, autant les utiliser.

c) Créer une procédure DrawFunction pour tracer la fonction et éviter la répétition du code dans cmdSlow_Click et cmdFast_Click. Par exemple :

Private Sub DrawFunction(Step As Double)
'Si un tracé a déjà eu lieu auparavant, alors :
If CDbl(txtIncr.Text) > 10 Then
picArea.Cls 'Effacer la zone de dessin.
Call DrawAxes 'Retracer le repère.
txtIncr.Text = "-10" 'Remettre le compteur à sa valeur de départ.
End If
'Tracer les points avec un pas de 0.1
Dim i As Integer
For i = 0 To (20 * 1 / Step)
'La zone d'évaluation reçoit l'équation.
txtEval.Text = txtExpr.Text
'On incrémente.
txtIncr.Text = CStr(CDbl(txtIncr.Text) + Step)
'On trace le point.
Call RunScript
Next
End Sub

Plus tu pourras réduire les répétitions et éviter le copier-coller de code, plus il y a de chances que le résultat soit lisible et fasse ce que tu souhaites.

d) Créer une procédure RunScript qui crée puis exécute le VBS, puis dessine le point sur la zone de dessin. Par exemple :

Public Sub RunScript()
On Error Resume Next
'On remplace la variable (notée ici x) par sa valeur.
txtEval.Text = Replace(txtEval, "x", txtIncr)
'On remplace les virgules par des points.
txtEval.Text = Replace(txtEval, ",", ".")
'On définit la fonction du script.
StrFonction = "Function Calcul(Fin): Fin=" & txtEval.Text & ":End Function"
'On exécute le script pour calculer le résultat.
Set MyScript = New ScriptControl
With MyScript
.Language = "VBScript"
Call .Reset
Call .AddCode(StrFonction)
Call .Run("Calcul", Result)
End With
Set MyScript = Nothing
'Enfin, on dessine le point à l'emplacement voulu.
picArea.PaintPicture picData.Picture, txtIncr, -2 * CSng(Result), 0.11, 0.11
DoEvents
End Sub

e) Pour les événements Click et Load il ne reste plus qu'à écrire :

Private Sub Form_Load()
Call DrawAxes
End Sub

Private Sub cmdFast_Click()
Call DrawFunction(0.1)
End Sub

Private Sub cmdSlow_Click()
Call DrawFunction(0.01)
End Sub

Voilà tout ! Tu pourrais ensuite placer les fonctions DrawAxes, DrawFunction et RunScript dans un module. Tu aurais ainsi les fonctions de calcul d'un côté, et les événéments propres à la feuille de l'autre.

On pourrait alors envisager des améliorations :

1. Permettre à l'utilisateur d'indiquer le nom de sa variable (x ? n ?)
2. Ajouter du texte pour guider l'utilisateur : que doit-il taper ? Où ?
3. Choisir l'intervalle du tracé. Ce qui est intéressant ne se passe pas toujours entre -10 et 10.
4. etc...

Mais ceci ne peut pas se faire sans que le fond du programme soit assaini.

Bonne continuation,
Cacophrène
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010

Salut!

-Alors vous comprenez mon probléme?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

je ne suis pas là pour être méchant, mais juste apporter des conseils !
Pourquoi poster une source comme celle-ci, sans avoir apporter les modifications qui t'ont été énuméré dans ton Topic :
http://www.vbfrance.com/infomsg_PROBLEME_946493.aspx
(pis ils t'ont tous répondu, tu les as laissé en plan !)

Conversion de de type String (controle Texte) vers Double ou Long (Text1 + 0.1 n'est pas conventionnel)
Ajouter 0 à une valeur est strictement inutile, t'es pas en C, le compilo va additionner bah zéro
Et ta fameuse boucle For i qui sert absolument à rien, d'autant que i n'est pas utilisé. (rencarde toi sur Step 0.1, pour utiliser i à la place...)

++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.