1

Salutations
Voici un programme que j'ai repris de ma ti83+ et que j'ai plus ou moin adapte a ma ti89 (avec plus ou moin du mal)
mis a part le cote graphique il me reste quelques problemes a regler (en rouge) que je n'arrive pas a resoudre/comprendre avec mes conaissances faites sur le tas
c'est pas le premier prog en basic que je decortique mais c'est le premier que je cherche a adapter
pour le reste le programme semble marcher
le but de celuici est de calculer une derivee et de creer un tableau de signe et variation (rien de bien mechant)
j'espere que vous pourrez m'aider a resoudre ces petits desagrements

voici la bete
(ps si vous voules le programme source, celui de la 83 dites le moi et je le met)


Prgm
ClrDraw:ClrIO
Input "f(x)=",str1
d(str1,x)->str2
Disp "f'(x)=",str2
DelVar y1
DelVar y2
expr(string(str1))->y1(x)
expr(string(str2))->y2(x)
Lbl z
Input "Intervalle mini 'I' =",i
Input "Intervalle maxi 'J' =",j
If i [>ou=] j Then
Disp "Impossible !":Goto z
EndIf
ClrIO
Output 30,30,"Calcul en cour"
Output 30,115,"."
20->r
DelVar l1
DelVar l2
(j-i)/r->p
seq(nDeriv(y1(x),x,a),a,i,j,p)->l1
Output 30,120,"."

** Ceci est le 1er problene

# r->dim(l1)


For a,1,r
If l1*a>0 Then
1->l1(a)
ElseIf l1*a<0 Then
-1->l1(a)
ElseIf l1*a=0 Then
0->l1(a)
EndIf
EndFor
Output 30,125,"."
PlotsOff
FnOff
setGraph("Axes","Off")
0»xmin
94->xmax
0->ymin
62->ymax
For w,0,20
EndFor
ClrIO
ClrDraw
LineHorz 0
LineHorz 62
LineVert 0
LineVert 94
LineHorz 50
LineHorz 38
LineVert 20
PxlOff 0,0
PxlOff 0,158
PxlOff 76,0
PxlOff 76,158
PxlText "x",5,15
PxlText "f'(x)",19,2
PxlText "f(x)",50,5
PxlText "I",3,35
PxlText "J",3,150
If inString(str1,"x")=0 Then
Goto c
EndIf

** Voici le 2nd (le meme)

# 0->b:0->dim(l2)


For a,1,r-1
If l1*a=0 Then

**
# b+1->b:b->dim(l2)


i+(a-1)*p->l2(b)
EndIf
If l1*a=ªl1*(a+1) Then

**
# b+1->b:b->dim(l2)


solve(y2(x) and x and i+a*p-.5*p,{i+(a-1)*p,i+a*p})->l2(b)
EndIf:EndFor
If b>8 Then
ClrIO
Disp " Il y'a trop de variations."," Il faut moin de 8"," annulations pour f'(x)."
Pause :ClrIO:Return
EndIf
If b=8 Then
Goto s
EndIf
"abcdefg8"->str3
int(70/(b+1))->q
For a,1,b
int(a*(70/(b+1)))+20->c

** La j'ai "Error: Too many arguments"
# PtText 5,c,shift(str3,a,1)


PtText 19,c,0
EndFor

**

# b-(l2(dim(l2))=j)->b


For a,0,b
int(20+(a+.5)*q)->d
If 0=a Then
nDeriv(y1(x),x,(2*l2(1)-.1)/2)->c
EndIf
If dim(l2)>a and 0>a Then
nDeriv(y1(x),x,(l2*a+l2*(a+1))/2)»->c
EndIf
If c>0 Then
PtText "+",19,d
Line aq+23,3,aq+q+20,35
EndIf
If c<0 Then
Line aq+23,35,aq+q+20,3
PtText "-",19,d
EndIf:EndFor
Goto f
Lbl s
If nDeriv(y1(x),x,(i+j)/2)>0 Then
PtText "+",19,55
Line 23,3,90,35
EndIf
If nDeriv(y1(x),x,(i+j)/2)<0 Then
PtText "-",19,55
Line 23,35,90,3
EndIf:0->b:Pause
Goto e:Lbl c
For a,20,90,5
PxlText 19,a,0
EndFor:0->b
Line 23,18,90,18
Pause :Goto e
Lbl f:Pause
ClrIO
Disp "'f(x)=0 pour:"
For a,1,dim(l2)

** La j'ai aussi "Error: Too many arguments"

# Disp shift(str3,a,1)+"1=",l2(a):Pause


EndFor:Lbl e
If b>7 Then
Disp "f(h)=",y1(x)*l2(8)
Pause :EndIf
If b>6 Then
Disp "f(g)=",y1(x)*l2(7)
Pause :EndIf
If b>5 Then
Disp "f(f)=",y1(x)*l2(6)
Pause :EndIf
If b>4 Then
Disp "f(e)=",y1(x)*l2(5)
Pause :EndIf
If b>3 Then
Disp "f(d)=",y1(x)*l2(4)
Pause :EndIf
If b>2 Then
Disp "f(c)=",y1(x)*l2(3)
Pause :EndIf
If b>1 Then
Disp "f(b)=",y1(x)*l2(2)
Pause :EndIf
If b>0 Then
Disp "f(a)=",y1(x)*l2(1)
Pause :EndIf
Disp "f(i)=",y1(x)*i
Pause
Disp "f(j)=",y1(x)*j
Pause

Toolbar
Title "Tracer la courbe?":Item "Non",no:Item "Oui",ou
EndTBar
Lbl no
NewProb
Stop
Lbl ou
i->xmin:j->xmax
FnOn 1
setGraph("Axes","On")
DispG
EndPrgm

2

Le # sert pour les indirections, je ne vois pas pourquoi ils figurent ici... C'est toi qui les a mis, mais ils ne sont pas dans ton code ?
# r->dim(l1)

Tu mets une variable dans un nombre... si tu veux stocker la valeur à la fin de laliste l1, mets r->l1[dim(l1)] (en sachant que ça va écraser la valeur qui y est déjà présente)
Apparemment, c'est ce qui arrive à chaque fois qut tu as ce genre de truc...
# PtText 5,c,shift(str3,a,1)

PtText prends comme arguments d'abord une chaïne, puis deux nombres (les coordonnées). J'avoue trouver bizarre que l'erreur soit de ce type...
# Disp shift(str3,a,1)+"1=",l2(a):Pause

La fonction shift ne prends que deux paramètres : une liste/chaine de caractères/un entier, ainsi qu'un entier positif ou négatif pour savoir de combien et dans quel sens effectuer la rotation.
Voilà.
Si jamais, je crois qu'il y a un manuel avec la calculatrice... J'ai pris le temps de te répondre en détail, mais ce n'est pas très apprécié ici.
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

3

les # c'est pour signaler la ligne d'erreur (c'est apres que j'ai eu la vision de mettre une couleur tongue )

ben a la base les "shift(" sont des "sub(" sur la 83
mais comme j'ai pas trouve les sub j'ai pris ce qui s'emblais s'en rapprocher

par quoi je peut remplacer shift alors?

et le pxltext etait un text(3,c,sub(str3,a,1))


et je vais m'abstenir de critiquer le manuel smile

4

sincerement, tu passerais 1 heure a lire le manuel que tu ferais un programme plus adapte au potentiel de la ti89.
t'a juste a lire les chapitre portant sur :
- les chaines de caracters
- les listes
- et les truc poure fair un peu de math, de manipulation binaire

en plus ce code s'optimise facilement en 3 lignes au plus :

EndFor:
Lbl e
If b>7 Then
Disp "f(h)=",y1(x)*l2(8)
Pause :EndIf
If b>6 Then
Disp "f(g)=",y1(x)*l2(7)
Pause :EndIf
If b>5 Then
Disp "f(f)=",y1(x)*l2(6)
Pause :EndIf
If b>4 Then
Disp "f(e)=",y1(x)*l2(5)
Pause :EndIf
If b>3 Then
Disp "f(d)=",y1(x)*l2(4)
Pause :EndIf
If b>2 Then
Disp "f(c)=",y1(x)*l2(3)
Pause :EndIf
If b>1 Then
Disp "f(b)=",y1(x)*l2(2)
Pause :EndIf
If b>0 Then
Disp "f(a)=",y1(x)*l2(1)
Pause :EndIf


en faisant correctement un truc du genre ( je signale que j'ai juste jete un coup d'oeil rapide au code ).

premiere optimisation

If b>7 Then
Disp "f(h)=",y1(x)*l2(8)
ElseIf 0<b and b<8 Then
Disp "f(" & char( ord("a" ) - b - 1 ) & ")=", y1(x)*l2(b)
ElseIf b=0 Then
Disp "f(a)=",y1(x)*l2(1)
EndIf
Pause


