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
» Form(résolu)
Erreur: Variable Already Used... Emptypar leclode Hier à 17:59

» trop de fichiers en cours
Erreur: Variable Already Used... Emptypar Marc Hier à 11:42

» Bataille navale SM
Erreur: Variable Already Used... Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Une calculatrice en une ligne de programme
Erreur: Variable Already Used... Emptypar jean_debord Ven 26 Avr 2024 - 8:01

» Gestion d'un système client-serveur.
Erreur: Variable Already Used... Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Erreur: Variable Already Used... Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Erreur: Variable Already Used... Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Erreur: Variable Already Used... Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Erreur: Variable Already Used... Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Erreur: Variable Already Used... Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Erreur: Variable Already Used... Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Erreur: Variable Already Used... Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Erreur: Variable Already Used... Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Erreur: Variable Already Used... Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Erreur: Variable Already Used... 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
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 Erreur: Variable Already Used...

Aller en bas 
3 participants
AuteurMessage
JL35




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

Erreur: Variable Already Used... Empty
MessageSujet: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyJeu 24 Avr 2008 - 18:21

Que signifie l'erreur suivante:
Variable Already Used In An External Loop. Line: 77
obtenue dans un sous-programme qui contient une boucle:
77 FOR im = 1 TO totv
...
NEXT im
?
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2381
Date d'inscription : 28/05/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyJeu 24 Avr 2008 - 18:52

Cela veut dire qu'une boucle externe utilise la même variable im, et que la boucle interne, celle qui est décrite à la ligne 77, peut modifier la variable utilisée dans la boucle externe, ce qui à priori, peut causer des problèmes.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




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

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyVen 25 Avr 2008 - 10:05

C'est ce que j'avais bien cru comprendre, mais le problème est que j'obtiens cette erreur dans un sous-programme qui ne contient que cette boucle (et la variable im n'est utilisée qu'ici, totv étant une constante définie plus haut: nombre total de vignettes affichées).
Extrait:
Code:
.........
rem fin du programme principal
END

rem              *****************
rem ************** SOUS-PROGRAMMES ***************
rem              *****************

Affi:
REM affichage en grand de la vignette cliquée
FOR im = 1 TO totv
  IF CLICKED(im) = 1
    REM vignette im cliquée, affichage de l'image
    j = 1 + INT((im - 1)/nbc): REM rangée
    i = im - (j - 1) * nbc: rREM colonne
    FILE_LOAD np, r$ + "\" + img$(j,i)
    STRETCH_ON np: REM ajustage de l'image à la fenêtre
    SHOW np
    GOTO reti
  END_IF
NEXT im
reti:
RETURN

Peut-être y a-t'il une anomalie dans la structure du code principal, je continue à chercher...

En fait, le problème intervient à la deuxième exécution du sous-programme. Est-ce que le fait de sortir prématurément de la boucle par un GOTO (il n'y a pas d'EXIT FOR comme en Basic) au lieu du dernier NEXT ne poserait pas un problème (de compteur ou variable non réinitialisés, ou quelque chose comme ça) ? du fait que la boucle exécutée précédemment n'a pas été terminée naturellement elle est peut-être considérée comme étant toujours en cours d'exécution.

C'est bien ce que je pensais: si je supprime le GOTO reti dans la boucle et que je termine son exécution (pour rien, mais bon...), tout se passe très bien et il n'y a plus d'erreur. CQFD.

Remarque subsidiaire: c'est bien de donner le n° de la ligne fautive dans le message d'erreur, mais ce n'est pas évident à trouver du fait que les lignes ne sont pas numérotées, si le programme est long et s'il y a déjà eu plusieurs erreurs corrigées qui restent colorées en rouge. Ce serait bien d'avoir l'option numéros de lignes dans l'éditeur.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2381
Date d'inscription : 28/05/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyVen 25 Avr 2008 - 21:52

Dans une boucle, le test sur l'utilisation dans une boucle externe de la variable qui est utilisée a été mis pour éviter que la variable de la boucle externe puisse être manipulée. Je pensais que cela éviterait des erreurs de programmation, par exemple, utiliser plusieurs boucles FOR I=... imbriquées.
Si cela devient gênant, le test peut être retiré. Libre au programmeur de savoir ce qu'il fait.

Je vais examiner en détail ton exemple.

Je vais réfléchir à une possibilité d'indiquer les numéros de lignes.

Citation :
s'il y a déjà eu plusieurs erreurs corrigées qui restent colorées en rouge
Il y a un bouton qui permet de refaire la coloration syntaxique dans ce cas. Mais si c'était automatique, ce serait mieux. Je vais regarder cela aussi.


Dernière édition par panoramic le Sam 26 Avr 2008 - 21:15, édité 1 fois
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




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

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyVen 25 Avr 2008 - 22:27

