π
<-

appel de fonction

Pour TI-Nspire OS 3.0 ou ultérieur.

appel de fonction

Unread postby tyann » 27 Jul 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
User avatar
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 0%
 
Posts: 13
Joined: 19 Sep 2007, 13:38
Location: REIMS
Gender: Male
Calculator(s):
MyCalcs profile

Re: appel de fonction

Unread postby Levak » 27 Jul 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: Select all
------ 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: Select all
------ 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
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: appel de fonction

Unread postby Adriweb » 27 Jul 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: Select all
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

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...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80%
 
Posts: 14842
Images: 1133
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: appel de fonction

Unread postby tyann » 29 Jul 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.
User avatar
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 0%
 
Posts: 13
Joined: 19 Sep 2007, 13:38
Location: REIMS
Gender: Male
Calculator(s):
MyCalcs profile

Re: appel de fonction

Unread postby Adriweb » 30 Jul 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 ?

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...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80%
 
Posts: 14842
Images: 1133
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: appel de fonction

Unread postby critor » 30 Jul 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 53.6%
 
Posts: 42408
Images: 17124
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: appel de fonction

Unread postby tyann » 30 Jul 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
User avatar
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 0%
 
Posts: 13
Joined: 19 Sep 2007, 13:38
Location: REIMS
Gender: Male
Calculator(s):
MyCalcs profile

Re: appel de fonction

Unread postby Loulou 54 » 30 Jul 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 !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: appel de fonction

Unread postby Levak » 30 Jul 2011, 13:16

tyann wrote: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
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: appel de fonction

Unread postby tyann » 30 Jul 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.
User avatar
tyann
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 0%
 
Posts: 13
Joined: 19 Sep 2007, 13:38
Location: REIMS
Gender: Male
Calculator(s):
MyCalcs profile

Next

Return to Nspire-Lua

Who is online

Users browsing this forum: ClaudeBot [spider] and 10 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1081 utilisateurs:
>1069 invités
>6 membres
>6 robots
Record simultané (sur 6 mois):
7582 utilisateurs (le 25/06/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)