En reflechissant un peu plus on peut arriver a une ligne peut-etre.

If MIN<b and b<MAX Then
Disp "f("& char( F(b) ) & " )=",y1(x)*l2( G(b) )
Pause
EndIf


A toi de trouver les fonctions F et G

5

bon grace a vous 2 jai plus ces erreurs smile merci pour les indications (mais faut dir que les exemples du manuel sont un chti peut bof)
- remplacement des "shift(" par "mid("
- correction a mes "dim("

apres un debut de programme correct j'ai 2 erreurs
la premiere apparait a la ligne du
If L1*a=-L1*(a+1) Then
il me dit "a test did not resolve to true or false" des que j'ai x dans la derivee

la 2nd s'affiche quand la derivee est un entier \= 0
argument must be an expression pour
b-(l2*dim([[l2]])=j)->b (au passage il me double les [] c'est normal?)
et des que je met b-(expr(l2*dim([[l2]]))=j)->b il change en argument must be a string
et si je met b-(expr(string(l2*dim([[l2]])))=j)->b il veut toujours un string ce que je comprend pas la c'est que c'est une liste


pour "char(" si jai bien compris c'est une sorte de getkey non?
si c'est le cas ton code simplifie marche pas car je ne rentre aucune donne mis a part l'equation et l'intervalle

6

Neo Polak (./5) :
If L1*a=-L1*(a+1) Then il me dit "a test did not resolve to true or false" des que j'ai x dans la derivee

Ce test renverra "true" seulement si l'équation est trivialement vraie, sinon, tu auras une équation, d'ou le message d'erreur.
la 2nd s'affiche quand la derivee est un entier \= 0
argument must be an expression pourb-(l2*dim([[l2]])=j)->b

dim() doit avoir comme argument un nom de variable contenant une liste, une chaîne de caractère ou une matrice, ou encore directement une liste/matrice/chaîne. Comme tu veux la dimension de ta liste (je suppose), il te faut mettre l2 sans aucun crochet.
(au passage il me double les [] c'est normal?)

Oui. Comme tu as mis l2 entre crochets, il croit que c'est une matrice, et traduit ce que tu as écrit - qui est juste si tu veux une matrice 1 x 1 - en la notation qu'il utilise, soit [[m11, m12][m21, m22]] pour un exemple de matrice 2 x 2
et des que je met b-(expr(l2*dim([[l2]]))=j)->b il change en argument must be a stringet si je met b-(expr(string(l2*dim([[l2]])))=j)->b il veut toujours un string ce que je comprend pas la c'est que c'est une liste

l2*dim([[l2]])=j retourne un booléen... b - {true ou false}, ça retourne quoi ?? Une erreur. Essaie d'enlever les crochets...
pour "char(" si jai bien compris c'est une sorte de getkey non?

Non, char() retourne le code Unicode TI du premier caractère d'une chaîne donnée.

P.S. : je n'ai pas regardé ton code en entier, je te dis simplement ce que je crois qui pourrait gêner.
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

7

b-(l2*dim(l2)=j)->b me rendais une erreur data type
il aime pas le dim(l2) alors que dim(l1) marche :z

8

Comme je te l'ai dit, l2*dim(l2)=j retourne un booléen... L'erreur que tu avais avant était due au fait que l2*dim([[l2]]) était une matrice
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

9

dsl t'a poste avnt que je rajoute que l2 reste vide..
pourtant cette partie doit stocker quelque chose en l2 non?
l'erreur du dernier "if then" y serait elle pour quelquechose?

If inString(string(str1),"x")=0 Then
Goto c
EndIf
0->b:0->l2dim(l2)
For a,1,r-1
If l1*a=0 Then
b+1->b:b->l2dim(l2)
i+(a-1)*p->l2(b)
EndIf
If l1*a=-l1*(a+1) Then
b+1->b:b->l2dim(l2)
solve(y2(x) and x and i+a*p-.5*p,{i+(a-1)*p,i+a*p})->l2(b)
EndIf:EndFor.

10

heu

sur une 82/83/85/86 r->dim(l1) met la liste l1 a la taille r

si tu veux que la liste soit vide, il faut faire un

newlist(r)->l1

apres il faut regarder le manuel pour augmenter la taille, mais c'est apriori faisable avec "augment("

dim ne sert qu'a recuperer la taille de la liste sur 89

avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.