Sunday, 3 March 2013

Looping Statements

The for loop
The statements in the for loop repeat continuously for aspecific number of times.  The while and do-while loops repeat until a certain condition is met.  The for loop repeats until a specific count is met.  Use a for loop when the number of repetition is know, or can be supplied by the user.  The coding format is:
for(startExpression; testExpression; countExpression)
{
    block of code;

}
The startExpression is evaluated before the loop begins.  It is acceptable to declare and assign in the startExpression(such as int x = 1;).  This startExpression is evaluated only once at the beginning of the loop.
The testExpression will evaluate to TRUE (nonzero) orFALSE (zero).  While TRUE, the body of the loop repeats.  When the testExpression becomes FALSE, the looping stops and the program continues with the statement immediately following the for loop body in the program code.
The countExpression executes after each trip through the loop.  The count may increase/decrease by an increment of 1 or of some other value. 
Braces are not required if the body of the for loop consists of only ONE statement.  Please indent the body of the loop for readability.
CAREFUL:  When a for loop terminates, the value stored in the computer's memory under the looping variable will be "beyond" the testExpression in the loop.  It must be sufficiently large (or small) to cause a false condition.  Consider:
for (x = 0; x <= 13; x++)
     cout<<"Melody";
When this loop is finished, the value 14 is stored in x.

Nested if and if-else statements


The if-else statement allows a choice to be made between two possible alternatives. Sometimes a choice must be made between more than two possibilities. For example the sign function in mathematics returns -1 if the argument is less than zero, returns +1 if the argument is greater than zero and returns zero if the argument is zero. The following C++ statement implements this function:
if (x < 0)
   sign = -1;
else
   if (x == 0)
      sign = 0;
   else
      sign = 1;
This is an if-else statement in which the statement following the else is itself an if-else statement. If x is less than zero then sign is set to -1, however if it is not less than zero the statement following the else is executed. In that case if x is equal to zero then sign is set to zero and otherwise it is set to 1.
Novice programmers often use a sequence of if statements rather than use a nested if-else statement. That is they write the above in the logically equivalent form:
if (x < 0)
   sign = -1;
if (x == 0)
   sign = 0;
if (x > 0)
   sign = 1;
This version is not recommended since it does not make it clear that only one of the assignment statements will be executed for a given value of x. Also it is inefficient since all three conditions are always tested.
If nesting is carried out to too deep a level and indenting is not consistent then deeply nested if or if-else statements can be confusing to read and interpret. It is important to note that an else always belongs to the closest if without an else.
When writing nested if-else statements to choose between several alternatives use some consistent layout such as the following:
if ( condition1 )
statement1 ;
else if ( condition2 )
statement2 ;
. . .
else if ( condition-n )
statement-n ;
else
statement-e ;
Assume that a real variable x is known to be greater than or equal to zero and less than one. The following multiple choice decision increments count1 if 0 $\leq$ x $<$0.25, increments count2 if 0.25 $\leq$ x $<$ 0.5, increments count3 if 0.5 $\leq$ x $<$ 0.75 and increments count4 if 0.75 $\leq$ x $<$ 1.
if (x < 0.25)
  count1++;
else if (x < 0.5)
  count2++;
else if (x < 0.75)
  count3++;
else
  count4++;
Note how the ordering of the tests here has allowed the simplification of the conditions. For example when checking that x lies between 0.25 and 0.50 the test x < 0.50 is only carried out if the test x < 0.25 has already failed hence x is greater than 0.25. This shows that if x is less than 0.50 then x must be between 0.25 and 0.5.
Compare the above with the following clumsy version using more complex conditions:
if (x < 0.25)
  count1++;
else if (x >= 0.25 && x < 0.5)
  count2++;
else if (x >= 0.5 && x < 0.75)
  count3++;
else
  count4++;

Wednesday, 2 January 2013

5 Ways You can Learn Programming Faster

1. Look at the Example Code
Reading is usually about the words on the page, but learning to program is about code. When you're first learning to program, you should make sure to look at, and try to understand, every example. When I first learned to program, I would sometimes read the code examples before the text, and try to figure out what they did. It doesn't always work, but it did force me to look at the example very carefully, and it often helped make the writeups clearer.

If you want to see what sample code looks like, you can read this site's introductory programming tutorial. This tutorial spends a great deal of time talking about the sample code to help you work through exactly what the code does.

2. Don't Just Read Example Code--Run It
But when you're reading a programming tutorial (or book), it's easy to look at the sample code and say "I get it, I get it, that makes sense". Of course, you might get it, but you might not get it, and you just don't know it. There's only one way to find out--do something with that code.

If you haven't already, get a compiler like Code::Blocks set up.

Then type the sample code into a compiler--if you type it, instead of copying and pasting it, you will really force yourself to go through everything that is there. Typing the code will force you to pay attention to the details of the syntax of the language--things like those funny semicolons that seem to go after every line.

Then compile it and run it. Make sure it does what you think it does.

Then change it. Software is the most easily changed machinery on the planet. You can experiment easily, try new things, see what happens; the changes will happen almost immediately, and there is no risk of death or mayhem. The easiest way to learn new language features is to take some code that works one way, and change it.

3. Write your Own Code as Soon as Possible
Once you understand something about the language--or even if you're still getting your head around it--start writing sample programs that use it. Sometimes it's hard to find good ideas for what programs to write. That's OK, you don't have to come up with every idea at the beginning.

You can find some programming challenges on this site.

You can also re implement the examples from the book or tutorial you are reading. Try to do so without looking back at the sample code; it won't be as easy as it seems. This technique can work especially well if you tweak the sample code.

If you can't think of a small program to write, but you have in mind a larger program you want to implement, like a game, you could start building small pieces that you can later use for a game. Whether you use them later or not, you will get the same useful experience.

4. Learn to Use a Debugger
I already talked about the importance of debugging in The 5 Most Common Problems New Programmers Face--And How You Can Solve Them. But it bears repeating; the sooner you learn good debugging techniques, easier it will be to learn to program.

The first step in doing so is to learn how to use a tool called a debugger, which allows you to step through your code.

A debugger will allow you to step line by line through a piece of code. It will let you see the values of variables, and whether the code inside an if statement is executed.

A debugger can help you quickly answer questions about what your code is doing.
int main()
{
        int x;
        int y;
        if( x > 4 )  // <-- what is the value of x here?
        {
                y = 5;   // <-- did this line of code execute?
        }
}


A final word about debuggers: the first time you learn about a debugger, it will take you longer to fix the problems with your code. After the tenth or so bug, it will really start to pay off. And believe me, you will have way more than ten bugs in your programming career.

I often saw students unwilling to use a debugger. These students really made life hard on themselves, taking ages to find very simple bugs. The sooner you learn to use a debugger, the sooner it will pay off.

5. Seek out More Sources
If you don't understand something, there's a good possibility the way it was explained just didn't click.

First, look for alternative explanations. The internet is filled with information about programming, and some explanations work better for different people; you might need pictures, someone else might not. There are also lots of good books with detailed explanations.

But if that doesn't work, the easiest way to figure out where your misunderstanding lies is to ask someone else. But try to go beyond saying, "I don't understand. Please explain." You're likely to get a link back to the same text you didn't understand. Instead, rephrase your understanding of the text in your words. The more your question reveals about what you are thinking, the easier it will be for a knowledgeable expert to answer it. Programmers sometimes have a reputation for being grumpy about answering questions, but I think the reason is that they want to make progress in a conversation, and that requires both sides to put in effort. If you ask a smart, detailed question that shows you are thinking, you will generally get good results.