Page 1 sur 2

Retourner l'inverse d'une variable [Résolu]

Publié : mar. 19/juil./2011 18:12
par Kwai chang caine
Bonjour à tous

Ca doit etre tellement simple que je ne trouve pas :oops:
Remarquez apres 10 h de prog :roll:

Comment retourner l'inverse d'une variable, la fonction NOT ne marche pas avec procedure return :(

Code : Tout sélectionner

Procedure Try()
 a = #True
 ProcedureReturn Not a
EndProcedure
Merci et bonne soirée

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 18:22
par Backup
................

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 18:57
par Kwai chang caine
Bonjour DOBRO

Bah en fait, comme je l'ai ecrit je veux juste retourner un NOT d'un booleen
Je me suis peut etre mal exprimé, pas la valeur negative, mais le contraire, le complement...enfin je ne sais pas comment ça s'appelle en bon "françois"
Enfin un NOT quoi :D

Si la variable est #True, je veux un retour #False et inversement
Mais la fonction NOT ne marche pas avec ProceduReturn :(

Je pourrais faire :

Code : Tout sélectionner

Procedure Try()
 
 a=#True
 
 If a
  ProcedureReturn #False
 Else
  ProcedureReturn #True
 EndIf
 
EndProcedure 

Debug Try()
Mais j'y trouve un peu lourdeau, il doit y avoir plus simple pour juste un NOT :roll:

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 19:03
par Thyphoon

Code : Tout sélectionner

Procedure Try(a)
  Procedurereturn 1-a
Endprocedure
comma ça si

a=1 alors 1-1 la procedure retourne 0
a=0 alors 1-0 la procedure retourne 1
voilà :mrgreen:

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 19:08
par case
Procedure test(a)
ProcedureReturn (Not a)
EndProcedure

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 20:13
par Chris
Si mes souvenirs sont bons, un nombre est l'inverse d'un autre quand le produit des deux donne 1

Exemple: (avec Calc, touche 1/x)

L'inverse de 2 = 0.5
L'inverse de 3 = 0.3333333
L'inverse de 4 = 0.25
L'inverse de 5 = 0.2

etc....

Bref, il suffit de faire 1/le nombre (ou la variable qui lui correspond)

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 21:38
par SPH
Ca, ca devrait marcher mais ca ne fonctionne pas. Normal, je ne fais jamais de procedures :mrgreen:

Code : Tout sélectionner

Procedure Try(a)
  inverse.f=1/a
  ProcedureReturn inverse
EndProcedure

Debug try(2)

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 21:56
par Ar-S
SPH, tu fais "1 divisé par a", comment veux tu que ça te donne l'inverse ? :lol:

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 22:16
par Backup
...............

Re: Retourner l'inverse d'une variable

Publié : mar. 19/juil./2011 23:44
par Ar-S
ooops je croyais qu'il essayait de retourner l'inverse aussi :?

Re: Retourner l'inverse d'une variable

Publié : mer. 20/juil./2011 8:05
par Kwai chang caine
Merci beaucoup à tous de vous réponses 8)

Pour cette fois c'est CASE qui a gagné une tringle a rideau :D
C'est exactement ce que je cherchais

J'avais essayé :

Code : Tout sélectionner

ProcedureReturn Not a

Code : Tout sélectionner

ProcedureReturn Not (a)
Mais pas pensé à

Code : Tout sélectionner

ProcedureReturn (Not a)
:oops:

Merci beaucoup CASE :wink:

L'idée de TYPHOON n'est pas bete non plus et marche super bien pour une booleene
Mais pour me la peter, j'avais décidé d'utiliser les fonctions, et donc NOT

Encore merci à tous et tres bonne journée

Re: Retourner l'inverse d'une variable [Résolu]

Publié : mer. 20/juil./2011 13:37
par graph100
@Ar-S : Faut mettre les choses au point :lol:

L'inverse et l'opposé ne sont pas la même chose.

L'inverse :

Code : Tout sélectionner

inverse_a.f = 1 / a
L'opposé :

Code : Tout sélectionner

oppose_a = - a
Maintenant pour un booléen on dit l'inverse par abus de langage, (ou alors c'est une notion purement booléenne)
car l'espace des booléens ne compte que 0 et 1, (en théorie puisque sur PB n'a pas de type booléen en natif)
C'est donc le complémentaire ou l'inverse.

Re: Retourner l'inverse d'une variable

Publié : mer. 20/juil./2011 13:50
par SPH
Dobro a écrit :normal , il faut typer la procedure !!

comme ça :

Code : Tout sélectionner

Procedure.f Try(a)
	inverse.f=1/a
	ProcedureReturn inverse.f
EndProcedure

Debug try(2)
Ha, je cherchais en effet. Merci :idea:

Re: Retourner l'inverse d'une variable [Résolu]

Publié : mer. 20/juil./2011 14:43
par blendman
pour un booleen, j'utilise la même technique que Typhoon :)

Code : Tout sélectionner

var = 1-var
L'avantage est que tu n'as pas à tester la variable forcément :D.
Par exemple, dans mon soft animatoon, pour ajouter un random sur la taille (ou pas) je mets uniquement ça :

Code : Tout sélectionner

random_size*(1+Random(size-1)) +(1-random_size)*size
random_size est global et donc je le connais toujours, et je le change en cliquant sur une checkbox par exemple, et la taille de mon brush se met à jour toute seule, comme elle est sympathique :D. Même pas besoin de tester random_size du coup.

Un pitit exemple :

Code : Tout sélectionner

size = 32
random_size = 1
Debug size = random_size*(1+Random(size-1)) +(1-random_size)*size

random_size = 0
Debug size = random_size*(1+Random(size-1)) +(1-random_size)*size 

Re: Retourner l'inverse d'une variable [Résolu]

Publié : mer. 20/juil./2011 15:03
par gnozal
En Purebasic,

Le NOT booléen, c'est ~

Bit | Resultat
--------------
0   |     1
1   |     0

C'est différent du NOT logique (NOT)

Valeur| Resultat
---------------
Faux  |   Vrai
Vrai   |   Faux

En PB, ~0 = -1 alors que (NOT 0) = 1
(Faux = #False = 0, et Vrai = #True = 1)

Dans les 2 cas, le résultat est du type 'Vrai', car en PB est 'Vrai' tout ce qui n'est pas 'Faux', c'est à dire toute valeur <> 0.

Code : Tout sélectionner

bool = ~bool
Debug bool
bool = ~bool
Debug bool
bool = ~bool
Debug bool
bool = ~bool
Debug bool
bool = ~bool
Debug bool

bool = (Not bool)
Debug bool
bool = (Not bool)
Debug bool
bool = (Not bool)
Debug bool
bool = (Not bool)
Debug bool
bool = (Not bool)
Debug bool