Page 1 of 2

arguments d'une fonction

Unread postPosted: 22 May 2017, 17:44
by kadtexas
Bonjour

La fonction binomPdf(n,p,x), x facultatif, on peut l'appeler avec deux ou trois arguments selon le cas. Je trouve que c'est pratique.

Peut-on programmer en basic TI nspire une fonction avec m arguments et l'appeler avec m-1 arguments selon le cas ?
Merci pour des réponses.

Re: arguments d'une fonction

Unread postPosted: 22 May 2017, 17:53
by clifward
Je ne connais pas de moyen pour procéder "normalement".
En revanche, tu peux faire : ta_fonction(a)
et ensuite t'en servir en envoyant une liste, au lieu de plusieurs valeurs.
ta_fonction({truc,truc2,...,n trucs})

Dans le cas de la fonction binomPdf(n,p,x), cela donnerait au niveau du code :

binomPdf(a)
if dim(a)<2
disp "Erreur : Il n’y a pas assez d’arguments"
if dim(a)=2 then
...
endif
if dim(a)=3 then
...
endif
if dim(a)>3
"Erreur : Il y a trop d’arguments"

Re: arguments d'une fonction

Unread postPosted: 22 May 2017, 18:28
by Hamza.S
salut,

oui j'avais pensais à un truc comme le tien mais lorsque tu as une liste ou matrice en 3ième argument c'est mort :bigeek:
il faudra penser à un moyen pour éviter cela sinon il faudra faire le calcul plusieurs fois.

(en Lua c'est possible de faire les 2 propositions, arguments optionnelles et utiliser des listes dans une liste, mais ça c'est une toute autre histoire)

Re: arguments d'une fonction

Unread postPosted: 22 May 2017, 18:33
by clifward
Ouais, bon, si tu as une liste à mettre (de manière optionnelle), tu fais un request et puis basta...
(Si la liste est pas optionnelle, contrairement aux autres valeurs, il est possible de faire ta_fonction(a,b), avec a la liste, et b les arguments optionnels)

Re: arguments d'une fonction

Unread postPosted: 23 May 2017, 11:48
by Adriweb
En théorie, on peut arranger des choses en mixant Basic et Lua :

Tu mets tes arguments dans des variables Basic genre "arg1", "arg2", "arg3", etc.
Tu appelles une fonction Basic par exemple lua_basic_func("maSuperFonction", 3) qui va modifier une variable "flag" monitorée par le Lua tout en ayant mis ses deux paramètres (quelle fonction exécuter, et combien d'arguments) quelque part.
Le script Lua prend le relai dès qu'elle voit que le flag a bougé, exécute le calcul selon les entrées passées, puis stocke le résultat quelque part dans une autre variable Basic.

Il suffit ensuite de demander la valeur dudit résultat.

Tordu, certes, mais ca fonctionne.

Re: arguments d'une fonction

Unread postPosted: 23 May 2017, 14:27
by clifward
Pourquoi faire simple quand on peut faire compliqué, n'est-ce pas Adriweb ? :p

Si passer par des arguments a pour objectif de facilement récupérer les valeurs entrées précédemment (pour une liste par exemple), il est possible d'utiliser une variable global derrière le request... Comme ça, lorsque le request est "exécuté", il affichera la liste entrée juste avant...

De même, si c'est pour une fonction (et non pas un programme), il est possible d'utiliser une variable globale pour stocker une liste, en plus des arguments "classiques" (nettoyée ou non à la fin de l’exécution du programme).

Certes, ça donne de mauvaises habitudes, c'est pas très bien de faire comme ça, mais c'est un bidouillage qui fonctionne...

Re: arguments d'une fonction

Unread postPosted: 23 May 2017, 21:12
by Adriweb
Certes.
En fait c'est Hamza et sa mention du Lua qui m'a fait pensé à tout ça. Effectivement, pas besoin d'aller chercher aussi complexe :P (sauf si ce sont de très gros calculs qui se ferait plus rapidement en Lua)

Re: arguments d'une fonction

Unread postPosted: 24 May 2017, 16:28
by kadtexas
Bonjour à tous et merci pour les réponses.
Pour le Lua je ne connais rien.

Certes, ça donne de mauvaises habitudes, c'est pas très bien de faire comme ça, mais c'est un bidouillage qui fonctionne...

ça marche pour moi et j'aurai bien aimer que vous jetiez un coup d'oeil ci dessous.

Code: Select all
Define LibPub floibinom(list)=
Func
:Local s,i
:©Appel: floibinom(n,p,k) Calcul de P(X=k)
:©Appel: floibinom(n,p,kmin,kmax) Calcul de P(X<k),P(X>k), P(kmin<X<kmax)
:s:=0
:If dim(list)=3 Then
: binomPdf(a[1],a[2],a[3])→s
: Return s
:EndIf
:If dim(list)=4 Then
: For i,a[3],a[4]
:  binomPdf(a[1],a[2],i)+s→s
: EndFor
: Return s
:EndIf
:EndFunc


je n'ai pas compris:
De même, si c'est pour une fonction (et non pas un programme), il est possible d'utiliser une variable globale pour stocker une liste, en plus des arguments "classiques" (nettoyée ou non à la fin de l’exécution du programme).

Re: arguments d'une fonction

Unread postPosted: 24 May 2017, 16:29
by clifward
Utilise les balises [ code ], sinon c'est pas très lisible :p

Pourquoi a[n] ? ça devrait pas être list[n] ?

(et tu es bien conscient que ce que fait ton programme, une fonction déjà dédiée à ça existe sur nspire ? : binomCdf(n,p,min,max) )

En fait, dans des fonctions, tu ne peux pas faire de request... Donc à part les arguments de ta fonction, tu ne peux rien avoir de plus.
Mon idée était de faire :

a:={1,3,78,9,5}
Code: Select all
Define fonc(b,c,...,n)=
Func
if dim(a)=... then
...
endif
if dim(a)=... then
...
endif

etc

endfunc

Re: arguments d'une fonction

Unread postPosted: 24 May 2017, 17:30
by kadtexas
Oui, c'est list et non a (j'ai oublié de modifier)

(et tu es bien conscient que ce que fait ton programme, une fonction déjà dédiée à ça existe sur nspire ? : binomCdf(n,p,min,max) )


Oui je sais, mais je ne voulais pas passer toujours les quatre arguments lorsque j'ai besoin que de trois pour P(X=k) et c'était le but de ma question du départ.

Tu as proposé:
En revanche, tu peux faire : ta_fonction(a)
et ensuite t'en servir en envoyant une liste, au lieu de plusieurs valeurs.
ta_fonction({truc,truc2,...,n trucs})


J'ai fait ce que tu as proposé ou bien je me trompe!