FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Bataille navale SM
var  for next Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
var  for next Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
var  for next Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
var  for next Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
var  for next Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
var  for next Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
var  for next Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
var  for next Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
var  for next Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
var  for next Emptypar leclode Dim 21 Avr 2024 - 18:09

» trop de fichiers en cours
var  for next Emptypar Marc Dim 21 Avr 2024 - 2:41

» 2D_fill_color(résolu)
var  for next Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
var  for next Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
var  for next Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
var  for next Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

 

 var for next

Aller en bas 
+5
Jean Claude
JL35
jjn4
lodchjo
loulou08
9 participants
AuteurMessage
loulou08

loulou08


Nombre de messages : 63
Age : 81
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

var  for next Empty
MessageSujet: var for next   var  for next EmptyMer 15 Fév 2012 - 12:39

Bonjour à tous
Lancez le prog ci-dessous puis regardez


code
dim i
for i =1 to 5
print " i = ",i
next i
print "==après next i (i a +1)=="
print " i = ", i," ???"
print " i = ", i," ???"
print "Pourquoi "

Merci d'avance
Revenir en haut Aller en bas
http://panoramicetardinouno.blogspot.fr/
lodchjo

lodchjo


Nombre de messages : 162
Age : 53
Localisation : Anvers
Date d'inscription : 26/12/2011

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 12:48

Hou, très bonne observation!!!!

Ma théorie:

je crois que Jack, pendant le développement de Panoramic Basic, a programmé les instructions FOR NEXT comme une instruction REPEAT - UNTIL.

Notamment, on pourrait remplacer
Code:
FOR X = a TO b STEP c
REM instructions
NEXT

par

Code:
x=a
REPEAT
REM instructions
x=x+c
UNTIL X>b
(REM ou bien: UNTIL X=b+c ou quelque chose comme ça.)

En applicant ceci a ton example, sa donne:

Code:
dim i
i=1
REPEAT
print "i=",i
i=i+1
UNTIL i=5+1
print "--------"
print "a la fin"
print "--------"
print "i=",i


Dernière édition par lodchjo le Mer 15 Fév 2012 - 12:52, édité 1 fois
Revenir en haut Aller en bas
http://lode.weebly.com
jjn4

jjn4


Nombre de messages : 2690
Date d'inscription : 13/09/2009

var  for next Empty
MessageSujet: +++   var  for next EmptyMer 15 Fév 2012 - 12:50

Explique plutôt plus en détail où tu trouves qu'il y a un problème.
Pensais-tu que la variable continuerait à incrémenter après next ?
Ah, et sers-toi du bouton code (13° à partir de la gauche)
pour ouvrir puis refermer une fenêtre de code.
A+
scratch alien jocolor
on s'est croisé avec lodchjo :
que la variable atteigne 6 après le dernier next est normal
et qu'elle ne bouge plus ensuite aussi.
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
lodchjo

lodchjo


Nombre de messages : 162
Age : 53
Localisation : Anvers
Date d'inscription : 26/12/2011

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 12:55

jjn4 a écrit:
Explique plutôt plus en détail où tu trouves qu'il y a un problème.
C'est pas vraiment une problème, mais une bizarrerie, que
Citation :
FOR i = 1 to 5
a comme résultat i=6. Question
ET, si, ça peut être une problème, quand on est en train de programmer un truc et tu suppose que i=5, mais en faite, on dois constater que i=6...
Revenir en haut Aller en bas
http://lode.weebly.com
lodchjo

lodchjo


Nombre de messages : 162
Age : 53
Localisation : Anvers
Date d'inscription : 26/12/2011

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 13:03

jjn4,
tu as raison: dans la documentation de panoramic, il y a écrit que le boucle "FOR V=S TO E" s'arrete, quand le variable V est plus grand que E.
Dans cet example, FOR i=1 TO 5, le boucle s'arrete quand i=6 (mais les instructions ne sont pas executés pendant ce dernier tour)
Revenir en haut Aller en bas
http://lode.weebly.com
loulou08

loulou08


Nombre de messages : 63
Age : 81
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 13:29

Dans les autres basic la boucle "FOR V=S TO E" s'arrete, quand le variable V est = E.

ok merci
Revenir en haut Aller en bas
http://panoramicetardinouno.blogspot.fr/
lodchjo

lodchjo


Nombre de messages : 162
Age : 53
Localisation : Anvers
Date d'inscription : 26/12/2011

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 13:43

ouais, c'est ce que j'avais attendu de panoramic moi aussi! enfin, maintenant que l'on sait, on peut faire attention a ça Cool
Revenir en haut Aller en bas
http://lode.weebly.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 14:36

Il me semble bien quand même que dans les autres basics (comme dans Panoramic) la boucle s'arrête quand V est égale à E, mais à la sortie la variable V est égale à E+1, donc rien de nouveau.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 16:40

Salut à tous,

Pour Loulou08, tu peux toujours demander de sortir de la boucle au bon moment.
Code:
dim i%
for i% = 1 to 5
if i%=5 then exit_for
next i%
print i%

C'est vrai que EXIT_FOR n'est pas dans la la rubrique "EN RAPPORT" du manuel.

A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 16:50

C'est quand même bien utile que ce soit comme ça:
FOR i% = 1 TO 6
IF i% = a THEN EXIT_FOR
NEXT i%
IF i% > 6 -> a est en dehors des valeurs testées
enfin, c'est comme ça que je l'ai toujours utilisé.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 17:07

Bonsoir,

Tout d'abord, bienvenu à loulou08 !! Very Happy

Dans une boucle for : l'incrémentation de l'indice se fait en fin de boucle alors que le test lui est réalisé en début...

Donc on incrémente, on revient en début de boucle et le test nous fait sortir...
ce qui explique que tu te retrouve avec 6...

C'est également vrai en langage C Wink

Revenir en haut Aller en bas
http://nardo26.lescigales.org
loulou08

loulou08


Nombre de messages : 63
Age : 81
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 17:10

solution
for i=1 to 5
print i
next i :i=i-1
print i

ok @+ Merci
Revenir en haut Aller en bas
http://panoramicetardinouno.blogspot.fr/
loulou08

loulou08


Nombre de messages : 63
Age : 81
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 17:41

Merci pour votre accueil NARDO26
Revenir en haut Aller en bas
http://panoramicetardinouno.blogspot.fr/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 17:44

Ca marche à condition de ne pas avoir de pas (step ou de modification de i dans la boucle de traitement ...)
Soit directement dans le code voir pire, si tu utilise i dans une procédure évenementielle par exemple ...
Perso, je pense qu'il est plus sûr dans ce cas de blinder ton source par:

for i=1 to 5
...
next i :i=5

au moins tu es sûr de ta valeur finale Smile

En tout cas bienvenu dans le club ^^
Revenir en haut Aller en bas
loulou08

loulou08


Nombre de messages : 63
Age : 81
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyMer 15 Fév 2012 - 18:13

Jicehel merci pour la bienvenue
Revenir en haut Aller en bas
http://panoramicetardinouno.blogspot.fr/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyJeu 16 Fév 2012 - 9:09

Nardo26 a écrit:

Donc on incrémente, on revient en début de boucle et le test nous fait sortir...
ce qui explique que tu te retrouve avec 6...
C'est également vrai en langage C Wink

C'est vrai aussi avec FreeBASIC et Delphi (je viens de tester).

Toutefois, avec Delphi, lors de la compilation, on obtient un avertissement disant que la variable peut être indéfinie après la boucle.

En revanche, avec FreePascal on obtient 5.

La plus grande prudence s'impose donc ! D'une manière générale, il vaut mieux éviter d'utiliser une variable de boucle en-dehors de la boucle. Si on a encore besoin de la variable il vaut mieux recourir aux structures WHILE ... END_WHILE ou REPEAT ... UNTIL.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyJeu 16 Fév 2012 - 18:37

Parfaitement d'accord, Jean_debord ! Une variable de boucle ne devrait pas servir en-dehors de la boucle sans réinitialisation.

Si l'on sort de la boucle par EXIT_FOR, la variable de boucle a une valeur quelconque, et on ne peut pas savoir, en-dehors de la boucle, si tout le traitement pour cet indice a été effectué ou une partie seulement. Si je veux sortir une valeur précise de l'indexe en-dehors de la boucle, j'en affecte la valeur à une autre variable juste avant de faire EXIT_FOR.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
loulou08

loulou08


Nombre de messages : 63
Age : 81
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

var  for next Empty
MessageSujet: RESOLU   var  for next EmptyJeu 16 Fév 2012 - 19:09

Je ne m’était pas rendu contre jusque a présent ,
C’est après ce petit test que cela ma surpris
c’est juste bon a savoir
je vous remercie tous de vos conseils
Revenir en haut Aller en bas
http://panoramicetardinouno.blogspot.fr/
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyJeu 16 Fév 2012 - 19:55

@Klaus,
Citation :

Si l'on sort de la boucle par EXIT_FOR, la variable de boucle a une valeur quelconque, et on ne peut pas savoir, en-dehors de la boucle, si tout le traitement pour cet indice a été effectué ou une partie seulement.

