Page 2 sur 3

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 10:43
par Kwai chang caine
Mais comme ceci, c'est OK avec une constante ?
Le probleme c'est qu'une constante par definition est constante, c'est à dire qu'elle est remplacée dans le code par sa valeur à la compilation :wink:

Hors FALSAM de ce que j'ai compris (Je me permet de me permettre mon cher et tendre :wink: :mrgreen:), ne veut pas specialement modifier la valeur du pas en cours, mais pouvoir adresser un pas different à chaque fois qu'il appellerait cette boucle, par exemple en parametre dans une procedure

Code : Tout sélectionner

Procedure BoucleDeGuedin(Pas)
 For i = 1 to 100 Step Pas
  .....
  ....
 Next
EndProcedure

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 11:09
par Marc56
falsam a écrit :Je viens de découvrir qu'on ne pouvait pas faire ceci

Code : Tout sélectionner

sp = 4

For i = 1 To 40 Step sp
Next
C'est effectivement bizarre.
Je me demande si c'est un oubli, ou si c'est lié à une contrainte de programmation ?

:?:

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 11:15
par MLD
Salut KCC

Content de te parler. :lol:
Oui j'ai bien compris. Ce que je voulais dire, c'est que le step a la limite pouvais utiliser une constante. sous cette forme (#X = zz)
Enfin la doc précise bien que step = constante.

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 11:20
par GallyHC
Bonjour,

Je penche pour une limitation dans PB, mais bon comme beaucoup le montre on peut faire en sorte de s'en sortir. Plusieurs demandes on été en ce sens, sans aboutir. Ce n'est pas forcement une demande "trop" importante tant que l'on peu s'en passé.

PS: jamais pensé au "Step 0" et je pense que je vais modifier certain de mes codes dans ce sens, juste pour évité de faire un "+" avec un "-1" dans le "For". Moins il y a de calcul mieux c'est.

Merci Falsam, j'ai appris un nouveau truc.

Cordialement,
GallyHC

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 11:36
par Ar-S
J'ai aussi été confronté à ce soucis. Même si c'est remédiable, c'est tout à fait étrange que celà ne fonctionne pas. Que la variable soit globale ou non.

Une solution plus simple que de bidouiller le i, utiliser une constante.

Code : Tout sélectionner

#STEP = 5

For i = 1 To 50 Step #STEP
  Debug i
  Next

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 11:51
par GallyHC
Bonjour,

Ar-S > Ta solution ne résout pas le problème d'avoir un "PAS" variable (évoqué par MLD et corrigé par KCC), qui peu être utile pour généré une fonction lambda qui doit avoir un paramètre du dit "PAS".

Mettre une constante revient a écrire le "PAS" en dur dans "Step". La solution de falsam est a mon sens la meilleur (avec "step 0").

Code : Tout sélectionner

Define.i i, iPAS = 4

For i=1 To 40 Step 0
  Debug i
  i + iPAS
Next i
Cela évite le "-1" de ma méthode (J'avais jamais pensé que un "Step 0" pouvais être possible, car cela peu bloqué le programme en cas d'erreur de programmation de celui qui l'a fait).

Donc comme demande intéressent pour PB, serait d'interdire les "Step 0" et de pouvoir mettre une variable au "Step". Et cela afin d'évité un "For" fixe qui oblige un calcul supplémentaire pour le rendre plus flexible.

Cordialement,
GallyHC

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : ven. 27/févr./2015 22:42
par falsam
Whaouu, je ne pensais pas que ce topic allait suscité de passion.
Kwai chang caine a écrit :Hors FALSAM de ce que j'ai compris (Je me permet de me permettre mon cher et tendre ), ne veut pas specialement modifier la valeur du pas en cours, mais pouvoir adresser un pas different à chaque fois qu'il appellerait cette boucle, par exemple en parametre dans une procedure
Tu as tout compris mon Kwai chang caine. Ne penses tu pas qu'on fusionne trop, tout les deux ? J'ai parfois l'impression que tu es dans ma tête.

Comment tu m'as appelé ? Ha oui mon cher et tendre :oops:

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 10:16
par Kwai chang caine
Que neni....l'amour c'est ..comment dire pour utiliser un terme compris de tous ici .... :wink:
Ahhhhh oui !!! j'ai trouvé ......
binaire
On aime ou on aime pas :mrgreen:

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 10:45
par MLD
Aprés L'amour est dans le pré. Maintenant c'est L'amour est dans l'ordi HaHAHa :mrgreen: :oops:

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 13:41
par Fig
Pour ma part je propose plutôt cette méthode (pour l'optimisation vis à vis de l'assembleur que ça sort... Pour les puristes)

Code : Tout sélectionner

i=1:pas=4
While i<=40
  Debug i
  ;instructions
  i+Pas
Wend
Le coup du step 0 est ingénieux :D

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 14:02
par nico
En macro, ça donne:

Code : Tout sélectionner

Macro ForEx(Variable, Debut, Fin)
  Variable = Debut 
  While Variable <= Fin   
EndMacro
  
Macro NextEx(Variable, Pas)
  Variable = Variable + Pas
  Wend
EndMacro


ForEx(a, 10, 20)
Debug a
NextEx(a, 3)

Debug "---------------------------"

Step1 = 3
Debut1 = 10
Fin1 = 20

ForEx(b, Debut1, Fin1)
Debug b
NextEx(b, Step1)

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 14:07
par Fig
:wink:

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 16:39
par PAPIPP
Bonjour à tous

merci nico
et avec un pas négatif

Code : Tout sélectionner

Macro ForP(Variable,Debut,Fin);,pas)
  variable=debut
    While Variable<=Fin ;And pas >0
EndMacro
    
Macro Forn(Variable,Debut,Fin);,pas)
      variable=debut
    While Variable>=Fin ;And pas <0
