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

4 réponses

1 2
Avatar
Jean-Marc
Hello,

Tu as raison bien sur, comme le montre ce petit graphique:
http://membres.lycos.fr/jeanmarcn/bench/bench2.htm

Mesures réalisées comme suit:
100 itérations de (900.000 * 2) opérations, pour chacune des méthodes
en EXE et en IDE.

Voici les différences, en chiffres:

Moyenne temps pour 1.800.000 opérations:
IDE
- sans le NOT : 0.53468
- avec le NOT : 0.54538

EXE
- sans le NOT : 0.10284
- avec le NOT : 0.10285

Pour 1.800.000 opérations, en mode compilé, on a donc un gain
de 10 microsecondes (10 10E-6 s) sans le NOT.

Ce n'est pas énorme, mais il n'empèche que tu as raison!
Je ne sais pas pourquoi je voulais absolument ce NOT !

--
Jean-marc
"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:
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
Michel
Pour conclure ( hum pas sur!!!)

EstPair1=((n and 1)=0) ?

Moi j'utilise

Function IsPair( n as Integer) As Boolean
IsPair = Not -(n And 1) ' Pour avoir la fonction Impair supprimer le Not

Quick du - quand on supprime le Not je ne m'étais jamais posé la question??
Et vous
Michel

Jean-Marc a écrit :
Hello,

Tu as raison bien sur, comme le montre ce petit graphique:
http://membres.lycos.fr/jeanmarcn/bench/bench2.htm

Mesures réalisées comme suit:
100 itérations de (900.000 * 2) opérations, pour chacune des méthodes
en EXE et en IDE.

Voici les différences, en chiffres:

Moyenne temps pour 1.800.000 opérations:
IDE
- sans le NOT : 0.53468
- avec le NOT : 0.54538

EXE
- sans le NOT : 0.10284
- avec le NOT : 0.10285

Pour 1.800.000 opérations, en mode compilé, on a donc un gain
de 10 microsecondes (10 10E-6 s) sans le NOT.

Ce n'est pas énorme, mais il n'empèche que tu as raison!
Je ne sais pas pourquoi je voulais absolument ce NOT !



Avatar
Jean-Marc
"Michel" a écrit dans le message de
news:s_Nxe.8350$

Hello,

Pour conclure ( hum pas sur!!!)

EstPair1=((n and 1)=0) ?



Oui, c'est le mieux amha.

Moi j'utilise

Function IsPair( n as Integer) As Boolean
IsPair = Not -(n And 1) ' Pour avoir la fonction Impair supprimer le


Not

Vous appliquez un opérateur booléen (Not) sur le résultat d'une opération
arithmétique.

Le problème ici est que ce n'est pas accadémique:
Vous utilisez le fait que en Basic, TRUE = -1 et FALSE = 0
=>> Ceci est propre au Basic et cela va à l'encontre d'un
principe général d'algorithmique qui dit que le code ne doit
pas supposer de valeurs particulières pour l'impémentation
des concepts tels que TRUE ou FALSE.

C'est tout à fait déconseillé d'une manière générale, car une personne
non avertie et ne connaissant pas cette spécificité de Basic risque
fort de se tromper en implémentant cet alogorithme avec un autre langage.

Pire, pour Impair, si on supprime le Not, on force un entier
comme valeur de retour de la fonction (entier n'est pas booléen).

Quick du - quand on supprime le Not je ne m'étais jamais posé la


question??
Et vous



Quand au signe '-' pour Impair, ça n'a plus d'importance une fois rendu la:

Vous renvoyez le résutat de n AND 1, qui vaudra (arithmétiquement) 1 si le
nombre est impair.
Donc:

si vous mettez le '-', la fonction retourne -1 (TRUE) et ça marche
si vous ne mettez PAS le '-', la fonction retourne 1 et comme VB va
convertir ça en entier et que 1 n'est pas 0, alors, un peu par chance, ça
marche et la fonction renvoie aussi true, après promotion de '1' en 'TRUE'.

Bref, ce n'est pas la façon "traditionnelle" ou "accadémique" de faire,
car c'est source d'erreurs.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Michel
CQFD
Bon dimanche et A+
Jean-Marc a écrit :
"Michel" a écrit dans le message de
news:s_Nxe.8350$

Hello,


Pour conclure ( hum pas sur!!!)

EstPair1=((n and 1)=0) ?




Oui, c'est le mieux amha.


Moi j'utilise

Function IsPair( n as Integer) As Boolean
IsPair = Not -(n And 1) ' Pour avoir la fonction Impair supprimer le



Not

Vous appliquez un opérateur booléen (Not) sur le résultat d'une opération
arithmétique.

Le problème ici est que ce n'est pas accadémique:
Vous utilisez le fait que en Basic, TRUE = -1 et FALSE = 0
=>> Ceci est propre au Basic et cela va à l'encontre d'un
principe général d'algorithmique qui dit que le code ne doit
pas supposer de valeurs particulières pour l'impémentation
des concepts tels que TRUE ou FALSE.

C'est tout à fait déconseillé d'une manière générale, car une personne
non avertie et ne connaissant pas cette spécificité de Basic risque
fort de se tromper en implémentant cet alogorithme avec un autre langage.

Pire, pour Impair, si on supprime le Not, on force un entier
comme valeur de retour de la fonction (entier n'est pas booléen).


Quick du - quand on supprime le Not je ne m'étais jamais posé la



question??

Et vous




Quand au signe '-' pour Impair, ça n'a plus d'importance une fois rendu la:

Vous renvoyez le résutat de n AND 1, qui vaudra (arithmétiquement) 1 si le
nombre est impair.
Donc:

si vous mettez le '-', la fonction retourne -1 (TRUE) et ça marche
si vous ne mettez PAS le '-', la fonction retourne 1 et comme VB va
convertir ça en entier et que 1 n'est pas 0, alors, un peu par chance, ça
marche et la fonction renvoie aussi true, après promotion de '1' en 'TRUE'.

Bref, ce n'est pas la façon "traditionnelle" ou "accadémique" de faire,
car c'est source d'erreurs.



1 2