Minimum et maximum

cs_Fleur54 Messages postés 6 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 13 février 2004 - 22 janv. 2004 à 12:52
cs_Fleur54 Messages postés 6 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 13 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

x(1) = 0
x(2) = 0.1
x(3) = 0.2
x(4) = 0.3
x(5) = 0.4
x(6) = 0.5
x(7) = 0.6
x(8) = 0.7
x(9) = 0.8
x(10) = 0.9

For j = 1 To 10
f_x = (((((((((((((((a(8) * j) + a(7)) * j) + a(6)) * j) + a(5)) * j) + a(4)) * j) + a(3)) * j) + a(2)) * j) + a(1)) * j) + 1
f_x = Round(f_x, 6)
List2.AddItem x(j)
Next j

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 affche f(y)
For j = 1 To 10 Step 0.1
f_y = (((((((((((((((a(8) * y) + a(7)) * y) + a(6)) * y) + a(5)) * y) + a(4)) * y) + a(3)) * y) + a(2)) * y) + a(1)) * y) + 1
f_y = Round(f_y, 6)
Text2.Text = f_y
Next j

'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

'calculer et afficher f(w)
For j = 1 To 10
f_w = (((((((((((((((a(8) * w) + a(7)) * w) + a(6)) * w) + a(5)) * w) + a(4)) * w) + a(3)) * w) + a(2)) * w) + a(1)) * w) + 1
f_w = Round(f_w, 6)
List7.AddItem f_w
Next j

End If
End Sub

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

2 réponses

Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
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
0
cs_Fleur54 Messages postés 6 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 13 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.
0
Rejoignez-nous