1

Bonjour!
J'ai créé un petit programme calculant une fonction financière (TRA) qui bug (message domain error de l'interpreteur), semble t-il, sur une boucle for au sein d'une fonction.
Il s'agit de la fonction "actualisation des flux" du prog. merci de m'aider car là, je ne comprends vraiment pas

voici le programme :

()
Prgm
local i,N,d,V0,temp,taux
ClrIO
Disp "**************************","* TRA sur obligations ","**************************"
¨ boite de dialogue (requetes) :
¨-------------------------------
Dialog
Title "Entrer les données suivantes"
Request "nbre échéances N ",N
Request "prochain coupon",d
Request "V0",V0
EndDlog
expr(N)»N
expr(d)»d
expr(V0)»V0
newList(N)»F
¨ saisie des flux
¨----------------
For i,1,N
Input "Entrez flux "&string(i),temp
temp»F[i]
EndFor
¨ fonction d'"actualisation des flux"
¨-----------------------------------
Define somme(r)=Func
local S,j
0»S
For j,1,N
S+F[j]/((1+r)^(j-1))»S
EndFor
Return S
EndFunc
¨ calcul du TRA
¨--------------
0»taux
while (abs(V0-somme(taux)/((1+taux)^(d/365)))>1/100)
taux+1/100»taux
EndWhile
Disp "le TRA est :"&string(taux)
EndPrgm

2

je n'ai pas fait de basic depuis des lustres, mais je suppose que c'est l'indice j de ton tableau F qui dépasse la taille du tableau ?
sinon il y a peut etre autre chose : ta boucle utilise N comme borne supérieure, or elle n'est pas définie dans ta fonction somme, et elle est définie en local dans le programme principal : essaie peut etre de virer N de la liste des variables locales, ou mieux, arrange toi pour passer la variable N dans les arguments de ta fonction somme

en gros :
[...]
Define somme(r, N)=Func
[...]


et plus bas
[...]
while (abs(V0-somme(taux,N)/((1+taux)^(d/365)))>1/100)
[...]




mais je n'ai pas fait de basic depuis si longtemps que je ne garantis absolument rien, fait une sauvegarde avant hehe

3


()
Prgm
local i,N,d,V0,temp,taux
...
Define somme(r)=Func
local S,j
0»S
For j,1,N
S+F[j]/((1+r)^(j-1))»S
EndFor
Return S
EndFunc
...
EndPrgm

la variable N n'est pas définie dans ta sous fonction.

Edit: ah mince j'avais pas vu que tu avais répondu pen^2 triso
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

4

tripo

5

Merci de vos réponses et en effet, le pb venait de la variable N qui était globale. L'astuce était donc de définir une fonction à 2 variables.
J'ai lancé le programme mais le pb est que la boucle while explose la pile! En clair, la TI plante et ne peut afficher de résultat. J'ai donc apporté la modif suivante :

¨ calcul du TRA
¨--------------
solve(V0=somme(taux,N)/((1+taux)^(d/365)),taux)»resultat
Disp "le TRA est :"&string(resultat)
EndPrgm

Mais la aussi ça ne marche pas. Cette fois le pb vient du fait que solve semble refuser une fonction en paramètre. A moins que j'utilise mal la fonction solve.
Merci de m'aider sur ce dernier point Si le prog fonctionne correctement, je serai en mesure d'implémenter des fonctions financières que je mettrai en ligne

6

Ya pas un pb ici aussi ? :

For i,1,N
Input "Entrez flux "&string(i),temp
temp»F
EndFor 


Serait (a premiere lecture) :

For i,1,N
Input "Entrez flux "&string(i),temp
temp»F[i]                                         <---- vu que F est une liste...manquerait le [i]...
EndFor 
?
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

7

sibilleau :
le pb est que la boucle while explose la pile! En clair, la TI plante et ne peut afficher de résultat. J

mm, quelle pile ? c'est pas du recursif pourtant (ou alors j'ai mail lu hehe)
C'est quoi le message d'erreur ? (j'ai rien pour tester là)

8

PS :
sibilleau :
le pb venait de la variable N qui était globale

je suppose que c'est juste un lapsus, mais en fait N n'est pas une variable globale, c'est une variable locale (locale à la fonction somme et locale au programme principal, d'où le besoin de faire un lien entre les deux via le passage en paramètre)