Page 1 sur 1

Bug ou erreur de syntaxe de ma part ?

Publié : dim. 07/août/2016 19:41
par Philippe_GEORGES
Bonjour
Co code fonctionnait avec la dernière version LTS de Purebasic, mais plus avec la version 5.50

Code : Tout sélectionner

Procedure.i Dvd(x.i,y.i)
      
      
      If (y = 0)   ; division par 0 ??
        ProcedureReturn x
      EndIf      
      z.i = x / y
      If (((x>=0 ) = (y>=0)) Or (x-z*y = 0)) ; cette ligne ne passe pas !
        ProcedureReturn z  
      Else
        ProcedureReturn z -1
      EndIf
  EndProcedure
Quelqu'un a t il une idée ?
Merci d'avance,
Phil

Re: Bug ou erreur de syntaxe de ma part ?

Publié : dim. 07/août/2016 21:24
par GallyHC
Bonjour,

Je penses que cela vient juste du "=" entre deux testes. D'ailleur je ne comprend pas que cela passe en 5.42 LST (surement une chose que je comprendrais surement pas).

Mais :

Code : Tout sélectionner

If (((x>=0 ) And (y>=0)) Or (x-z*y = 0)) ; cette ligne ne passe pas !
Passe pour toute version

Cordialement,
GallyHC

Re: Bug ou erreur de syntaxe de ma part ?

Publié : dim. 07/août/2016 21:29
par Shadow
Moi ça marche 5.42 LTS 64.
Mais je ne connaissais pas cette façon de codé ^^

Re: Bug ou erreur de syntaxe de ma part ?

Publié : dim. 07/août/2016 21:44
par GallyHC
Bonsoir,

Une personne bien sympathique du T'chat de "Falsam" m'a donné cette solution, que je trouve viable :

Code : Tout sélectionner

Procedure.i Dvd(x.i,y.i)
  If (y = 0)   ; division par 0 ??
    ProcedureReturn x
  EndIf      
  z.i = x / y
  If ((Bool(x=>0 ) = Bool(y=>0)) Or (x-z*y = 0))
    ProcedureReturn z  
  Else
    ProcedureReturn z -1
  EndIf
EndProcedure
Encore merci a cette personne,
Cordialement,
GallyHC

Re: Bug ou erreur de syntaxe de ma part ?

Publié : dim. 07/août/2016 21:48
par Zorro
lorsqu'on retire toutes les parentheses on se retrouve avec ça :

Code : Tout sélectionner

If  x>=0 = y>=0  Or      x-z*y = 0
on comprends : If x>=0
mais apres il n'y a pas de raisons que ça fonctionne !

que faut t'il comprendre la dedans ?

Code : Tout sélectionner

If  x>=0  =  y>=0 
il y a deux conditions !
une qui est :

Code : Tout sélectionner

If  x>=0 
et une autre qui aurai du etre :

Code : Tout sélectionner

If  y>=0 
alors soit tu les mets l'une apres l'autre :

Code : Tout sélectionner

If  x>=0
If y>=0 
.....
soit tu separes par un and
deux IF imbriqués peuvent souvent etre remplacé par un And :)

Code : Tout sélectionner

If  x>=0 and  y>=0  Or      x-z*y = 0 ; cette ligne passe 
en remettant les parentheses (mais pas trop hein :mrgreen: ) :

Code : Tout sélectionner

	If ( x>=0 and  y>=0) Or (  x-z*y = 0 ) ; cette ligne passe 

Re: Bug ou erreur de syntaxe de ma part ?

Publié : dim. 07/août/2016 22:15
par Philippe_GEORGES
GallyHC a écrit :Bonsoir,

Une personne bien sympathique du T'chat de "Falsam" m'a donné cette solution, que je trouve viable :

Code : Tout sélectionner

Procedure.i Dvd(x.i,y.i)
  If (y = 0)   ; division par 0 ??
    ProcedureReturn x
  EndIf      
  z.i = x / y
  If ((Bool(x=>0 ) = Bool(y=>0)) Or (x-z*y = 0))
    ProcedureReturn z  
  Else
    ProcedureReturn z -1
  EndIf
EndProcedure
Encore merci a cette personne,
Cordialement,
GallyHC
Merci à toi, là ça marche super bien !
Mais j'ai du mal à voir où était vraiment le problème.

Phil

Re: Bug ou erreur de syntaxe de ma part ?

Publié : lun. 08/août/2016 0:31
par Ar-S
Je suis surpris que

Code : Tout sélectionner

If (((x>=0 ) = (y>=0)) Or (x-z*y = 0)) 
ait marché en 5.42 !

Re: Bug ou erreur de syntaxe de ma part ?

Publié : lun. 08/août/2016 4:47
par Shadow
Bha oui c'est ce que je te dis aussi !

Mais je pense que c'est normale car les opération sont
entre parenthèses et ça reviens donc à faire ceci:

Code : Tout sélectionner

If ((Bool(x>=0 ) = Bool(y>=0)) Or Bool(x-z*y = 0))

Re: Bug ou erreur de syntaxe de ma part ?

Publié : lun. 08/août/2016 8:41
par Zorro
Ar-S a écrit :Je suis surpris que ....
ait marché en 5.42 !
si si, je viens d'essayer, je sais pas si ça marche, mais ça ne déclenchait pas d'erreur ... :)