OVH Cloud OVH Cloud

Max Max

8 réponses
Avatar
hexadec
Comment faire dans le code de VB6 ( Avec quelle fonction??) pour trouver le
maximum d'une dizaines de variables numériques (Integer) ??

8 réponses

Avatar
Fox
utilise cet algo c'est le tri de shell

il y a aussi le bubble sort mais j'ai pas l'algo sous la main.....enfin si
mais en C

'TRI DE SHELL:
Sub Tri_Shell_Metzner(ByVal Nb_Element As Long, Tableau() As Variant, ByVal
Sens As Boolean)
' le paramètre Nb_Element correspond au nombre d'éléments du tableau, sa
valeur n'est donc pas modifiée
' le paramètre Tableau() est le tableau à trier, il est modifié puis retourné
' le paramètre Sens est vrai pour un tri croissant
Dim Ecart As Long
' Ecart représente la division du tableau
Dim I As Long
Dim J As Long
' I et J sont des variables intermédiaires utilisées pour les compteurs de
boucles
Dim Permut As Boolean
' Permut est un flag contrôlant que l'élément à classer a été permuté
Dim Ligne_Tampon As Variant
' Ligne_Tampon est une variable intermédiaire utilisée pour la permutation
d'éléments
' On définit l'écart d'origine
Ecart = Nb_Element 2
Do While Ecart <> 0
For I = 1 To Nb_Element - Ecart
J = I
Permut = True
Do While J > 0 And Permut
Permut = False
If (Tableau(J) > Tableau(J + Ecart) And Sens) Or (Tableau(J) < Tableau(J +
Ecart) And Not Sens) Then
Ligne_Tampon = Tableau(J)
Tableau(J) = Tableau(J + Ecart)
Tableau(J + Ecart) = Ligne_Tampon
Permut = True
J = J - Ecart
End If
Loop
Next I
' On redivise
Ecart = Ecart 2
Loop
End Sub



"hexadec" a écrit :

Comment faire dans le code de VB6 ( Avec quelle fonction??) pour trouver le
maximum d'une dizaines de variables numériques (Integer) ??


Avatar
Driss HANIB
voici une focntion qu te permettra de trouver le nombre maximum

Driss

Function Maxi() as integer
Dim NbMax as integer
Dim I as long
' imaginons que tes nombres soient dans un tableau d'entiers
Nbmax=0
for i = 0 to ubound(tabNombres())
if tabnombres(I)> nbMax then
nbMax = tabNombres(i)
end if
next

Maxi = nbmax
end function



"hexadec" a écrit dans le message de
news:
Comment faire dans le code de VB6 ( Avec quelle fonction??) pour trouver


le
maximum d'une dizaines de variables numériques (Integer) ??


Avatar
Jean-Marc
Hello,

Quelques remarques:
- c'est bien d'utiliser Ubound(), mais alors il vaudrait
mieux utiliser aussi LBound() plutot que 0, pour le
cas ou il utilise Option Base 1.

- Initialiser Nbmax à 0 est potentiellement dangereux
car si le tableau ne comporte que des nombres négatifs,
la fonction renverra 0 ce qui est 2 fois faux:
- Une fois parce que 0 ne sera pas le maximum
- Une autre fois car la valeur renvoyée n'appartient même
pas au tableau :-(

Il vaudrait sans doute mieux passer explicitement 2 arguments
de plus (borne_inf, borne_sup) et initialiser nbMax avec
une valeur du tableau (n(importe laquelle, la premiere par
exemple). Ca donnerait:

Private Function Maxi(t() As Integer, _
b_inf As Long, _
b_sup As Long) As Integer
Dim i As Long
Dim max As Integer

max = t(b_inf)
For i = b_inf To b_sup
If t(i) > max Then
max = t(i)
End If
Next i
Maxi = max
End Function

Ce code marche dans tous les cas.

On pourrait raffiner en faisant de b_inf et b_sup des paramètres
optionnels, avec comme convention que si ils ne sont pas fournis,
alors b_inf = Lbound(t()) et b_sup =Ubound(t())

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"Driss HANIB" a écrit dans le message de
news:
voici une focntion qu te permettra de trouver le nombre maximum

Driss

Function Maxi() as integer
Dim NbMax as integer
Dim I as long
' imaginons que tes nombres soient dans un tableau d'entiers
Nbmax=0
for i = 0 to ubound(tabNombres())
if tabnombres(I)> nbMax then
nbMax = tabNombres(i)
end if
next

Maxi = nbmax
end function



"hexadec" a écrit dans le message


de
news:
> Comment faire dans le code de VB6 ( Avec quelle fonction??) pour


trouver
le
> maximum d'une dizaines de variables numériques (Integer) ??




Avatar
Patrice Henrio
Private Function Maxi(T() as integer) as integer
Dim I as long
On Error GoTo T_est_vide
'Si le tableau T n'est pas initialisé, le traitement d'erreur permet
d'ignorer le Lbound(T)
Maxi = T(LBound(T))
On Error GoTo 0
For I = Lbound(T)+1 to Ubound(T)
iF Maxi>T(I) then Maxi=T(I)
Next I
Exit Sub
T_est_vide:
Maxi=0 'définition mathématiques souvent utilisée le maxi de
l'ensemble vide est l'élément neutre de l'addition, on
'pourrait aussi renvoyer une erreur ou le plus petit
integer possible de façon à pouvoir écrire
'Maxi(A union B)=Maxi(Maxi(A),Maxi(B))
End sub


"Jean-Marc" a écrit dans le message de news:
43baa3e8$0$334$
Hello,

Quelques remarques:
- c'est bien d'utiliser Ubound(), mais alors il vaudrait
mieux utiliser aussi LBound() plutot que 0, pour le
cas ou il utilise Option Base 1.

- Initialiser Nbmax à 0 est potentiellement dangereux
car si le tableau ne comporte que des nombres négatifs,
la fonction renverra 0 ce qui est 2 fois faux:
- Une fois parce que 0 ne sera pas le maximum
- Une autre fois car la valeur renvoyée n'appartient même
pas au tableau :-(

Il vaudrait sans doute mieux passer explicitement 2 arguments
de plus (borne_inf, borne_sup) et initialiser nbMax avec
une valeur du tableau (n(importe laquelle, la premiere par
exemple). Ca donnerait:

Private Function Maxi(t() As Integer, _
b_inf As Long, _
b_sup As Long) As Integer
Dim i As Long
Dim max As Integer

max = t(b_inf)
For i = b_inf To b_sup
If t(i) > max Then
max = t(i)
End If
Next i
Maxi = max
End Function

Ce code marche dans tous les cas.

On pourrait raffiner en faisant de b_inf et b_sup des paramètres
optionnels, avec comme convention que si ils ne sont pas fournis,
alors b_inf = Lbound(t()) et b_sup =Ubound(t())

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"Driss HANIB" a écrit dans le message de
news:
voici une focntion qu te permettra de trouver le nombre maximum

Driss

Function Maxi() as integer
Dim NbMax as integer
Dim I as long
' imaginons que tes nombres soient dans un tableau d'entiers
Nbmax=0
for i = 0 to ubound(tabNombres())
if tabnombres(I)> nbMax then
nbMax = tabNombres(i)
end if
next

Maxi = nbmax
end function



"hexadec" a écrit dans le message


de
news:
> Comment faire dans le code de VB6 ( Avec quelle fonction??) pour


trouver
le
> maximum d'une dizaines de variables numériques (Integer) ??







Avatar
Jean-Marc
hello Patrice,

ton test est à l'envers:

If Maxi > t(I) Then Maxi = t(I) '' non

correction :
If t(I) > Maxi Then Maxi = t(I)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



"Patrice Henrio" a écrit dans le message de
news:%


Private Function Maxi(T() as integer) as integer
Dim I as long
On Error GoTo T_est_vide
'Si le tableau T n'est pas initialisé, le traitement d'erreur


permet
d'ignorer le Lbound(T)
Maxi = T(LBound(T))
On Error GoTo 0
For I = Lbound(T)+1 to Ubound(T)
iF Maxi>T(I) then Maxi=T(I)
Next I
Exit Sub
T_est_vide:
Maxi=0 'définition mathématiques souvent utilisée le maxi


de
l'ensemble vide est l'élément neutre de l'addition, on
'pourrait aussi renvoyer une erreur ou le plus


petit
integer possible de façon à pouvoir écrire
'Maxi(A union B)=Maxi(Maxi(A),Maxi(B))
End sub


"Jean-Marc" a écrit dans le message de


news:
43baa3e8$0$334$
> Hello,
>
> Quelques remarques:
> - c'est bien d'utiliser Ubound(), mais alors il vaudrait
> mieux utiliser aussi LBound() plutot que 0, pour le
> cas ou il utilise Option Base 1.
>
> - Initialiser Nbmax à 0 est potentiellement dangereux
> car si le tableau ne comporte que des nombres négatifs,
> la fonction renverra 0 ce qui est 2 fois faux:
> - Une fois parce que 0 ne sera pas le maximum
> - Une autre fois car la valeur renvoyée n'appartient même
> pas au tableau :-(
>
> Il vaudrait sans doute mieux passer explicitement 2 arguments
> de plus (borne_inf, borne_sup) et initialiser nbMax avec
> une valeur du tableau (n(importe laquelle, la premiere par
> exemple). Ca donnerait:
>
> Private Function Maxi(t() As Integer, _
> b_inf As Long, _
> b_sup As Long) As Integer
> Dim i As Long
> Dim max As Integer
>
> max = t(b_inf)
> For i = b_inf To b_sup
> If t(i) > max Then
> max = t(i)
> End If
> Next i
> Maxi = max
> End Function
>
> Ce code marche dans tous les cas.
>
> On pourrait raffiner en faisant de b_inf et b_sup des paramètres
> optionnels, avec comme convention que si ils ne sont pas fournis,
> alors b_inf = Lbound(t()) et b_sup =Ubound(t())
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>
>
> "Driss HANIB" a écrit dans le message de
> news:
>> voici une focntion qu te permettra de trouver le nombre maximum
>>
>> Driss
>>
>> Function Maxi() as integer
>> Dim NbMax as integer
>> Dim I as long
>> ' imaginons que tes nombres soient dans un tableau d'entiers
>> Nbmax=0
>> for i = 0 to ubound(tabNombres())
>> if tabnombres(I)> nbMax then
>> nbMax = tabNombres(i)
>> end if
>> next
>>
>> Maxi = nbmax
>> end function
>>
>>
>>
>> "hexadec" a écrit dans le


message
> de
>> news:
>> > Comment faire dans le code de VB6 ( Avec quelle fonction??) pour
> trouver
>> le
>> > maximum d'une dizaines de variables numériques (Integer) ??
>>
>>
>




Avatar
Patrice Henrio
C'est vrai.
Honte à moi sur les sept prochaines générations.
Salut et bonne année.

"Jean-Marc" a écrit dans le message de news:
43bac61e$0$12009$
hello Patrice,

ton test est à l'envers:

If Maxi > t(I) Then Maxi = t(I) '' non

correction :
If t(I) > Maxi Then Maxi = t(I)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



"Patrice Henrio" a écrit dans le message de
news:%


Private Function Maxi(T() as integer) as integer
Dim I as long
On Error GoTo T_est_vide
'Si le tableau T n'est pas initialisé, le traitement d'erreur


permet
d'ignorer le Lbound(T)
Maxi = T(LBound(T))
On Error GoTo 0
For I = Lbound(T)+1 to Ubound(T)
iF Maxi>T(I) then Maxi=T(I)
Next I
Exit Sub
T_est_vide:
Maxi=0 'définition mathématiques souvent utilisée le maxi


de
l'ensemble vide est l'élément neutre de l'addition, on
'pourrait aussi renvoyer une erreur ou le plus


petit
integer possible de façon à pouvoir écrire
'Maxi(A union B)=Maxi(Maxi(A),Maxi(B))
End sub


"Jean-Marc" a écrit dans le message de


news:
43baa3e8$0$334$
> Hello,
>
> Quelques remarques:
> - c'est bien d'utiliser Ubound(), mais alors il vaudrait
> mieux utiliser aussi LBound() plutot que 0, pour le
> cas ou il utilise Option Base 1.
>
> - Initialiser Nbmax à 0 est potentiellement dangereux
> car si le tableau ne comporte que des nombres négatifs,
> la fonction renverra 0 ce qui est 2 fois faux:
> - Une fois parce que 0 ne sera pas le maximum
> - Une autre fois car la valeur renvoyée n'appartient même
> pas au tableau :-(
>
> Il vaudrait sans doute mieux passer explicitement 2 arguments
> de plus (borne_inf, borne_sup) et initialiser nbMax avec
> une valeur du tableau (n(importe laquelle, la premiere par
> exemple). Ca donnerait:
>
> Private Function Maxi(t() As Integer, _
> b_inf As Long, _
> b_sup As Long) As Integer
> Dim i As Long
> Dim max As Integer
>
> max = t(b_inf)
> For i = b_inf To b_sup
> If t(i) > max Then
> max = t(i)
> End If
> Next i
> Maxi = max
> End Function
>
> Ce code marche dans tous les cas.
>
> On pourrait raffiner en faisant de b_inf et b_sup des paramètres
> optionnels, avec comme convention que si ils ne sont pas fournis,
> alors b_inf = Lbound(t()) et b_sup =Ubound(t())
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>
>
> "Driss HANIB" a écrit dans le message de
> news:
>> voici une focntion qu te permettra de trouver le nombre maximum
>>
>> Driss
>>
>> Function Maxi() as integer
>> Dim NbMax as integer
>> Dim I as long
>> ' imaginons que tes nombres soient dans un tableau d'entiers
>> Nbmax=0
>> for i = 0 to ubound(tabNombres())
>> if tabnombres(I)> nbMax then
>> nbMax = tabNombres(i)
>> end if
>> next
>>
>> Maxi = nbmax
>> end function
>>
>>
>>
>> "hexadec" a écrit dans le


message
> de
>> news:
>> > Comment faire dans le code de VB6 ( Avec quelle fonction??) pour
> trouver
>> le
>> > maximum d'une dizaines de variables numériques (Integer) ??
>>
>>
>







Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le message de
news:%
C'est vrai.
Honte à moi sur les sept prochaines générations.



2 générations suffiront :-))

Salut et bonne année.



Très bonne année à toi aussi!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Driss HANIB
merci à Jean Marc et Patrice, car effectivement je ne gérais pas les nombres
négatifs, les bornes inférieures différentes de 0 et les tableaux vides.
j'avais l'habitude de commencer tous mes tableaux par 0 ou 1
et je reconstruits ma fonction en focntion des valeurs que je sais
disponibles.

Je garde cette version générale.

j'espère que hexadec aura trouvé son bonheur..

bonne année à tous

Driss
"Jean-Marc" a écrit dans le message de
news:43bad474$0$7384$
"Patrice Henrio" a écrit dans le message de
news:%
> C'est vrai.
> Honte à moi sur les sept prochaines générations.

2 générations suffiront :-))

> Salut et bonne année.

Très bonne année à toi aussi!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;