This is an archived, read-only copy of the United-TI subforum , including posts and topic from May 2003 to April 2012. If you would like to discuss any of the topics in this forum, you can visit Cemetech's TI-BASIC subforum. Some of these topics may also be directly-linked to active Cemetech topics. If you are a Cemetech member with a linked United-TI account, you can link United-TI topics here with your current Cemetech topics.

The way it works is 1 is Stored to the variable A. The loop starts and The Character * is displayed on the first row, and the Ath column. Then, it takes a and if you pressed right and you have enough room, the * goes right. IF you press Left and have enough room, it goes left. it doesnt store 1 into A it stores A+1 or A-1 depending on which you pressed

Actually, the loop condition is correct. If it was a While loop, you would be right, but a Repeat loop works with Repeat K=105. If you use Repeat K?105, then it will run through the loop once and end, not allowing movement, but only updating the screen with the *.

well i almost never use repeat loops i wasnt sure how to work them that was mainly just a guess

Bhaliar wrote:

That and the A, if your relating it to a graph is actually the y-axis. Remember that output isn't (X,Y) it's (Y,X)

well i almost never use repeat loops i wasnt sure how to work them that was mainly just a guess

I tend to think of Repeat loops as "Repeat until expression is true". Another interesting thing on Repeat loops: Repeat loops are the only loop (of the three) in TiBasic that are post-test. For example, run this code:
:Repeat 1
:Disp "Loop Ran
:End
It will print "Loop Ran" to the screen, even though the repeat loop is always true. This is because Repeat is post-test. :)

well i almost never use repeat loops i wasnt sure how to work them that was mainly just a guess

I tend to think of Repeat loops as "Repeat until expression is true". Another interesting thing on Repeat loops: Repeat loops are the only loop (of the three) in TiBasic that are post-test. For example, run this code:
:Repeat 1
:Disp "Loop Ran
:End
It will print "Loop Ran" to the screen, even though the repeat loop is always true. This is because Repeat is post-test. :)

Ok, so I'm bored and wanna help (and I'm procrastinating my AP Physics homework...probably not a good thing. Oh well )
I noticed nobody fully went through and explained ztrumpet's code for movement, at least at once, so that is what I shall try :D

Ok. I'll work from top to bottom. (If something is incorrect, please tell me and I'll fix it.)
8→A: This is pretty easy. You are storing a value of 8 to the variable A.
ClrHome: Again, a pretty easy one. This just erases all the data on the homescreen. So say you have a bunch of equations and answers there from math and then you run that all of it will disappear.

