OVH Cloud OVH Cloud

Nombre Pair et variable

14 réponses
Avatar
Monalisa
Bonjour, je suis assé novice mais j'aurais deux petites question, j'ai des
nombres et je dois savoir s'il sont pair ou impair avec VBA. Aussi
j'aimerais avoir une variable qui fonctionne comme les groupes de control
ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté avec une boucle
For.

Je cherche a dire quelque chose comme.....
For x = 0 to val(NombreDeTrou.text) step 1
MaVariable(x)=nombre
Next
Pour que je puisse récupéré les valeurs de chaques variable.

Merci

10 réponses

1 2
Avatar
Christophe
Pour les nombre pair et impair il faut un modulo (c'est le reste d'une
division) :

if Nombre mod 2 = 1 then
'impair
else
'pair
endif

Pour tes "index" il faut utilise un tableau

dim toto(1 to 20) as string

Matte l'aide pour redimensionner le tableau (Redim).

tu peux aussi utiliser cette déclaration avec tes propres types à la
place du type string.


Monalisa a écrit :
Bonjour, je suis assé novice mais j'aurais deux petites question, j'ai des
nombres et je dois savoir s'il sont pair ou impair avec VBA. Aussi
j'aimerais avoir une variable qui fonctionne comme les groupes de control
ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté avec une boucle
For.

Je cherche a dire quelque chose comme.....
For x = 0 to val(NombreDeTrou.text) step 1
MaVariable(x)=nombre
Next
Pour que je puisse récupéré les valeurs de chaques variable.

Merci





Avatar
Jean-Marc
"Christophe" a écrit dans le message de
news:%
Pour les nombre pair et impair il faut un modulo (c'est le reste d'une
division) :

if Nombre mod 2 = 1 then
'impair
else
'pair
endif



Hello,

quelques précisions sur l'opérateur mod (modulo):
Cet opérateur retourne le reste de la division entière
d'un nombre par un autre.
Ainsi, 7 mod 3 = 1, car 7/3 = 2 et il reste 1.

Les nombres pairs ont comme propriété c'être tous multiples
de 2. Donc, le reste de la division d'un nombre pair par 2
est toujours 0.

C'est la justification de ce qu'explique Christophe:
Si (Nombre mod 2) = 0, c'est que le nombre est pair.
8 mod 2 = 0, car 8/2 = 4, reste 0
7 mod 2 = 1, car 7/2 = 3, reste 1

On peut aussi déterminer la parité d'un nombre en utilisant
une propriété de la représentation des nombres en binaire.
Tous les nombres pairs ont leur bit de poids le plus faible
qui vaut 0, pour les nombres impairs ils vaut 1, car tout
nombre impair peut d'écrire sous la forme:

Nombre_Impair = (2 * Nombre_Pair) + 1

Il sufit alors de tester le bit de poids faible avec l'opérateur
AND, comme ceci:

Si (nombre AND 1) = 1 then
' le nombre est impair
Else
' le nombre est pair
Endif

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Clive Lumb
Monalisa wrote:
Bonjour, je suis assé novice mais j'aurais deux petites question,
j'ai des nombres et je dois savoir s'il sont pair ou impair avec VBA.
Aussi j'aimerais avoir une variable qui fonctionne comme les groupes
de control ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté
avec une boucle For.

Je cherche a dire quelque chose comme.....
For x = 0 to val(NombreDeTrou.text) step 1
MaVariable(x)=nombre
Next
Pour que je puisse récupéré les valeurs de chaques variable.

Merci



J'ajoute à la réponse de Christophe que le "Dim MonNombre(1 to 10) as ..."
ne se limite pas au type "String" et les types utilisateurs.
Un peut évidemment faire des tableaux de tous les types de variables,
Integer, Long, Simple, Double, Byte, Boolean ....
Aussi le nombre de dimensions n'est pas limité, on peut très bien faire des
tableaux à 3, 4, 5 dimensions et plus.

Clive
Avatar
ng
Salut,

Bonjour, je suis assé novice mais j'aurais deux petites question, j'ai des
nombres et je dois savoir s'il sont pair ou impair avec VBA.



Public Function EstPair(nb As Double) As Boolean
EstPair = (nb mod 2 = 0)
End Function

Call MsgBox( EstPair(2) )
Call MsgBox( EstPair(3) )
Call MsgBox( EstPair(36) )
Call MsgBox( EstPair(413) )

Aussi
j'aimerais avoir une variable qui fonctionne comme les groupes de control
ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté avec une boucle
For.

Je cherche a dire quelque chose comme.....
For x = 0 to val(NombreDeTrou.text) step 1
MaVariable(x)=nombre
Next
Pour que je puisse récupéré les valeurs de chaques variable.



Il faut faire, par exemple, un tableau de structure :

Public Type MonType
Test As String
End Type

Dim monTableau() As MonType

'...

Redim Preserve MonTableau(5)

'...

Dim i As Integer
For i = 0 To Ubound(MonTableau)
MsgBox MonTableau(i).Text
Next

'...

Erase MonTableau

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Jean-Marc
Hello,

j'ai fait quelques essais et il me semble que
le plus rapide soit:

Public Function EstPair1(n As Long) As Boolean
EstPair1 = Not ((n And 1) = 1)
End Function

Benchmark ici:
http://membres.lycos.fr/jeanmarcn/bench/bench.htm

C'est dommage que le compilateur ne fasse pas
tout seul l'optimisation du modulo 2.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



