Disaster

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: ''
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

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


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.

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 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.

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


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


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.

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

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

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.

The ListPages module does not work recursively.

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 [$]...[$] tags.\n\n[[code]]\n[$]\nx = {-b \pm \sqrt{b^2-4ac} \over 2a}\n[= {-b \pm \sqrt{b^2-4ac} \over 2a}\n[$"
attachment: null

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:\n\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

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

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

attachment: null

attachment: null

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

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

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

(account deleted) (Hello.)

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

attachment: null

attachment: null

The ListPages module does not work recursively.

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

[[/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'

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,
#page-title,
#navi-bar,
.page-tags,
#page-info,
.page-watch-options,
.page-options-bottom,
#footer-bar,
.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{
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{
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;
}


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. What you could do to make the maze (or the least how I see it) is to make all of the walls of the... (by wifijoe 24 Apr 2018 12:14, posts: 13) That is true, i hadn’t even noticed that (by Trenly 24 Apr 2018 05:36, posts: 6) You might also try cemetech.net, as cemetech.com is completely different from what you're... (by Michael2_3B 24 Apr 2018 04:54, posts: 6) 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. pages only pages and forum forum only

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!'
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'
size: '1665'
unit: '1'

 since 20 Apr 2018 11:55 since 20 Apr 2018 02:43 since 14 Apr 2018 19:46 since 13 Apr 2018 21:33 since 12 Apr 2018 20:39 since 11 Apr 2018 15:38 since 10 Apr 2018 16:26 since 09 Apr 2018 21:42 since 04 Apr 2018 17:06 since 03 Apr 2018 19:00 since 02 Apr 2018 12:01 since 31 Mar 2018 23:35 since 31 Mar 2018 22:24 since 30 Mar 2018 14:03 since 28 Mar 2018 19:21 since 27 Mar 2018 22:07 since 26 Mar 2018 11:54 since 26 Mar 2018 02:47 since 21 Mar 2018 18:54 since 21 Mar 2018 01:46 since 19 Mar 2018 22:37 since 19 Mar 2018 02:13 since 18 Mar 2018 16:15 since 14 Mar 2018 11:00 since 10 Mar 2018 19:35 since 09 Mar 2018 18:18 since 09 Mar 2018 18:16 since 08 Mar 2018 16:16 since 06 Mar 2018 21:39 since 05 Mar 2018 19:12 since 05 Mar 2018 03:34 since 04 Mar 2018 14:31 since 03 Mar 2018 16:57 since 26 Feb 2018 20:33 since 25 Feb 2018 23:21 since 25 Feb 2018 14:11 since 24 Feb 2018 15:25 since 21 Feb 2018 22:21 since 21 Feb 2018 05:06 since 20 Feb 2018 00:01 since 18 Feb 2018 17:58 since 18 Feb 2018 17:44 since 16 Feb 2018 18:45 since 16 Feb 2018 00:54 since 14 Feb 2018 00:07 since 13 Feb 2018 18:52 since 13 Feb 2018 13:25 since 07 Feb 2018 17:38 since 07 Feb 2018 15:19 since 06 Feb 2018 22:17 since 06 Feb 2018 21:13 since 06 Feb 2018 17:31 since 04 Feb 2018 20:22 since 02 Feb 2018 17:20 since 30 Jan 2018 21:22 since 29 Jan 2018 20:42 since 29 Jan 2018 00:45 since 29 Jan 2018 00:03 since 26 Jan 2018 18:23 since 25 Jan 2018 20:10 since 25 Jan 2018 19:43 since 24 Jan 2018 15:44 since 22 Jan 2018 12:50 since 21 Jan 2018 23:11 since 21 Jan 2018 07:42 since 19 Jan 2018 01:23 since 19 Jan 2018 00:45 since 18 Jan 2018 17:58 since 18 Jan 2018 16:16 since 16 Jan 2018 20:05 since 15 Jan 2018 18:55 since 09 Jan 2018 22:12 since 08 Jan 2018 18:34 since 07 Jan 2018 22:57 since 05 Jan 2018 22:14 since 05 Jan 2018 20:44 since 04 Jan 2018 17:22 since 31 Dec 2017 22:57 since 30 Dec 2017 19:34 since 27 Dec 2017 00:34 since 26 Dec 2017 00:10 since 22 Dec 2017 20:11 since 21 Dec 2017 22:24 since 19 Dec 2017 01:00 since 15 Dec 2017 19:09 since 14 Dec 2017 19:35 since 14 Dec 2017 14:58 since 13 Dec 2017 01:24 since 10 Dec 2017 09:10 since 09 Dec 2017 20:22 since 07 Dec 2017 22:27 since 06 Dec 2017 23:27 since 04 Dec 2017 03:29 since 03 Dec 2017 20:02 since 01 Dec 2017 15:37 since 01 Dec 2017 00:55 since 30 Nov 2017 21:57 since 28 Nov 2017 14:02 since 27 Nov 2017 19:06 since 22 Nov 2017 20:33
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

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.


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
Pause A


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

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:

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.

<![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.

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.

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

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 "
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'
size: '610'
unit: '1'

Moderator

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"
graphics: '0'
platform: '0'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '1'
misc: '0'
size: '970'
unit: '1'

 Dec 27 — Mr Dino was made a site moderator due to his commitment and dedication to the forum

Routine Summary

Determines whether an input is a number or list.

Inputs

Ans - the number or list to examine

Outputs

Ans - 1 if the input is a number, 0 if it is a list (see criteria below)

Calculator Compatibility

TI-83/84/+/SE

Author

Zeda

As long as Ans is always contains more than one element and the second element is not twice that of the first, this will determine if Ans is a list or not:

Ans(2)=2Ans(1


If Ans is a number, this will always return 1, else if it is a list meeting the above criteria it returns 0.
 Dec 12 — burr redesigned the main homepage to complement the respective calculator homepages

TI-Basic Developer (TI|BD) covers how to make TI-Basic programs using the many different TI-Basic commands, while discussing proper programming design and showing several techniques that can be incorporated into programs. After going through all of the information, it is hoped that the reader becomes a competent TI-Basic programmer.

The site is currently split up into three separate sections based on the version of TI-Basic that is used in the different TI graphing calculators — the TI-83, 68k, and TI-Nspire series. It is recommended that you have one of those calculators, so that you can actually use the information contained in that section of the site.

Site Content

We've tried to create a broad base of TI-Basic information. This ensures that most readers will hopefully be able to learn something from this site. Experimentation is encouraged to fully digest all of the information. The site content can be broken up into six general, interdependent parts:

• Preparation — Before starting TI-Basic programming, you should understand the difference between TI-Basic and Assembly, learn about the different TI calculators, and how to use them.
• Commands — The commands are explained in thorough detail, including their description, syntax, and different uses. The commands are also grouped together based on their function and purpose.
• Design — The design teaches how to succeed at programming, including improving program design and optimizing using the different commands. It will help the reader become a more complete programmer.
• Techniques — The techniques are a collection of short routines, broken down and dissected to help the reader understand the underlying logic. They are not designed to be comprehensive, but rather a foundation which the reader can build upon.
• Experimentation — The experimentation tests your comprehension of the commands, design theory, techniques, and the rest of the information on this wiki. There are review exercises, project challenges, and sample programs and games that you can try out to learn from and just have fun with.
• References — The references are a collection of lists on different subjects, including tutorials and tools available elsewhere on the Internet, the tokens, error conditions, file extensions, and key codes used by the calculator, and the common terminology that is used in the TI community.

Each reader can read the information in whatever order they desire. For the average reader, though, the suggested approach is to just start from the beginning and read until the end. The information is presented in a sequential order, with the concepts and code getting increasingly more complex as you get further into it. You might also look at the page Using This Guide, which outlines another suggested reading order.

Site Goals

The main goal of this site is to teach TI-Basic programming. This site is targeted primarily at the beginner programmer (those with little or no programming experience), but it has information for almost everyone. We believe that if you can teach a beginner programmer good programming habits and skills, they will incorporate those habits and skills into the programs they create. The result will be higher quality TI-Basic programs.

Related to the first goal, the second goal of this site is to be the nexus for TI-Basic information. There are many different design concepts and techniques to learn and master, which are all part of the rich heritage of TI-Basic. Unfortunately, when programmers leave the TI community, they often forget to write down their programming innovations, and that information gets lost to the community. We encourage all programmers to contribute their TI-Basic knowledge to the community to prevent this from happening.

The third goal of this site is to present TI-Basic in a more connected and beginner-friendly format. The TI-Basic information is spread out across several TI forums, sites, and among individual tutorials and guides, and this problem is made even worse because of how cumbersome and confusing the information is presented. For a beginner TI-Basic programmer, it is especially hard to read through and follow. The result is a challenging barrier for learning TI-Basic.

The last goal of this site is to create more TI-Basic programming documentation. The one major underdeveloped area in the TI community is quality documentation. We believe that this is because writing tutorials is not really a fun activity, and it does not receive the same recognition as creating a program or game. Nonetheless, documentation is essential to the success of the TI community.

author: 'Jason Pavlik'
description: 'pick which piece of info you have for the photon your studying and enter the value. remember to enter info like nano-meter as E-9. '
graphics: '0'
platform: '0'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '1'
misc: '0'
image: '/archives:photon-lamda-nu-energy-mass-calculator/SCREEN01.BMP'
size: '4'
unit: '2'

The development of a program is essential to its ability to succeed and be good. The development is a cycle that can be repeated as many times as desired, each time making a new version. This cycle will allow you to make your program usable, efficient and clean. Here is a list of the parts of the development cycle:

author: SuperchuFrostbite
description: "The Classic arcade game….. now for Ti! \nnot sure how to upload pictures, if it runs on 83, how to fix all the bugs… etc. please comment and/xor rate!"
graphics: '0'
platform: '0'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '0'
misc: '1'
image: '/archives:asteroids/PIC3.JPG'
size: '3809'
unit: '1'

author: 'Superchu Frostbite'
description: 'A simple reflex game where a key code is generated on the screen. Push the correct key before you run out of time. A great way to learn the key codes.'
graphics: '0'
platform: '0'
puzzle: '0'
rpg: '0'
strategy: '0'
sports: '0'
casino: '0'
board: '0'
utility: '1'
misc: '1'
image: /home/no_image_2.png
size: '268'
unit: '1'

 Jun 05 — burr redesigned the homepage for the TI-83 section of the site

_Abe_ is working on a futuristic RPG with several abilities and a unique style of battle called Endland.

The game features a dynamic inventory system, a graphical overworld and battle engine, and supports standard RPG stuff.

builderboy is working on an RPG style platform game set in space called Serenity.

The storyline involves you captaining a cargo ship, traveling through space carrying unknown Government cargo, when your ship is attacked by space pirates! Now you will need to explore the bowels of their ship, fight off enemies, and gain special items, so you can finally escape.

This is a virtual pet on your calculator. It will challenge your efforts to keep it alive, healthy and happy!

On each of eight levels, you must get to and eat all the donuts, then leave through an exit.

You slide until you hit an object on the board. The game includes 16 built-in levels and a custom level editor for endless hours of fun.

Nibbles (Snake) by Edward H

This version of snake is extremely fast and efficient, and is unique because it doesn't use any list variables to control the movement of the snake.

Routine Summary

A custom menu with up to 9 switchable pages.

Inputs

Str1-Str9 - one string per page
A - Number of pages the menu includes

Outputs

B - the page they're on
X - the # choice they made

Variables Used

Ans, B, C, D, X, Str#

Calculator Compatibility

TI-83/84/+/SE

Author

Mr Dino

:1→B
:While 1
:If B=1:Str1
:If B=2:Str2
:If B=3:Str3
:If B=4:Str4
:If B=5:Str5
:If B=6:Str6
:If B=7:Str7
:If B=8:Str8
:If B=9:Str9
:ClrHome
:Output(1,1,Ans
:length(Ans)/16
:If fPart(Ans
:1+iPart(Ans
:Ans→D
:2→X
:Repeat C=24 or C=26
:Output(X,2,">
:Repeat Ans
:getKey→C
:End
:If Ans=21
:Then
:X-1→X
:Return
:End
:Output(X,2," " // space
:X-(Ans=25)+(Ans=34→X
:2(X>D)+D(X≤1)+X(X≤D and X>1→X
:max(1,min(A,B+(C=26)-(C=24→B
:End
:End


To use this code, store an integer to A 1-0 representing the number of pages that will be in your menu. It will use all strings Str1-StrA. Next, store the menu pages into the strings. They will be shown with 'Output(1,1,StrA)', so make sure that the menu looks right before using it. Make sure there are 16 characters in each line (starting with the title). Use spaces to make the words fit right, and you should probably test it to make sure it works. There should probably also be something in the title that signifies what page you're on. Finally, run the code as a subprogram.

Here's how it works:

B represents what page number it's on, so we start off by storing 1 to B to put us on page 1. Then we have a While 1 loop to manage page changes. Based on the value of B, it will put one of the strings into Ans. It will output Ans onto the home screen, then determine how many rows are in the menu and store that to D. And the user will always start out on option 1 - row 2 (because of the title screen).

Now we start the choice loop: We display the cursor, then wait for a keypress. If the use presses [2nd], we subtract 1 from X (for the offset from the title) and Return back to the parent program, with B as the page number and X as the choice number. But if not, it continues: The cursor is erased, X and B are changed according to the keypress, and if the use changed the page, it exits the choice loop and enters the page loop where it displays the new page and sets up for another choice loop.

Error Conditions

It won't work properly if A isn't an integer within the bounds 1-9 or if the strings don't represent the menu pages correctly.

Related Routines

There are several routines that are similar in functionality or are used in a similar context. Make a bulleted list of them, with links to the other routines' pages. It will often be the case that several routines all link to each other.

 Welcome to TI-Basic Developer (TI|BD), the premier source for TI-Basic information! 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. What you could do to make the maze (or the least how I see it) is to make all of the walls of the... (by wifijoe 24 Apr 2018 12:14, posts: 13) That is true, i hadn’t even noticed that (by Trenly 24 Apr 2018 05:36, posts: 6) You might also try cemetech.net, as cemetech.com is completely different from what you're... (by Michael2_3B 24 Apr 2018 04:54, posts: 6) 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. pages only pages and forum forum only
 The ListPages module does not work recursively. The ListPages module does not work recursively. You must make a Connect 4 game with an intelligent AI that plays against a human, with the first player to get four in a row winning the game. Your game should follow the standard rules, including using 6 rows by 7 columns for board dimensions. To determine the best AI, AI's will be played against each other via two calculators, and the champion AI will be declared as the winner program.
 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. Commands The ListPages module does not work recursively. Development The ListPages module does not work recursively.

.