cs_Fleur54
Messages postés6Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention13 février 2004
-
22 janv. 2004 à 12:52
cs_Fleur54
Messages postés6Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention13 février 2004
-
26 janv. 2004 à 09:17
fleur54 Bonjour,
j'ai crée un prog pour calculer une fonction g(x,y) pour x et y ?{0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8;0,8}.
z=x+y x est un tableau et y dot être rentré par l'utilisateur.
f(z) est une foction intermédiaire permettant de calculer g(x,y). Le problème c'est que je n'arrive pas à faire tourner z pour pouvoir calculer f(z). si je ne boucle pas f(z) affiche toujours le même résultat. je sais qu'il faut boucler z de son mini à son maxi masi comme ses valeurs changent selon y je ne parviens pas à détreminer ces mini et maxi.
Merci beaucoup
voici mon code:
Option Explicit
Option Base 1
Dim a(8), y, i, j, x(10), z(10), l, k As Double
Dim w As String
Dim f_x, f_y, f_z, f_w, g_xy As String
Dim style, title, reponse, msg, msg2, b
Private Sub Form_Load()
'iniialisation du tableau
a(1) = -0.577191652
a(2) = 0.988205891
a(3) = -0.897056937
a(4) = 0.918206857
a(5) = -0.756704078
a(6) = 0.482199394
a(7) = -0.193527818
a(8) = 0.035868343
'affichage du tableau
For i = 1 To 8
List1.AddItem a(i)
Next i
End Sub
Private Sub Command1_Click()
Dim mini, maxi
y = Text1.Text
'Next y
'définir l'intervalle de Y
If y > 0.9 Then
msg2 = "y ? [0,0;0,9]veuillez entrer une nouvelle valeur pour y"
style = vbInformation + vbOKOnly
title = "Erreur"
reponse = MsgBox(msg2, style, title)
Text1.Text = ""
Else
'déterminer et afficher x+y
For b = 1 To 10
For j = 1 To 10 'Step 0.1
z(b) = x(j) + y
List4.AddItem z(b)
Next j
Next b
'il y a 1 pb avec f_z car il affiche la même vlr alors faut 1boucle pr faire trner z
'déterminer et afficher f(x+y)
For b = 1 To 10
For j = 1 To 10
For Each z(b) In List4
'z = Min(z, mini) To Max(z, maxi)
f_z = (((((((((((((((a(8) * z(b)) + a(7)) * z(b)) + a(6)) * z(b)) + a(5)) * z(b)) + a(4)) * z(b)) + a(3)) * z(b)) + a(2)) * z(b)) + a(1)) * z(b)) + 1
f_z = Round(f_z, 6)
List5.AddItem f_z
Next z(b)
Next j
Next b
'déterminer et afficher x+y-1
For j = 1 To 10
w = x(j) + y - 1
List6.AddItem w
Next j
Private Sub Command2_click()
'déterminer g(x,y)
For j = 1 To 10
For b = 1 To 10
If z > 0 And z <= 0.9999 Then
g_xy = (f_x * f_y) / ((1 + j + y) * f_z)
Else
If z > 1 And z <= 1.9999 Then
g_xy = (f_x * f_y) / ((1 + j + y) * z(b) * f_w)
'afficher g(x, y)
g_xy = Round(g_xy, 6)
List8.AddItem g_xy
Else
msg = "z ? [2,2[ , veuillez donc entrer une nouvelle valeur pour y"
style = vbExclamation + vbOKOnly
title = "erreur"
reponse = MsgBox(msg, style, title)
End If
End If
Next b
Next j
End Sub
'Private Sub MaxTab(tabl1(), maxi)
'Dim k
'maxi = 1
'For k = 2 To 10
'If tabl1(k) > maxi Then
'maxi = tabl1(k)
'End If
'Next k
'End Sub
'Private Sub MinTab(tabl2(), mini)
'Dim l
'mini = 1.8
'For l = 1 To 10
'If tabl2(l) < mini Then
'mini = tabl2(l)
'End If
'Next l
'End Sub
Private Sub Max(z, maxz)
maxz = 0
For Each z In selection
While z > maxz
maxz = z
Wend
Next z
Label1.Caption = maxz
End Sub
Private Sub Min(z, minz)
minz = 2
For Each z In selection
While z < minz
minz = z
Wend
Next z
Label1.Caption = minz
End Sub
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 22 janv. 2004 à 19:09
Comme ça, sans autre indication, c'est pas facile de t'aider.
Mais 2-3 petites choses :
- tu pourrais mettre toutes tes listes comme un tableau :
Liste(i)
- une chose que je programmerais, histoire de faire qqch de propre (au lieu de tes ((((a(i)*w)+...))), est la fonction
Private Function A(byval B as double) as double
dim i as integer
dim Resultat as double
Resultat = 0
for i=8 to 1 step -1
Resultat = (Resultat + a(i)) * B
next
A = Resultat + 1
end Function
Si tu expliques en détails quelle fonction tu cherches, je pourrais t'aider plus
VB Lover
cs_Fleur54
Messages postés6Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention13 février 2004 26 janv. 2004 à 09:17
tout b'aborb je te remercie beaucoup et je vais tenter de t'expliquer un peu mieux.
je dois construire un tableau en fonction de x et de y
x et y st égales à 0et 0.1 et 0.2 et 0.3 et 0.4 et 0.5 et 0.6 et 0.7 et 0.8 et 0.9
cette fonction g(x,y) est différente selon la somme de xet y(ce que j'ai appelé z)
si z est comprise entre (0;1[ alors g(x,y)=(f(x)*f(y))/((1+x+y)*f(z))
si z est comprise entre (1;2[ alors g(x,y)=(f(x)*f(y))/((1+x+y)*(z)*f(w))
avec w=x+y-1
ainsi quand j'arrive à f(z) je sais que je dois faire une boucle allant du mini au maxi de z sinon ça me calcule la même valeur et il en est de même pour f(w).
pour l'instant je travaille sur des listes box mais parrallelement je tente de créer un tableau MsFlex Grid où pour problème je ne sais pas entrer les valeurs.
sinon je te remercie encore et j'espere que ms explications sont un peu plus claires.