EndMacro

Macro Nextpn(Variable,Pas)
	Variable+Pas
Wend
EndMacro


Forp(a.d,10.0,20.0)
Debug a
Nextpn(a,4)

Debug "---------------------------"


Forn(b.d,200.0,10.0)
Debug b
Nextpn(b,-10.0)
Debug "---------------------------"

forn (C.d,#PI,-30*#PI);,-3.4)
Debug c
nextpn(C.d,-3.4)
A+

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 17:46
par nico
Oui bien vu, j'ai essayé de le faire en gardant les mêmes instructions mais il semble qu'on ne puisse créer une macro à partir d'une autre macro, faut que je regarde sur le forum En, en attendant je l'ai fait avec des compilerif:

Code : Tout sélectionner

Macro Incrementation(Variable, Fin, Increment) 
  CompilerIf Increment = "+"
    While Variable <= Fin 
    CompilerElseIf Increment = "-"   
    While Variable >= Fin 
    CompilerEndIf  
EndMacro

Macro ForEx(Variable, Debut, Fin, Increment)
  Variable = Debut 
  Incrementation(Variable, Fin, Increment) 
EndMacro
  
Macro NextEx(Variable, Pas)
  Variable = Variable + Pas
  Wend
EndMacro


ForEx(a, 10, 20, "+")
Debug a
NextEx(a, 3)

Debug "---------------------------"

Step1 = -3
Debut1 = 20
Fin1 = 10

ForEx(b, Debut1, Fin1, "-")
Debug b
NextEx(b, Step1)

Re: Impossible d'utiliser For..Next avec un step en variable

Publié : sam. 28/févr./2015 19:56
par SPH
Fig a écrit :Pour ma part je propose plutôt cette méthode (pour l'optimisation vis à vis de l'assembleur que ça sort... Pour les puristes)

Code : Tout sélectionner

i=1:pas=4
While i<=40
  Debug i
  ;instructions
  i+Pas
Wend
+1
Fig a écrit :Le coup du step 0 est ingénieux :D
Je n'ai pas capté l"astuce... :|