Disaster

Member

Member

Member

Member

Member

Member

Member

Member

Member

Member

Member

Member

Member

Included page "lflskdafjlkdjgflv" does not exist (create it now)

name: ''
content: "Thank you so much for your optimizations. I really can't express how much this means to me; I'm ecstatic to try them out.\n\nI just realized I forgot to mention trick shots. The ball /does/ move at an angle, but you have to set it off first with a trick shot executed by moving the paddle exactly one pixel away from the ball when you hit the ball. It's kind of hard to explain but really easy to understand once you do it once. I made it this way purposefully to give skilled players an edge; once you start a trick shot ball it can't be undone until the next ball. It's also impossible to score anything in Challenge Mode without using trick shots. If you didn't know about them, you probably weren't having much fun :P"
attachment: null

name: ''
content: "Thank you so so much for your optimizations. I really can't express how much I appreciate it; I'm literally ecstatic right now. \n\nAlso, I may have forgotten to mention this, but the ball does move at an angle, but you have to \"set it off\" first by moving the paddle exactly one pixel away from the ball. This is kind of hard to explain until you do it once. I made it this way on purpose to give skilled players an edge; they'll have the precision to set off trick shots and once a trick shot is off, it can't be undone until the next ball. Haha, if you were playing without knowing that you probably weren't having a lot of fun :P"
attachment: null

name: ''
content: "I am going through and optimising some of your code and I can tell a bunch of it was well thought out :D\nThere are a handful of common optimisations that I can suggest:\n\n* Instead of using ~L+32 (I am assuming ~ is negative), you can use 32-L to save a byte\n* You can drop ending quotes and parentheses\n* To elaborate on what Silver said, DelVar is two bytes, so 0→Q is the same size as DelVar Q. However, DelVar and the other memory functions have a cool trick where you don't need to use a newline for the next command, saving a byte! For example, instead of this:\n[[code]]\n0→Q\n1→P\n-or-\nDelVar Q\n1→P\n[are the same size) You can do this:\n[[code]\nDelVar Q1→P\n[[/code]]\nWhich is one byte less and essentially does the same thing.\n* Disp has a cool trick like Text( where each additional argument is treated like a new Disp. For example:\n[[code]]\nDisp \"YOU LOSE…\"\nDisp \"YOUR SCORE:\"\n[instead be:\n[[code]\nDisp \"YOU LOSE…\",\"YOUR SCORE:\n[neat, right?\n* One random trick optimisation was with this line:\n[[code]\nIf G=72 and Y-L+32≠1\n[changed it in my head to:\n[[code]\nIf G=72 and Y-L+32-1\n[can be optimised to save two bytes:\n[[code]\nIf G=72 and Y-L+31\n[am weird, so my methods are awkward. If you want to do the more logical version of my solution:\n[[code]\nIf G=72 and Y-L+32≠1\n-use some algebra-\nIf G=72 and Y-L+32-32≠1-32\nIf G=72 and Y-L≠~31\n-get rid of that negtive sign, it is using an unnecessary byte D: -\nIf G=72 and Y-L+L≠~31+L\nIf G=72 and Y≠L-31\n[[/code]]\nYay :3 (I am in a math optimisy mood, sorry).\n* Often Repeat is more useful than While (in my opinion) because you don't need to set the variables before the loop. When I started learning TI-BASIC, I actually never learned what While did until I joined this site and saw people using it. I just found Repeat and figured out how it worked and I like it .-.\nHere is how I convoluted it:\n[[code]]\nDelVar CDelVar P\" ;6 spaces here\nMenu(Ans+\"PONG\"+Ans,\"TWO PLAYER\",2,\"PRACTICE\",P,\"CHALLENGE\",C,\"QUIT\",Q\nLbl C\n1→C\n2→U\nLbl P\n1→P\nLbl 2\nDelVar VDelVar WDelVar SDelVar T4→L\n32→O\n48→N\nDelVar EDelVar Q1→D\nStoreGDB 0\n1→Xmin\n95→Xmax\nFnOff \nAxesOff\nClrDraw\nIf C or P\nThen\nVertical 1\nVertical 2\nEnd\nHorizontal (-)10\nHorizontal 10\nFor(I,1,93,92\nFor(J,32-L,L+32,1\nPxl-On(J,I\nEnd\nEnd\nRepeat Q\ngetKey→G\nIf G\nThen\nIf G=72 and Y-L+31\nThen\nY-1→Y\nPxl-On(Y-L+32,1\nPxl-Off(Y+L+33,1\nElse\nIf G=92 and Y+L≠29\nThen\nY+1→Y\nPxl-On(Y+L+32,1\nPxl-Off(Y-L+31,1\nElse\nIf G=45\nThen\nClrHome\nDisp \"GAME PAUSED\",\"[ENTER]: RESUME\",\"[CLEAR]: QUIT\nRepeat 30=abs(Ans-75\ngetKey\nEnd\nIf Ans=45\n1→Q\nElse\nIf G=74 and T-L+31\nThen\nT-1→T\nPxl-On(T-L+32,93\nPxl-Off(T+L+33,93\nElse\nIf G=94 and T+L≠29\nThen\nT+1→T\nPxl-On(T+L+32,93\nPxl-Off(T-L+31,93\nEnd\nEnd\nEnd\nEnd\nEnd\nEnd\nN→A\nO→B\nIf N=1 or N=93\nThen\nIf not(C\nThen\nClrHome\nIf N=1\nV+1→V\nIf N=93\nW+1→W\nDisp \"LEFT SCORE:\nOutput(1,13,V\nDisp \"RIGHT SCORE:\nOutput(2,14,W\nPause \nIf V>9\nThen\nDisp \"LEFT WINS!\n1→Q\nEnd\nIf W>9\nThen\nDisp \"RIGHT WINS!\n1→Q\nEnd\n32→O\nDelVar E48→N\nElse\nClrHome\nDisp \"YOU LOSE…\",\"YOUR SCORE:\nOutput(2,13,U\nIf U>|LPONG(1\nU→|LPONG(1\nDisp \"HIGH SCORE:\nOutput(3,13,|LPONG(1\nPause \n1→Q\nEnd\nEnd\nIf pxl-Test(O,N+D\nThen\nIf C and U>2\nThen\nVertical U-1\nVertical U\nU+1→U\nEnd\n~D→D\nElse\nIf pxl-Test(O+1,N+D\nThen\n~1→E\nIf N=2 or N=92\nThen\n~D→D\nIf C\nThen\nVertical U-1\nVertical U\nU+1→U\nEnd\nEnd\nEnd\nIf pxl-Test(O-1,N+D\nThen\n1→E\nIf N=2 or N=92\n~D→D\nEnd\nEnd\nO+E→O\nN+D→N\nPxl-Off(B,A\nPxl-On(O,N\nEnd\nLbl Q\nRecallGDB 0\nClrHome\n[[/code]]\nI gave it a try and I like how you implemented the two player mode. Also, should the pixel be moving at an angle or just back and forth? If you want, I can put together a simple Pong engine so that you can compare it :D"
attachment: null

name: ''
content: 'instead of 0→(variable) try delvar variable'
attachment: null

name: ''
content: 'Oh jeez, looks like you can''t edit posts on this forum. Well, regardless, the PONG.8Xp file is attached. I didn''t mean to cross it out in the previous post.'
attachment: 'file:pong/PONG.8Xp'

name: ''
content: "I'll add programs to this thread as I see fit. Feedback, optimization, and high scores to beat are welcomed (I always try to fit some sort of scoring system in most of my games).\n\n-PONG.8Xp-\nNotes: \nThis is a fully featured pong game, complete with multiplayer, a practice mode, and a \"challenge\" mode in which the player must hit the ball against a wall that continues to move closer to the paddle until the player misses the ball, at which point his score will be tallied and recorded.\nControls:\n[7]: Move the left paddle up one pixel\n[1]: Move the left paddle down one pixel\n[9]: Move the right paddle up one pixel\n[3]: Move the right paddle down one pixel\n[CLEAR]: Pause the game, or exit the game if paused\n[ENTER]: Resume the game if paused\nHacks:\n- The \"L\" variable can be changed to alter the length of both paddles divided by two.\nCatches:\n- It's still not as fast as I'd like it to be.\n- The two player mode is still kind of crippled by the fact that only one one key press can be caught by getKey at a time.\n- Ball movement is rather simplistic, and once you hit a trick shot, there's no way to counter that except returning it.\n- You have to mash the number pad to move the paddle because only the arrow keys can be held. I'm not sure if I like it that way or not.\nMy high score:\n71 for Challenge Mode. I'll admit, I haven't tried that hard.\n[[code]]\n0->C\n0->P\nMenu(\" PONG \",\"TWO PLAYER\",2,\"PRACTICE\",P,\"CHALLENGE\",C,\"QUIT\",Q)\nLbl C\n1->C\n2->U\nLbl P\n1->P\nLbl 2\n0->V\n0->W\n0->S\n0->T\n4->L\n32->O\n48->N\n0->E\n1->D\n0->Q\nStoreGDB 0\n1->Xmin\n95->Xmax\nFnOff \nAxesOff\nClrDraw\nIf C or P\nThen\nVertical 1\nVertical 2\nEnd\nHorizontal ~10\nHorizontal 10\nFor(I,1,93,92)\nFor(J,~L+32,L+32,1)\nPxl-On(J,I)\nEnd\nEnd\nWhile not(Q)\ngetKey->G\nIf G\nThen\nIf G=72 and Y-L+32!=1\nThen\nY-1->Y\nPxl-On(Y-L+32,1)\nPxl-Off(Y+L+33,1)\nElse\nIf G=92 and Y+L+32!=61\nThen\nY+1->Y\nPxl-On(Y+L+32,1)\nPxl-Off(Y-L+31,1)\nElse\nIf G=45\nThen\nClrHome\nDisp \"GAME PAUSED\"\nDisp \"[ENTER]: RESUME\"\nDisp \"[CLEAR]: QUIT\"\nWhile not(F)\ngetKey->G\nIf G=45\nThen\n1->Q\n1->F\nEnd\nIf G=105\n1->F\nEnd\n0->G\n0->F\nElse\nIf G=74 and T-L+32!=1\nThen\nT-1->T\nPxl-On(T-L+32,93)\nPxl-Off(T+L+33,93)\nElse\nIf G=94 and T+L+32!=61\nThen\nT+1->T\nPxl-On(T+L+32,93)\nPxl-Off(T-L+31,93)\nEnd\nEnd\nEnd\nEnd\nEnd\nEnd\nN->A\nO->B\nIf N=1 or N=93\nThen\nIf not(C)\nThen\nClrHome\nIf N=1\nV+1->V\nIf N=93\nW+1->W\nDisp \"LEFT SCORE:\"\nOutput(1,13,V)\nDisp \"RIGHT SCORE:\"\nOutput(2,14,W)\nPause \nIf V>9\nThen\nDisp \"LEFT WINS!\"\n1->Q\nEnd\nIf W>9\nThen\nDisp \"RIGHT WINS!\"\n1->Q\nEnd\n32->O\n48->N\n0->E\nElse\nClrHome\nDisp \"YOU LOSE…\"\nDisp \"YOUR SCORE:\"\nOutput(2,13,U)\nIf U>|LPONG(1)\nU->|LPONG(1)\nDisp \"HIGH SCORE:\"\nOutput(3,13,|LPONG(1))\nPause \n1->Q\nEnd\nEnd\nIf pxl-Test(O,N+D)\nThen\nIf C and U>2\nThen\nVertical U-1\nVertical U\nU+1->U\nEnd\n~D->D\nElse\nIf pxl-Test(O+1,N+D)\nThen\n~1->E\nIf N=2 or N=92\nThen\n~D->D\nIf C\nThen\nVertical U-1\nVertical U\nU+1->U\nEnd\nEnd\nEnd\nIf pxl-Test(O-1,N+D)\nThen\n1->E\nIf N=2 or N=92\n~D->D\nEnd\nEnd\nO+E->O\nN+D->N\nPxl-Off(B,A)\nPxl-On(O,N)\nEnd\nLbl Q\nRecallGDB 0\nClrHome\n[[/code]]\n\nMy other games will be added shortly."
attachment: null

angle.png

Command Summary

Returns the angle of expression, interpreting expression as a complex number.

Command Syntax

angle(expression)

