7. while and do-while Loops

Problem: Given a 30-feet-long yarn, how many times should it be cut in half in order to become shorter than 1 feet?

You could, of course, try to figure out the answer by using an actual piece of yarn, or even by using a calculator. Let us write a computer program to find out the result, instead.

This problem can be interpreted as necessitating the repetition of a thread halving act. Until now, we have been using a for loop to make repetitions, but this time we are about to learn to use another kind of loop called a do while loop.

A do while loop does the repeating (that is, it iterates) while a given condition is true. The given condition is checked at the end of each iteration. However, we are getting too much ahead of ourselves. First let us introduce a variable named length:

double length=30;

A do while loop will repeat the halving of the variable length while the value of the variable is greater than 1:

do  {
    length = length / 2;
    }
while(length > 1);

You may notice that, as opposed to for loops, do while loops end with a semicolon. A do while loop will repeat the statements inside the braces while the given condition is true. More precisely, the loop condition is examined (also: checked or verified) only at the end of each iteration.

The statement length=length/2 can be shortened to length/=2. Altogether:

#include <iostream>
using namespace std;


int main()
{
    double length=30;

    do  {
        length /= 2;
        }
    while(length > 1);

    cout << "The final length is: " << length << endl;
}

The result is:

The final length is: 0.9375

In case we were interested in the length after each halving, we would write this program:

#include <iostream>
using namespace std;

int main()
{
    double length=30;

    do  {
        length /= 2;
        cout << "After halving the length is equal to: " << length 
             << endl;
        }
    while(length > 1);

    cout << "The final length is: " << length << endl;
}

The result is:

After halving the length is equal to: 15
After halving the length is equal to: 7.5
After halving the length is equal to: 3.75
After halving the length is equal to: 1.875
After halving the length is equal to: 0.9375
The final length is: 0.9375