Problème de test logique

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Problème de test logique

Message par kelebrindae »

Bonjour,

Je vous soumets le truc que je viens de rencontrer, car je ne sais pas si c'est un bug ou non.
J'ai l'impression qu'il y a un truc qui cloche dans les tests logiques de PB.

Voici le code:

Code : Tout sélectionner

If Not #False And Not #True
  Debug "Faux"
Else
  Debug "Vrai"
endif
Ce "if...", selon moi, est équivalent à:

Code : Tout sélectionner

If #True And #False
et devrait donc afficher "Faux". J'ai fait le test dans d'autres langages, et c'est effectivement le cas.

Pourtant, PB affiche "Vrai". En fait, il traite la ligne comme si c'était:

Code : Tout sélectionner

If Not (#False And Not #True)
ce qui, toujours selon moi, n'est pas du tout la même chose... :?
(et je le répète, les autres langages avec lesquels j'ai essayé ne fonctionne pas comme ça)

Bref: vous en pensez quoi, vous ?
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de test logique

Message par Backup »

kelebrindae a écrit : (et je le répète, les autres langages avec lesquels j'ai essayé ne fonctionne pas comme ça)

Bref: vous en pensez quoi, vous ?

oui mais dans les autres langages fait :

Code : Tout sélectionner

Debug  #False
Debug #True
purebasic considere #False comme etant = 0
et #true =1

dans bien des languages #false c'est =-1
et donc #true=0 ;)


lorsque tu fais :

Code : Tout sélectionner

If #True And #False
  Debug "Faux"
Else
  Debug "Vrai"
EndIf
ça reviens a faire : 1 and 0
et ça fait bien 0 donc faux (#false ) :)
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: Problème de test logique

Message par flaith »

On est presque dans un état "qbit" :mrgreen:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Problème de test logique

Message par Ollivier »

@Kele

N'oublie pas que le programme en Pure est compilé en ASM. Il y a une "logique" bien huilée.

Dans ton code:

Code : Tout sélectionner

If Not #False And Not #True
  Debug "Faux"
Else
  Debug "Vrai"
endif
Je ne vois pas pourquoi, tu as mis "Faux" dans la partie "Si condition vraie" et "Vrai" dans la partie "Si condition fausse"... C'est une grossière erreur...

Aussi le principe est simple: If attend une réponse logique:
- Soit Reponse = 0 (faux ou #False)
- Soit Reponse <> 0 (vrai ou #True)

Not #False And Not #True
c'est égal à #True And #False
qui est égal à #False
ce qui affichera "Vrai" puisque tu as mis le message vrai dans la zone #False...

Enfin bref, ça sent le week-end anticipé...
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Problème de test logique

Message par SPH »

Je pense qu'une chose est soit vrai soit fausse. Donc, demander a un ordi de faire une action si la chose est vrai ET fausse est un contre sens absolu :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème de test logique

Message par Ar-S »

J'ai adoré lire ce topic Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Problème de test logique

Message par kelebrindae »

@Dobro et Ollivier:
Ok, mauvais exemple; j'ai voulu trop simplifier et je me suis planté.

@SPH:je suis d'accord, ça n'a pas de sens "utile". Mais du point de vue de la logique formelle, le test n'en est pas moins valide.

Je recommence avec un autre exemple:
Le cas dans lequel je me suis trouvé ressemble plus à:

Code : Tout sélectionner

x=1

; Condition 1 (vraie)
If Not (x=0 And x=1) 
  Debug "Vrai"
Else
  Debug "Faux"
EndIf

; Condition 2 (fausse)
If Not (x=1 Or x=0)
  Debug "Vrai"
Else
  Debug "Faux"
EndIf


; Condition 1 AND condition 2
If Not (x=0 And x=1) And Not (x=1 Or x=0)
  Debug "Vrai"
Else
  Debug "Faux"
EndIf
La condition 1 donne "vrai", ce qui est correct.
La condition 2 donne "faux", ce qui est toujours correct.
Quand je mets les deux dans un seul "if" avec juste un "and" au milieu, ça me donne "vrai".
Et là, je ne suis plus d'accord: [vrai] And [faux], ça devrait donner "faux".

En isolant un peu plus le soucis, on obtient ceci:

Code : Tout sélectionner

x=1

; Condition 1 AND condition 2 avec parenthèses
If Not (x=0)  And Not (x=1)
  Debug "Vrai"
Else
  Debug "Faux"
EndIf

; Condition 1 AND condition 2 sans parenthèses
If Not x=0  And Not x=1
  Debug "Vrai"
Else
  Debug "Faux"
EndIf
Selon moi, les parenthèses ne devraient rien changer. Et pourtant les deux tests renvoient des résultats différents.

Où est l'erreur ?
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Problème de test logique

Message par Cls »

kelebrindae a écrit :

Code : Tout sélectionner

If Not #False And Not #True
  Debug "Faux"
Else
  Debug "Vrai"
endif
Ce "if...", selon moi, est équivalent à:

Code : Tout sélectionner

If #True And #False
et devrait donc afficher "Faux".
Heu en logique, ce code doit afficher True et pas False.

Il faut revoir son ET logique (0 = false, 1 = true) :
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

Tu confonds avec le OU logique :
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
Dernière modification par Cls le ven. 11/févr./2011 15:59, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de test logique

Message par Backup »

@kelebrindae : en fait , je suis d'accord avec toi :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de test logique

Message par Backup »

Cls a écrit : Heu en logique, ce code doit afficher True et pas False.

Il faut revoir son ET logique (0 = false, 1 = true) :
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0 ; c'est ce que dit kelebrindae !!! (=0 =#false)
1 & 1 = 1

Tu confonds avec le OU logique :
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Problème de test logique

Message par Cls »

Non Dobro, il y confusion entre le résultat du test et les valeurs affichées par kelebrindae.

1 & 0 = 0 donc le test est false, donc son code affiche vrai ! :D
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Problème de test logique

Message par kelebrindae »

@Cls: en fait, comme l'a dit Ollivier, dans mon premier exemple j'avais inversé l'affichage entre le "if" et le "else", ce qui n'arrangeait rien... :oops:
Regarde plutôt le second exemple, qui est plus clair.
Dernière modification par kelebrindae le ven. 11/févr./2011 16:06, modifié 2 fois.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de test logique

Message par Backup »

Cls a écrit :Non Dobro, il y confusion entre le résultat du test et les valeurs affichées par kelebrindae.

1 & 0 = 0 donc le test est false, donc son code affiche vrai ! :D
arg !! il va ficnir par me faire perdre la tete ce kelebrindae :lol:
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Problème de test logique

Message par kelebrindae »

Désolé! Désolé! :P

Au final, mon problème, c'est plutôt que
"If Not (x=0) And Not (x=1)"
et
"If Not x=0 And Not x=1"

ne donnent pas le même résultat.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de test logique

Message par Backup »

kelebrindae a écrit :Désolé! Désolé! :P

Au final, mon problème, c'est plutôt que
"If Not (x=0) And Not (x=1)"
et
"If Not x=0 And Not x=1"

ne donnent pas le même résultat.
les parentheses sont évaluées en premier ! :)

If Not x=0 egale : If (Not x)=0 et pas If Not (x=0) qui est egale a If 1

enfin... je crois ... je deviens chevre là :lol:
Répondre