tu m'inquiètes car si ce que tu dis est vrai, je fais constamment des erreurs dans mes codes.
Pour moi, quand on sort par exit_for on n'a éffectivemment pas terminé la boucle et la valeur de i% est forcément la dernière "connu" vu que l'on sort de la boucle.

Je remet mon code:
Code:
dim i%,a$
for i% = 1 to 5
if i%=5 then a$=str$(i%):exit_for
next i%
print i%
print a$

A+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyJeu 16 Fév 2012 - 21:07

Tas raison, Jl35, si tu dis que la variable de boucle a forcément la dernière valeur connue dans la boucle. Mis qu'est-ce que cela veut dire ? Seulement qu'on était "quelque part" dans l'itération uméro untel ! Cela ne détermine en aucun cas jusqu'où l'intérieur de la boucle a été effectué.
Exemple:
Code:

for i%=1 to 10
  file_writeln 1,table1$(i%)
  file_writeln 1,table2$(i%)
  if flag%=1 then exit_for
  file_writeln 1,table3$(i%)
  file_writeln 1,table4$(i%)
  if flag%=1 then exit_for
  file_writeln 1,table5$(i%)
  file_writeln 1,table6$(i%)
next i%
if i%<10 then goto boucle_interrumpue
...
boucle_interrompue:
: ' interrompue, certes, mais qu'est-ce qui a été écrit dans le fichier ?

Bon, j'en conviens, mon programme est un peu bêta. Mais c'est fait exprès: il faut imaginer que la variable flag% est positionnée à 0 sur le clic d'un bouton d'abandon, par exemple.. Dès lors que EXIT_FOR n'est pas placé, soit comme première, soit comme dernière instruction de la boucle, on est dans l'incertitude sur les parties exécutées ou non exécutées de la boucle. Et ce indépendamment de la valeur, sûre ou non, de la variable de boucle.

C'est pourquoi je code systématiquement un cas comme ci-dessus, de la manière suivante:
Code:

sortie% = 0
for i%=1 to 10
  file_writeln 1,table1$(i%)
  file_writeln 1,table2$(i%)
  if flag%=1
    sortie% = 1
    i_sortie% = i%
    exit_for
  end_if
  file_writeln 1,table3$(i%)
  file_writeln 1,table4$(i%)
  if flag%=1
    sortie% = 2
    i_sortie% = i%
    exit_for
  end_if
  file_writeln 1,table5$(i%)
  file_writeln 1,table6$(i%)
next i%
if sortie%>0 then goto boucle_interrumpue
...
boucle_interrompue:
: ' ici, on sait à quel moment on est sorti et on connaît la valeur de i%
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyVen 17 Fév 2012 - 1:25

C'était Jean-Claude, mais c'est pareil.
Quand même, moi je fais constamment des boucles du genre (par exemple pour un container_option avec des options de 10 à 15):
Code:
for i% = 10 to 15
    if checked(i%) = 1 then exit_for
next i%
en sortie j'ai bien dans i% l'option qui est cliquée !
dans tous les cas j'ai bien dans i% la valeur qu'il avait au moment de l'exit_for.
Dans tous les cas la variable de boucle a en sortie la valeur limite +1 (boucle complète), soit sa valeur au moment de l'exit_for, je ne vois pas où est le problème.

Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

var  for next Empty
MessageSujet: Re: var for next   var  for next EmptyVen 17 Fév 2012 - 8:36

Merci à tous les deux pour vos réponses,

@Klaus,
J'ai bien du mal à suivre ton explication, mais je vais utiliser ta démonstration en enregistrant les valeurs dans un fichier.

J'ai refait un petit code qui montre la différence si tu incrémentes une variable avant ou après EXIT_FOR.
Rien de révélateur, tout ce passe comme je l'entendais jusqu'à présent.

Code:
dim n%,a,b
alpha 1:top 1,50:left 1,50:font_size 1,14
alpha 2:top 2,90:left 2,50:font_size 2,14
alpha 3:top 3,130:left 3,50:font_size 3,14

for n%=1 to 10
    a=a+1
'    if n%=5 then exit_for
    if n%>5 then exit_for
    b=b+1
next n%

caption 1,"sortie par Exit_for n%="+str$(n%)
caption 2,"sortie par Exit_for a="+str$(a)
caption 3,"sortie par Exit_for b="+str$(b)

Merci, A+
Revenir en haut Aller en bas
Contenu sponsorisé





var  for next Empty
MessageSujet: Re: var for next   var  for next Empty

Revenir en haut Aller en bas
 
var for next
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: