π
<-
Chat plein-écran
[^]

appel de fonction

Pour TI-Nspire OS 3.0 ou ultérieur.

appel de fonction

Message non lude tyann » 27 Juil 2011, 06:44

Bonjour à tous
Aprés avoir créér une variable dans un classeur nommée jeu52 qui est une liste de string de 52 éléments
j'ai écrit le code suivant

jeu=var.recall("jeu52")
function melange(l)
local i,p
for i=1,52 do
p=math.random(1,52)
l[i],l[p]=l[p],l|i]
end
return l
end
mel=melange(jeu)

Aprés exécution mel contient la liste mélangée OK!
mais jeu est aussi affectée et est pareil à mel ????
en faisant divers essais je me suis rendu compte que si je virais "return l"
que je faisais mel=jeu et qu'aprés seulement j'appellai melange(mel) sans affectation
mel se mélangeait et jeu aussi
Je veux bien comprendre pour mel , j'ai déja vu ça en basic on parle de transmission de paramétre par référence opposée à la transmission par valeur
mais pour jeu je pige pas!! quoique si jeu serait transmis comme référence et affectée puis le résultat l serait transmis à mel
mais dans le deuxième cas? et si c'est ça comment fait on une transmission par valeur pour que la var transmise ne soit pas affectée?
si quelqun pouvait éclairer ma lanterne
merci d'avance
Avatar de l’utilisateur
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 0%
 
Messages: 13
Inscription: 19 Sep 2007, 13:38
Localisation: REIMS
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: appel de fonction

Message non lude Levak » 27 Juil 2011, 13:17

En effet, les arguments de type table sont passés en référence implicitement, et on ne peux rien y faire.

Le mieux est de passer à la fonction un nouveau tableau, copie du premier :

Code: Tout sélectionner
------ Simple Table Copy
function table.copy(t)
   local u = { }
   for k, v in pairs(t) do
      u[k] = v
   end
   return setmetatable(u, getmetatable(t))
end


Si plus tard tu utilises des tables de tables, il faudra utiliser une copie profonde de la table :

Code: Tout sélectionner
------ Deep Table Copy
function table.copy(t)
   local u = { }
   for k, v in pairs(t) do
      u[k] = type(v) == "table" and table.copy(v) or v
   end
   return setmetatable(u, getmetatable(t))
end
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: appel de fonction

Message non lude Adriweb » 27 Juil 2011, 16:41

(pour le deep copy, en plus détaillé ca donne ca : )

(This function recursively copies a table's contents, and ensures that metatables are preserved. That is, it will correctly clone a pure Lua object.)

Code: Tout sélectionner
function deepcopy(t)
   if type(t) ~= 'table' then return t end
   local mt = getmetatable(t)
   local res = {}
   for k,v in pairs(t) do
      if type(v) == 'table' then
      v = deepcopy(v)
      end
   res[k] = v
   end
   setmetatable(res,mt)
   return res
end -- from http://snippets.luacode.org/snippets/Deep_copy_of_a_Lua_Table_2
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.4%
 
Messages: 14623
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: appel de fonction

Message non lude tyann » 29 Juil 2011, 02:35

Merci à vous pour vos réponses , je pense avoir compris le principe , malheureusement je me heurte à une nouvelle difficulté le code décrit précédemment fonctionne bien
sur le logiciel PC mais pas sur la calculatrice.
J'obtient le message "attempt to index local 'l' (a nil value) à la ligne l[i],l[p]=l[p],l[i].
je suppose que ça veut dire que l n'a pas de valeur ?
j'ai vérifié dans le classeur 'jeu52' est bien présente ?????
c'est la secode fois que j'observe une différence de fonctionnement entre le logiciel et la machine
si quelqu'un a une explication je suis preneur
merci d'avance.
Avatar de l’utilisateur
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 0%
 
Messages: 13
Inscription: 19 Sep 2007, 13:38
Localisation: REIMS
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: appel de fonction

Message non lude Adriweb » 30 Juil 2011, 06:39

Je ne comprends pas la différence entre le PC et la Calto vu que l'interpréteur Lua est le même...

Quelles sont les versions (OS logiciel et Calc) respectives ?

Sinon, avant ta lign qui fait une errer-ur, fait une deep table copy dans une autre variable temporaire, et fait le melange dessus, (toujours dans mel)

Dis moi si ca fait pareil ?
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.4%
 
Messages: 14623
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: appel de fonction

Message non lude critor » 30 Juil 2011, 10:28

Le PC et la calculatrice ne déclenchent pas du tout les différents événements Lua de la même façon.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 43%
 
Messages: 41521
Images: 14821
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: appel de fonction

Message non lude tyann » 30 Juil 2011, 10:56

Bonjour à tous
J'ai fait quelques essais ce matin avec ta fonction table.copy Adriweb et en fait si je l'emploie avant ma function melange,
c'est ta fonction qui renvoie une erreur 'table null' donc j'en ai conclus que c'est l'origine de la variable qui posait probléme (une liste créée en Basic)
j'ai donc créér une liste pardon ! une table sous Lua et la tout fonctionne correctement sur la calto s'entend (car sur le PC aucun prob)
Voila merci pour ton aide
A propos je parlais dans le dernier message de seconde fois que je trouvais une différence entre Logiciel et machine ,et bien en passant
des limites à platform.window:invalidate() pour limité le redraw ça fonctionne sur la machine mais pas sur le logiciel

Ah oui j'allais oublié c'est la même version pour les 2 : 3.0.2 1791
Avatar de l’utilisateur
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 0%
 
Messages: 13
Inscription: 19 Sep 2007, 13:38
Localisation: REIMS
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: appel de fonction

Message non lude Loulou 54 » 30 Juil 2011, 12:01

Pour les différences entre la calto et le PC, par exemple le rafraîchissement de l'écran est appelé sur PC dès que la souris bouge ou qu'on appuie sur une touche alors que ce n'est pas le cas sur la calto..
Mes programmes => ici !
Avatar de l’utilisateur
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 1.6%
 
Messages: 1985
Images: 8
Inscription: 02 Aoû 2009, 00:00
Localisation: 54, près de Metz
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingé Logiciel chez Amazon

Re: appel de fonction

Message non lude Levak » 30 Juil 2011, 13:16

tyann a écrit:A propos je parlais dans le dernier message de seconde fois que je trouvais une différence entre Logiciel et machine ,et bien en passant
des limites à platform.window:invalidate() pour limité le redraw ça fonctionne sur la machine mais pas sur le logiciel


Ah oui quand même :bigeek:
J'ai pas de moyen de vérifier, donc je te crois. Adriweb, tu as moyen de regarder de ton coté ? (qu'on puisse édité/comprendre le problème sur Inspired-Lua).
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: appel de fonction

Message non lude tyann » 30 Juil 2011, 13:34

Ba en tout cas j'ai écrit un petit bout de code qui déplaçe un rectangle sur l'écran quand on appuie sur une touche curseur
ensuite j'ai mis en arguments à platform.window:invalidate les nouvelles coordonnées calculées selon qu'on appuie sur fleche haut(y+5),gauche(x-5) etc...
ainsi que les largeur et hauteur du rectangle en me disant que les anciens rectangles devraient restés affichés et quand j'ai lancé le prog sur le logiciel
ça marchait pas on ne voyait toujours que le dernier.
J'ai transférer le prog sur la calto pour voir comment rendaient les couleurs sur la machine et la j'ai vu que les rectangles restaient.
Avatar de l’utilisateur
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 0%
 
Messages: 13
Inscription: 19 Sep 2007, 13:38
Localisation: REIMS
Genre: Homme
Calculatrice(s):
MyCalcs profile

Suivante

Retourner vers Nspire-Lua

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1058 utilisateurs:
>1011 invités
>41 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)