Je ne conteste pas l'utilité d'un test pour vérifier l'intégrité d'une variable de boucle, mais dans mon cas (reexécution d'une boucle après sortie prématurée la fois précédente) ça ne se justifie pas. Il me semble qu'il vaudrait mieux une fonction EXIT FOR qui ôterait cette variable des boucles en cours d'exécution.

Dans mon exemple ci-dessus, si au lieu de:
Code:
GOTO reti
je mettais
Code:
im = totv
pour provoquer la sortie immédiate de la boucle, est-ce que ce serait licite ?
(je ne suis pas sûr qu'il soit bien sain de manipuler le compteur de boucle).
PS je viens d'essayer, ça marche très bien !

Pour la coloration syntaxique, je suis bête, je n'avais pas percuté, pour refaire la coloration j'enregistrais le programme après modifs et je le rechargeais... alors que j'avais un bouton pour faire ça tout seul...
Je me coucherai un peu moins bête ce soir.
Merci pour ta réponse.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2381
Date d'inscription : 28/05/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptySam 26 Avr 2008 - 21:14

Après examen du problème que tu soulèves, il s'avère que c'est le fait de sortir d'une boucle par un goto qui n'est pas accepté lors de l'exécution d'une nouvelle boucle avec la même variable.

Ton problème est isolé dans l'exemple suivant, qui déclenche une erreur:
Code:
dim i%
label sortie

for i%=1 to 3
 print i%
 if i%=2 then goto sortie
next i%

sortie:

for i%=1 to 3
 print i%
next i%
Comme la première boucle n'est pas "close", PANORAMIC considère lorsqu'il commence à exécuter la seconde boucle avec la même variable, que cette variable n'a pas été "libérée" et déclare une erreur.

Ce comportement n'est pas normal, on doit pouvoir sortir d'une boucle par un GOTO.
Pour le moment, le contournement que je vois est d'utiliser une deuxième variable pour la seconde boucle.
Ce code fonctionne:
Code:
dim i%,j%
label sortie

for i%=1 to 3
 print i%
 if i%=2 then goto sortie
next i%

sortie:

for j%=1 to 3
 print j%
next j%

Mais malheureusement, le code suivant ne fonctionne pas, et pour la même raison:
Code:
dim i%,j%
label sortie,recommence

recommence:
for i%=1 to 3
 print i%
 if i%=2 then goto sortie
next i%

sortie:

for j%=1 to 3
 print j%
next j%

goto recommence
En effet, lors du retour à la boucle for i% - - - PANORAMIC considère que la boucle for i% du cycle précédent n'a jamais été terminée, et déclenche une erreur.

Je vais revoir tout cela et regarder la possibilité des 3 commandes:
EXIT_FOR, EXIT_WHILE, EXIT_REPEAT pour sortir d'une boucle sans avoir besoin de faire un GOTO sur un label qu'il faut obligatoirement avoir déclaré au préalable.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




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

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptySam 26 Avr 2008 - 21:52

Effectivement, ce serait bien (ça existe en Basic et je m'en servais souvent, et ça économiserait un label).
En attendant, il semble que si on positionne la variable boucle à sa valeur finale (i% = 3 dans ton exemple) et qu'on branche sur une étiquette juste avant le next, on sort tout de suite de la boucle, et proprement.
C'est ce que je fais en attendant mieux.
L'inconvénient de cette méthode, c'est que dans ce cas on perd la valeur de la variable boucle qui fait sortir, qui peut être utile à connaître dans certains cas. Par exemple (recherche du caractère "\" dans une chaîne):

Code:
FOR i% = 1 TO LEN(a$)
  IF MID$(a$, i%, 1) = "\"
    ... sortie avec la valeur de i% exploitée ensuite
  END_IF
NEXT i%
là on est coincé.

Incidemment, il manque la fonction INSTR du Basic de recherche d'un caractère dans une chaîne: k = INSTR(a$, car$), ce qui éviterait une boucle avec sortie de boucle si caractère trouvé.
Revenir en haut Aller en bas
Georges

Georges


Nombre de messages : 290
Age : 55
Localisation : Martinique
Date d'inscription : 29/05/2009

Erreur: Variable Already Used... Empty
MessageSujet: erreur sur variable   Erreur: Variable Already Used... EmptyLun 15 Juin 2009 - 20:37

Salut JL35

je te propose ce code qui je pense peut résoudre ton problème en l'adaptant.

Code:

dim i%,carac%
while i%<>3
i%=i%+1
print "i%=" : print i%
end_while
print "sortie " : print i%
if i%=3 then carac% = i%
print
print " --------------------- "
print
for i%=1 to 5
print "i%2 =" : print i%
next i%
print
print " --------------------- "
print
print "le caractère sauvegardé : " : print carac%
end

La première boucle peut être sortie prématurément sans altérer la variable.
Au passage la variable i% est sauvegardée dans la constante carac%.
tu peux adpter cette méthode à des chaines de caractères.

georges
Revenir en haut Aller en bas
Contenu sponsorisé





Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... Empty

Revenir en haut Aller en bas
 
Erreur: Variable Already Used...
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Erreur sur variable locale.
» erreur : "Illégal variable name"
» Valeur d'une variable
» variable?
» Couleur d'une variable qui n'est pas un mot-clé

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: