Page 1 of 1

Problème Programmation

Unread postPosted: 16 Dec 2012, 17:13
by corentin legros
Bonjour à tous,

Je débute actuellement sur Nspire CAS.

Je tente actuellement de créer un programme qui m'effectue les calculs vectorielle pour la mécanique torsorielle.

J'ai effectué ce meme programme sur une TI-83, j'ai donc tenté de faire un équivalent sur Nspire.

Voila à quoi j'arrive :
Code: Select all
Define vectorielle(a)=
Prgm
:If a=0 Then
:Disp"Nouveau Point"
:Request "X Nouveau Point =",xa
:Request "Y Nouveau Point =",ya
:Request "Z Nouveau Point =",za
:ClrErr
:Disp "Ancien Point"
:Request "X Ancien Point",xb
:Request "Y Ancien Point",yb
:Request "Z Ancien Point",zb
:ClrErr
:xd:=xa-xb
:yd:=ya-yb
:zd:=za-zb
:EndIf
:If a=1 Then
:Disp "Vecteur directeur"
:Request "Xdir",xd
:Request "Ydir",yd
:Request "Zdir" ,zd
:ClrErr
:EndIf
:Disp "Force"
:Request "X Force",xf
:Request "Y Force",yf
:Request "Z Force",zf
:ClrErr
:l:=yd*zf-yf*zd
:m:=zd*xf-zf*xd
:n:=xd*yf-yd*xf
:Disp "Vecteur Direction"
:Disp "Xdir=",xd
:Disp "Ydir=",yd
:Disp "Zdir=",zd
:Disp "Moment résultant"
:Disp "L=",l
:Disp "M=",m
:Disp "N=",n
:EndPrgm


(Le "a" que je définit au départ me sers juste à savoir de quelle façon je rentre mes variables par la suite, en fonction des données de départ)

Seul problème lorsque je lance mon programme j'ai un message d'erreur qu'il me dit qu'il y a trop d'arguments.

Je ne sais pas d'ou cela peut venir ...
Je ne suis pas sur également de l'utilisation des fonction REQUEST.

Pourriez vous m'éclairer sur ma programmation ?

Cordialement

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 17:16
by Levak
Salut,

1) Il faut que tu appelles ton programme avec vectorielle(0) ou vectorielle(1).
Si tu penses que l'assertion précédente est d'une évidence même, je t'invite à faire un Ctrl+B sur ton programme, et à recommencer.

2) ClrErr ne fait pas ce que tu penses. Je t'invite à regarder du côté de Request "var", var, 0

3) ElseIf sert à quelque chose

4) Local est magique aussi

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 18:39
by corentin legros
Merci Levak pour ton aide.

Merci pour le coup de pouce pour le elseif.

Pour les Clrerr je pensai que c'était une toute autre fonction.

J'ai déclarer mes variables en local à chaque début de chaque partie mais toujours ce problème d'argument. J'ai également essayer de toute les déclarer en debut de programme mais j'ai également eu un problème.

Et depuis le début j'appelle mon programme avec vectorielle(0) ou (1).

Code: Select all
Define vectorielle(a)=
Prgm
:If a=0 Then
:Local xa,ya,za,xb,yb,zb,xd,yd,zd
:Request "X Nouveau Point =",xa
:Request "Y Nouveau Point =",ya
:Request "Z Nouveau Point =",za
:Request "X Ancien Point",xb
:Request "Y Ancien Point",yb
:Request "Z Ancien Point",zb
:xd:=xa-xb
:yd:=ya-yb
:zd:=za-zb
:Elseif a=1 Then
:Local xd,yd,zd
:Request "Xdir",xd
:Request "Ydir",yd
:Request "Zdir" ,zd
:EndIf
:Local xf,yf,zf,l,m,n
:Request "X Force",xf
:Request "Y Force",yf
:Request "Z Force",zf
:l:=yd*zf-yf*zd
:m:=zd*xf-zf*xd
:n:=xd*yf-yd*xf
:Disp "Vecteur Direction"
:Disp "Xdir",xd
:Disp "Ydir",yd
:Disp "Zdir",zd
:Disp "Moment résultant"
:Disp "L=",l
:Disp "M=",m
:Disp "N=",n
:EndPrgm


