Savoir si une valeur existe dans une variable

cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 24 janv. 2013 à 23:56
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 25 janv. 2013 à 20:04
Bonsoir,

Je ne savais vraiment pas comment trouver ceci et d'ailleurs le titre n'est pas très explicite !
Bon, j'ai recopier le problème sur un code très simple car j’allais pas donner tous mon code ou ça ne l'aurais pas fait je pense !

Voici le code en question:
Module Module1

    Sub Main()

        Dim A As Integer =  0

        A = 2
        A = A Or 3
        A = A Or 5
        A = A Or 8
        A = A Or 12

        Console.WriteLine(A)
        Console.ReadLine()

    End Sub

End Module


Si je me suis pas trompé et normalement non, "Or" veux dire en gros "Avec", en plus, ou insérer ou un truc du genre
Donc là j'ai bien fais: A = 2 avec 3 avec 5 avec 8 avec 13

Le but du jeu ici est de savoir si A contient la valeur 3 par exemple ou 8 ou même plusieurs

Application:

Imaginer que chaque valeur est une CheckBox
Si elle est activé, alors la valeur existe
Sinon elle n’existe pas !

Si par exemple la CheckBox qui a la valeur 3 est activer ainsi que celle qui a la valeur 8
Si je fais par exemple:

Si A contient la valeur 3 alors faire
...
Sinon Si A contient la valeur 8 faire
...
Sinon
...
Fin Si

Petit code pour donner un petit exemple dans mon programme:
If RadioBouton_Information.Checked   = True Then
            Style = MsgBoxStyle.Information
        ElseIf RadioBouton_Question.Checked = True Then
            Style = MsgBoxStyle.Question
        ElseIf RadioBouton_Avertissement.Checked = True Then
            Style = MsgBoxStyle.Exclamation
        ElseIf RadioBouton_Critique.Checked = True Then
            Style = MsgBoxStyle.Critical
        End If


        If RadioBouton_Ok.Checked = True Then
            Style = Style Or MsgBoxStyle.OkOnly
        ElseIf RadioBouton_Ok_Annuler.Checked = True Then
            Style = Style Or MsgBoxStyle.OkCancel
        ElseIf RadioBouton_Oui_Non.Checked = True Then
            Style = Style Or MsgBoxStyle.YesNo
        ElseIf RadioBouton_Oui_Non_Annuler.Checked = True Then
            Style = Style Or MsgBoxStyle.YesNoCancel
        ElseIf RadioBouton_Recommencer_Annuler.Checked = True Then
            Style = Style Or MsgBoxStyle.RetryCancel
        ElseIf RadioBouton_Abandonner_Recommencer_Igniorer.Checked = True Then
            Style = Style Or MsgBoxStyle.AbortRetryIgnore
        End If


        If RadioButton_Bouton_1.Checked = True Then
            Style = Style Or MsgBoxStyle.DefaultButton1
        ElseIf RadioButton_Bouton_2.Checked = True Then
            Style = Style Or MsgBoxStyle.DefaultButton2
        ElseIf RadioButton_Bouton_3.Checked = True Then
            Style = Style Or MsgBoxStyle.DefaultButton3
        End If


        If CheckBox_Boîte_de_dialogue_au_premier_plan.Checked = True Then
            Style = Style Or MsgBoxStyle.MsgBoxSetForeground
        End If

        If CheckBox_Interrompre_lapplication_en_court.Checked = True Then
            Style = Style Or MsgBoxStyle.ApplicationModal
        End If

        If CheckBox_Interrompre_toutes_les_lapplications.Checked = True Then
            Style = Style Or MsgBoxStyle.SystemModal
        End If

        If CheckBox_Le_texte_se_lit_de_droite_à_gauche.Checked = True Then
            Style = Style Or MsgBoxStyle.MsgBoxRtlReading
        End If

        If CheckBox_Aligné_le_texte_de_la_boîte_à_droite.Checked Then
            Style = Style Or MsgBoxStyle.MsgBoxRight
        End If

        If CheckBox_Afficher_en_plus_le_bouton_Aide.Checked Then
            Style = Style Or MsgBoxStyle.MsgBoxHelp
        End If


Bon ba maintenant il faut que je sache qu'est se qui à été choisie !
C'est pour crée un code en fonction des valeurs choisie !

J’espère que vous pourrez m'aider !

10 réponses

Utilisateur anonyme
25 janv. 2013 à 00:13
Bonjour,

Sers toi du mode pas à pas (F8) et des points d'arrêts (F9) pour savoir ce que fait ton code. Promène ensuite ta souris sur tes variables pour vérifier leur valeur.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
25 janv. 2013 à 01:03
Pourquoi tu me dit ça banana32
En quoi cella va t-il m'apporter la réponse

Déjà le code est t-il correcte ?!
C'est comme ça qu'il faut faire ?

Je vais faire se que tu viens de me proposer au cas ou !
Merci !
0
Utilisateur anonyme
25 janv. 2013 à 04:21
Bonjour,

Pourquoi tu me dit ça banana32
En quoi cella va t-il m'apporter la réponse


Parce que le mode pas à pas permet de suivre l'exécution de ton code instruction par instruction. Tu vas voir à chaque instruction quelle valeur prend quelle variable et quelle instruction est excutée après.