Repeat K=105: Well like ztrumpet said earlier Repeat loops are basically loops ran until the condition is met (post-test apparently). Post-test, from what I understand, basically means that it will check to see if the statement is true at the end of the loop, instead of first.
As for the next part of that, the K=105, I think it was basically covered. But as you saw later in the code getkey is getting stored to the variable K. This means that when [Enter] is pressed (the key code for [Enter] is 105 (without using other things, but that's more advanced stuff I don't even understand currently)) the loop will finish and finish the program (since nothing is after the loop).
Output(1,A,"_: So Output( was also kind of covered. Output( has three basic components to it: the row number, column number, and the thing to be displayed (in that order). For example:

The Output( here is basically placing the word "HELLO" the fourth row down and starting the "H" at the seventh column. If you didn't know the homescreen of the calculator is on a axis from 1-16 horizontally and 1-8 vertically (the graph screen is something like 0-94 horizontally and 0-62 vertically, I think).

Make sense?
Ok, back to the Output(1,A,"_ in the program. I'm not entirely sure what the point of this is to be honest haha (other than seeing where you are once the line is filled). At first I thought it was to cover up the trail, so unless I typed something in wrong that isn't what it does (though if you switch the Output( commands so the "*" is first instead of the space you will get the effect I just described where it erases the trail).
Repeat Ans: This basically does what ztrumpet said. It stays in this loop until you press any key. The reason for this, though, is that a key press is a form of Ans. An example to show this would be:

Code:

PROGRAM:TEST
Repeat 0 //Starts an endless loop.
Repeat Ans //Starts another loop that waits till something is stored to "Ans."
getKey //Gets the key code of the key that was pressed.
End //Ends the "Repeat Ans" loop.
Disp Ans //Displays the value stored to "Ans." In this case it is the key code value.
End //Ends the "Repeat 0" loop.

getKey→K: This is what triggers the loop it is nested in. When you press a key the getKey command will capture this code (hence it being called getKey haha) and store it into Ans AND the variable K. This is because it is the answer from getKey but getKey is storing it's information to the variable K. You technically don't need the ...→K part of this, but you will run slower if you don't.
End: This basically just lets the program know that is the end of the loop. End commands are needed at the end of each type of loop (whether it is While, For(, or Repeat). You need it at the end of other things but I'm not covering that now. Sorry.
Output(1,A,"*: This is basically like the other Output( command, just instead of displaying a space it displays "*." Quick recap: "1" is the row number, "A" is the column number (this changes with the next line), and "*" is the thing being displayed.
A+(Ans=26 and A<16)-(Ans=24 and A>1→A: Well this one is going to be a doozy haha. I'm going to try to split this up.
-(Ans=26 and A<16) and (Ans=24 and A>1: So this is definitely better explained here (Boolean Logic) and here (Piecewise Expressions). But I'll try to explain this some. Basically when you have a function that uses =, ≤, and anything else in the [2nd][MATH] menu (in both TEST and LOGIC list) you will return with either a 1 (meaning the statement is true) or 0 (meaning the statement is false). A quick program to show this is:

Code:

PROGRAM:TEST
Repeat 0 //Enters endless loop.
Prompt A //Prompts for the value of A.
A≤50 //If A is less than or equal to A then it returns "1" as an answer. If A is greater than 50 it returns a "0."
Disp Ans //Displays the answer. Will be either "1" or "0."
End //Ends "Repeat 0" loop.

Essentially this means that the (Ans=26 and A<16) and (Ans=24 and A>1 can be replaced with "1's" and "0's" depending on which is true when. That covers that part.
-The next part I'm going to explain is the individual parts (not the "1's" and "0's" aspect though). First, the Ans=24 and Ans=26 pieces. Basically Ans right here is the value of getKey or K because that was the last thing to be stored to it. Easy enough, right? The A>1 and A<16 are easy to understand too, I hope. A is the column number, as I have said, so this is making sure it remains above 1 but lower than 16. otherwise you will get a ERR:DOMAIN error (I'm pretty sure that is the correct error). The only part left of those commands is the and part. This is pretty self-explanitory. Basically you have to have both the conditions met (to obtain a 1 for an output) otherwise the whole condition will be a 0 output.
-Finally, to put that all together. Depending which condition is made true ((Ans=26 and A<16) or (Ans=24 and A>1) you are adding or subtracting 1 (or 0 if neither are met).
I am hoping I explained that line of code well enough.
End: Finally, the last line of code haha. This one is simply ending the Repeat K=105 loop.

I believe I covered all of the lines of code, also I hope I explained what they do and how they work thouroughly and correctly. Please let me know if I have made a mistake somewhere, I will fix it.

As a final little thing, I will explain what each line of code does in the actual program just briefly. As a final recap.

Code:

8→A //Stores a value of 8 to the variable "A."
ClrHome //This clears the homescreen completly.
Repeat K=105 //This loop is repeated until the [ENTER] button is pressed.
Output(1,A,"_ //Displays a space in row one, into column "A."
Repeat Ans //Repeats this loop until any button is pressed.
getKey→K //Stores the key code value to the variable "K."
End //Ends the "Repeat Ans" loop.
Output(1,A,"* //Displays a "*" in row one, into column "A" (replacing the space).
A+(Ans=26 and A<16)-(Ans=24 and A>1→A //Adds or subtracts either "1" or "0" to "A" depending which condition is true, if any.
End //Ends the "Repeat K=105" loop

I realize I have probably gone overboard with this explanation but hey, help is help right? Haha. Anywho, I hope this helps anyone who reads (especially if you're pretty new to programming).

Last edited by Guest on 01 Jul 2010 09:24:32 am; edited 1 time in total

Ok, back to the Output(1,A,"_ in the program. I'm not entirely sure what the point of this is to be honest haha (other than seeing where you are once the line is filled). At first I thought it was to cover up the trail, so unless I typed something in wrong that isn't what it does (though if you switch the Output( commands so the "*" is first instead of the space you will get the effect I just described where it erases the trail).

Oops! The order should be Output the * first and then the space. I'm sorry about that.

You did a really nice job explaining that! Great job!

Last edited by Guest on 01 Jul 2010 09:08:23 am; edited 1 time in total

Ok, back to the Output(1,A,"_ in the program. I'm not entirely sure what the point of this is to be honest haha (other than seeing where you are once the line is filled). At first I thought it was to cover up the trail, so unless I typed something in wrong that isn't what it does (though if you switch the Output( commands so the "*" is first instead of the space you will get the effect I just described where it erases the trail).

Oops! The order should be Output the * first and then the space. I'm sorry about that.

You did a really nice job explaining that! Great job!

So it really should be an erasing space? Like I gave the example. And thanks. Took me awhile haha.

Last edited by Guest on 01 Jul 2010 09:14:21 am; edited 1 time in total

Haha I'll explain it. But do you want the same amount of detail as last time or what? I'll leave that up to you haha.

But just as a quick observation without testing it at all yet I'm pretty sure it achieves the same effect except it will wrap around the screen instead of being limited to 1-16 (when you go past 16 you start back at 1).

Edit: I was right about what it does from my initial thought (for those of you who see this and didn't test it haha). I'll get an explaination up as soon as ztrumpet tells me if he wants detailed, medium, or basic haha.

Last edited by Guest on 01 Jul 2010 09:28:30 am; edited 1 time in total

Ok, well like last time i will go line by line, but probably not into nearly as much detail. Lets start:
8→A: Pretty simple. You're storing a value of 8 to the variable A.
ClrHome: This clears the homescreen of everything that is currently on it. For more detail look at my last explanation.
Repeat Ans=105: This is the beginning of the a Repeat loop that is waiting for you to hit [ENTER] (since it's key code is 105).
A+(Ans=26)-(Ans=24: Little trickier. A currently has a value of 8 (when the program is run) so when you hit the left or right arrow key (which will be stored in Ans because getKey is the last line of the loop) you will either add 1, -1, or 0 to A. This answer will now be stored to Ans which sets up the next line.
Ans-16((Ans=17)-not(Ans→A: Even more tricky. This is the line that lets the * wrap around. Like I had said the new value of A has been stored to Ans in the last line. You are essentially adding either 16, -16, or 0 and then storing it to A. How this works is that it takes the value in Ans and if this value is equal to either 17 or 0 you are multiplying 16 by 1 or -1 (thanks to the Boolean Logic I explained earlier with conditions). The reason this works with zero though is because of the not( command. This essentially reverses the Boolean Logic and returns the opossite (true becomes false and false becomes true). Now, to be honest this doesn't make the most ammount of sense to me but I do know why it is used here. Using the not( command in this way lets you replace the statement Ans=0 (because they return the same answer). It's used as an optimization right here.
Output(1,Ans,"*: This outputs a * into row one, Ans number of columns out. You can use Ans here because of the last line. You are storing the value of A to Ans because it is a math operation basically. Hope that makes sense.
Repeat Ans: This starts a loop that waits for you to push a button. It does this because the value from getKey gets stored to Ans.
End: Ends the Repeat Ans loop. As specified earlier (in the previous explanation) End's specify the end of code inside loops (or a few other things that require them).
Output(1,A,"_: This displays a space into row one and in column A. The reason for this Output( is to erase the * that would normally trail behind.
End: This ends the Repeat Ans=105 loop. This completes the code so if you hit [ENTER] it will end the program (since nothing is beyond the End).

So, quick recap:

Code:

8→A //Stores a value of 8 to the variable "A."
ClrHome //Clears the homescreen of anything that is on it.
Repeat Ans=105 //Begins a loop that waits for [ENTER] to be pressed to end the program.
A+(Ans=26)-(Ans=24 //Adds 1 or -1 to A depending if [◄] or [►] is pressed. "A" gets stored to "Ans."
Ans-16((Ans=17)-not(Ans→A //This adds or subtracts 16 from "Ans" if "Ans" is equal to 17 or 0. Adds nothing if it doesn't equal either one. Stores the answer to "A."
Output(1,Ans,"* //Displays a "*" in row one and "Ans" columns out.
Repeat Ans //Starts a loop that waits for you to press a button.
getKey //Stores the value of the key pressed to "Ans."
End //Ends the "Repeat Ans" loop.
Output(1,A,"_ //Displays a space in row one and in column "A." This erases the "*" left behind.
End //Ends the "Repeat Ans=105" loop.

I hope this has helped. Again, if you see any mistakes please let me know and I'll fix it.

Last edited by Guest on 01 Jul 2010 09:27:40 am; edited 1 time in total

Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.