Il n'y a t'il pas un nombre de variable limité par programme ?

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 18:41
by Levak
Et le Ctrl+B ?

edit : le local est plus pratique au début du programme, mais c'est pas le point ici.

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 18:59
by corentin legros
Merci beaucoup le ctrl+B a résolu le problème

Un problème de compilation ?

Un grand merci à toi Levak :D

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 19:04
by Levak
corentin legros wrote:Un problème de compilation ?

Le TI-Basic n'est pas compilé.
Ctrl+B exécute simplement ce que tu as tapé dans l'éditeur, ce qui revient à affecter vectorielle à la définition d'un programme (Define vectorielle(a) = Prgm ... EndPrgm). Si tu ne fais pas ça c'est comme si tu tapais a:=1 et que tu effaçais la ligne sans la lancer.

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 19:05
by corentin legros
Je voudrai améliorer mon programme, pour que celui-ci effectue des calcul formel.

Je m'explique :
J'insere une variable genre "x" à la place d'un chiffre et qu'il me le resorte dans les resultat ?

Avez vous une idée pour effectuer ceci ?

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 19:06
by Levak
Si tu as une TI-Nspire CAS, tu peux très bien mettre x (non défini) dans les Request.

Re: Problème Programmation

Unread postPosted: 16 Dec 2012, 19:09
by corentin legros
J'ai tenté de remplacer une des valeur par un x, mais il m'indique que la variable n'est pas défini.

Meme si j'ai la CAS il faut que j'effectue des modif dans le programme non ?

EDIT : J'ai réussi à faire un calcul avec des inconnu

Mais depuis pas moyen il me sors toujours le problème de variable non défini

EDIT 2 : Sa fonctionne avec le a=0 (en écrivant les points) mais avec le a=1 (mode vecteur), sa ne marche pas

EDIT 3 : Problème résolu, je déclarer mes variables dans le premier if mais pas dans le elseif, je les ai donc déclarées avant de rentrer dans la boucle du if et là ça marche nickel.

Un grand merci !

Je joins mon programme en version finale si quelqu'un veut le réutiliser :

Code: Select all
Define vectoriel()=
Prgm
:Local a
:Request "Mode Points (0) - Mode Vecteur (1)",a
:Local xa,ya,za,xb,yb,zb,xd,yd,zd
:If a=0 Then
:Request "X Nouveau Point =",xa
:Request "Y Nouveau Point =",ya
:Request "Z Nouveau Point =",za
:Request "X Ancien Point",xb
:Request "Y Ancien Point",yb
:Request "Z Ancien Point",zb
:xd:=xa-xb
:yd:=ya-yb
:zd:=za-zb
:ElseIf a=1 Then
:Request "Xdir",xd
:Request "Ydir",yd
:Request "Zdir",zd
:EndIf
:Local xf,yf,zf,l,m,n
:Request "X Force",xf
:Request "Y Force",yf
:Request "Z Force",zf
:l:=yd*zf-yf*zd
:m:=zd*xf-zf*xd
:n:=xd*yf-yd*xf
:Disp "Vecteur Direction"
:Disp "Xdir",xd
:Disp "Ydir",yd
:Disp "Zdir",zd
:Disp "Moment résultant"
:Disp "L=",l
:Disp "M=",m
:Disp "N=",n
:EndPrgm

Re: Problème Programmation

Unread postPosted: 19 Dec 2012, 21:32
by Bisam
En fait, en utilisant les listes, tu peux simplifier énormément ton programme.
Voici ce que ça peut donner :
Code: Select all
Define vectoriel()=
Prgm
:Local mode, pta, ptb, vd, vf, mom
:Request "Mode Points (0) - Mode Vecteur (1)",mode
:If mode=0 Then
:  Request "Nouveau Point",pta
:  Request "Ancien Point",ptb
:  vd:=pta-ptb
:ElseIf mode=1 Then
:  Request "Vecteur direction",vd
:EndIf
:Request "Vecteur Force",vf
:mom:=crossp(vd,vf)
:Disp "Vecteur Direction",vd,"Moment résultant",mom
:EndPrgm

Pour l'utiliser, il suffit de rentrer des listes (contenant les coordonnées des point ou des vecteurs concernés) à la place des coordonnées 1 par 1.
En fait, ta calculatrice SAIT calculer des produits vectoriels !!