2017-09-13 6 views
1

J'ai une TI-84 Plus et je crée un programme pour calculer l'amplitude d'un vecteur n-dimensionnel. J'ai inclus mon code et sa sortie ci-dessous.TI-BASIC: Commande d'indexation vers l'invite ou la saisie

Programme Editeur:

PROGRAM:NTHDMAG 
Disp "HOW MANY DIMENSIONS?" 
Prompt N 
{X,Y,Z,T,A,B,C,D,E,F,G,H,I,J,L,M,P,U,V,W}->L1 
For(K,1,N,1) 
L1(K)->Q 
Prompt Q 
End 

Affichage de sortie:

pgrmNTHDMAG 
HOW MANY DIMENSIONS? 
N=?3 
Q=?1 
Q=?2 
Q=?3 
Done 

Je veux de la Q à remplacer par chaque lettre en L1, et l'indexation L1 (K) dans l'invite commande renvoie une erreur. Les valeurs pour les lettres L1 seront quelle que soit la valeur de chaque composant (donc ici, par exemple, 1i + 2j + 3k). J'espère que c'est clair, mais je suis plus que disposé à clarifier si ce n'est pas le cas. Merci pour toute aide que vous pouvez fournir!

+0

'Input' permet des chaînes personnalisées à afficher, mais est-ce vraiment ce que vous avez besoin en premier lieu? L'utilisateur peut entrer lui-même une liste avec la syntaxe habituelle '{A, B, C' (cela permet aussi d'utiliser' Rcl' avec une liste existante qui peut être pratique), bien sûr, 'N' n'est pas prédéterminé – harold

+0

@harold je pourrais l'utilisateur a entré une chaîne, mais c'est moins convivial et je ne le veux pas. Je veux dire je peux si je dois, mais je préférerais présenter une variable à la fois. – ProgrammingEnthusiast

+0

'Input' permet à une chaîne personnalisée d'être * affichée * (et lu en entrée aussi mais ce n'est pas le point). C'est ce que vous essayez de faire, n'est-ce pas? Remplacer "Q =?" par une chaîne personnalisée? – harold

Répondre

1

Cela peut être ce que vous essayez de faire,

Prompt N 
0->dim(|LT 
For(I,1,N 
    Input sub("XYZTABCDEFGHIJLMPUVW",I,1)+"=?",X 
    X->|LT(I) 
End 
Disp |LT 
DelVar |LT 

enter image description here

Input est utilisé au lieu de Prompt, ce qui nous permet de choisir la chaîne. La chaîne est construite en prenant une sous-chaîne à une seule lettre de "XYZTABCDEFGHIJLMPUVW", puis en y ajoutant "=?", ce qui fait qu'elle ressemble à Prompt, bien sûr, il est facile à changer. C'est la syntaxe SourceCoder donc |L signifie que small petit étrange pour les noms de liste. Ne fonctionne pas si la liste T est archivée, il pourrait être fait pour travailler mais IMO il ne devrait pas, habituellement une liste archivée signifie que l'utilisateur veut le garder.

Il est beaucoup plus facile de laisser l'utilisateur d'entrer une liste se si, par exemple

Input "Input List:",|LT 
Disp |LT 
DelVar |LT 

Cela permet l'entrée d'utilisateur plus pratique, comme Rcl (d'une liste complète) et les opérations de liste, par exemple:

enter image description here

Ou peut-être plus typique:

enter image description here 0 Mais le N n'est pas explicite. Laisser le résultat dans Ans est probablement utile. L'impression implicite en évaluant une valeur au lieu d'une commande appropriée sur la dernière ligne se débarrasse de Done ce qui n'est pas très utile, mais c'est quelque chose que vous pouvez faire.

Input "Input List:",|LT 
sqrt(sum(|LT^^2 
DelVar |LT 
Ans 

enter image description here

+0

Merci beaucoup! J'ai juste une question de suivi: puisque la liste est déclarée dans la boucle for, serai-je capable d'appeler les variables créées par l'utilisateur ailleurs dans mon code? – ProgrammingEnthusiast

+0

@ProgrammingEnthusiast oui, les variables sont globales et ne sont même pas déclarées comme telles, c'est '0-> dim (| LT' qui créerait la liste si elle n'existait pas – harold

+0

@ProgrammingEnthusiast si vous vouliez dire variable X, Y, Z etc. .. cela ne fonctionne pas comme ça, le résultat est dans une liste ici.Il n'y a pas de moyen raisonnable d'attribuer à une "variable variable" (comme dans la plupart des langues d'ailleurs) – harold