begin process at 2010 02 10 09:52:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

Probleme avec AND, ET logique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme avec AND, ET logique

dimanche 23 juillet 2006 à 02:05:59 | Probleme avec AND, ET logique

picolo5

Membre Club

Salut a tous !!

J essaye de porter un code C++ vers Delphi 2005, 

Je coince avec un calcul binaire, je ne me souvient plus comment s'appelle se calcul  , je vous explique :


En C++ des constantes sont utilisées pour connaitre des etats :

OPTION1 = 1
OPTION2 = 2
OPTION3 = 4
OPTION4 = 8
OPTION5= 16
OPTION6 = 32
OPTION7 = 64
OPTION8 = 128
OPTION9 = 256
OPTION10 = 32768
OPTION11 = 65536

Grace a un code  'etat' : 65574 et l utilisation de ET Logique je determine un etat :
if (etat & OPTION1)  printf("OPTION1 Activee\n");
...

Mais en Delphi je ne voit pas comment faire un ET logique ??

J ai fait une fonction pour faire le calcul a la main mais c est pas tres joli..

heu.. HELP !

 

Merci


 

dimanche 23 juillet 2006 à 02:18:50 | Re : Probleme avec AND, ET logique

CptPingu

Réponse acceptée !
if (etat & OPTION1)  printf("OPTION1 Activee\n");

Veut dire:
- Calcul de (etat & OPTION) (Application d'un masque OPTION a etat)
- Vérification du resultat (s'il vaut 0, ne pas entrez dans la boucle)

Donc en delphi je dirais:

if (etat and OPTION) <> 0then
begin
  writeln('OPTION1 Activee');
end

dimanche 23 juillet 2006 à 10:29:56 | Re : Probleme avec AND, ET logique

elguevel

Tout betement :

Et  = And
Ou  = Or
Ou exclusif = Xor
Non = Not

Table du "And" si çà peut t'aider à comprendre :

S = A et B

A B S
0 0 0
0 1 0
1 0 0
1 1
1

C'est comme si A était du chocolat et B de la confiture. Si je te dit Chocolat ET confiture, çà ne sera vrai que si tu prend les deux !
Si tu ne prend que du chocolat ou que de la confiture, c'est un OU pas un ET :-)

En faite la logique c'est tout con et tu l'utilise tout les jours sans meme faire de developpement, juste en causant.

@+ :-)

dimanche 23 juillet 2006 à 11:24:21 | Re : Probleme avec AND, ET logique

cirec

Membre Club Administrateur CodeS-SourceS

Salut,

eh oui on l'utilise tous les jours ...

Mais j'ajouterai ceci :

pour les déclarations des constantes il est préférable, à mon avis, d'utiliser le format Hex :

Const
OPTION1  = $00000001;  <---  4 possibilités par colone  1, 2, 4 où 8
OPTION2  = $00000002;          c'est ce que tu as fais au début (mais en Hex ça fonctionne pour tous)
OPTION3  = $00000004;
OPTION4  = $00000008;  <---
OPTION5  = $00000010;
OPTION6  = $00000020;
OPTION7  = $00000040;
OPTION8  = $00000080;
OPTION9  = $00000100;
OPTION10 = $00008000;  <--- ici on aurai pu continuer avec 200, 400, 800 mais pour coller aux nombres que OPTION11 = $00010000;  tu donnes  j'ai adapté ($8000 = 32768  et $10000 = 65536)

et le petit exemple qui va bien :

procedure
TForm1.Button9Click(Sender: TObject);
Var VTest : Integer;
begin
  VTest := 65574;
  If (VTest and OPTION1) <> 0 Then Label1.Caption := 'OPTION1 Active';
  If (VTest and OPTION2) <> 0 Then Label2.Caption := 'OPTION2 Active';
  If (VTest and OPTION3) <> 0 Then Label3.Caption := 'OPTION3 Active';
  If (VTest and OPTION4) <> 0 Then Label4.Caption := 'OPTION4 Active';
  If (VTest and OPTION5) <> 0 Then Label5.Caption := 'OPTION5 Active';
  If (VTest and OPTION6) <> 0 Then Label6.Caption := 'OPTION6 Active';
  If (VTest and OPTION7) <> 0 Then Label7.Caption := 'OPTION7 Active';
  If (VTest and OPTION8) <> 0 Then Label8.Caption := 'OPTION8 Active';
  If (VTest and OPTION9) <> 0 Then Label9.Caption := 'OPTION9 Active';
  If (VTest and OPTION10) <> 0 Then Label10.Caption := 'OPTION10 Active';
  If (VTest and OPTION11) <> 0 Then Label11.Caption := 'OPTION11 Active';
end;

Voilà c'est tout

@+
Cirec
mardi 25 juillet 2006 à 01:38:37 | Re : Probleme avec AND, ET logique

f0xi

Membre Club Administrateur CodeS-SourceS



AND = .
OR  = +
________

OPTION5 = 16

16 = hx10
16 = bn00010000
________

vtest = 24
24 = hx18
24 = bn00011000

R = 24 AND 16 = 00011000 AND 00010000
0 0 = .0 = +0
0 0 = .0 = +0
0 0 = .0 = +0
1 1 = .1 = +1
1 0 = .0 = +1
0 0 = .0 = +0
0 0 = .0 = +0
0 0 = .0 = +0

R = .00010000 = 16
R = +00011000 = 24
B = (24 AND 16) <> 0 = true
B = (24 OR 16) <> 0  = true

__________

vtest = 12
12 = hx0C
12 = bn00001100

R = 12 AND 16 = 00010000 AND 00001100
0 0 = .0 = +0
0 0 = .0 = +0
0 0 = .0 = +0
1 0 = .0 = +1
0 1 = .0 = +1
0 1 = .0 = +1
0 0 = .0 = +0
0 0 = .0 = +0

R = .00000000 = 0
R = +00011100 = 28

B = (12 AND 16) <> 0 = false
B = (12 OR 16) <> 0  = true


on pourrait dire que AND = "A > B" ou encore  "(A-B) >= 0" ou encore "(A div B) > 0"

12 > 16           = false
(12 AND 16) <> 0  = false (hx000F.hx0010 = hx0000)
(12 - 16) >= 0    = false (-4)
(12 div 16) > 0   = false (0 / 0.75)

24 > 16           = true
(24 AND 16) <> 0  = true  (hx0018.hx0010 = hx0010)
(24 - 16) >= 0    = true  (8)
(24 div 16) > 0   = true  (1  / 1.50)


Croc (click me)
mardi 25 juillet 2006 à 11:06:53 | Re : Probleme avec AND, ET logique

elguevel

AND = .
OR  = +  <= çà c'est la notation logique, n'essayez pas çà sur delphi :-)


