Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Drapeau et algorithme

4 réponses
Avatar
David
Bonjour à tous,

Pour réaliser un petit programme qui renseigne l'état de la batterie
il est possible d'utiliser
BatteryFlag qui renverra par exemple 10 [ 2 + 8] : Low et Charging)
=1 : Haut (High)
=2 : Bas (Low)
=4 : Critique (Critical)
=8 : En cours de chargement (Charging)
=128 : Aucun système de batterie (PC de bureau) (No system battery)
=255 : Statut inconnu (Unknown status)

Est-il possible d'utiliser un algorithme qui déterminerait
de manière mathématique les différents cas plutôt
qu'un "simple" Select case avec les 8 cas possibles ?

Merci pour vos réponses.

--
a+ Jean-Pol
Site Web : www.colovid.be
Site Web perso pour le fun : http://users.skynet.be/DAVID/
Cette page est transmise avec des électrons 100% recyclés.

4 réponses

Avatar
Jean-marc
David wrote:
Bonjour à tous,

Pour réaliser un petit programme qui renseigne l'état de la batterie
il est possible d'utiliser
BatteryFlag qui renverra par exemple 10 [ 2 + 8] : Low et Charging)
=1 : Haut (High)
=2 : Bas (Low)
=4 : Critique (Critical)
=8 : En cours de chargement (Charging)
8 : Aucun système de batterie (PC de bureau) (No system battery)
%5 : Statut inconnu (Unknown status)



Il vaudrait mieux utiliser 256, mais ce n'est qu'un avis.

Est-il possible d'utiliser un algorithme qui déterminerait
de manière mathématique les différents cas plutôt
qu'un "simple" Select case avec les 8 cas possibles ?



Un simple AND fera l'affaire, pour tester les bits un à un.
Mais tout dépend ce ce que tu veux faire.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
David
Bonjour,

Merci pour votre réponse; mais vous êtes trop fort pour moi :-)

Voila ce que j'ai fait en attendant mieux :

Select Case Batterie.BatteryFlag
Case 0
Niveau = "Correcte"
Case 1, 9
Niveau = "Haut"
Case 2, 10
Niveau = "Bas"
Case 4, 12
Niveau = "Critique"
Case 8
Niveau = "En charge"
End Select
Label3.Caption = Niveau & " (" & Batterie.BatteryFlag & ")"

Alors question je le mets ou "Votre" AND ?

--
a+ Jean-Pol
Site Web : www.colovid.be
Site Web perso pour le fun : http://users.skynet.be/DAVID/
Cette page est transmise avec des électrons 100% recyclés.

"Jean-marc" a écrit dans le message de news:
4abfa99e$0$2868$
David wrote:
Bonjour à tous,

Pour réaliser un petit programme qui renseigne l'état de la batterie
il est possible d'utiliser
BatteryFlag qui renverra par exemple 10 [ 2 + 8] : Low et Charging)
=1 : Haut (High)
=2 : Bas (Low)
=4 : Critique (Critical)
=8 : En cours de chargement (Charging)
8 : Aucun système de batterie (PC de bureau) (No system battery)
%5 : Statut inconnu (Unknown status)



Il vaudrait mieux utiliser 256, mais ce n'est qu'un avis.

Est-il possible d'utiliser un algorithme qui déterminerait
de manière mathématique les différents cas plutôt
qu'un "simple" Select case avec les 8 cas possibles ?



Un simple AND fera l'affaire, pour tester les bits un à un.
Mais tout dépend ce ce que tu veux faire.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Jean-Marc
On 27 sep, 20:21, "David" wrote:
Bonjour,

Merci pour votre réponse; mais vous êtes trop fort pour moi :-)

Voila ce que j'ai fait en attendant mieux :

Select Case Batterie.BatteryFlag
Case 0
Niveau = "Correcte"
Case 1, 9
Niveau = "Haut"
Case 2, 10
Niveau = "Bas"
Case 4, 12
Niveau = "Critique"
Case 8
Niveau = "En charge"
End Select
Label3.Caption = Niveau & " (" & Batterie.BatteryFlag & ")"



Hello,

Ce code ne peut pas fonctionner:
- Avoir batterieFlag à 0 est impossible, d'après tes spécifications.
- Avoir batterieFlag à 8 est impossible, d'après tes spécifications
aussi.

En Plus, tu confonds Niveau (bas, haut, critique) et Etat (en charge,
pas en charge, pas de batterie). D'après ce que je comprends, tu veux
aussi un niveau "correct"). Il faut donc rajouter un bit.

Niveau et Etat sont 2 concepts différents, mais on peut les gérer avec
unse seule variable interne (BatteryFlag) avec les champs de bits.

POur les manipulations de bits, voir par exemple wikipédia:
http://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_(logique)


Bref, je t'ai fait un exemple dispo ici (code source VB + projet + exe
si tu veux):
users.skynet.be/candide/batterie.zip

Sinon, voici le code complet:

(La partie "AND" est dans Command1_Click())

Option Explicit

' Niveaux
Const HIGH As Integer = 1
Const MEDIUM As Integer = 2
Const LOW As Integer = 4
Const CRITICAL As Integer = 8

' Etats
Const CHARGING As Integer = 16
Const NO_BAT As Integer = 128
Const GEN_FAIL As Integer = 256

Private Type TBatterie
BatteryFlag As Long
End Type

Dim Batterie As TBatterie

Private Sub Check1_Click()

If Check1.Value = 1 Then ' coché : pas de batterie
' set charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag And Not (NO_BAT)
Else
' clear charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag Or NO_BAT
End If

End Sub

Private Sub Check2_Click()

If Check2.Value = 1 Then ' coché : panne totale
' set charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag Or GEN_FAIL
Else
' clear charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag And Not (GEN_FAIL)
End If
End Sub

Private Sub Check3_Click()

If Check3.Value = 1 Then ' coché : en charge
' set charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag Or CHARGING
Else
' clear charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag And Not (CHARGING)
End If
End Sub

Private Sub Command1_Click()

Dim niveau As String
Dim etat As String

If Batterie.BatteryFlag And GEN_FAIL Then
niveau = ""
etat = "Erreur générale"
ElseIf Batterie.BatteryFlag And NO_BAT Then
niveau = ""
etat = "Pas de batterie"
Else
If Batterie.BatteryFlag And HIGH Then
niveau = "Haut"
End If

If Batterie.BatteryFlag And MEDIUM Then
niveau = "Correct"
End If

If Batterie.BatteryFlag And LOW Then
niveau = "Bas"
End If

If Batterie.BatteryFlag And CRITICAL Then
niveau = "Critique"
End If

If Batterie.BatteryFlag And CHARGING Then
etat = "En charge"
Else
etat = "Pas En charge"
End If
End If

Label3.Caption = "Niveau : " & niveau & " - Etat : " & etat

End Sub

Private Sub Form_Load()
Batterie.BatteryFlag = HIGH
End Sub

' Niveaux - 'index: 0 high, 1 medium, 2 low, 3 critical
Private Sub Option1_Click(Index As Integer)

' masque les états avec un AND puis set le bit approprié avec le
Or
Batterie.BatteryFlag = (Batterie.BatteryFlag And &HF0) Or (2 ^
Index)
End Sub

Cordialement,

Jean-Marc Noury
Avatar
David
Bonjour Jean-Marc,

Merci beaucoup pour tous ces renseignements
et pour votre dévouement dans la réalisation du programme.
Mais vous êtes une anthologie à vous tout seul.
J'ai bien aimé aussi votre recette de la tarte aux poires :-))

--
a+ Jean-Pol
Site Web : www.colovid.be
Site Web perso pour le fun : http://users.skynet.be/DAVID/
Cette page est transmise avec des électrons 100% recyclés.


"Jean-Marc" a écrit dans le message de news:

On 27 sep, 20:21, "David" wrote:
Bonjour,

Merci pour votre réponse; mais vous êtes trop fort pour moi :-)

Voila ce que j'ai fait en attendant mieux :

Select Case Batterie.BatteryFlag
Case 0
Niveau = "Correcte"
Case 1, 9
Niveau = "Haut"
Case 2, 10
Niveau = "Bas"
Case 4, 12
Niveau = "Critique"
Case 8
Niveau = "En charge"
End Select
Label3.Caption = Niveau & " (" & Batterie.BatteryFlag & ")"



Hello,

Ce code ne peut pas fonctionner:
- Avoir batterieFlag à 0 est impossible, d'après tes spécifications.
- Avoir batterieFlag à 8 est impossible, d'après tes spécifications
aussi.

En Plus, tu confonds Niveau (bas, haut, critique) et Etat (en charge,
pas en charge, pas de batterie). D'après ce que je comprends, tu veux
aussi un niveau "correct"). Il faut donc rajouter un bit.

Niveau et Etat sont 2 concepts différents, mais on peut les gérer avec
unse seule variable interne (BatteryFlag) avec les champs de bits.

POur les manipulations de bits, voir par exemple wikipédia:
http://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_(logique)


Bref, je t'ai fait un exemple dispo ici (code source VB + projet + exe
si tu veux):
users.skynet.be/candide/batterie.zip

Sinon, voici le code complet:

(La partie "AND" est dans Command1_Click())

Option Explicit

' Niveaux
Const HIGH As Integer = 1
Const MEDIUM As Integer = 2
Const LOW As Integer = 4
Const CRITICAL As Integer = 8

' Etats
Const CHARGING As Integer = 16
Const NO_BAT As Integer = 128
Const GEN_FAIL As Integer = 256

Private Type TBatterie
BatteryFlag As Long
End Type

Dim Batterie As TBatterie

Private Sub Check1_Click()

If Check1.Value = 1 Then ' coché : pas de batterie
' set charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag And Not (NO_BAT)
Else
' clear charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag Or NO_BAT
End If

End Sub

Private Sub Check2_Click()

If Check2.Value = 1 Then ' coché : panne totale
' set charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag Or GEN_FAIL
Else
' clear charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag And Not (GEN_FAIL)
End If
End Sub

Private Sub Check3_Click()

If Check3.Value = 1 Then ' coché : en charge
' set charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag Or CHARGING
Else
' clear charging bit
Batterie.BatteryFlag = Batterie.BatteryFlag And Not (CHARGING)
End If
End Sub

Private Sub Command1_Click()

Dim niveau As String
Dim etat As String

If Batterie.BatteryFlag And GEN_FAIL Then
niveau = ""
etat = "Erreur générale"
ElseIf Batterie.BatteryFlag And NO_BAT Then
niveau = ""
etat = "Pas de batterie"
Else
If Batterie.BatteryFlag And HIGH Then
niveau = "Haut"
End If

If Batterie.BatteryFlag And MEDIUM Then
niveau = "Correct"
End If

If Batterie.BatteryFlag And LOW Then
niveau = "Bas"
End If

If Batterie.BatteryFlag And CRITICAL Then
niveau = "Critique"
End If

If Batterie.BatteryFlag And CHARGING Then
etat = "En charge"
Else
etat = "Pas En charge"
End If
End If

Label3.Caption = "Niveau : " & niveau & " - Etat : " & etat

End Sub

Private Sub Form_Load()
Batterie.BatteryFlag = HIGH
End Sub

' Niveaux - 'index: 0 high, 1 medium, 2 low, 3 critical
Private Sub Option1_Click(Index As Integer)

' masque les états avec un AND puis set le bit approprié avec le
Or
Batterie.BatteryFlag = (Batterie.BatteryFlag And &HF0) Or (2 ^
Index)
End Sub

Cordialement,

Jean-Marc Noury