Dichotomie sous vb6

cs_lebienestrare Messages postés 96 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 23 mars 2008 - 8 nov. 2006 à 15:39
cs_santiago69 Messages postés 91 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 décembre 2008 - 11 nov. 2006 à 21:15
Bonjour,voilà le code que j'ai utlisé pour une méthode de dichotomie sous vb6:

Private Sub Command1_Click()
Dim xr As Double, xl As Double, xm As Double, x As Double, f(x) As Double, epsilon As Double

epsilon = 0.001
xr = 6
xl = 0
f(x) = 15 * x ^ 4 - 60 * x ^ 3 + 20 * x ^ 2 + 8 * x - 4


'Méthode de dichotomie

'Start loop
Do While (xr - xl) > epsilon

'Calcule le milieu du domaine de définition
xm = (xr + xl) / 2

'Find f(xM)
If ((f(xl) * f(xm)) > 0) Then
'jette la moitié de gauche
xl = xm

Else
'jette la moitié de droite
xr = xm
End If
Loop
Label1.Caption = xm

End Sub

j'ai de doute à propos de : Label1.Caption = xm;
Lors de l'exécution j'ai une erreur qui dit :constante requise, en m'indiquant que l'erreur est au niveau de f(x) dans la partie déclaration,
qq'1 peut me donner une idée de quoi s'agit cette erreur?
merci d'avance

7 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2006 à 15:48
Ben déja, je ne vois nulle part l'initialisation de x, il est donc égal à 0

Puis f(x) n'est pas une variable mais un tableau de taille x. x devant etre une constante dans ce cas là.

De plus tu souhaite uiliser f(x) comme une fonction, il te donc déporter le calcul dans une fonction

Private Sub Command1_Click()
Dim xr As Double, xl As Double, xm As Double, x As Double, epsilon As Double

epsilon = 0.001
xr = 6
xl = 0

'Méthode de dichotomie

'Start loop
Do While (xr - xl) > epsilon

'Calcule le milieu du domaine de définition
xm = (xr + xl) / 2

'Find f(xM)
If ((f_x(xl) * f_x(xm)) > 0) Then
'jette la moitié de gauche
xl = xm

Else
'jette la moitié de droite
xr = xm
End If
Loop
Label1.Caption = xm

End Sub

Private Function f_x(x as double ) as double

f_x = 15 * x ^ 4 - 60 * x ^ 3 + 20 * x ^ 2 + 8 * x - 4

End Function

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0
lilo44 Messages postés 174 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 15 février 2007 2
8 nov. 2006 à 15:53
J'allais le dire mais il est rapide le marsup :)
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2006 à 15:55
Houba, Houbaba 

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
0
cs_lebienestrare Messages postés 96 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 23 mars 2008
8 nov. 2006 à 18:34
merciiiiiiiiii infiniment,bisous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lebienestrare Messages postés 96 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 23 mars 2008
8 nov. 2006 à 20:59
un ptit truc svp, je veux que lorsqu'on saisit des lettres ou des points ds mes zones de texte, je vx ke ça m'affiche un msgbox me disant que c'est pas permi
(je sais ke c pa le bon endroit pr poser cette question mais puisk'on a commencé,on termine;))
merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
8 nov. 2006 à 23:03
Salut,
si la fonction n'est pas continue dans l'interval de calcul,
la méthode par recherche dichotomique n'est pas possible
ce qui est le cas ici:
fonction croissante, puis décroissante, et de nouveau croissante

Daniel
0
cs_santiago69 Messages postés 91 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 décembre 2008
11 nov. 2006 à 21:15
Salut,

T'as qu'a utiliser :
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Select case KeyCode
        Case vbKey0, vbKey1, vbKey2, vbKey3, vbKey4, vbKey5, vbKey6, vbKey7, vbKey8, vbKey9
        Case else
            MsgBox "Que des chiffres"
    End Select
End Sub

Le pb, c'est que cette methode n'empeche pas de coller du texte a partir du presse papier dans le controle.

Tu peux alors utiliser
Private Sub Text1_Change()
et verifier a chaque modif que Text1.Value est convertible en CLng()

Une fois de plus, le pb des 2 methodes est de pouvoir annuler l'evenement qui a provoque l'erreur.

Bonne prog
Santiago

il y a 10 types de personnes : ceux qui comprennent le binaire et ceux qui ne le comprennent pas.
0
Rejoignez-nous