Si je me suis pas trompé et normalement non, "Or" veux dire en gros "Avec", en plus, ou insérer ou un truc du genre
Donc là j'ai bien fais: A = 2 avec 3 avec 5 avec 8 avec 13


OR, c'est un ou logique, il retourne TRUE dès que une seule des conditions est remplie. Je n'ai jamais essayé ce que tu veux faire avec VB.net, mais la tradition microsoftienne avec des comparaisons logiques entre entiers c'est de dire que:

en VB6 et les versions précédentes et VBA : -1 et tout nombre positif vaut TRUE et rien d'autre. O vaut FALSE et rien d'autres.

en VB.net : 1 et tout autre nombre positif vaut TRUE et rien d'autres. 0 vaut false et rien d'autre.

Regarde dans ton aide pour AND, ANDALSO, ORALSO

Déjà le code est t-il correcte ?!
C'est comme ça qu'il faut faire ?


Rien compris à la question. Si tout ton bataclan c'est pour déterminer les icônes à afficher dans une Msgbox ou une MessageBox, normalement il suffit juste de mettre des + en chaque constante et VB se charge du reste.

Avant que tu ne pose la question:

MsgBox : Fonction VisualBasic conservée pour maintenir la compatibilité avec les versions précédentes de VB. Ne peut pas être utilisée ailleurs que dans programmes VB

MessageBox : Classe de Framework .net. Peut être utilisée dans n'importe quel langage compatible avec le Framework.

Les valeurs des constantes ne sont pas toujours les mêmes pour l'une et l'autre. Ils en parlent dans l'aide.

Et non, ouvrir l'aide ne donne pas la peste.
0
Utilisateur anonyme
25 janv. 2013 à 04:38
Bonjour,

J'ai modifié ta première procédure pour avoir ceci:

Sub Main()
        Dim A As Integer = 0
        A = 2
        Console.WriteLine(A)
        A = A Or 3
        Console.WriteLine(A)
        A = A Or 5
        Console.WriteLine(A)
        A = A Or 8
        Console.WriteLine(A)
        A = A Or 12
        Console.WriteLine(A)
        Console.ReadLine()
    End Sub


et j'ai obtenu ces résultats:
A A Or 3> a = 3
A A Or 5> a = 7
A A Or 8> a = 15
A A Or 12> a = 15

Donc ton "Avec" est pour le moins imprécis
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
25 janv. 2013 à 09:43
Salut

attention c'est de l'algebre de bool
2 or 3 = 3

base de or 0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

2 -> 0010
3 -> 0011
------
on applique le or entre chaque bits en commençant de droite vers la gauche
0 or 1 = 1
1 or 1 = 1
0 or 0 = 0
0 or 0 = 0

ce qui donne 0011 = 3

10 or 10 = ?
10 1010
1010
---------
1010 = 10
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 janv. 2013 à 15:07
Oui, il s'agit bien d'un Or numérique, mais il faut se le représenter sous forme de puissance de 2 pour le comprendre parfaitement :

1, c'est 2^0
2, c'est 2^1
4, c'est 2^2
8, c'est 2^3
etc

Pour construire un chiffre, 19 par exemple, on le décompose en puissance de 2 :
19, c'est 16 + 2 + 1, c'est à dire 2^4 + 2^1 + 2^0

Si on représente les puissances de 2 utilisées de la droite vers la gauche (norme), on obtient : 10011

Si on fait "19 Or 5", on fait un Or logique entre les bits de :
10011 (19)
00101 (5)
-----
10111 (23)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 janv. 2013 à 15:17
Complémentairement, si on veut savoir si le chiffre est utilisé dans la décomposition des puissances de 2 d'un autre chiffre, il faut faire un And :

5 est-il utilisé dans la décomposition en puissance de 2 de 19 ?
00101 (5)
10011 (19)
-----
00001 (1)
Le résultat ne donne pas 5 : le 5 ne figure donc pas dans cette décomposition

3 est-il utilisé dans la décomposition en puissance de 2 de 19 ?
00011 (3)
10011 (19)
-----
00011 (3)
Le résultat donne 3 : le 3 figure donc dans cette décomposition

En VB :
Si (Y And X) = X, c'est que X est utilisé dans la décomposition de Y
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
25 janv. 2013 à 18:04
Bonsoir

Un grand merci pour votre précieuse aide
Faut que je mette ça en pratique.
A+
0
Utilisateur anonyme
25 janv. 2013 à 19:27
Pendant le mode pas à pas, tu peux aussi utiliser la fenêtre exécution pour afficher ou modifier des variables ou des objets à la volée.

?variable --> affiche la valeur de la variable dans la fenêtre.

variable = 7 --> assigne la valeur 7 à une variable de type Integer.

MaListView.Items(7).Text = "blabla" --> change le texte d'un item d'une listview.

Ou même t'en servir de calculatrice :
?3 + 7 --> affiche 10
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
25 janv. 2013 à 20:04
A ouais, on peut faire ça en temps réel

Donc en gros je peut changer les valeur en temps réel pour
voir le comportement du programme, c'est bien ça ?
0
Rejoignez-nous