TI-BASIC:Useful Routines
From Learn @ Cemetech
Revision as of 05:23, 1 March 2016 by KermMartian (talk | contribs) (Initial fetch from https://www.cemetech.net/forum/viewtopic.php?t=1642 . Incomplete.)
Contents
- 1 Filled Circle
- 2 Fraction Parts
- 3 Graph Mode
- 4 Counting List Matches
- 5 Mode of List
- 6 Most Efficient getKey
- 7 Text to List
- 8 List To Text
- 9 Shuffle Elements of List
- 10 Formatted Text on a Graph Screen
- 11 Modulo Division
- 12 Matrix to List
- 13 List to Matrix
- 14 Convert A to a String [Optimized]
- 15 Pop First List Element
- 16 Rotate a 3x3 Matrix 90°
- 17 Find List Element Index
- 18 Convert Base 10 to Any Base (2 to 16)
- 19 Change Case of a String
- 20 Number to Roman Numeral
- 21 Find Unique Elements in Two Lists
Filled Circle
- Author: Calc84Maniac
- Inputs:
- X = x-coordinate of center
- Y = y-coordinate of center
- R = radius
:For(F,0,R,[deltax] :sqrt(R^2-F^2 :Line(X+F,Y+Ans,X+F,Y-Ans :Line(X-F,Y+Ans,X-F,Y-Ans :End
Fraction Parts
- Author: Calc84Maniac
- Input:
- Ans=a number
- Output:
- Ans={numerator,denominator}
:{Ans,1,fpart(abs(Ans :While e-9<Ans(3 :{Ans(1),Ans(3),Ans(3)fpart(Ans(2)/Ans(3 :End :round({Ans(1),1}/Ans(2),0
Graph Mode
- Author: Calc84Maniac
- Inputs: none
- Output: Ans=
- 0:FUNC
- 1:PAR
- 2:POL
- 3:SEQ
- Destroys: GDBn
:StoreGDB n :1->Tmin :1->[thetamin] :2->nMin :ZStandard :not(Tmin)+2not([thetamin])+3(nMin=1 :RecallGDB n :Delvar GDBn
Counting List Matches
- Author: Calc84Maniac
Returns how many times A appears in LIST
:sum(LIST=A
Returns how many corresponding elements of LIST1 and LIST2 are equal Note: dim(LIST1) must equal dim(LIST2)
:sum(LIST1=LIST2
Mode of List
- Author: Calc84Maniac
- Inputs: LIST
- Outputs:
- D = mode(LIST
- E = 1 if no unique mode, otherwise E=0
:0->B :For(A,1,dim(LIST :sum(LIST=LIST(A->C :If C=B and D/=LIST(A :1->E :If C>B :LIST(A->D :Delvar EC->B :End :End
Most Efficient getKey
- Author: Harq
- Input: none
- Output: the key pressed in K (or you can change to another variable)
:Repeat Ans :getkey :End :Ans->K
Text to List
- Author: Lafferjm
- Input: Str1, Str2 as shown
- Output: L1
Takes text entered from input and changes it into list
:DelVar L1 :"ABCDEFGHIJKLMNOPQRSTUVWXYZ? .→Str1 :ClrHome :Input "NAME:",Str2 :For(A,1,length(Str2 :inString(Str1,sub(Str2,A,1→L1(A :End
List To Text
- Author: lafferjm
- Input: None
- Output: List changed into text
Takes numbers in list from List to text and changes it into a word on the screen
:ClrHome :"ABCDEFGHIJKLMNOPQRSTUVWXYZ? .→Str1 :For(A,1,dim(L1 :Output(1,A,sub(Str1,L1(A),1 :End
Shuffle Elements of List
Shuffles LIST1. Note: If you know what dim(LIST1) will be, replace it with a number.
- Author: Calc84Maniac
- Destroys: LIST2
:rand(dim(LIST1->LIST2 :SortA(LIST2,LIST1
Formatted Text on a Graph Screen
Clears the graph screen
- Authors: B-flat, KermMartian, and Calc84Maniac
- Input: Str1
:ClrDraw :length(Str1->A :For(J,1,1+iPart(A/23 :For(I,1,23 :If 23J-24+I<A :Text(7J-7,4I-4,sub(Str1,23J-23+I,1 :End :End
Modulo Division
The Round( is in there in case of an infinitely repeating decimal (like 1/3).
- Authors: The Tari, Something1990, and Calc84Maniac
- Inputs:
- A = Dividend
- B = Divisor
:round(BfPart(A/B),0
Matrix to List
Converts any size matrix to a list
- Author: lafferjm
- Input:
- Matrix A
- Output:
- Lsave
:ClrHome :1→dim(L2 :dim([A]→L1 :L1(1→A :L1(2→B :For(C,1,A :For(D,1,B :[A](C,D→L2(dim(L2)+1 :End :End :For(A,2,dim(L2) :L2(A)→∟SAVE(A-1 :End :DelVar L1DelVar L2DelVar [A]DelVar BDelVar CDelVar ADelVar D
List to Matrix
Takes any size list and stores it into a matrix
- Author: Lafferjm
- Inputs: Lsave
- Output: Matrix [A]
:ClrHome :Input "ROWS:",F :ClrHome :dim(∟SAVE)/F→G :{F,G→dim([A] :1→A :1→B :G→C :0→D :Repeat A=F+1 :For(E,1,G :D+1→D :∟SAVE(D→[A](A,E :End :A+1→A :C+1→B :C+G→C :End :DelVar ADelVar BDelVar CDelVar DDelVar EDelVar FDelVar G
Convert A to a String [Optimized]
- Author: Weregoose
:{A,A->L2 :{0,1->L1 :LinReg(a+bx) Y1 :Equ>String(Y1,Str1 :sub(Str1,1,length(Str1)-3->Str1
Pop First List Element
Input and output variables can be changed to whatever.
- Author: Calc84Maniac
- Input: Ans
- Output: Ans
Code: ΔList(cumSum(Ans
Rotate a 3x3 Matrix 90°
- Author: HaveACalc
- Input: Ans
- Output: Ans
:rowSwap(Ans<superscript T transpose>,1,3
Find List Element Index
- Author: Ed H
- Inputs:
- A = A number
- Output: the position of the last occurrence of A in L1
:max(seq(X(A=L1(X)),X,1,dim(L1
=== Find List Element Index (Within Bounds)
- Inputs:
- A = A number
- B = Where it begins looking
- C = Where it ends looking
- Output: The position of the last occurrence of A in the portion of L1 starting from element B and ending with element C
:max(seq(X(A=L1(X)),X,B,C
Convert Base 10 to Any Base (2 to 16)
- Author: RthProg
- Inputs:
- A = Number to convert
- B = Base to convert to
- Outputs: Str0
:"_ :For(I,1,1+ln(A)/ln(B :Ans+sub("0123456789ABCDEF",1+int(BfPart(AB^-I)),1 :End
Change Case of a String
- Authors: RthProg and Ed H
- Inputs:
- A = (1) Change to uppercase
- Str1 = String to convert
- Outputs:
- Str1 = Converted string
:not(A)-->A :length(Str1)->B :"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"->Str2 :For(N,1,B :inString(sub(Str2,26A + 1, 26),sub(Str1,N,1) :Str1 + sub(sub(Str1,N,1) +sub(sub(Str2,26,26)+sub(Str2,1,26),26A+1,26),Ans+1,1)-->Str1 :End :sub(Str1,B+1,B)-->Str1
Number to Roman Numeral
- Author: Ed H
- Inputs:
- N = Number to convert
- Outputs:
- Ans & Str0 = Converted number
:" →Str0 :For(X,0,log(N :10fPart(.1N→Z :While Z :sum({4.1,4.1,9.2}(Z={4,5,9→T :sub("IVXLCDMvxlcdmni",2X+10fPart(T)+1,1)+Str0→Str0 :abs(Z-1-int(T→Z :End :int(.1N→N :End :Str0
Find Unique Elements in Two Lists
- Author: rthprog
- Input: L1 and L2
- Output: L3 (All elements that are in L1 but not L2, and elements that are in L2 but not L2.
- Conditions: "0" is not a unique element, and no element is repeated within an individual list
- augment(L1,L2-->L3
- L3*seq((1=sum(not(L3-L3(X)))),X,1,dim(L3))-->L3
- SortD(L3
- sum(L3!=0)-->dim(L3