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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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 ?

:?:
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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.
Dernière modification par MLD le ven. 27/févr./2015 11:34, modifié 1 fois.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
~~~~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
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message par MLD »

Aprés L'amour est dans le pré. Maintenant c'est L'amour est dans l'ordi HaHAHa :mrgreen: :oops:
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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
Dernière modification par Fig le sam. 28/févr./2015 14:23, modifié 2 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

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

Message 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)
Dernière modification par nico le sam. 28/févr./2015 14:14, modifié 3 fois.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message par Fig »

:wink:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

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

Message 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+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

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

Message 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)
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

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

Message 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... :|

!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
Répondre