Pair ou Impaire

Signaler
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
-
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
-
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 !

9 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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...


 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Pardon ! ce n'est pas RenField, mais Brunews !!!
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
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
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
[auteur/JMFMARQUES/615490.aspx




]

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

Akim
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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.
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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.
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011

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 @+