You hand in this assignment by showing it to the lecturer when it is completed. For loops and while loops can be translated into each other and this will be done in this exercise in order to train the skills in using them. Nevertheless, there is a philosophical idea behind these two types of loops:
A for loop has the intention to model that one executes a specific task a certain number of times which is known prior to starting the work. The for loop has a counting variable which is used to count the number of times a loop is executed. Here is an example:
var x;
var y = 0;
for(x = 0; x < 1000; x = x + 1)
{
y = y + x * x;
}
This for loop computes the sum 0²+1²+2²+3²+…+998²+999² of the first
1000 square numbers and stores the result in a variable y
.
The loop variable is x
. It is initialized with 0 and after
each execution of the loop body y = y + x * x
, the
x
variable is updated by adding one to it.
A while loop has the intention to model that one runs a loop as long as a certain condition is true where one does not know when this condition becomes false. Such a condition could for example come from user input:
while(window.confirm("Do you want to play?"))
{
tictactoe();
}
The tictactoe()
function is not shown here, but a later
assignment deals with how to implement this game on a computer.
In the case that the user has to play the game once first and is then
asked whether he wants to continue, one can use a do-while loop (also
just called do loop):
do
{
tictactoe();
} while(window.confirm("Do you like to continue to play?"));
For loops are more flexible than it looks like. For example, one can start at
any value and go to any value and even do weird updates like in the following:
for(x = 64; x < 1000; x = x + x) { … }
. In this case
the variable has at the first time the value 64, in the second run through the
loop the value 128, in the third 256, in the fourth 512. Then, after that loop,
the value is 1024 and no longer smaller than 1000, so the loop is just ran four
times. This flexibility allows even to simulate while loops by for loops as
follows:
while(cond)
{
commands;
}
var u;
for(u = cond; u ; u = cond)
{
commands;
}
where u
is a new variable and the condition is always copied into
u
. As long as u
is true, the for loop is executed. Of
course, assigning the value of the cond
condition to
u
is a bit non-standard and a while loop would be a much better
style in this case as it is much easier to understand here. The translations in
this assignment will therefore give more natural for loops, provided they are
done properly.
The opposite direction is much easier to do. This for loop:
var x;
var y = 0;
for(x = 0; x < 1000; x = x + 1)
{
y = y + x * x;
}
can be translated into the following while loop:
var x = 0;
var y = 0;
while(x < 1000)
{
y = y + x * x;
x = x + 1;
}
Note that the x = 0
initialization has to be before the
while loop, here it is moved into the variable declaration. Furthermore, the
x = x + 1;
update command has to become the last statement of the
body of the loop, that is, it has to be appended to the stuff between the
braces {
and }
. The condition between the two
semicolons of the header starting with for
at the for loop becomes
the condition of the while loop.
Please refer to this page for information on how to work on your assignment.
In the following text, there are functions fa, wa, fb, wb, fc, wc,
fd, wd
and so on. The f-version always is a for loop and the
w-version a while loop. In each case, one of the functions always returns
0. Please adjust this function such that it does the same as its
counterpart. The x
input is always a natural number (the
{0,1,2,3,…} set).