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