Pair ou Impaire

jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011 - 7 juin 2008 à 12:42
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011 - 9 juin 2008 à 09:58
Slt le forum,

         J'aimerai savoir si il existe un fonction pour savoir si une variable à pour valeur un nombre PAIR ou IMPAIRE ??

         De plus est-il possible de savoir, également ..., si un tableau est "rempli", c'est-à-dire de savoir tous emplacements du tableau ont une valeur?

Voila
Merci
et A toute !
A voir également:

9 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 juin 2008 à 13:41
Bonjour,


Pour ce qui est de ta 1ère question, tu devrais lire ce que Renfields a écrit dans cette discussion :



http://www.vbfrance.com/infomsg_PRODUIT-NOMBRES-IMPAIRS-CONSECUTIFS_1147759.aspx#7



Pour ce qui est de la seconde question :
- quel est le type de ton tableau ?
S'il est en effet numérique, chaque item aura de toute manière une "valeur" (0 par défaut)
S'il est de type String, il contiendra des strings ou ""
Si tu veux savoir si un/des item(s) contiennent  0 (tableau numérique) ou "" (tableau string), je ne vois pas comment éviter une boucle pour parcourir tous les items...


 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 juin 2008 à 13:42
Pardon ! ce n'est pas RenField, mais Brunews !!!
0
cs_akim77 Messages postés 73 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 17 septembre 2008 4
7 juin 2008 à 13:46
Salut,

PAIR ou IMPAIR 2 methodes

1)
un nombre est pair s'il est divisible par 2 :
Dim a As Integer
Dim resultat As String
a = 12If a Mod 2 > 0 Then resultat "impair" Else resultat "pair"

2)

un nombre est pair si son bit de poids faible est egal à 0:

Dim a As Integer

Dim resultat As String

a = 12If a And 1 Then resultat "impair" Else resultat "pair"

pour le tableau il faut  verifier chaque element du tableau est vide
Dim Tab1(10) As String
Dim a As Integer
Dim resultat As String
resultat = "vide"
For a = 1 To UBound(Tab1)
    If Tab1(a) <> "" Then resultat = "non vide": Exit For
Next

A+

Akim
0
cs_akim77 Messages postés 73 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 17 septembre 2008 4
7 juin 2008 à 13:51
[auteur/JMFMARQUES/615490.aspx




]

Désolé jmfmarques , j'ai toujours un métro de retard.
Amicalement

Akim
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 juin 2008 à 00:19
Bonsoir à tous,

Voici mon grain de sel...
Je suis d'accord Akim pour la parité... mais on aurait pu aussi reprendre le snippets suivant :

Function Parite(nb As Long) As String
Parite = IIf((nb And 1), "Impair", "Pair")
End Function





<hr />
Sub test()
Debug.Print Parite(47)
End Sub

Oui, bon... rien d'extraordinaire non plus... et presque pareil...

<hr />
Par contre pour la 2ième partie, je vous propose d'essayer d'optimiser la rapidité... je trouve ceci (sous VBE) légérement plus rapide (-30%)

Sub es()



Dim Tab1(10000000) As String
Dim a As Long
Dim Fin As Long
Fin = UBound(Tab1)



temps = Timer
'Tab1(9999999) = "ede"



For a = 1 To Fin
If Len(Tab1(a)) Then MsgBox "stop" & Timer - temps: Exit Sub
Next



MsgBox Timer - temps




End Sub




<hr />

Mais bon, c'est pour le fun, bien sur...  et pas essayé en compilé...

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 juin 2008 à 00:36
et encore un peu plus rapide avec :



Sub es()



Dim Tab1(10000004) As String
Dim a As Long
Dim Fin As Long
Fin = UBound(Tab1) - 4



temps = Timer
'Tab1(10000000) = "e"



For a = 1 To Fin Step 6
If Len(Tab1(a)) Or Len(Tab1(a + 1)) _
    Or Len(Tab1(a + 2)) Or Len(Tab1(a + 3)) _
    Or Len(Tab1(a + 4)) Or Len(Tab1(a + 5)) _
    Then MsgBox "stop" & Timer - temps: Exit Sub
Next



MsgBox Timer - temps



End Sub



soit 0,46 seconde contre 1,125 avec la proposition initiale...

Amicalement,
Us.
0
cs_akim77 Messages postés 73 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 17 septembre 2008 4
8 juin 2008 à 11:02
Bonjour,

US_30, je comprends aisément que les temps d'exécution de Len(Tab1(a)) et de Tab1(a) <> ""
soient différents, mais je suis bluffé par le gain de temps obtenu avec ta dernière proposition.

Je viens de vérifier qu'avec un Step12 on gagne encore du temps, il y a forcement une limite
mais c'est très intéressant .

Merci et bon Dimanche

Akim
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 juin 2008 à 12:54
Oui... Il est à noter, que si l'on pouvait connaître la taille de l'allocation mémoire pour un tableau de string (peut-être grâce à un API), il me semble qu'on pourrait déduire si celui-ci est totalement vide ou pas... sans passer par l'énumération... enfin, je crois... à voir...

Amicalement,
Us.
0
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
9 juin 2008 à 09:58
Super. Merci pour vos réponses, j'en ai prit connaissance mais malhereusement jvais pas pouvoir les tests dans le temps immédiat..
Jvous dirai tout cela dans quelque jours !

MErci @+
0
Rejoignez-nous