variables libres, variables locales

Utilisation de Xcas

Modérateur : xcasadmin

Alek
Messages : 111
Inscription : jeu. oct. 28, 2010 1:20 pm

variables libres, variables locales

Message par Alek » mer. nov. 23, 2011 1:39 pm

Bonjour,
Pour motiver ma question je me permets de presenter d'abord un petit exemple.
Voici une procedure qui etant donnee une liste L de nombres reels retourne la liste de coeffs
d'un polynome ayant pour les racines les elements de L:

rcf(L):={
local k,p;
p:=1;
for k in L do
p:=p*(x-k); // x est ici une variable gobale
end do;
return coeff(p);
}:;

Bien evidemment, pour que ca marche il faut que x soit une variable libre (et ca marche bien).
OK.
Mais si on declare x comme local dans la procedure (local k,p,x;) le polynome p vaut juste une constante (=le dernier coeff du polynome renvoye par la version "globale")
Apparemment x "local" se comporte differemment. Est-ce volontaire? Si oui, quel est le "principe" pour des variables locales "libres"? (on est encore en 0.9.4)

Merci par avance.
Dernière modification par Alek le mer. nov. 23, 2011 6:52 pm, modifié 1 fois.

parisse
Messages : 5894
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: variables libres, variables locales

Message par parisse » mer. nov. 23, 2011 3:33 pm

Les variables locales sont automatiquement assignees a la valeur 0.
On peut rendre une variable locale libre avec purge(x).
Vous pouvez aussi laisser le programme tel quel et ajouter global x; pour eviter le warning.

Alek
Messages : 111
Inscription : jeu. oct. 28, 2010 1:20 pm

Re: variables libres, variables locales

Message par Alek » mer. nov. 23, 2011 4:01 pm

Merci pour une reponse rapide !
(En fait, je savais pour "global", mais un vieux reflexe (C, maple...) m'empechait de remarquer l'affectation automatique de x en local. )

alb
Messages : 1331
Inscription : ven. août 28, 2009 3:34 pm

Re: variables libres, variables locales

Message par alb » dim. nov. 27, 2011 6:56 pm

Une question connexe
Soit le programme:

Code : Tout sélectionner

essai():={
  local val;
  saisir("entrez les valeurs",val);val:=[val];
  retourne moyenne(val);
}
Si je fais
val:=1,2,3,4;essai()
et si je tape val dans la fenêtre de saisie la valeur de retour est bien entendu 0
Comment puis-je modifier le programme pour prendre en compte ce comportement d'utilisateur ?

Alek
Messages : 111
Inscription : jeu. oct. 28, 2010 1:20 pm

Re: variables libres, variables locales

Message par Alek » dim. nov. 27, 2011 8:55 pm

Ceci n'est pas une reponse (desole), mais je ne modifierais pas...

Au contraire, j'adopterai ce meme exemple pour expliquer ce que c'est une variable locale (et l'affectation automatique...)
(dans ce but je changerai peut etre la derniere ligne: retourne moyenne(val), size(val); )

alb
Messages : 1331
Inscription : ven. août 28, 2009 3:34 pm

Re: variables libres, variables locales

Message par alb » dim. nov. 27, 2011 10:07 pm

J'ai essayé d'utiliser size ou type sans rien trouver de bien concluant
En revanche j'ai repensé à VARS qui donne la liste des noms des variables affectées
Voilà ce que je propose:

Code : Tout sélectionner

essai():={
  local val;
  si member('val',VARS) alors
    output("Attention vous ne pouvez pas taper val dans la fenêtre de saisie")
  fsi
  saisir("entrez les valeurs",val);val:=[val]
  si val==[0] alors
    afficher("Errare humanum est, perseverare diabolicum")
  fsi
  retourne moyenne(val)
}

Répondre