Sinon quel tronche ce fOxy :-D ..
son explication ressemble à un code assembleur .

A+ ;-)
mardi 25 juillet 2006 à 22:39:26 | Re : Probleme avec AND, ET logique

picolo5

Membre Club
 Bonjour a tous !

Merci pour toutes ces reponses, je n ai pas encore tester mais je m en occuppe tout de suite !


Cette discussion est classée dans : probleme, etat, calcul, logique, option1


Répondre à ce message

Sujets en rapport avec ce message

changer l'etat logique du DTR [ par didi59650 ] avec inpout32.dll comment je peux passer de l'etat 0 à 1 sur le DTR du port serie puie revenir a l'etat 0 avec le logiciel delphi? merci OnCalcFields probleme de synchronisation [ par abcdef70 ] J'ai un probleme de synchronisation de mes tables, certain calcul dépende d'autre tables, mais celles-ci ne sont pas positionné sur la bonne fiche ava probleme avec SDL_gfx [ par Zermingore ] Bonjour, Je code un petit programme en 2D et j'ai choisi le portage de la SDL (Jedi-SDL)  pour le faire.J'ai donc ajouté les .pas nécessaires, je crée etats [ par nmacines ] bonsoir a tous je voudrais s'il vous plait  savoir  comment faire pour editer un etat de client par ordre numerique c'est à dire  avoir un etat  de la probleme avec les champs calculer ddans ibdataset [ par helmibk ] j'ai ajouté des colonnes calculé à ibdataset mes lors de l'exportation a excel ou fastreport tout les champs seront exporter sauf les champs qui ajout detection durée appel [ par laazizi1985 ] j'ai un probleme au niveau de mon projet consiste a recuperer le numero composé et la durée d'appel pour pour voir taxer appel apres quelqu'un peu m'a Probleme avec quickreport [ par Garido1982 ] j'ai une application delphi 7 avec une base de donnée je veut afficher la somme d'un champ BD pour chaque page et a la fin je veut afficher le cumule Modbus RTU - Calcul du CRC 16 [ par GingermaN ] Bonjour a vous tous,Je suis entrain de développer une petite appli Delphi qui permet d'aller écrire dans un registre d'un régulateur West 6100+ la val probleme sur tpe cb sagem gsm g950 [ par gael44 ] bonjour  j ai 2 tpe cb gsm G950 sur reseaux SFR et j ai fait les parametrage avec ma banque mais quand je me connecte a la banque pour parametrer le t Etablissement d'un Etat menstruel [ par Fabal01 ] Salut,j'utilise delphi7 et je n'arrive pas a trouver comment Etablir un etat mensuel des absences tout en conaissant la date des l'absences. Pouvez-vo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales