Lab Exercise 7: Loops

# Objective

The purpose of this lab is to illustrate the use of the various looping mechanisms available to us in C. This exercise works with the for loop, while loop and do…while loop. When you complete this lab, you should be able to create an iterative code that tests its entry and/or exit conditions at the appropriate point in the algorithm.

## Software Tools

Installation
Instructions
Windows Linux Mac OSX
MPLAB® X
Integrated Development Environment
MPLAB® XC16
C Compiler

## Exercise Files

Installation
Instructions
Windows Linux Mac OSX
Project and Source Files

# Procedure

1

### Open the Project

Start MPLAB® X IDE, then click on the Open Project icon on the main toolbar

Navigate to the folder where you saved the exercise files for this class.

Click on the Lab07.X folder.

Select Open Project .

2

### Open C Source File

Open the Lab07.c source file from the project tree by double clicking on its icon.

This brings up Lab07.c in a window to edit.

3

### Edit Source File

In this lab, there are examples of the three loops, with an extra example of the do…while loop to illustrate the situation where only one pass occurs. To understand the program flow, see the flowchart below.

STEP 1:
Create a for loop to iterate through the block of code below. The loop should do the following:

• Initialize counter1 to 1
• Loop as long as counter1 is less than 5
• Increment counter1 on each pass of the loop
• (HINT: for (init, test, action)) { … }

STEP 2:
Create a while loop to iterate through the block of code below. The loop should run until charVariable1 is 0.
(HINT: while(condition)) { … }

STEP 3:
Create a do…while loop to iterate through the block of code below. The loop should run until counter1 is greater than 100.
(HINT: do { … } while(condition));

4

### Debug Project

Once you finish writing the code:

Click on the Debug Project button. This builds and sends the program to the simulator. Click on the Continue button. This begins the simulation.

Wait for the UART 1 Output window to finish printing.

Click on the Halt button. This stops execution so that you may examine the variables and their values.

# Results

After building, executing, and stopping your code, the UART1 Output window should resemble the screenshot below, where the relevant variables are printed out in each iteration of the respective loop. Note that in the very last do…while loop (you didn't write code for this one), it was set up such that the condition was not met when the loop started, but since the condition check doesn't occur until the end of a loop iteration, the loop did execute one time. This is why the last line in the output window says “DO1: counter2 = 316”.

5

### End Debug Session

End the Simulation Session by clicking the Finish Debugger Session button.

Clear out the UART 1 Output window (Ctrl + L).

Close the Project.

# Analysis

Line numbers correspond to those in the provided solution file.

Lines 55-59
STEP 1:
There are three parts to the creation of a for loop:

``````for( counter1 = 1 ; counter1 < 5 ; counter1++)
{
intVariable1 *= counter1;
printf("FOR: intVariable1 = %d, counter1 = %d\n", intVariable1, counter1);
}``````

The first part is to initialize the loop count variable. This is done as the first for loop parameter statement. Next, you need to specify the condition under which the loop continues. This is the second parameter. Remember, the loop continues as long as this statement is true, and it is tested at the top of each loop iteration. Finally, you need to specify some action to take for each iteration of the loop. This is the third parameter where you increment the variable counter1. So, the code between the curly braces repeats until counter1 >= 5. During each iteration of the loop, the variable counter1 is incremented.

Lines 70-75
STEP 2:
Step 2 creates a while loop. This is a loop where the condition is tested at the top of the loop, so if the condition is not met, the loop never executes. A while loop is similar to a for loop, and in fact, it is a special case of a for loop (equivalent to for ( ; condition; ) {…}). The only thing you specify in a while loop is the exit condition. Any loop counting is conducted manually within the loop itself.

``````while( charVariable1 != 0)
{
charVariable1--;
charVariable2 += 5;
printf("WHILE: charVariable1 = %d, charVariable2 = %d\n", charVariable1,                              charVariable2);
}``````

Like the for loop, the while loop continues to execute as long as the condition is true. Since you want to execute this code until charVariable1 is 0, simply specify a condition of charVariable1 not equal to 0.

Lines 89-94
STEP 3:
Step 3 creates a do…while loop. This is similar in concept to the while loop, in that the only thing you specify is the condition. However, the do…while loop checks its condition at the end of a loop iteration. Therefore, it is possible to execute the loop once, even if the condition is false.

``````do
{
counter1 += 5;
counter2 = counter1 * 3;
printf("DO: counter1 = %d, counter2 = %d\n", counter1, counter2);
} while(counter1 <= 100);``````

The do…while loop starts with the do keyword. Since you are executing multiple statements in the loop, those must be enclosed in curly braces. Finally, the do…while loop ends with the keyword while followed by the loop condition. In this case, the code continues looping until counter1 is greater than 100. Depending on how you increment counter1, it is possible for it to be greater than 100 on its final iteration.

# Conclusions

C provides tremendous flexibility when it comes to loops. The for loop makes it possible to perform loop overhead tasks outside of the main body of the code block, by allowing variable initialization and modification within its parameter list. The while loop and do…while loop are just as flexible, but require more code in the body of the loop to perform the same actions. The while loop (and the for loop) checks its condition at the top of the loop, so if the condition isn't true at the beginning, it never executes. In contrast, the do…while loop checks its condition at the end of the loop, so you always have at least one loop iteration, even if the loop condition is not true from the start.