Menu Location

  • Press 2nd MATH to enter the MATH popup menu.
  • Press 5 to enter the Complex submenu.
  • Press 4 to select angle(

Calculator Compatibility

This command works on all calculators.

Token Size

X byte(s)

The angle() command returns the angle of a complex number. The argument may be an expression, a list, or a matrix. In the case of a lists and matrices, each element is evaluated individually and the result is outputted to the corresponding element of a matrix or list of the same dimensions as the original.

:angle(2i)
      pi/2
:angle({2i,3+i})
      {pi/2  tan^-1(1/3)}
:angle([[2i,3+i][i+7,2i]])
      [pi/2  tan^-1(1/3)]
      [tan^-1(1/7)  pi/2]

name: ''
content: 'Haha, oops, sorry XD I am used to adding things to the end of Str1 instead of putting things before it x_x'
attachment: null

name: ''
content: "Oh, sorry, I misread something and thought that you wanted it at the end of the string, sorry. You could add this to the end of my code to remedy that:\n[[code]]\nsub(Ans,5B+1,int(B\n[[/code]]\nMy code assumes that the input might not be a multiple of 5 digits."
attachment: null

name: ''
content: "[[code]]\n\" → Str0\n.2length(Str1→B\nFor(A,1,B\n0\nFor(C,-4,0\n2Ans+expr(sub(Str1,5A+C,1\nEnd\nStr0+sub(\"ZYXWVUTSRQPONMLKJIHGFEDCBA\",Ans-5,1→Str0\nEnd\n[[/code]]\n\nIt stores it to Str0."
attachment: null

name: ''
content: 'Xeda Elnara''s code works, but it adds the answer to the end of the input. how could that be fixed?'
attachment: null

name: ''
content: 'yet again…above post is mine'
attachment: null

name: ''
content: "it almost works, just need to make this small change\n\n[[code]]\n\"0→Str1\nWhile A\nsub(\"0123456789ABCDEF\",1+16fPart(A/16),1)+Str1→Str1\niPart(A/16→A\nEnd\nIf Str1≠\"0\nsub(Str1,1,length(Str1)-1\n[[/code]]"
attachment: null

name: ''
content: 'Yes, I think we''ve all been there before XD'
attachment: null

name: ''
content: 'Yes, we''ve all been there before XD'
attachment: null

Welcome to TI-Basic Developer (TI|BD), the TI-Basic information repository! If you are a first-time visitor, please check out the welcome pack to get you up to speed on using the site. We encourage you to become a member and to get involved in the community, and to come back often to see what changes have occurred. And above all else, enjoy your stay!
The ListPages module does not work recursively.
Recent Forum Posts Recent Forum Threads Popular Forum Threads
In fact, this can be improved to account for non-integers as well. As a bonus, it's also...
(by Timothy Foster 15 Jul 2018 21:13, posts: 5)
I think I see why it works now: For some L₁, say L₁={4,5,7,0,3} , cumSum(L₁)={4,9,16,16,19} where...
(by kg583 15 Jul 2018 17:30, posts: 5)
Yeah. I'm just not good enough with algorithms to see how that code works, but It does
(by Trenly 15 Jul 2018 17:22, posts: 5)
(Started 15 Jul 2018 12:32, Posts: 5)
(Started 13 Jul 2018 04:37, Posts: 7)
(Started 12 Jul 2018 13:51, Posts: 5)
(Started 09 Jul 2018 20:46, Posts: 6)
(Started 08 Jul 2018 23:12, Posts: 3)
(Started 08 Jul 2018 22:59, Posts: 3)
(Started 13 Jul 2018 04:37 , Posts: 7)
(Started 09 Jul 2018 20:46 , Posts: 6)
(Started 12 Jul 2018 13:51 , Posts: 5)
(Started 15 Jul 2018 12:32 , Posts: 5)
(Started 08 Jul 2018 23:12 , Posts: 3)
(Started 08 Jul 2018 22:59 , Posts: 3)
TI-83 Basic 68k TI-Basic TI-Nspire Basic
TI-83

TI-83 Basic is the most commonly used, because the TI-83/84 series has been heavily marketed by Texas Instruments to high school students needing a graphing calculator for math and science classes.

At the same time, it is the least powerful language, lacking many of the complex commands and programming capabilities.

TI-89

68k TI-Basic is much more powerful than TI-83 Basic, with support for calculus, indirection, local variables and functions, advanced picture manipulation, and several other features that make it a very rich language.

However, it isn't used nearly as much as TI-83 Basic, so it doesn't have as big of a community developed around it.

TI-Nspire

TI-Nspire Basic is quite similar to 68k TI-Basic, but not as programmer friendly: it has poor I/O support, rigid constraints on program execution, and documents are used instead of programs.

In addition, it is still relatively unknown to the TI community, so there isn't much documentation available yet.

name: ''
content: "I believe you want a command to convert decimal to hexadecimal? You can do this, where A is the number to convert:\n[[code]]\n\"0→Str1\nWhile A\nsub(\"0123456789ABCDEF\",1+16fPart(A/16),1)+Str1→Str1\niPart(A/16→A\nEnd\nIf Str1≠\"0\nsub(Str1,2,length(Str1)-1\n[[/code]]\nHopefully that works ^^'"
attachment: null

name: ''
content: "[[code]]\n.2length(Str1→B\nFor(A,1,B\n0\nFor(C,-4,0\n2Ans+expr(sub(Str1,5A+C,1\nEnd\nStr1+sub(\"ZYXWVUTSRQPONMLKJIHGFEDCBA\",Ans-5,1→Str1\nEnd\n[[/code]]\n\nI am sure there is a faster and smaller way, but I think that works (I didn't test it)."
attachment: null

name: ''
content: 'Does anyone know how to convert from numeral to hexadecimal? I have a TI-83+ which does not have the ▶Hex command. Please help'
attachment: null

name: ''
content: "Lat's see…my best program is probably either my own version of snake or a blackjack program I wrote. I became interested in programming originally because I was lazy and did not feel like remembering all of the math and science formulas. And I'm terrible at optimizing because…I'm terrible at optimizing (my programs are all like 10x longer than they would be if they were optimized). An example of what some of my early programs were (like when I had never even heard of optimizing).\n[[code]]\nIf A=1\nthen\ndisp \"1\"\nend\nif A=2\nthen\ndisp \"2\"\nend\nif a=3\nthen\ndisp \"3\"\nif a=4\nthen\ndisp \"4\"\nend\netc.\n[[/code]]"
attachment: null

name: ''
content: "clarification:\nwhat i meant would look something like this\n\n[[code]]\n[input]\n\n[divide string into segments of 5]\n\n[compare segments of 5 to 11111 (A) all the way to 00110 (Z)]\n A:11111\n B:11110\n C:11101\n…11100,11011,11010,11001,11000,10111,10110,10101,10100,10011,10010,10001,10000,01111,01110,01101,01100,01011,01010,01001,01000,00111,00110\n\n[add new letter to existing string]\n\n[output string once done]\n[[/code]]"
attachment: null

name: ''
content: 'I''ve got CSS in two places: some on a spreadsheet somewhere and the rest on each page that the CSS is specific to. That''s why you are able to see some stuff and not see others. The spreadsheet passes through wdfiles, but the page-specific stuff does not.'
attachment: null

name: 'Boba Foxx'
content: 'Why is it that the Css for the board index and actually displaying the posts (like on this page) use different Css sheets? The board index page looks just like it should (sans avatar images), but the actual thread pages don''t load the css.'
attachment: null

name: 'Boba Foxx'
content: "Oh, that's what had me confused. Before, you said\n> θ-2x→A\nbut you meant \n> 2X-θ→A\nWhich is basically the solve() line simplified.\n\nI probably would've done that if I'd optimized it much; I'd just woken up from a move in history and was still kinda sleepy, but I was more concerned with getting it to work, rather than getting it to work quickly."
attachment: null

name: ''
content: 'It''s nice to see you again :) What got you interested in programming? Why do you say you''re terrible at optimizing?'
attachment: null

name: ''
content: 'darn… I don''t know how to go about doing this problem. They never teach us any probability at my school >:( I don''t think I''d be able to do it anyway, though.'
attachment: null

name: ''
content: "Right, which is why I said it needs to be negated; try 2X-θ→A instead of the solve line.\n\nBesides that, good work (:\n\nHere's what I came up with, where Ans is the displayed percentage:\n\n[[div class=\"werecode\"]]\n:2Ans-50.5+.01(101-2Ans)abs(Ans-50\n[[/div]]"
attachment: null

name: 'Boba Foxx'
content: "Another correction (I really should get into the habit of testing my code more since I haven't written much recently >.>\n[[code]]\n:If X<5 or X=31\n:Stop\n:Sub(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",X,1\n[be\n\n[[code]\n:If X<4\n:Stop\n:output(2,1,Sub(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",32-X,1\n[[/code]]"
attachment: null

name: 'Boba Foxx'
content: "It looks like what you're doing is inverted binary (instead of 1 being on and 0 being off, you have 1 represent off and 0 be on). \nThe code I wrote allows you to input a 5 character string of 1's and 0's and it inverts it to give the intended answer (as you said, 11111 is A)."
attachment: null

name: 'Boba Foxx'
content: "Yeah, I never tested anything below 25 (which is where the abs(A breaks for me); your code works perfectly (It should have been \":If abs(A>100)) or (A<0\")\nIf I change the solve( line, then I get way different answers than what I should (like 0 when I input 85, whereas before I got 95.35)."
attachment: null

name: ''
content: "Could the solve() line be simplified to θ-2X→A (which actually needs to be negated for the algorithm to actually work)?\n\nI don't have a calculator that operates TI-Basic anymore, so I transcribed it to C++. It seems to work for numbers greater than 50, but for numbers less than 50, it estimates low (ie. 0 outputs -50.5). I assumed that abs(A>100 was actually 100<abs(a.\n\nI can get it to work by changing:\n[[div class=\"werecode\"]]\n:If abs(A>100\n:100(A>0)→A\n[class=\"werecode\"]\n:If A>E2\n:E2→A\n:If A<0\n:DelVar A\n[[/div]]"
attachment: null

name: ''
content: 'Oops…i forgot to login. The above post is mine'
attachment: null

name: ''
content: 'could you please explain what this does? Because I do not think we are thinking of the same thing'
attachment: null

name: 'Boba Foxx'
content: "Correction:\n[[code]]\n:Delvar B\n:Input \"String?\",str1\n:if 5≠length(str1\n:stop\n:For(Z,1,5\n:B+1(sub(str1,6-Z,1)=2^(Z-1\n:end\nAns→X //not sure if needed, replace the x's on the following lines with Ans if it's not\n:If X<5 or X=31\n:Stop\n:Sub(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",X,1\n\n[[/code]]"
attachment: null

name: ''
content: 'Hello AriMB! Nice to see a new face around! What would you say is your best program?'
attachment: null

name: 'Boba Foxx'
content: "If it is inverted binary, then this should do it:\n[[code]]\n:Delvar B\n:Input \"String?\",str1\n:if 5≠length(str1\n:stop\nFor(Z,1,5\n:B+1(sub(str1,Z,1)=2^(Z-1\nend\n\n[[/code]]\nshould work :)"
attachment: null

name: ''
content: "Sooo…\nReverse binary?"
attachment: null

name: ''
content: "I know I'm a little late, as I have been seen lurking around the forum for a month or so, but I would like to introduce myself. AriMB is my actual name. I am 14. I am fairly decent at programming, but am terrible at optimizing. I currently know a little of Java, C++, Objective C, and a fair amount of TI BASIC. I'm not sure what else to say, so I'm gonna stop here.\n\n\nOh wait, I almost forgot…\n…hi!"
attachment: null

name: ''
content: "Wikidot community,\nI have an idea to make a program that takes a string of 1's and 0's in sets of five and translates them into letters so that A is 11111, B is 11110, C is 11101, D is 11100, all the way to Z. Then output this string of letters as a string. Please paste the text as a reply.\n\nGoodluck!"
attachment: null

name: 'Boba Foxx'
content: "I forgot about the [[/code]] >.>\nIT doesn't auto-paste in anymore, I forgot."
attachment: null

name: 'Boba Foxx'
content: "[[code]]\n:Input \"Prob? (0-100) \",X\n:Clrhome:Output(1,1,\"Working\n:For(θ,1,100\n:solve((X-(θ-A)/2),A,{-200,200}\n:Ans→A\n:If abs(A>100\n:100(A>0)→A\n:A→L₁(θ\n:Output(2,1,θ\n:End\n:100→dim(L₁\n:sum(L₁\n:Clrhome:Output(1,1,Ans\n:Output(2,1,\"/10000\n[[/code]]"
attachment: null

name: 'Boba Foxx'
content: "Hmm.. I'm tempted to just brute-force it since I'm too lazy to write an actual algortih…\nI'll see what I can do during precal."
attachment: null

name: ''
content: 'Yes. If Fire Emblem says that the chance of hitting, $p$, is 70%, what is the real chance of hitting? That''s determined by rolling two one-hundred sided dice, taking their average, and checking if that average value is less than or equal to $p$.'
attachment: null

name: 'Boba Foxx'
content: "To make sure I don't go do the wrong thing, I'd like to make sure I understand correctly first.\nBasically, we're to find the probability that we get a hit (which is defined as the the average of two d100 must be less than P) when we're given a chance P of hitting?"
attachment: null

name: ''
content: "In Fire Emblem, when you attempt to attack an enemy, a list of percentages are given indicating things such as hit chance. If the statistics say that you have a 50% chance of hitting, though, you actually have a 49.5% chance of hitting. Why is that?\n\nNormally, you would think that the game would roll a d100 die, and any roll that is less than or equal to the displayed percentage would be a hit; any roll above would be a miss. Fire Emblem games beyond FE5, however, utilize a different system which gives the player a statistical advantage. When a player rolls, two d100 dice are rolled, and the average of the rolls is compared to the percentage instead. Oddly enough, this actually affects the real probability significantly. When FE says you have an 85% chance of a hit, you actually have a 95.4% chance of a hit, which is significantly greater, and therefore you have an advantage, making the game easier and more playable.\n\nHere's the challenge: what is the real theoretical probability $p_r$ of a hit given the displayed hit percentage, $p$? Specify if you take $p$ on the interval [0, 1] or [0, 100]."
attachment: null

The ListPages module does not work recursively.

name: ''
content: 'This is amazing. Nice work!'
attachment: null

name: ''
content: 'Neat, these work :) I also like how nice your buttons look o.o'
attachment: null

name: ''
content: "Ok, so I made a flash application which emulates the buttons to the best of my ability. When you click on the button, it copies the syntax so that you can paste it. I only included the ones I thought were necessary.\n\nPersonally, I find it easier to simply learn the syntax, but this can help newcomers. Now I only need to find a way to make it obvious that you have to paste for this to work…"
attachment: null

name: ''
content: "Thanks! Hopefully I will get some more time in the near future to work on it :) I started adding in a menu, but you currently cannot select anything. It just draws the menu and you can move the selector thing. I need to add in scrolling for menus that are too large for one screen and I need to add in the ability to open sub-menus and then I can start going through the catalog and making tutorials XD\n\nAnother neat idea that I thought of doing was maybe if you are in a menu (like the Math menu) and you want to see how a command works, you can press ON and it starts the appropriate tutorial."
attachment: null

name: 'Timothy Foster'
content: "The \"Member Type\" is temporary; eventually it will say something like \"Member\" or \"Moderator\". I have yet to figure out how to effectively do that, but I've got an idea (which will unfortunately take me quite some time to do).\n\nI never really saw the karma bars as meaning anything relevant. What might be done in place of that is a site \"activity level\" which could go right under \"Member Type\". Making lots of edits or posts would put you at a higher level (a moderator would have to set it though, meaning spam doesn't count).\n\nPost-indention is very hard, and if I implemented it, it would probably look very sloppy. Additionally, nearly every forum I've seen is linear, and one of the reasons for this is so that people respond to the topic instead of the post. It makes it harder for a discussion to become off topic or branch into multiple conversations (which is something I and others have noticed on this forum).\n\nI will try to put the buttons back in. It for sure won't work exactly the same, but I'll see what I can do."
attachment: null

name: 'Boba Foxx'
content: 'Yeah, I kinda miss the post-indenting too.'
attachment: null

name: ''
content: "What I lke (so far):\nAttachments\nlarger avatar pictures \n\nWhat I dislike (so far):\n\"Member Type\" / lack of karma bars\nI really liked the syntax buttons/wizards\nNo indentation disrupts flow"
attachment: null

name: ''
content: 'That''s really cool! :D'
attachment: null

name: 'Boba Foxx'
content: "Crap, it seems that's right. Wdfiles pooped up as blocked.\nI'll see what I can do to get it unblocked."
attachment: null

name: ''
content: "I tried making it so you couldn't make an empty post, but only certain field types have that option, and unfortunately, the 'wiki' field type is not one of those.\n\nYou can \"delete\" (where delete means it still exists, but it is not listed in anything) a post; I just made it very hard to do so. You just have to add the _null tag to the post, which means typing in \"post:#/noredirect/true\" in the url and clicking on the Categorize button. Current permissions are set so that only post owners can delete a post or thread; of course, moderators and admins can do anything."
attachment: null

name: ''
content: Test
attachment: null

name: ''
content: "Let me try something… are you able to access and use this page?\n\nMy suspicion is that your filter is blocking the wdfiles domain, but not the wikidot domain, which is sort of strange. All of Wikidot's CSS runs through the wdfiles domain."
attachment: null

name: ''
content: 'Well, I don''t really advertise it, so that makes sense.'
attachment: null

name: ''
content: "That who I am…\n\nEdit: I have done some basic testing and it seems:\n* You can post a completely empty post, with no text/characters at all.\n* You can't delete a post, unless you manually delete the page\n\nIs there a way to \"fix\" these issues?"
attachment: null

name: ''
content: 'I think that works pretty well.'
attachment: null

name: 'Boba Foxx'
content: "Man, now I know what I'm missing. I though I was just missing the background and some styling.\nOnce this is finished, will the css sheets be able to be hosted on this subdomain in place of the original stuff? That would be awesome :D"
attachment: null

name: ''
content: "Wow, attached is what everyone else is seeing. You are right; every post gets its own page, so that is why the reply box is iframed; it's actually the edit box of a different page. For some reason, your computer or filter is preventing CSS stylesheets from loading up, so unfortunately there is nothing I can do to fix that.\n\nThe reply box will need to be an iframe, but I can provide an option that will allow you to reply on a separate page."
attachment: 'file:tibd-browsercheck/tibd_browserCheck.png'

name: ''
content: "Sorry about the triple post, but whatever.\nhttps://docs.google.com/file/d/0B3cnHv4I949La2o2Ry1aaThMMXc/edit?usp=sharing"
attachment: null

name: 'Boba Foxx'
content: "YES I CAN POST LINKS THANK GOD\nEventually, will the reply thing not be in an iframe? Some browsers can't scroll thos, and it gets annoying"
attachment: null

name: 'Boba Foxx'
content: "I never noticed that for some reason. \nAnyway, when I click the \"Edit\" button, it takes me to this page:\nhttp://tibasicdev.wikidot.com/post:83/edit/true/noredirect/true\nIt says I'm not the creator of that 'page' since apparently, every single post gets its own page. So apparently, that's how replies get to nest out.\nI kinda miss the old nesting thing of the old layout."
attachment: null

name: ''
content: "I have no idea what your filter is doing… somehow, you managed to make a reply to a reply instead of the thread…\n\nHave you tried using the name form yet, right about the calculator symbols?"
attachment: null

name: ''
content: "Actually, it's not editing it, it's taking me to that comment's talk page… I think. Some error about only admins can edit pages.\nAlso: \n guests cannot upload files, and when the reply box redirects to wdfiles after it uploads, it breaks (that might be my filter not allowing redirects, I'm not sure yet)."
attachment: null

name: ''
content: "Oh, the edit button shows up when I hover over a post. Silly me :3\nEdit: guests cannot upload files, and when the reply box redirects to wdfiles after it uploads, it breaks (that might be my filter not allowing redirects, I'm not sure yet)."
attachment: null

name: ''
content: "Oh, the edit button shows up when I hover over a post. Silly me :3\n"
attachment: null

name: ''
content: 'Awesome, that will be very useful for updating projects!'
attachment: null

name: Zeda
content: "Yes, I like that it is on one line :) As well, what happens if one is signed in, but enters a name in the box?\n\nEDIT: Cool, so it uses a default icon and posts basically as if you aren't logged in."
attachment: null

name: ''
content: "This is a test.\n\nYes, I was able to modify the attachment (:"
attachment: 'file:unstable-cake/unstable-cake.gif'

name: Testing
content: Test
attachment: null

name: ''
content: 'I think there are a few things that would be nice if it were possible to add, but I like it how it is :) I especially like the ability to attach files to posts. I think it will help keep things much more organised. I wonder, is it possible to edit an attachment?'
attachment: null

name: ''
content: "Welcome to TI-Basic Developer, Burr! Have you checked out our TI-BASIC Starter Kit? It has everything you need to get started and if it doesn't have something, you can always ask on the forums!\n :P\n\nActually, it took me quite a while to realise that you were the founder of this site. I think it was three years ago when I realised it, actually."
attachment: null

toolbar-separator.png This article is currently in development. You can help TI-Basic Developer by expanding it.

Besides standard math, trigonometry functions are helpful for simulating rotation and making games like Asteroids.

Key Commands

The trigonometric commands are sin, cos and tan.
sin(θ) returns the sine of θ, which is defined as the y-value of the point of intersection of the unit circle and a line containing the origin that makes an angle θ with the positive x-axis.
cos(θ) returns the cosine of θ, which is defined as the x-value of the point of intersection of the unit circle and a line containing the origin that makes an angle θ with the positive x-axis.
tan(θ) returns the tangent of angle θ, which is defined as $\frac{\sin \theta}{\cos \theta}$
It is slightly unnecessary, as most games that use trigonometry only require sin and cos.

Let's say you are making an object firing simulation and you are keeping track of the angle θ. When you fire, you can increment the location variables X and Y with speed a and angle θ using these formulas:

X+Acos(θ→X
Y+Asin(θ→Y

Examples

The following code illustrates and then calculates the area of a rectangle inscribed in a circle after the user presses [Enter].

Input "RADIUS: ",R
Input "ANGLE: ",θ
AxesOff
ZSquare
Rcos(θ→A
Rsin(θ→B
Circle(0,0,R
Line(0,0,A,B
Line(A,B,A,­B
Line(A,B,­A,B
Line(­A,­B,­A,B
Line(­A,­B,A,­B
Pause 
4abs(AB

The following code awaits the user to input an angle to fire at, using a line to guide, and fires a projectile at that angle until the user presses [Clear]

:AxesOff
:DelVar XDelVar θDegree
:ClrDraw
:94→Xmax
:62→Ymax
:0→Ymin
:Ans→Xmin
:Repeat K=21
:Line(0,0,2cos(θ),2sin(θ
:Repeat Ans
:getKey→K
:End
:Line(0,0,2cos(θ),2sin(θ),0
:max(0,min(90,θ+(Ans=25)-(Ans=34→θ
:End
:Repeat K=45
:X+2cos(θ→X
:Y+2sin(θ→Y
:Pt-On(X,Y
:getKey→K
:End

Of course, Earth has gravity, doesn't it? We can account for that pretty easily. To simplify the problem, we'll just assume that Earth is flat and that the projectile follows a parabolic path:

:AxesOff
:DelVar XDelVar θDegree
:ClrDraw
:94→Xmax
:62→Ymax
:0→Ymin
:Ans→Xmin
:Repeat K=21
:Line(0,0,2cos(θ),2sin(θ
:Repeat Ans
:getKey→K
:End
:Line(0,0,2cos(θ),2sin(θ),0
:max(0,min(90,θ+(Ans=25)-(Ans=34→θ
:End
:2sin(θ→G
:Repeat K=45
:X+2cos(θ→X
:Y+G→Y
:G-.05→G    // :D Now it follows a parabolic path! You can change gravity by changing this number.
:Pt-On(X,Y
:getKey→K
:End
<< Probability Table of Contents Complex Numbers >>

name: ''
content: 'And, it seems as if anonymous users will be able to post with a name!'
attachment: null

name: 'Timothy Foster'
content: 'Yes, I like it a lot better (: It''s less clunky.'
attachment: null

Programming is a very demanding task, and it requires a special kind of person. Most people who try their hand at programming decide that it is either too much work, too boring, or a combination thereof. Fortunately, these people are the ones you don't want to be programming, so it all works out.

Assuming you are not one of those people, there are a few key indicators that tell you whether you are cut out to be a programmer. The first indicator is your mental aptitude. Do you enjoy solving problems and puzzles — for example, a complex math problem — and do you like the more technical things? Programming at its core is about solving problems and figuring things out, so if you don't have the right mental aptitude, then programming probably isn't for you.

Related to the first indicator, the second indicator is your willingness to work through difficult problems and figure things out. This skill requires a very dedicated, almost obsessive person who is transfixed on the problem. Even if you don't know something, you need to be comfortable with that feeling, and still be able to rationally research a solution to the problem.

The third indicator is your passion for learning and growing. Do you spend hours at a time reading and researching in books and documentation? When you see high-quality programs and games, does that make you want to dissect the program to find out how it works? Passion is often what drives you to keep pushing to the next level, and without it, you will almost be guaranteed to just get tired and give up.

All three of these indicators — aptitude, persistence, and passion — are vitally important to any successful programmer. We all face challenges and difficulties, but we overcome them using those different things. If you only have two of the three indicators, you can still be a decent programmer, but you won't be as complete a programmer as you could be.

<< TI-Basic Bugs Table of Contents Table of Contents >>

When you are coding, there are several different pitfalls that you have to be aware of. A pitfall is simply code that is syntactically correct, but does not produce the correct or desired results. This list is not meant to be exhaustive, but rather a general collection of things to look out for.

Arrow Keys

One of the simplest pitfalls that people make is forgetting to use the proper values for the arrow keys. This is especially prevalent with beginners, since they are still learning the ins and outs of the calculator. For example, when the user is making movement, and wants to update the player position on the board, you will see something like this:

:A+(K=25)-(K=34→A  // Y coordinate
:B+(K=24)-(K=26→B  // X coordinate

While this code looks right, it actually has the arrow directions flipped around (25 should be swapped with 34, and vice versa for 24 and 26). This code will not generate any errors by the calculator, since it is syntactically correct, but figuring out the logic problem can be challenging if you don't recognize the mistake.

Boolean Expressions

Another common pitfall that people make is messing up their Boolean expressions. A big part of this is simply people not taking the time to learn and understand how the calculator reads Boolean expressions and deals with operator precedence.

A Boolean expression is based on Boolean Logic, the principle that something can be either true or false. A true value is represented as 1 or any nonzero value, while a false value is represented as 0. In addition to the four math operators (*,/,+,-), there are six conditional operators (=,≠,>,<,≥,≤) and four logic operators (and,or,xor,not).

The operator precedence that the calculator follows is math operators are executed first, then the conditional operators and finally the logic operators. Of course, if there are parentheses, the calculator executes what's inside the parentheses first, which can include any one of the three different kinds of operators. Here is an example to illustrate:

:If B=A and CD:Disp "B=A and C*D≠0
:If 5X=2Y+(Y/X≠5:Output(2,2,"Hello

Memory Leaks

Another pitfall to avoid is causing memory leaks with branching out of loops and conditionals and overusing subprograms. This is especially important because memory leaks not only take up more and more memory, but also slow the calculator down (depending on the size of the memory leak, it can be to a halt).

To prevent memory leaks from occurring, you should always make sure that any loops and conditionals (anything with an End command) are executed to their completion. The reason is that the calculator keeps track of the End commands for loops and conditionals, so if one of them isn't completed, the calculator isn't able to remove it from its list.

While it is possible to correct a memory leak problem in your pre-existing code, the best time to make those changes is when you are actually planning a program. This is because a properly planned program can be made to not only have no memory leaks, but also be as fast and small as possible. Of course, if you don't feel like rewriting your code again, a simple fix will suffice.

:If A=5:Then
:Disp "A=5
:Goto A
:End
should be
:If A=5:Disp "A=5
:If A=5:Goto A

Portability

One of the most common pitfalls that people make is forgetting about program portability. With all of the Assembly libraries available, and there being several different TI-83 based calculators available, it is easy to see how portability becomes an issue.

In addition to the Assembly libraries, there are also several new commands that TI has added to the TI-Basic language for the newer TI-84+/SE calculators. While you can use these commands in your programs, they will crash your programs if somebody tries to execute the program on a TI-83/+/SE calculator.

Unfortunately, the only thing you can do if you want your program to be TI-83/+/SE compatible is to not use these libraries and commands. This means you won't be able to include that functionality in your program, which can be a big selling point of your program.

If you don't care about your program working on the TI-83/+/SE calculators, then portability isn't an issue for you and you don't have to worry about it. However, you should still tell the user at the beginning of the program that the program is designed to work on the TI-84+/SE, and in fact will crash if used on a TI-83/+/SE.

The same goes for using Archive/UnArchive if you care about portability to the TI-83 calculator. Additionally, while programs with lowercase letters will work on the TI-83, they can't be sent from a TI-83+ or higher to a TI-83 via the link cable.

Math Errors

Because of the way the calculator is designed, it has limited precision when doing math. Any math calculations that involve extremely small or large numbers (ranging from -E99 to E99) will produce rounding errors that don't return the right number. There are a couple different ways you can deal with this problem.

The round( command will round a floating-point number so that it has the specified number of decimal digits. While you can hypothetically set it so that it has 25 digits, the calculator only allows a number to have up to 14 digits, which means the range is 0-14 digits.

Another way to deal with the problem is by multiplying the number by a smaller number. The calculator will automatically treat the number in a similar fashion to the smaller number, which allows it to make the math expression work. Truthfully, neither of these methods is fool-proof, so you should just be aware of the problem.

<< Productivity Tips Table of Contents TI-Basic Bugs >>

Productivity is all about using your TI calculator as efficiently and effectively as possible. There are several things you can do to improve your productivity when you are writing TI-Basic programs:

  • Keyboard Shortcuts — In the Program editor, if you press alpha followed by up or down, you will scroll a whole page of program code. In addition, 2nd right will take you to the end of your current line, and 2nd left will take you to the beginning of that line.
  • Backup Often — You never know when your calculator might crash, and you would be extremely upset if you lost all of your new work on your program that you had been working on. If you only have one program, backing up just consists of creating a new program, and recalling the program code into that program. However, if your program uses several programs and other variables, you should group it instead.
  • Archive Programs — When you are not using a program, you should archive it so that it won't get erased accidentally in case of a RAM clear. This also applies to important program data, such as a highscore list. Alternatively, you can also group the program and program data together so you have both in one file. Grouping also saves more RAM than archiving the programs separately.
  • Know The Commands — There are lots of commands on the calculator that people never bother using, mainly because they don't know about them. Before trying to create your own program to do something, check to see if the calculator doesn't already provide a command or function that does it, because the built-in commands are almost always faster and smaller.
  • Edit On The Computer — The TI-Graph Link program that TI provides allows you to edit programs on the computer. In addition to faster scrolling and making program structure easier to visualize, the Graph Link also features the ability to type lowercase text and lock a program so it can't be edited on the calculator.
  • Use CtlgHelpCtlgHelp is an Assembly application that is rather large (it is 32KB), but is a very helpful reference when trying to remember the syntax for using a command. After you have installed it, you just have to go to the Catalog menu and press the + key to see the help for that command. It can also be used in other menus, such as the MATH, LIST, and PRGM menus.1
  • Write Comments — Whenever you write a complicated piece of code, you should put a comment in the code explaining what it does, and if appropriate, how it does it. If you ever need to come back to the code, you will now be able to quickly ascertain everything you need to know about the code. Comments are also useful when you don't have the time to implement something, and you want to remind yourself with a quick "To Do".
  • Reuse Code — In many large programs, there are several pieces of code that get reused multiple times. Rather than writing the code over and over again, you can simply store it in its own program and have the main program call it as a subprogram. Because the subprogram is insignificant by itself, you should start its name with a Z or theta so that it appears at the bottom of the program list.
  • Coding Style — When writing a program, you should follow code conventions so that it is easy to read and understand. Although each programmer has their own preferences in regards to programming code, there are some general guidelines that most people follow, which help to provide continuity across the programming community:
    • Line up corresponding commands and statements vertically.
    • Don't go through silly contortions to use a loop, when Goto/Lbl branching would be more practical.
    • Use mnemonic label names. For example, Lbl UP would be an appropriate choice for code that moves the screen up.
    • Before using custom list variables, you should use up the built-in variables.
    • If you have a really complex expression, you should add some parentheses to make it easier to read.
    • Be consistent throughout all your code. If you do one thing in one program, you should do it the same way in another program.
    • Use subroutines, even if you only use a piece of code once, it is a lot easier to modify an independent program than it is to find that section of code in your whole code. Once you have passed the development stages, use the rcl feature to copy the subroutines into a skeleton.
<< Variable Tips Table of Contents Coding Pitfalls >>

General Tips

Checking for Whole Number

The fastest way to check for a whole number is:

:not(fPart(X

Using DelVar

When using the DelVar command, you don't need to use colons (:) between the DelVars:

:Delvar ADelvar Str1...

This also holds when you are dealing with a completely different command, so

:DelVar AClrHome

is perfectly legal.

Know When to Use Variables

Many times you will have to use a number repeatedly in a program. To save memory you can assign that number to a variable at the beginning of your program and then just call that variable whenever you need it. This also works for strings that are used a lot.

Why Variables Get Messed Up

There are several things that can cause variables to get messed up:

  • The Equation Solver updates any given letter variable that is solved for.
  • Function graphing, and the tracing thereof, causes X and Y to be updated.
  • Parametric graphing, and the tracing thereof, causes X, Y, and T to be updated.
  • Polar graphing, and the tracing thereof, causes X, Y, R, and θ to be updated.
  • Sequence graphing, and the tracing thereof, causes X, Y, and n to be updated.
  • Generally, moving the cursor on the graph screen updates X and Y.
  • All the above update R and θ as well if in PolarGC mode.
  • Tangent, DrawF, and DrawInv update X and Y for each coordinate drawn.
  • All Shade( functions update X and Y for each coordinate drawn.
  • Y is set to zero per each refresh of the graph screen. (The only reason I can think of is that Y is involved in the calculating of the regions.)
  • Generating a list through sequencing does not update letter variables (but will create them if they didn't exist)

Extra Variables

Sometimes when doing a program you might run out of variables to use. If that happens there are many different places you can go to for more variables. Some are:

  • Create lists or matrices and just use/manipulate them
  • Extra N—Open the catalog and press LOG and ENTER
  • Window variables—Hit VARS and then ENTER
  • Statistic variables—Hit VARS, 5, and scroll through the menus of variables
  • Finance variables—Hit APPS and then go into the Finance application

(Note: You can also use most of them as characters.)

List Tips

Use Custom Lists before Built-In Lists

Avoid using lists other than L1, L2,…, L6. You should only use custom lists when you need to save something.

Check if Elements are the Same

The quickest way to check if all the elements of L1 are the same is max(Δlist(L1.

Separate a List

You can use seq(L1(A),A,C,D→L2 to separate a list into two or more lists, where C is the start and D is the stop.

Favor cumSum(binomcdf( over seq(

cumSum(binomcdf(X,0 is the same as seq(I,I,1,X and is smaller and faster. See here for more information.

Angle Values in List

If you use the tangent, sine, or cosine function in programs you might notice they aren’t that fast. A better way to do it is to store the values in a list and then recall them from the list.

Store to one List Element Higher than Exists

You can store to one list element higher than exists. This even applies if the list does not exist, in which case the list would be created and the first element would be where the is stored.

:3→dim(L1
:Input A
:A→L1(4

(Note: This will create a fourth element in list 1, and then store A in the fourth element.)

Create a List without the L in Front

When you store to a custom list, usually you need the little “L” in front. However, this is not true. If you just have a letter or a number that is being stored to, it will actually store the list data to a list with the letter or number’s name.

:{1,2→LA
can be
:{1,2→A

Shuffle a List

The smallest and (almost) fastest way to shuffle a list (for instance, a deck of cards) is:

:seq(X,X,1,52→L1
:rand(52→L2
:SortA(L2,L1

This technique can, of course, be extended to lists of other lengths.

Chop Off First Element of a List

You can chop off the first element of a list by using the ∆List( and cumSum( commands together, since they are essentially exact opposites. In this example, the first element of L1 is chopped off and the list is stored back to L1:

:∆List(cumSum(L1→L1

User-Friendly Lists

I'm sure others like me want to be able to type in a list without the brackets, separating the elements with only commas. Here's how:

:Input Str1
:expr("{"+Str1→L1

Load a User-Named List

This will load any list the user names:

:Repeat 5≥length(Str1
:Input "Name of List:",Str1
:End
:expr("L"+Str1→L1

Matrix Tips

Initializing Matrices

In games where you store maps with all the same values in matrices, you need to initialize the matrices in order to use them. There are three different ways that you can do this.

The first way is to set the dimensions of a matrix and then use the Fill( command:

:{8,8→dim([A]
:Fill(0,[A]

The second way you can initialize the matrix is to actually delete it before using it, and then set its dimensions to the desired row and width. This initialization method only works when you want all the matrix elements to have a value of zero.

:DelVar [A]{8,8→dim([A]

The last way you can initialize the matrix is to use the identity( command. The identity( command is used to create an identity matrix based on the matrix that it's given, which must be a square, n-by-n matrix. Because of the identity( command, this initialization method only works when you have a square matrix and you want all the matrix elements to have a value of zero.

:0identity(8→[A]

String Tips

Skip String►Equ( Command

If you want to put a string into one of the function variables (Y0-Y9) you don’t need to use the String►Equ( command. Instead, you can just simply store the string into the function variable.

:String►Equ(Str1,Y1
can be
:Str1→Y1

Get → and " in a String

Follow these steps to get the or " symbols in a string:

  1. Type them on the home screen and press [ENTER]
  2. Select 2:Quit when the ERR:SYNTAX comes up.
  3. Press [Y=] to go to the equation editor.
  4. Press [2nd] [ENTRY] to recall the symbols to Y1
  5. Now, use Equ►String(Y1,Str1) to store the symbols to a string.

Use the expr( Command

One of the most unknown and unused commands is expr(. What this command does is allow you to store an expression to a string (includes graph equations) and then execute the string. Since you may use graph equations, you have 28 "extra" strings to use for text and data storage. But if you use graph equations to store data in a graphics-based program, remember to turn the functions off with FnOff.

:Input “Formula:”,Str1
:Disp expr(Str1

Converting a String to List

The fastest way to convert a string that contains only alphanumeric characters and spaces to a list is:

:seq(inString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",sub(Str1,A,1)),A,1,length(Str1→L1

Copy & Paste Function

If you store frequently used code to a string, you can recall the string into a program as a sort of "copy-and-paste" function. However you have to go through menus to get to the string, not to mention delete the quotes. So store your three most frequently used pieces of string into those variables, u, v, and w. Recalling those doesn't make quotes, and it's faster than getting it from a string. See seld-modifying code for more information.

Ans Tips

If you want to speed up your program while doing calculations, you can use the Ans variable. To use Ans, put the calculation in a line all by itself, then it will automatically be stored into Ans saving the need for storing the calculation into a variable. (NOTE: You should only use Ans if it involves changing just one variable.)

:If 8>C
:Output(4,2,"Higher
:If 8<C
:Output(4,2,"Lower
can be
:"Higher
:If 8<C
:"Lower
:Output(4,2,Ans

Whenever you are using the pxl-Test( command and speed is a priority, you should put the command on its own line and test for Ans:

:pxl-Test(0,0
:If Ans
is faster than
:If pxl-Test(0,0

When you are using a For( loop, you can use the following if you want to store something in A without messing up Ans:

:For(A,16,0,-1
:End
<< Tips & Tricks Table of Contents Productivity Tips >>

Eliminate Annoying Things

If you want you to get rid of the “Done” message after you exit your program you can place some text or just a single double-quote on the last line of your program. Another option is to use the Output( command, which has the benefit of not moving the cursor to the second line.

:ClrHome
:Output(4,4,"Some Text
:"

Something to be aware of about this, however, is that because there is no Stop command, Return is implied. This is okay if your program runs independently, but be careful if your program was called by another program- it will return to the previous one instead of quitting.

Another annoying thing is the run indicator that appears in the upper right corner of the screen. You can get rid of the run indicator by using Text(-1,0,90," " or Output(1,16," " (on the home screen) in a getKey loop:

:Repeat Ans
:Text(-1,0,90," // 1 space
:getKey→K
:End

Home Screen Text on Graph Screen

To get home screen font on the graph screen (except on the regular TI-83) you should place '-1' at the beginning of the Text( command:

:Text(-1,Y,X,"Text

Digits in a Number

To find out the number of digits in a whole number (i.e., a number without decimals), use the log( function. An abs( function prevents a domain error when taking the logarithm of a negative number:

:1+int(log(abs(#

Empty Variables

You can create an empty string with "→Str1, and an empty list with the ClrList command.

Displaying Quotes and Store

Without storing them to a special string, you cannot usually display quotation marks (") and the store command (→). However, you can mimic these respectively in the Text( command by using two apostrophes (' '), and two subtract signs and a greater than sign (—>).

Right Triangle Hypotenuse

You can get the hypotenuse of a right triangle by using R►Pr(a,b), where a and b are the legs of a right triangle, or abs(a+bi, where a and b are the legs of a right triangle and i is the imaginary i.

Dividing by 100

Using the program editor, you can place the % symbol directly into the code as a replacement for dividing by 100. This saves a few bytes each time you use it.

Using the sub( command, if only one argument is given and it contains an expression that evaluates to a real, complex, or list of numbers, the argument will be divided by 100.

:sub(225
    2.25

Turn the Screen Black

If your window is set up so that Xscl < ΔX and Yscl < ΔY, you can use GridOn to make the entire screen black. You should note, however, that is rather slow.
You can also use Shade( to go faster.

:Shade(Ymin,Ymax

Inputting Coordinates

Most programmers know the normal syntax for Input, but it can be used alone without any arguments. This simply displays a little "+" on the graph screen, along with the coordinates on the bottom. The plus symbol can be moved horizontally or vertically to a certain coordinate, and the command ends by pressing ENTER. The coordinates are then stored to x and y, respectively.

:Input

Faster Circles

On the TI-83+ and above, the Circle( command has an alternate syntax. When a complex list such as {i} is added as the 4th argument, "fast circle" mode will be turned on, which uses the symmetries of a circle to save on trig calculations, and draws a circle in only 30% of the time it would normally take.

:Circle(0,0,5,{i

Extra Characters

Although the extra characters are only available through an assembly program, once you have them you can store them to a string and then use the string in a program with no problems. The characters include lowercase letters and ASCII characters (such as @, &, #, $, and international characters like ä).

Strange Control Flow

There are a few cases of strange control flow, where you can use If conditionals by themselves, or together with loops and/or DelVar, to create some interesting results. The Disp commands tell the input conditions under which they will be executed.

  • The dangling else (i.e, the executed statement itself is a conditional)
:If A:If B:Disp "B or not(A)
:If A:Then
:Disp "A
:If B:Else
:Disp "not(A) or not(B)
:End
  • Misusing the DelVar bug that occurs when chaining an If, Else, or End command to the end
:If A:DelVar XIf 0
:Disp "not(A)
:If A:Then
:Disp "A
:If B:DelVar XElse
:Disp "A and not(B)
:End

Running Programs from Assembly Shells

As a matter of convenience, you can run your TI-Basic program from an assembly shell. DoorsCS 6 will automatically display all programs, but you need to place a colon (":") as the first line of your program for MirageOS to recognize it. However, it should be noted that there is no guarantee that your program will work correctly when run by a shell.

Moving Setup to Program End

If you have a large program where speed is at a premium, then you want the main program loop as close to the beginning of the program as possible. Since program setup is usually the code that is at the beginning of the program, this means that you should move it to the end of the program and then jump to it using a Goto.

:99→I
:Goto 0
…
:Lbl 0
:ClrDraw
:ZStandard
:ZInteger
:Menu(" FROGGER v1.0 ","PLAY",1,"HELP",2,"EXIT",3

Extra Variables

If you are out of variables (A-Z and theta) to use in a program, there are actually 8 more that can be used in the same way as the others (although they do have functions of their own in certain situations). However, none of them appear in the memory menu. They are:

n

This can be typed using the [X,T,theta,n] button when in sequential mode, or by using the catalog and jumping to n. You can use the DelVar command on this, but you cannot call it if it is not defined like you can other variables.

ℕ, I%, PV, PMT, FV, P/Y, C/Y

These can all be typed using [Apps][Finance…][Vars]. You cannot use the DelVar command on these, however you can call them if they are not defined (they will come up as 0).

This allows for use of up to 35 variables instead of 27.

More Information on the last 7 of these can be found at the bottom of the System Variables page.

<< Downloads Table of Contents Variable Tips >>

Now that you have learned the commands, design theory and game techniques, it's time to put that information to use. These project ideas are for programs that you should try to make to the given specifications, using whatever commands you need. Of course, the specifications aren't set in stone, so you don't have to include something if you don't want to.

In addition to following the specifications, try to make the programs as optimized as possible, and use good design when structuring them (i.e., don't use Goto when a loop is really what you should be using). If you can successfully make all of these programs, and have done a good job writing them, you can consider yourself a good programmer.

If you are having trouble making any of the programs, or you just want some input from other people, you can post in the forum. Before you do that, though, we encourage you to really try to create the programs and put some thought into them.

Phone Directory

Create a phone directory with these features:

  • Make a list of phone numbers, and also include the person(s) who own the phone number.
  • Display the phone numbers and person(s) on the screen.
  • Let the user sort through the phone numbers in ascending and descending order.
  • Let the user create, delete, and update the phone numbers and person(s).

Role-Playing Game (RPG)

Create an RPG with these features:

  • Use the home screen for the interface.
  • Split the map into multiple pieces, displaying each piece when needed.
  • Create a theme for the RPG and base everything off of it.
  • Give the player a few weapons to attack enemies with.
  • Create AI enemies that the player can battle for experience points.
  • Make a couple bosses that the player has to defeat to advance to the next level.
  • Upgrade the player weapons when set experience points are gained.

Snake

Create a snake game with these features:

  • Make a snake character that you can move around on the screen using the arrow keys.
  • Randomly display a piece of food on the screen for the snake to "eat".
  • Use collision detection to check if the food was eaten or the snake went off the screen.
  • If the snake goes over the screen boundaries, the snake is dead and the game is over.
  • Keep a highscore based on the highest amount of food the snake has eaten at one time.

BlackJack

Create a blackjack game with these features:

  • Use a graphical interface.
  • Have custom input for both players, alternating between players.
  • Implement all the rules of blackjack into the game.
  • Record the games won/lost by each player.

Hangman

Create a hangman game with these features:

  • Use a graphical interface.
  • Use custom input for both players.
  • Have one player choose a word, and the other player guess the word.
  • The guessing player gets ten chances to guess the word before they lose.
  • The guessing player selects a letter that they think is in the word. If the letter is there, then that letter is revealed and the player doesn't lose a chance.
  • If the letter is not there, the player loses one of their chances.
  • If the player guesses all the letters in the word, they win. If they run out of chances before they get the word, they lose.

Flight Simulator

Create a flight simulator with these features:

  • Use the graph screen
  • Use way points and navigation
  • Use multiple computing systems to determine attributes such as location, speed, angles, weather, engine condition, distance, fuel etc.
  • Use auto piloting
  • Include output of direction, angle relative to horizon, attributes, and system efficiency
<< What Next? Table of Contents Command Cheat Sheet >>

content: 'I don''t know if you guys noticed, but I changed the TI-Basic characters above the reply box to just one line. Does that look any better?'
attachment: null

content: 'I can''t remember. I probably wanted to observe graphs dynamically like what you can do on various computer programs and the new Nspires.'
attachment: null

formOne: ''
content: "I thought I would create an intro thread as well, just like X/Zeda.\n* I am the founder of TI-Basic Developer.\n* I used to be a member of both United-TI and Cemetech.\n* I don't do any TI-Basic programming anymore, but I do enjoy the community around the site.\n\nThat is all :P"
attachment: null

formOne: ''
content: ''
attachment: null

content: 'That looks nice :) I''m curious, why did you create that?'
attachment: null

content: "I've seriously got to figure out how to make the system handle anonymous users properly.\n\nAre you able to take a screenshot of what you are seeing?\n\nAlso, are you not able to edit your posts? If you can't, then I don't know how to fix it, because theoretically, you ought to be able to…"
attachment: null

content: 'That''s displayed when you hover over the date/time.'
attachment: null

content: 'Would it be possibble to have a "n minutes ago" thing with some of the posts? Sometimes wikidot gets my time zone wrong and it''s confusing.'
attachment: null

content: "Welcome to TI-Basic Developer! Na, just kidding :D\n\nIt sounds like you are digging the new forum… Any things you would change about it?"
attachment: null

content: 'Thanks for that page, Timothy :)'
attachment: null

content: 'It looks nice :)'
attachment: null

content: "I do like the \"Goto this post\" thing, too.\nAlso, would it be possible to edit a post that's attributed to your IP?"
attachment: null

content: "This page is weird for me. CSS seems to br broken for me, according to firebug it's trying to load from the wikidot domain.\nAlso, this reply thingy is weird."
attachment: null

content: "I found this little guy sitting in my pile of things I did a long time ago:\n\n[[code]]\nClrDraw\nFnOn\nFull\nAxesOn\nDispGraph\n2→F\nRepeat Ans=45\nIf sum(Ans={92,93,94,82,83,84,72,73,74\nThen\nAns-36-5int(.1Ans\nexpr(sub(\"789 456 123\",Ans,1→F\nDelVar A\nEnd\nIf Ans=32 or Ans=33\n1+(Ans=33→A\nIf Ans=24 or Ans=26\nThen\n1-2(Ans=26\nAns(Xmax-Xmin)/(10F-1→T\nXmin-Ans→Xmin\nXmax-T→Xmax\nDelVar A\nEnd\nIf Ans=25 or Ans=34\nThen\n1-2(Ans=34\nAns(Ymax-Ymin)/(10F-1→T\nYmin+Ans→Ymin\nYmax+T→Ymax\nDelVar A\nEnd\nIf Ans=85\nThen\nXmin(F-(F-1)(A=2→Xmin\nXmax(F-(F-1)(A=2→Xmax\nYmin(F-(F-1)(A=1→Ymin\nYmax(F-(F-1)(A=1→Ymax\nDelVar A\nEnd\nIf Ans=95\nThen\nXmin/(F-(F-1)(A=2→Xmin\nXmax/(F-(F-1)(A=2→Xmax\nYmin/(F-(F-1)(A=1→Ymin\nYmax/(F-(F-1)(A=1→Ymax\nDelVar A\nEnd\nIf Ans=12\nThen\nZStandard\nDelVar A\nEnd\nDispGraph\ngetKey\nEnd\n[[/code]]\n\nSupposedly, this allows you to dynamically manipulate the graphscreen without having to input the window boundaries every time. Using the buttons below causes it to perform the respective actions.\n\nArrow Keys — Determines the direction by which the screen moves relative to the origin.\n+ — Zoom in. The axes scales become smaller.\n- — Zoom out. The axes scales become larger.\nNumber Pad — Determines the scale factor. 9 makes very large changes; 1 makes very little changes.\nX,T,θ,n — This button plus a zoom button will exclusively zoom the x-axis.\nSTAT — This button plus a zoom button will exclusively zoom the y-axis.\nWINDOW — Resets the graph screen to a window of X(-10,10) Y(-10,10).\nCLEAR — Halts program."
attachment: null

content: "One of my project ideas is something called the Chess Sandbox. Essentially, it will be a chess program which has absolutely no validation checks; everything will be based on the honor system. By doing this and making a wider variety of piece models available, users will be able to make up their own variations of chess and play them online.\n\nCurrently, my plan is to write this in Actionscript 3.0, but I have been contemplating the use of Java. One of my fears is that I won't be able to figure out online capability and whatnot. Creating live connections seems like it could be difficult; then again, it must be possible, considering Minecraft was written in Java and handles multiplayer fairly decently."
attachment: null

content: '(Just a test.)'
attachment: null

content: ''
attachment: 'file:20121204164418-0/20121204164418-0.jpg'

content: 'Actually, the rules page just says that the rules aren''t yet available. However, I read the rules on the post here.'
attachment: null

content: 'Read the third post on this page.'
attachment: null

content: 'What happened to the different tools above the text box?'
attachment: null

content: 'This is just a test. '
attachment: null

content: "I have finished the New Forum System enough for testing. Please see how you like it!\n\nA few things you will notice:\n* You cannot preview a post. This is due to the Wikidot coding I'm using. However, sacrificing this functionality means being able to make attachments and having the integrated char box.\n* The syntax buttons do not show anymore. All of the relevant styling can be found here.\n* Everyone has the member type \"Member Type\". I still haven't quite figured out how I want to code this; it isn't easy.\n* I'm still figuring out how this is going to affect unregistered users (sorry Boba Foxx…), but I have ideas on making it work.\n\nPlease provide feedback so the system can better fit the needs of the community."
attachment: null

content: "Woah! I wanna do it! \nI tried to sign up, but it has a box that says \"I read and agree the contest rules, and the calendar in case I want to judge.\" —where can I find the contest rules?"
attachment: null

Recent Posts

The ListPages module does not work recursively.

Recent Threads

The ListPages module does not work recursively.

content: 'Yes, I made one.'
attachment: null

Feb 02 Timothy Foster revised the forum system. Check it out!

content: "Here are some pointers on how you can embellish your posts.\n\n||~ Style||~ Code||\n||Bold|| **Bold**||\n||Italic||//Italic//||\n||Underline||__Underline__||\n||Monospace||{{Monospace}}||\n||Superscript||Super^^script^^||\n||Subscript||Sub,,script,,||\n||Internal Link||[[[home|Internal Link]]]||\n||External Link||[http://tistory.wikidot.com/ External Link]||\n\nYou can make code by encasing it in [[code]]...[[/code]] blocks:\n[[div class=\"code\"]]\n[[code]]\nYour code here!\n[can make a quote with the following syntax:\n[[code]\n> This is a quote\n[[/code]]\n\nYou can post math equations by encasing a LaTeX expression in [[math]]...[[/math]] tags.\n\n[[code]]\n[[math]]\nx = {-b \pm \sqrt{b^2-4ac} \over 2a}\n[= {-b \pm \sqrt{b^2-4ac} \over 2a}\n[[/math]"
attachment: null

content: "Whether you are a new visitor or a frequent lurker, we are excited that you are on the site! We are a community, made up of a diverse collection of people with different backgrounds and experiences, and we want you to become one of us. It doesn't matter whether you are just starting out in programming or you are already an accomplished programmer, everybody has something that they can contribute.\n\nBefore you can participate on the site, you need to sign up to become a member. Registration is a simple two-step process, and involves creating a Wikidot account and then entering the password 'ti-basic-rulez' on the join page to join the site. It is quick and painless, and should take no more than a couple minutes.\n\nThere are a few things that you need to know before you go off exploring:\n\n* Once you are a site member, please start a new thread and introduce yourself to the community so that we can get to know you better. We're always happy to meet new people on the forum, and I promise we won't bite (unless you want us to) :D\n* Although we are generally very lax in what we allow on the forum, there are some basic rules that we have established to ensure that the forum is an enjoyable place to be. Please read through and familiarize yourself with the rules.\n* The expandable CHAR box that appears in the upper right corner of the screen contains the TI-Basic characters that aren't readily accessed from the keyboard. It is meant to be a nice convenience for people who want to post code on the forum, allowing you to quickly copy and paste instead of having to hunt them down every time.\n* Please do your best to post your threads in the appropriate place. Similarly, start a new thread for your questions, instead of adding them to an existing thread. This helps to keep the forum organized and allows people to read threads without confusion. Of course, we are happy to help you if you don't quite get it right.\n* Except for personal help from a moderator or administrator, please don't ask people to email or message answers to you. The forum is open for reading as well as responding, so all discussion should go in the threads for others to see.\n\nWe hope you enjoy using the site and stop by often!"
attachment: null

content: 'For the curious, I have entered in TI-BASIC (68K and z80) and z80 Assembly. I doubt I will have time for it all, but I do like to participate and join the fun! I will have school to contend with, finishing up my last requirements for my math major among other things and trying to pass French IV :P'
attachment: null

content: "I don't know if any of you have heard of it, but TI-Concours 2013 recently opened up. Ti-Concours is an annual competition and is typically a French competition (Concours = Competition). Last year they bridged a language barrier and opened it up to the English speaking community as well. It was a success and so they have once again opened it up to everybody. This year's categories are:\n* TI-BASIC z80\n* TI-BASIC 68k\n* Axe\n* z80 Assembly\n* Nspire Lua\nThe competition has some interesting components in the final rounds including an interview in English or French, depending on your language and a three hour test to see what you can come up with in a short period of time. The rest of the competition is split up over a period of about six weeks where TI-BASIC (68k and z80) and Axe have two challenges that last one week and the other two categories have one challenge over two weeks. There is some overlap, but the schedule looks like this:\ndates.png\n\nThere is nothing to lose and the prizes are pretty nice! Last year they got surprised with being able to dole out even more prizes (I think up to fifth place in some categories). If you want to sign up before the competition starts, you can register here.\n\nI hope at least some of you can join! There are currently only 4 entrants for TI-BASIC (z80) and two for 68K BASIC!"
attachment: null

content: "Find the next number in the following sequence. To date, no one has been able to find it.\n\n[[div style=\"font-size: 120%;\"]]\n* 9, 0, 2, 6, 94, 10, 42, ?\n[[/div]]"
attachment: null

content: "I have started working on an application that will hopefully evolve to provide on-calc tutorials. Currently it has an example to show the user how to create a simple Hello World program. Here is a screenshot:\nindex.php?action=dlattach;topic=15662.0;attach=14627;image\nThe \"tutorials\" are basically a sequence of keypresses that get simulated. As well, I have added in some commands to interact with the user so you can actually step the user through the process and give them notifications about what is going on. Once I add in a menu, I will release the app and source so that others can create tutorials and submit them for the official release.\n\nMy goal is to cover all of the commands and I will probably need a separate version to work with mathprint. As well as all of the commands, there will be tutorials for different aspects of programming and it will be possible to have tutorials outside the app (probably as appvars). The current command available for making a tutorial are:\n[[code]]\n/=====================\\\n| Key(val) | 1 byte\n\=====================/\n This is the main command. This tells the engine which key to\nsimulate. For example, to simulate [ENTER], use Key(skEnter).\n/=====================\\\n| Delay(val) | 2 bytes\n\=====================/\n This sets the delay between simulated key presses. I find 30\nto work well.\n/=====================\\\n| Text(y,x,string) | 4 bytes + length of string\n\=====================/\n This is how you communicate to the user. This is like the\nBASIC command, except it draws over whatever is on the LCD, not\njust the graph screen. For the worried, this does not affect the\ncontents of the graph screen. So for example:\n Text(56,0,\"Hello World!\")\n/=====================\\\n| WaitForKey(key) | 2 bytes\n\=====================/\n This waits for the user to press the appropriate key. When the\nuser presses the key, it will be registered. No other keys\nrespond while waiting.\n/=====================\\\n| Repeat(key,num) | 3 bytes\n\=====================/\n This will simulate a key press a number of times in a row.\nThis is useful for navigating menus to get to an item.\n/=====================\\\n| ExitTutor() | 1 byte\n\=====================/\n This ends the tutorial and normal OS stuff resumes.\n\n These commands should be enough for most tasks. However, if\nthere are more commands for the adventurous:\n/=====================\\\n| SetAns(num) |\n\=====================/\n This will set the \"Ans\" variable to the specified value. Note\nthat this whole program works with 1-byte values, 0 to 255.\n/=====================\\\n| TestAnsEqu(num) |\n\=====================/\n If 'Ans' is equal to 'num', then 'Ans' is set to 1, else it\nis set to 0.\n/=====================\\\n| GetKey(num) |\n\=====================/\n Stores the user's keypress to Ans. This isn't as responsive\nas it could be, yet, but it works.\n/=============================\\\n| JumpIfAnsEqu(num,label) | 4 bytes\n\=============================/\n This will jump to a label if Ans=num. Note that the label must\nbe on the same flash page.\n/=====================\\\n| PushAns() |\n\=====================/\n This pushes Ans onto a stack for later retrieval with\nPopAns(). The stack is currently 240 bytes, but it may be\nsmaller in the future.\n/=====================\\\n| PopAns() |\n\=====================/\n This removes the last value on the stack and stores it to\n'Ans'.\n[[/code]]\nHopefully I will make a lot of progress on this project, but I also have several other big projects that I am working on. I think that once menus are finished, the rest will be easy."
attachment: null

content: "Sometimes, optimization requires more than just squeezing out bytes. Entire sections of code can often be revised into more compact, efficient algorithms.\n\nDiscover what this program does and rewrite it for either speed or size.\n\n[[code]]\nClrHome\n\"?→Str1\nDisp \"AX²+BX+C=0\nPrompt A,B,C\nIf A<0\nThen\n‾A→A\n‾B→B\n‾C→C\nEnd\ngcd(A,abs(B\ngcd(Ans,abs(C→V\nA/Ans→A\nB/V→B\nC/V→C\nFor(D,A,1,‾1\nIf not(fPart(A/D\nThen\nFor(E,abs(C),1,‾1\nIf not(fPart(C/E\nThen\nA/D→F\nabs(C/E→G\nIf DAns+FE=B and EG=C\n\"1D1E1F1G→Str1\nIf DG-FE=B and ‾EG=C\n\"1D‾E1F1G→Str1\nIf FE‾DG=B and ‾EG=C\n\"1D1E1F‾G→Str1\nIf ‾DG-FE=B and EG=C\n\"1D‾E1F‾G→Str1\nIf DE+FG=B and EG=C\n\"1D1G1F1E→Str1\nIf DE-FG=B and ‾EG=C\n\"1D‾G1F1E→Str1\nIf FG-DE=B and ‾EG=C\n\"1D1G1F‾E→Str1\nIf ‾DE-FG=B and EG=C\n\"1D‾G1F‾E→Str1\nIf Str1≠\"?\nThen\nClrHome\nDisp \"(AX+B)(CX+D)=0\nFor(H,1,7,2\nDisp expr(sub(Str1,H,2\nEnd\nDisp \"FACTOR OUT\nOutput(7,2,V\nReturn\nEnd\nEnd\nEnd\nEnd\nEnd\nClrHome\nDisp \"PRIME\nDisp \"FACTOR OUT\nOutput(3,2,V\n[[/code]]"
attachment: null

content: "Very few people have the guts to fight giant ants.\n\nGood luck."
attachment: null

content: .
attachment: null

content: 'Thread for piloting everywhere.'
attachment: null

content: Pilot.
attachment: null

content: "Right I'm getting to it.\n\n\"Categorize\" is a button that allows you to add descriptive tags, such as axe, movement, arcade, etc. It's just a way of adding more description to a thread."
attachment: null

content: 'Yes, there is; I just hadn''t implemented it last night when I made this post because I was too tired XD'
attachment: null

content: 'This is needed to initialize the system.'
attachment: null

content: 'Another thread of piloting.'
attachment: null

content: 'Pilot Thread.'
attachment: null

content: 'Hmm, is there a way to sticky topics? Otherwise this might get pushed to the bottom.'
attachment: null

content: 'Yet another pilot thread.'
attachment: null

content: 'This is (you guess it) a pilot thread.'
attachment: null

content: 'Okay, thanks! I can work with that. Should we then have a topic to go over all of the special things?'
attachment: null

content: "Hi, I am Zeda, also known as Xeda. I am a moderator here on TI-Basic Developer and I am sure many of y'all are familiar with me. With the new site change, I figured I would help populate the Introductions forum, though. So, about me:\n\n* I have been programming the TI-83+/84+ series for around six years, now.\n* I have a TI-84+, TI-84+SE, and a TI-89t.\n* I program in TI-BASIC and Z80 Assembly and I often help out by supplying assembly hexcodes for things that cannot be easily done in BASIC.\n* I am a moderator here and on several other sites.\n* I am in college, majoring in mathematics. I have also tutored highschoolers.\n* I am almost 21 and I am married :)\n* I was a museum tour guide for a few years. Basically, I just like teaching and helping people out.\n\nFeel free to ask me stuff! I've worked quite a bit with TI-BASIC and z80 assembly, so even if I am not the most knowledgeable, I might know something!"
attachment: null

content: 'This is a pilot thread.'
attachment: null

content: 'This is a pilot thread.'
attachment: null

content: 'This is a pilot thread.'
attachment: null

content: 'This is a pilot thread.'
attachment: null

content: 'This system is using what are called Wikidot Data Forms; that was how I was able to integrate the Char box and place an attachment option. A couple of the downsides to using data forms, though, is that you cannot preview content, and that toolbar of buttons does not appear. Essentially, it is a tradeoff between the preview/text-style buttons and the char/attachment boxes.'
attachment: null

content: "I cannot find an easy way to add to General Discussion, Programming & Design, Projects & Contests. Is this something planned? Also, I notice the \"categorize\" thing. What does that do?\n"
attachment: null

content: "Awesome, it looks great! Are we going to have the buttons for things like urls, images, [[code]] and [[math]] things? And is there some way to preview your post? It looks very nice at the moment.\n\nEDIT: Editing works :D"
attachment: null

content: 'The new forum is now up! Test it to see how it is.'
attachment: null

[[table class="threadTable"]]

content: 'I think so.'
attachment: null

content: "I am liking this style :) And the attachment worked o.o\n∏(1-1/p)-s\nHave you managed to figure out a way to preview posts?"
attachment: null

content: 'This looks nice.'
attachment: null

content: 'The purpose of this section is to make posts about individual wiki pages.'
attachment: null

content: 'How is the new forum? What changes ought to made?'
attachment: null

content: "When people visit and contribute to the forum, we want to make sure that they find it useful and an enjoyable place to be. To ensure that this happens, there are a few rules that you need to follow. Please read through and understand these rules, so that you know what we expect from you. Thank you.\n\n* Always try to be respectful of other posters, including their opinions, values, point-of-view, etc.\n* Always try to work with other posters instead of against them; this is a community and we are all here to help.\n* Don't post or request anything illegal or illicit, including ROMs, music, movies, p0rn, etc.\n* No cursing, spamming, or flaming! There is almost always a better way to express yourself.\n* Don't advertise your programs or websites, unless they are relevant and have some unique value to them.\n* Don't reply to old threads (last post is more than three months old) unless you have something new and valuable to contribute; start a new thread instead.\n* If a topic starts getting off-topic, start a new topic. Likewise, a topic should be placed in the appropriate category.\n* Don't try to pass off someone else's work as your own — give credit to the author whenever possible.\n\nWe reserve the right to remove, edit, move or close any post or thread when we deem it necessary.\n\n"
attachment: null

content: "Whether you are a new visitor or a frequent lurker, we are excited that you are on the site! We encourage you to take the next step and to sign up to become a member. Registration is quick and painless, and allows you to take advantage of all the features that the site offers.\n\nOnce you are a member, please start a new thread and introduce yourself to the community so that we can get to know you better. Tell us a little bit about yourself:\n\n* Where are you from?\n* What do you do? Any hobbies?\n* How long have you been programming? What languages?\n* What projects are you working on?\n\nIn addition, we ask that you state what you have to offer to the community and similarly what you want to achieve in this community. Please be honest in answering these questions, so that we can make your experience here better.\n\nWe hope you enjoy using the site and stop by often!"
attachment: null

The ListPages module does not work recursively.
Category Threads Last Thread

content: "You are very silly.\n\nEDIT: Test edit."
attachment: null

content: "Nunc iaculis urna elementum quam. Suspendisse tristique eros quis massa. Sed iaculis, ligula at posuere tempor, lectus libero fringilla eros, a vehicula felis magna non pede. Donec ac lacus. Donec risus erat, rutrum sed, ornare at, suscipit a, nibh. Nullam posuere laoreet purus. Duis aliquet sollicitudin felis. Pellentesque ipsum. Praesent vel libero. Phasellus suscipit aliquet tortor. Fusce ornare blandit risus. Vivamus venenatis blandit pede. Nullam massa. Ut placerat fringilla neque. Nam tortor magna, imperdiet ut, volutpat in, lobortis vitae, sem. Donec in nisi ac leo fermentum eleifend.\n\n[[code]]\nPrompt A,B,C,D\n3-1(3C/A-B2/A2→P\n27-1(2B3/A3-9BC/A2+27D/A→Q\nP3/27+Q2/4→E\nIf E≥0\nThen\n3√(-Q/2+√(E→U\n3√(-Q/2-√(E→V\nU+V→I\n-(U+V)/2+i(U-V)√(3)/2→J\n-(U+V)/2-i(U-V)√(3)/2→K\nElse\ncos-1(-Q/(2√(abs(P)3/27→R\n2√(abs(P)/3)cos(R/3→I\n-2√(abs(P)/3)cos(3-1(R+π→J\n-2√(abs(P)/3)cos(3-1(R-π→K\nEnd\nB/(3A\nFix 3\nDisp I-Ans,J-Ans,K-Ans\nFloat\n[[/code]]\n\nLorem ipsum dolor sit amet, consectetuer adipiscing elit.\n\nEditing the original thread."
attachment: null

[[table class="threadTable"]]
[[row]][[cell class="header threadTitle"]]Thread[[/cell]]
[[cell class="header threadCreated"]]Started[[/cell]]
[[cell class="header threadPosts"]]Posts[[/cell]]
[[cell class="header threadRecent"]]Recent Post[[/cell]]
[[/row]]

content: '??????????????????????????'
attachment: null

content: 'Supposedly, this will take me to the post I just made.'
attachment: null

content: 'One more post.'
attachment: null

content: 'I am giving this post an attachment. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus arcu libero, aliquet sit amet, ornare quis, vulputate a, nibh. Aliquam sit amet lectus vitae ligula feugiat condimentum. Proin eu mauris. Suspendisse ac sem. Cras in quam in augue fringilla porttitor. Nulla facilisi. Aliquam erat volutpat.'
attachment: 'file:dragon-encode/dragon_encode.png'

content: 'I made an edit.'
attachment: null

content: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus arcu libero, aliquet sit amet, ornare quis, vulputate a, nibh. Aliquam sit amet lectus vitae ligula feugiat condimentum. Proin eu mauris. Suspendisse ac sem. Cras in quam in augue fringilla porttitor. Nulla facilisi. Aliquam erat volutpat.'
attachment: null

content: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus arcu libero, aliquet sit amet, ornare quis, vulputate a, nibh. Aliquam sit amet lectus vitae ligula feugiat condimentum. Proin eu mauris. Suspendisse ac sem. Cras in quam in augue fringilla porttitor. Nulla facilisi. Aliquam erat volutpat.'
attachment: null

content: 'Does this work?'
attachment: null

#header,
#side-bar,
#top-bar,
#footer,
#license-area,
#page-title,
#navi-bar,
#navi-bar-shadow,
#breadcrumbs,
.page-tags,
#page-info,
.page-watch-options,
.page-options-bottom,
#footer-bar,
#login-status,
.search-top-box,
.note-block,
#edit-cancel-button{
    display: none !important;
}
 
#action-area h1, #edit-page-form tbody tr:first-child{
    display: none !important;
}
 
#main-content, #container-wrap, #container{
    margin: 0;
}
 
table.form-table,
div.field-content,
textarea.field-content{    width: 100%; }
td.form-labels{    width: 50px; }
 
tr.form-row p{    margin: 0; }
div.field-charOne,
div.field-charTwo{
    margin-left: 92px; //30px;
    font-family: 'Andale Mono', 'Courier New', Courier, monospace;
    font-size: 9pt;
    color: #11119C;
}
 
div.field-content textarea{
    border-radius: 4px;
    opacity: .4;
    transition: opacity 500ms;
    -moz-transition: opacity 500ms;
    -webkit-transition: opacity 500ms;
    -o-transition: opacity: 500ms;
}
div.field-content textarea:focus{
    opacity: 1;
}
span.field-attachment input,
span.field-name input{
    opacity: .4;
    transition: opacity 500ms;
    -moz-transition: opacity 500ms;
    -webkit-transition: opacity 500ms;
    -o-transition: opacity: 500ms;
}
span.field-attachment input:focus,
span.field-name input:focus{    opacity: 1; }
 
#edit-save-button{
    border-radius: 4px;
    box-shadow: 0 0 2px -2px rgba(0,0,0,.3);
    margin-left: 58px;
}
.page-tags{    visibility: hidden; }
 
.werecode{
    font-family: 'Andale Mono', 'Courier New', Courier, monospace;
    font-size: 9pt;
    color: #11119C;
}
div.werecode{    padding-left: 1em; }

content: "Some code.\n\n[[div class=\"werecode\"]]\n:{0,1→L₁\n:{0,N→L₂\n:LinReg(ax+b) Y₁\n:Equ►String(Y₁,Str1\n:sub(Str1,1,length(Str1)-3→Str1\n[[/div]]"
attachment: null

content: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus arcu libero, aliquet sit amet, ornare quis, vulputate a, nibh. Aliquam sit amet lectus vitae ligula feugiat condimentum. Proin eu mauris. Suspendisse ac sem. Cras in quam in augue fringilla porttitor. Nulla facilisi. Aliquam erat volutpat. Morbi consectetuer, libero at iaculis fermentum, dolor velit tincidunt sapien, lacinia ultricies ligula dui eget orci. Maecenas magna quam, volutpat ut, auctor et, malesuada quis, quam. Fusce semper pharetra mi. Aliquam facilisis tortor ut ante. Nam dignissim, ipsum et pharetra pretium, est sem feugiat sapien, a mattis elit sem vitae neque. Ut nec nibh. Ut sagittis magna nec velit. Maecenas ut eros. Duis lectus. Sed venenatis. Fusce iaculis urna euismod neque.\n\nLorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus arcu libero, aliquet sit amet, ornare quis, vulputate a, nibh. Aliquam sit amet lectus vitae ligula feugiat condimentum. Proin eu mauris. Suspendisse ac sem. Cras in quam in augue fringilla porttitor. Nulla facilisi. Aliquam erat volutpat. Morbi consectetuer, libero at iaculis fermentum, dolor velit tincidunt sapien, lacinia ultricies ligula dui eget orci. Maecenas magna quam, volutpat ut, auctor et, malesuada quis, quam. Fusce semper pharetra mi. Aliquam facilisis tortor ut ante. Nam dignissim, ipsum et pharetra pretium, est sem feugiat sapien, a mattis elit sem vitae neque. Ut nec nibh. Ut sagittis magna nec velit. Maecenas ut eros. Duis lectus. Sed venenatis. Fusce iaculis urna euismod neque."
attachment: null

This is a test category

Welcome to the TI-83/84/+/SE section of TI-Basic Developer (TI|BD), the TI-Basic information repository! If you are a first-time visitor, please check out the welcome pack to get you up to speed on using the site. We encourage you to become a member and to get involved in the community, and to come back often to see what changes have occurred. And above all else, enjoy your stay!
New to TI-Basic?

These pages provide an overview of TI-Basic, and are designed to help you quickly get started learning and using TI-Basic.

Did You Know...
The ListPages module does not work recursively.
Development
The ListPages module does not work recursively.
Recent News Recent Posts Recent Edits
The ListPages module does not work recursively.
The ListPages module does not work recursively.
In fact, this can be improved to account for non-integers as well. As a bonus, it's also...
(by Timothy Foster 15 Jul 2018 21:13, posts: 5)
I think I see why it works now: For some L₁, say L₁={4,5,7,0,3} , cumSum(L₁)={4,9,16,16,19} where...
(by kg583 15 Jul 2018 17:30, posts: 5)
Yeah. I'm just not good enough with algorithms to see how that code works, but It does
(by Trenly 15 Jul 2018 17:22, posts: 5)
The ListPages module does not work recursively.
Search the Site

There is a wide range of TI-Basic content available on this site, so we recommend using the search engine or referring to the sitemap. If you can't find what you're looking for, leave a post in the forums and somebody will assist you.

counter free hit unique web

author: Viktor
description: 'Another pong game, doesn''t loop, fast gameplay and gets harder over time. Has an interesting highscore feature. Multiplayer on two calculators coming soon!'
arcade: '1'
graphics: '0'
platform: '1'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '0'
misc: '0'
image: '/archives:a-viktor-s-pong-2-5/pong2.5titlescreen.gif'
download: Viktor%27s%20Pong%20v2.5.1.zip
size: '1665'
unit: '1'

Mike1950Mike1950 since 12 Jul 2018 05:53
foroplusforoplus since 10 Jul 2018 20:34
Keshav BhandariKeshav Bhandari since 10 Jul 2018 08:24
IucyintheskyIucyinthesky since 08 Jul 2018 23:10
TienPlayzTienPlayz since 07 Jul 2018 17:52
06Mongoose06Mongoose since 06 Jul 2018 07:28
moomastermoomaster since 05 Jul 2018 17:27
dolkdolk since 02 Jul 2018 04:34
conleycoreyconleycorey since 02 Jul 2018 02:52
Decepticon7Decepticon7 since 30 Jun 2018 14:06
SchizalSchizal since 29 Jun 2018 20:34
EravanEravan since 28 Jun 2018 20:38
Eli_wannabeEli_wannabe since 17 Jun 2018 06:13
RyanTNDRyanTND since 14 Jun 2018 14:21
Coding NightmareCoding Nightmare since 12 Jun 2018 03:11
Binary 6Binary 6 since 11 Jun 2018 20:56
changpresleychangpresley since 08 Jun 2018 06:26
c64z80c64z80 since 06 Jun 2018 16:16
DeoxalDeoxal since 01 Jun 2018 06:26
TrashyGamesTrashyGames since 30 May 2018 01:58
Fred2000Fred2000 since 23 May 2018 16:11
AlexlbAlexlb since 22 May 2018 08:59
PythagorianPythagorian since 21 May 2018 18:57
WoodieloWoodielo since 21 May 2018 18:51
Mosaic_the_jMosaic_the_j since 18 May 2018 22:05
WireLord55WireLord55 since 17 May 2018 05:47
absoluteAquarianabsoluteAquarian since 15 May 2018 13:31
Seb GrantSeb Grant since 12 May 2018 11:04
Chillie43Chillie43 since 10 May 2018 14:31
Shards853247Shards853247 since 04 May 2018 20:12
ItsJustSomeDudeItsJustSomeDude since 30 Apr 2018 17:43
GreenGuy5294GreenGuy5294 since 27 Apr 2018 03:18
amyxamyx since 24 Apr 2018 19:41
Yang ShenlaiYang Shenlai since 24 Apr 2018 18:37
maxprigentmaxprigent since 20 Apr 2018 11:55
Catfisher4Catfisher4 since 20 Apr 2018 02:43
master_programmermaster_programmer since 14 Apr 2018 19:46
Boomcar127Boomcar127 since 13 Apr 2018 21:33
MMMMMMMMMMMMMMMMMMMMMMMMMM since 12 Apr 2018 20:39
master_of_nothingmaster_of_nothing since 11 Apr 2018 15:38
PurpziePurpzie since 10 Apr 2018 16:26
MandragolaMandragola since 09 Apr 2018 21:42
D33B33D33B33 since 04 Apr 2018 17:06
ChultmannChultmann since 03 Apr 2018 19:00
iferocheiferoche since 02 Apr 2018 12:01
AlexH113AlexH113 since 31 Mar 2018 23:35
Kylo BenKylo Ben since 31 Mar 2018 22:24
BrianDaniloBrianDanilo since 30 Mar 2018 14:03
Shadi DelshadShadi Delshad since 28 Mar 2018 19:21
GeneralCobraGeneralCobra since 27 Mar 2018 22:07
ElsterflutElsterflut since 26 Mar 2018 11:54
My_TriumphMy_Triumph since 26 Mar 2018 02:47
Andrew L JrAndrew L Jr since 21 Mar 2018 18:54
SeanNoSpaceSeanNoSpace since 21 Mar 2018 01:46
shawcassonshawcasson since 19 Mar 2018 22:37
cwongmathcwongmath since 19 Mar 2018 02:13
Marc--_9Marc--_9 since 18 Mar 2018 16:15
Horatiu HacHoratiu Hac since 14 Mar 2018 11:00
asmallpebbleasmallpebble since 10 Mar 2018 19:35
MRTsquaredMRTsquared since 09 Mar 2018 18:18
brankinbrankin since 09 Mar 2018 18:16
halcyonesselionhalcyonesselion since 08 Mar 2018 16:16
TemdogTemdog since 06 Mar 2018 21:39
ForbandysonForbandyson since 05 Mar 2018 19:12
Rande DagerRande Dager since 05 Mar 2018 03:34
Ty GoniaTy Gonia since 04 Mar 2018 14:31
TomtocTomtoc since 03 Mar 2018 16:57
JooksonJookson since 26 Feb 2018 20:33
sj_bsj_b since 25 Feb 2018 23:21
crossticrossti since 25 Feb 2018 14:11
xavi6xavi6 since 24 Feb 2018 15:25
TI-84 1737TI-84 1737 since 21 Feb 2018 22:21
noSpamPlsnoSpamPls since 21 Feb 2018 05:06
CytotoxicityCytotoxicity since 20 Feb 2018 00:01
icarus18icarus18 since 18 Feb 2018 17:58
shenani9ansshenani9ans since 18 Feb 2018 17:44
CheezyDonutCheezyDonut since 16 Feb 2018 18:45
nicoEDnicoED since 16 Feb 2018 00:54
MIchael StuebenMIchael Stueben since 14 Feb 2018 00:07
BumbleDCoder3000BumbleDCoder3000 since 13 Feb 2018 18:52
FreezeTileFreezeTile since 13 Feb 2018 13:25
coltonj96coltonj96 since 07 Feb 2018 17:38
GatoradeDCGatoradeDC since 07 Feb 2018 15:19
Nicholas RuscianoNicholas Rusciano since 06 Feb 2018 22:17
LesbianGoatLesbianGoat since 06 Feb 2018 21:13
SeeGreatnessSeeGreatness since 06 Feb 2018 17:31
Mattwmaster58Mattwmaster58 since 04 Feb 2018 20:22
Shion WShion W since 02 Feb 2018 17:20
ModerigModerig since 30 Jan 2018 21:22
ali-asali-as since 29 Jan 2018 20:42
JUANES MARINJUANES MARIN since 29 Jan 2018 00:45
AcresAcres since 29 Jan 2018 00:03
Li CaiLi Cai since 26 Jan 2018 18:23
PandoraSlicerPandoraSlicer since 25 Jan 2018 20:10
tobiadigtobiadig since 25 Jan 2018 19:43
Trane_SfCTrane_SfC since 24 Jan 2018 15:44
AravenFtw LukeAravenFtw Luke since 22 Jan 2018 12:50
Mister MustachioMister Mustachio since 21 Jan 2018 23:11
Nima2500Nima2500 since 21 Jan 2018 07:42
KalabKalab since 19 Jan 2018 01:23
page 1 of 13123...1213next »

New Members

The ListPages module does not work recursively.

Member Count

The ListPages module does not work recursively.

Last 3 Members

The ListPages module does not work recursively.

Currently Active Users:

The ListPages module does not work recursively.

Jan 16 There are discussions about redesigning the forums to be more robust.

"This page is still in development. It should be finished within a few months. I appreciate your patience! :D"

~Joshuasm32 does not match any existing user name

Sharing is Caring!

BlinkListblogmarksdel.icio.usdiggFarkfeedmelinksFurlLinkaGoGoNewsVineNetvouzRedditYahooMyWebFacebook

Preface:

First, I need to give the essentials to program with my tutorial:

Requirements:

A TI-82/83/84 (Plus) (SE) graphing calculator or emulator.

If you have that, you're set to go!

Key:

Here is a simple key to symbols that I use:

//= A comment on codes.

[___]= A description of something shortening the code.  (I.E., [The code that I used above] )

->= The symbol '→' in programming.

Programmer's Trick's:= A handy trick you can use.

Handy Hint:= A hint for programming.

Beware!= Something to avoid in coding.

Buzz Word:= A handy morsel of information.

Advice:

Before we start, I would like to give a few words of advice:

  1. Never give up on a program, even if it seems impossible to complete, for you can program pretty much anything on a calculator (except color). ;-)
  2. Remember, there is no "wrong way" to program; there are more efficient and less efficient ways, but feel free to stretch the limits and build your own style to program.
  3. Bend the Codes!

So, lets get started!

Basic Concepts

Alright, now that you are ready to start, lets kick off with the basics.

Making Programs:

Let's start with how to create, edit, and run programs. First, tap the [PRGM] key on your calculator. If you use your arrow keys, you can see the cursor move left/right and up/down. Look at the top bar: if your cursor is on the 'EXEC' label, you can move your cursor up and down and run any programs that you may have made. By pressing the right arrow once, you can edit programs. Lastly, if you cursor is on new, you can create a new program.

Go ahead and create a program by pressing [ENTER]. Now, you are prompted for a title. You can enter any name for your program that you want that is 8 characters or less and uses numbers, letters (activated by pressing alpha and the green text above a key), and a theta ('θ'). (A theta is a symbol you can use like a character.) Now, name your program "TUTORIAL" and tap [ENTER] again. Now you are ready to begin making the program. :D

The Command lines, the [PRGM] Key, and deleting programs:

If you have learned other programming languages before, you know that a "Command Line" is a line of commands that the computer reads through. Each command line is represented by the symbol ':.' (You should see a blank command line on your screen.) The computer reads through a command line in the same way we read a book: left-to-right. As it finishes each line of code, it jumps to the next line and continue until the program ends.

Now, to make code for the computer to read, press the [PRGM] key once. This is a list of common commands. (For a full list of commands and symbols, press [2ND] then [0]. You can type a character and jump to different sets of alphabetically sorted commands. Also, TI-84 calculators have the built-in app under the apps menu "CTLGHELP." If you open this, you can go to catalog and press [+] when your cursor is on a command and see how it is used.) Each of these commands has its own syntax and job that it does. We will learn about each of these further on.

To select a command, move you cursor around like on the program and press enter or type the number in front of each command. (I.E., type [1] for "If" and [2] for "Then.") Learning these numeric key-strokes is essential if you want to be a fast programmer. (To learn them, try quizzing yourself on the number and arrow keys to press for each one and practice using it for programming.) After you select a command, it will appear on your command line.

To make a new line, you can press [ENTER], and to finish and save your program, you can press [2ND] then [MODE] to select the yellow text "QUIT." Now, you can delete the program by pressing [2ND], [MEM], tapping [2], [7], and for TI-82/83 calculators, by pressing [ENTER] when your cursor is on a program, and for TI-83 (Plus) (SE) calculators, pressing [DEL].

On the TI-83 Plus/TI-84 (Plus) (SE) set of calculators, you can press [ENTER] and archive a program. A '*' symbol should appear before the program name after you archive a program to represent that it is archived. Archiving is a useful tool for important programs that you do not want to loose if your calculator crashes. However, while something is archived, you cannot run or edit it (without downloading and installing the application "Doors CS7" or others like it). To unarchive, press enter again.

Graph Screen and Home Screen:

There are two "screens" on a graphing calculator: the "Home Screen" and the "Graph Screen." The home screen is the screen used when your calculator is turned on for solving problems, such as "2+2." The graph screen is the screen is the screen which you graph and use drawing commands ([2ND], [PRGM]). This can be found from your home screen by pressing [GRAPH].

Programming & Programming Commands:

Homescreen Commands:

The starting commands are the commands on the home screen. First, let's learn how to use Disp.

Disp

The Disp command (short for "Display") is used to write a line of text up to 16 characters (the width of the home screen) on the first empty row the calculator finds. To find it, tap: [PRGM], (Right Arrow), [3]. Let me give you some example code (Enter this into your TUTORIAL program.)

Disp "HELLO WORLD"

And there you go! Your very first (but not the last!) program. Now, lets go into how that worked.
When you enter "Disp," it seeks the first empty row. Then, you add a quote to the beginning of text when you enter it. To write more text then 16 characters, do this:

Disp "HELLO WORLD","HOW ARE YOU?"
Programmer's Tricks:

A simple trick is that you do not have to finish with the second quote if it is the end of a line of code. :D The calculator assumes a quote on the end. Try this:

Disp "HELLO WORLD
Disp "HELLO WORLD","HOW ARE YOU?"
Beware!

Try to avoid using finishing quotes so that calculators which download your programs that may be low on memory can use your program without worries. Remember, everything you enter requires memory.

Buzz Word:

Disp writes text on the first empty line the calculator finds.

ClrHome:

You may have noticed that it is a bit annoying to have "Prgm TUTORIAL" written on your screen every time that you run the program. Also, if you want to add more text on a blank screen, you would have to display " " a bunch of times. That is why I am glad to tell you of the command ClrHome; this clear the home screen (Clear Home). To find it, tap: [PRGM], (Right Arrow), [8]. Look at this code:

ClrHome
Disp "HELLO WORLD

See how easy that was?

Buzz Word:

ClrHome clears the home screen.

Handy Hint

I recommend using the command ClrHome at the beginning of all programs on the home screen to remove "PROGRAM:TUTORIAL" from the screen.

Output(:

Let's say you want to write "HELLO WORLD" on the bottom of the screen and "HOW ARE YOU?" on the top. Output( is used to put text on the screen at given coordinates. Look at this grid:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (1,10) (1,11) (1,12) (1,13) (1,14) (1,15) (1,16)
2 (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (2,10) (2,11) (2,12) (2,13) (2,14) (2,15) (2,16)
3 (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (3,10) (3,11) (3,12) (3,13) (3,14) (3,15) (3,16)
4 (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (4,10) (4,11) (4,12) (4,13) (4,14) (4,15) (4,16)
5 (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (5,10) (5,11) (5,12) (5,13) (5,14) (5,15) (5,16)
6 (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9) (6,10) (6,11) (6,12) (6,13) (6,14) (6,15) (6,16)
7 (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9) (7,10) (7,11) (7,12) (7,13) (7,14) (7,15) (7,16)
8 (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9) (8,10) (8,11) (8,12) (8,13) (8,14) (8,15) (8,16)

When you enter the coordinates of a point, it will write text there. You must remember, instead of an "X,Y" format, you must use a "Y,X" format for Output(. Look at this example:

ClrHome
Output(1,1,"ROW 1
Output(8,1,"ROW 8

See how that worked?

Buzz Word:

Output( puts text on the screen at given coordinates using a "Y,X" format.

Pause

The Pause command does what is apparent: it pauses and wait for [ENTER] to be pressed, then proceeds. It is activated by pressing: [PRGM], [8]. Lets work out an example, shall we?

ClrHome
Disp "HELLO WORLD
Pause
ClrHome
Handy Hint

One trick about Pause is this: you can use it in the same as Disp to display text and then go on to pause. Look at this example:

ClrHome
Pause "HELLO WORLD
ClrHome

Do you see? It is a more efficient method of coding the above.

Variables and "→" vrs. "=":

Now, let's go into making Variables. The is a major function in programming. Variables a the characters A-Z and _theta_. These can be used to store and recall data. A Variable takes a snapshot of whatever data is given to it and stores it in a box, named the name of the character chosen. The symbol "→" stores data and is activated by pressing [STO]. Look at this sample code:

           123                             →                                                                   A
            ^                              ^                                                                   ^
\\This is the data to be stored.    \\This says "Take the given data and store to..."    \\This is the variable which the data is stored to.

Do you see? Now, let's try an example:

ClrHome
123->A
Disp A

(When you display a variable, do not use a quote; that is only for displaying text.)

Buzz Word

A Variable stores a number or an equation to be recalled for later use.

Now, many programmers are often confused by this: What is the difference between "→" and "="? (the symbols "=", ">", "<", "≥", "≤",and "≠" are found by pressing [2ND], [MATH] or in the catalog). Let's look more carefully, shall we?

123->A
A=123

When you store something using '→', you are doing something and performing an action. When you you use '=', you are making a statement. This will return a "1" if the statement is true and a "0" if it is false. Do you see the difference now? :D

Buzz Word

The symbol "→" stores information and the symbol "=" states information.

Strings

Now, variables are useful for storing numbers and equations, but if if you ever try to store text to them, they will not work. To fix this, you can use Strings. Strings are used in the exact same way as variables except they store text instead of numbers. There are 10 strings labeled 1-9 and 0. To access strings, press: [VARS], [7]. To give an example of how to use them, lets work out an example.

ClrHome
"HELLO WORLD"->Str1
Pause Str1
Buzz Word

Strings are exactly the same as variables except they store text.

Creating a Customized Program

Now, here is a major break-through for your programming skills: right now, when you make a program, it only has one ending: the one you programmed. However, we are now going to go into creating an individualized program experience.

Input & Prompt:

The commands Input and Prompt are the most basic way to create a program with multiple outcomes. These ask for information and store it to either a variable or a string.

Prompt:

Prompt stores a number or an equation to a Variable of choice. Look at this example:

ClrHome
Prompt A
Disp "A IS:",A

It also can store information to a string!

ClrHome
Prompt Str1
Disp "STRING 1 IS:

Once you figure out how to use it, this command is a breeze!

Buzz Word:

Prompt asks for user inputed data and stores it to the chosen location.

Programmer's Tricks:

You can also use a comma between Prompt's in the same way as Disp; look at this:

ClrHome
Prompt A,Str1
Disp A,Str1
Input:

Input works like Prompt, performing the same task, but does it in a more user-friendly method. It takes a little more time and effort to learn, but it is worth it in the end!

You can store and input to a variable or to a string. The difference is this: say you want to ask someone there name and store it to string one to be used later on in the program; using prompt, you could enter this code.

ClrHome
Prompt Str1
Disp "HELLO
Pause Str1

However, this returns: "Str1=?" for the user's name. However, if you did not write the program, what does it mean? What do they do? You could use 'Disp' before 'Prompt,' but it still looks messy… So, that is where input comes in.

ClrHome
Input "NAME IS:",Str1
Disp "HELLO
Pause Str1
Programmer's Tricks

Normally, Prompt is only used for math programs, such as a program to find, say, the area of a square (L*W=A).

ClrHome
Prompt L,W
L*W->A
Disp "Answer is
Pause A

And even then, Input could have been used for a clearer program. ;-)

Simple Menu's:
If Statements:

In my opinion, these is the most vital part of programming: the conditionals. It works like a conditional in the English language; examine this code to get a brief idea of how they work.

ClrHome
Prompt A
If A=1
Disp "A is 1

The code is saying, "Ask what A is. If A=1, then say A=1." If A does not equal 1, the program will skip the If statement and end the program, since there is nothing which comes after the if statement.

The If statement can control a game or program to make it so that you win, loose, or do whatever you want your program to do. For instance, we aren't this far into programming yet, but say you were making a game of "pong." You could say, "If the ball touches the bumper, bounce it. Otherwise, tell the player that they die." This is the primary part of most games and programs.

There are also commands which can be added on to the if command.

Then and Else:

Questions & Comments

For more details about a specific command covered or information about commands not covered, I recommend looking through the completed Command Index. If you have questions or comments about this tutorial, please discuss them below. Alternatively, you can contact Joshuasm32 does not match any existing user name directly for personal assistance.


Back to Top
<![if !(lt IE 8)]><!>
<script type="text/javascript">
(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src=document.location.protocol+"//d1agz031tafz8n.cloudfront.net/thedaywefightback.js/widget.min.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})()
</script>
<!<![endif]>

These tutorials are pages to help new programmers to get a start into TI-programming. Questions can be consulted under the "Discuss" tab at the bottom of the page.

BASIC Tutorials:

Assembly (ASM) Tutorials:

Axe Parser Tutorials:

BatLib Tutorials:

Miscellaneous Tutorials:

You are welcome to write your own tutorials as long as they pertain accurate information.

TI-Basic Developer has a slew of assembly hexcodes and the list is growing. Though these are often touted as dangerous if used improperly, there are perfectly acceptable ways of combining and creating your own codes even if you don't know assembly. This page is focused on how to create your own assembly libraries using the hexcodes on this site.

Step 1: Select your routines

First, figure out which commands you want to include. Some of the commands will not work with this method:

  • Sprite
  • Fast Keys
  • Repeat Keys

These will not work only because they use some constant addresses for routines (basically, it expects a routine to be in a specific place in RAM, so you would need to recalculate the addresses which requires some assembly knowledge).

Step 2: Organise.

Arrange the commands you selected in some order. We will be accessing them using a number in Ans starting at zero.

Step 3: Choose a template

These are four basic templates that you can use for your library to start. There are more complicated ones mentioned later for the adventurous.

  • If any of your routines require an input in Ans as a number (and none require Ans to be a string):
1817              ;skips the first chunk of code
ED5BAF84
7AB3C8
1BED53AF84
2AB184E7
22B184
EFEF4AC9

EFD74A3DC0
EB4E234623
ED43AF84
22B184
CD979D
  • If any of the routines require Ans as a string (and none require Ans to be a number), we will need to use Str1 instead:
1810
EFC541
21AA00
227984
D7
EB4E234623C9
EFD74A
EFEF4A
  • If any routines require Ans as a number and any routines require Ans as a string:
1827              ;skips the first chunk of code
ED5BAF84
7AB3C8
1BED53AF84
2AB184E7
22B184
EFEF4AC9
EFC541
21AA00
227984
D7
EB4E234623C9

EFD74A3DC0
EB4E234623
ED43AF84
22B184
CD979D
  • If Ans is not an input for any of your routines:
EFD74AEFEF4A

Step 4: Replace code.

The library needs input in Ans, so naturally there will be a conflict if any of your routines need input in Ans. In this event, if any inputs need to be numbers, we will have to use a two-element list to pass the second argument. This requires you to alter certain parts of code.
Case 1: Ans is not an input for any routines.

  • No replacing is needed! Go to Step 5.

Case 2: Ans is a number for some inputs and is never a string

  • Replace all instances of EFD74AEFEF4A with CD979D (This replaces Ans is a number input)
  • Replace all instances of EFDA4AEFEF4A with CD979D (This replaces Y is an input)
  • Replace all instances of EFE04AEFEF4A with CD979D (This replaces X as an input)

Case 3: Ans is a string for some inputs and is never a number

  • Replace all instances of EFD74AFE04C0EB4E234623 with CD979D
  • Replace all instances of EFD74AD604C0EB4E234623 with CD979D, if bugs occur, use CD979DAF.

Both of these codes do almost precisely the same thing.
Case 4: Ans is a number in some commands, and could be a string for some commands:

  • Replace all instances of EFD74AEFEF4A with CD979D
  • Replace all instances of EFDA4AEFEF4A with CD979D
  • Replace all instances of EFE04AEFEF4A with CD979D
  • Replace all instances of EFD74AFE04C0EB4E234623 with CDAE9D
  • Replace all instances of EFD74AD604C0EB4E234623 with CDAE9D

Step 5: Add your commands.

Now that we have the template for the library setup, we can add in the actual commands. To do this, some byte counting will need to be done.

4704
10**
<<code0>>
10**
<<code1>>
10**
<<code2>>
10**
<<code3>>
10**
<<code4>>
...
05C0
<<last code>>

The ** means you need to count how many bytes are in the routine following. Every two hex digits makes one byte. Every full line in the TI-BASIC editor is 8 bytes since it is 16 chars wide.
So for example, 3E02D310C9 is 5 bytes. Be careful, this value must be in hexadecimal!

Now for my own example. I will use
ScreenOn : 3E03D310C9
ScreenOff : 3E02D310C9
ScreenToggle : DB10CB6F3E0220013CD310C9
QuickKey : 3A3F84EF8C47EFBF4AC9
LowerCase On : FDCB24DEC9
Lowercase Off : FDCB249EC9
Indicator Off : EF7045C9
Set Contrast : EFD74AEFEF4AC6D8D8D3107B324784C9

Since Set Contrast uses Ans as an input and none of the other routines need Ans as a string, I will use the first starting code:

1817              ;skips the first chunk of code
ED5BAF84
7AB3C8
1BED53AF84
2AB184E7
22B184
EFEF4AC9

EFD74A3DC0
EB4E234623
ED43AF84
22B184
CD979D

I will need to modify the code for Set Contrast:
EFD74AEFEF4AC6D8D8D3107B324784C9 turns into:
CD979DC6D8D8D3107B324784C9
And now I need to add this:
4704
1005
3E03D310C9
1005
3E02D310C9
100C        ;0C is hexadecimal for 12
DB10CB6F3E0220013CD310C9
100A        ;0A is hexadecimal for 10
3A3F84EF8C47EFBF4AC9
1005
FDCB24DEC9
1005
FDCB249EC9
1004
EF7045C9
05C0
CD979DC6D8D8D3107B324784C9

So now here is how to use your program:

  • If your program has any commands that use Ans as a string input, the string must be in Str1 instead
  • If your program has any commands that use Ans as a number input (or X or Y), the inputs are now passed as list elements.
  • If Ans is not needed as a number input by any of the routines, you will simply pass a number to your program

So for example, my program takes a list input. The first element is the command number (I have 8 commands, so use 0 to 7) and the second argument is for any additional inputs the routine may need.
So SetContrast would be {7,«contrast»:Asm(prgmLIB
If you omit an argument, the program will read it as 0. So {7} passed to my program will set the contrast to zero.

So now you have your own, personalised assembly library! Compress it using AsmComp(and it is ready for release with your games.

Alternate Templates

If Ans is never a string input for your commands, you can use this code as an alternative. It is bigger, but it has a few perks. Instead of using a one element list, you can simply use the number. For example, {3:Asm(prgmLIB will be read the same as 3:Asm(prgmLIB. Omitted arguments are read as zero, but you can also make your library execute several commands. For example, if 3 and 4 are both separate commands and command 4 has an input, then {3,4,«arg»:Asm(prgmLIB will execute the two commands.

Note: If a command outputs a value in Ans, make sure it is the last command in the sequence. (otherwise it overwrites the input list!)

1818
ED5BAF847AB3C8
1BED53AF842AB184
E722B184EFEF4A37C9
EF524BD7EB
B720050101001806
3DC04E234623
ED43AF8422B184
CDCE9D18FBCD979D3802E1C9

author: dan769
description: "A very compact (610 bytes) clock with accurate hands and a day indicator.\n\nAdding Soon:\n-Moon Phase Calc "
arcade: '0'
graphics: '1'
platform: '0'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '1'
misc: '1'
image: 'archives:digital-anoluge-clock-v1-0/ClockScreenshot.gif'
download: CLOCK.zip
size: '610'
unit: '1'

Moderator

F

author: 42maelstrom
description: "A fully customizable, scrolling menu created for Codebender's custom menu contest. \nFeatures a side scroll bar and supports however many options as you want! To use, store a string as Ans like so:\n:\"Title,option 1,option 2, option 3, option 4\n\nFor however many options you want, each seperated by a comma. \n\nUses variables LQ, Str1, GDB 0,\n\n"
arcade: '0'
graphics: '0'
platform: '0'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '1'
misc: '0'
image: '/archives:cstmmenu/SCREENMENU.png'
download: MENU42(1).8xp
size: '970'
unit: '1'

Zelda
Zedd Physics Library
xPegz
Aura
xLib xLib Revolution
War
Virtual Poker
Tetris
Spider
Snake
Slayer 2
Shift
Senilym
Reversi
Portal X
Pipes
Nibbles Arcade
Nibbles
Nemesiat
Minesweeper
Metroid Pi
Metroid II
Metroid
Lode Runner
Lights Out
Ground Assault
Frogger
Flash Flash Revolution

.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 License.