"ng" a écrit dans le message de
news:
Salut,

> Bonjour, je suis assé novice mais j'aurais deux petites question, j'ai


des
> nombres et je dois savoir s'il sont pair ou impair avec VBA.

Public Function EstPair(nb As Double) As Boolean
EstPair = (nb mod 2 = 0)
End Function

Call MsgBox( EstPair(2) )
Call MsgBox( EstPair(3) )
Call MsgBox( EstPair(36) )
Call MsgBox( EstPair(413) )

> Aussi
> j'aimerais avoir une variable qui fonctionne comme les groupes de


control
> ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté avec une


boucle
> For.
>
> Je cherche a dire quelque chose comme.....
> For x = 0 to val(NombreDeTrou.text) step 1
> MaVariable(x)=nombre
> Next
> Pour que je puisse récupéré les valeurs de chaques variable.

Il faut faire, par exemple, un tableau de structure :

Public Type MonType
Test As String
End Type

Dim monTableau() As MonType

'...

Redim Preserve MonTableau(5)

'...

Dim i As Integer
For i = 0 To Ubound(MonTableau)
MsgBox MonTableau(i).Text
Next

'...

Erase MonTableau

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


Avatar
ng
Salut,

j'ai fait quelques essais et il me semble que
le plus rapide soit:

Public Function EstPair1(n As Long) As Boolean
EstPair1 = Not ((n And 1) = 1)
End Function

Benchmark ici:
http://membres.lycos.fr/jeanmarcn/bench/bench.htm



J'ai peut être mal interprété ton graph mais j'ai l'impression que c'est
plus rapide en ide qu'en exe, ce qui est étrange.

C'est dommage que le compilateur ne fasse pas
tout seul l'optimisation du modulo 2.



Oui.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Jean-Marc
"ng" a écrit dans le message de
news:
Salut,

> j'ai fait quelques essais et il me semble que
> le plus rapide soit:
>
> Public Function EstPair1(n As Long) As Boolean
> EstPair1 = Not ((n And 1) = 1)
> End Function
>
> Benchmark ici:
> http://membres.lycos.fr/jeanmarcn/bench/bench.htm

J'ai peut être mal interprété ton graph mais j'ai l'impression que c'est
plus rapide en ide qu'en exe, ce qui est étrange.



Oops :-))

Tu as tout à fait raison, j'ai inversé IDE et EXE.
L'exe est bien entendu significativement plus rapide.
J'ai updaté la page web.

Merci de la remarque!

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
ng
Salut,

Oops :-))

Tu as tout à fait raison, j'ai inversé IDE et EXE.
L'exe est bien entendu significativement plus rapide.
J'ai updaté la page web.

Merci de la remarque!




Ok ca me rassure :)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Patrice Henrio
Et pourquoi pas
EstPair1=((n and 1)=0)

????
Il faudrait tester pour la raoidité mais c'est certainement plus rapide que
EstPair1 = Not ((n And 1) = 1)

même si la différence notable ne doit pas se percevoir avant un million
d'opérations.


"Jean-Marc" a écrit dans le message de news:
42c6828a$0$24324$
Hello,

j'ai fait quelques essais et il me semble que
le plus rapide soit:

Public Function EstPair1(n As Long) As Boolean
EstPair1 = Not ((n And 1) = 1)
End Function

Benchmark ici:
http://membres.lycos.fr/jeanmarcn/bench/bench.htm

C'est dommage que le compilateur ne fasse pas
tout seul l'optimisation du modulo 2.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



"ng" a écrit dans le message de
news:
Salut,

> Bonjour, je suis assé novice mais j'aurais deux petites question, j'ai


des
> nombres et je dois savoir s'il sont pair ou impair avec VBA.

Public Function EstPair(nb As Double) As Boolean
EstPair = (nb mod 2 = 0)
End Function

Call MsgBox( EstPair(2) )
Call MsgBox( EstPair(3) )
Call MsgBox( EstPair(36) )
Call MsgBox( EstPair(413) )

> Aussi
> j'aimerais avoir une variable qui fonctionne comme les groupes de


control
> ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté avec une


boucle
> For.
>
> Je cherche a dire quelque chose comme.....
> For x = 0 to val(NombreDeTrou.text) step 1
> MaVariable(x)=nombre
> Next
> Pour que je puisse récupéré les valeurs de chaques variable.

Il faut faire, par exemple, un tableau de structure :

Public Type MonType
Test As String
End Type

Dim monTableau() As MonType

'...

Redim Preserve MonTableau(5)

'...

Dim i As Integer
For i = 0 To Ubound(MonTableau)
MsgBox MonTableau(i).Text
Next

'...

Erase MonTableau

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/






Avatar
monalisa
Grand merci a vout tous pour vos réponse




"Monalisa" a écrit dans le message de news:
whoxe.7013$
Bonjour, je suis assé novice mais j'aurais deux petites question, j'ai des
nombres et je dois savoir s'il sont pair ou impair avec VBA. Aussi
j'aimerais avoir une variable qui fonctionne comme les groupes de control
ex: "MaVariable(x).text" ou le "x" qui peut etre alimenté avec une boucle
For.

Je cherche a dire quelque chose comme.....
For x = 0 to val(NombreDeTrou.text) step 1
MaVariable(x)=nombre
Next
Pour que je puisse récupéré les valeurs de chaques variable.

Merci





1 2