• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Some problem

 
anindam bhattacharaya
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
G'day

I have a problem getting to understand this code.

I am failing to understand why is this printing
"hello" only twice.

in the 1st iteration, i=0,j=0 and i+j not > than 10. print hello
in the 2nd iteration, i=0,j=1 and i+j not > than 10. print hello
in the 3rd iteration, i=0,j=2 and i+j not > than 10. print hello
etc.


( tags added)
[ November 29, 2004: Message edited by: Barry Gaunt ]
 
Michael Imhof
Greenhorn
Posts: 24
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator


1st Iteration: i=0; j loops from 0 to 9. Maximal value will be 0 + 9 = 9.
It will not enter the if statement and "hello" is printed out.

2nd Iteration: i=1; j loops from 0 to 9. Maximal value will be 1 + 9 = 10.
Same again, "hello" is printed out.

3nd Iteration: i=2; j loops from 0 to 9. Maximal value will be 2 + 9 = 11.
11 > 10. "break lab" is called. This stops all actual loops and returns
to the label "lab" (is a nasty "goto"!!)

All following iterations are entering the if statement and "hello" is never
printed again.

Regards
Michael
 
Barry Gaunt
Ranch Hand
Posts: 7729
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
A question for you: why do you say it prints "hello" for i=0 and j=0?


(for anindam, not Michael )
[ November 29, 2004: Message edited by: Barry Gaunt ]
 
Aneesha Singh
Ranch Hand
Posts: 47
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by anindam bhattacharaya:
G'day

I have a problem getting to understand this code.


I am failing to understand why is this printing
"hello" only twice.


( tags added)

[ November 29, 2004: Message edited by: Barry Gaunt ]



The first time the code runs fine, goes through the inner for loop 10 times and never reaches inside the if condition (because i+j is always less than 10).

On coming out of the inner loop it prints hello.

Then i is incremented to 1 AND the above repeats.

Then i is incremented to 2, and in the last iteration of the inner loop it enters the if condition because i+j becomes greater than 10. It goes to statement 'break lab'. lab is the label for the outer loop and the program execution comes out of the outer loop (labelled lab) and the program finishes. Thats the reason hello is printed just once.


in the 1st iteration, i=0,j=0 and i+j not > than 10. print hello
in the 2nd iteration, i=0,j=1 and i+j not > than 10. print hello
in the 3rd iteration, i=0,j=2 and i+j not > than 10. print hello
etc.


Thats because hello is printed in the outer loop after the inner loop is executed. Its not inside teh inner loop. Please note where you have placed your brackets.

Hope that helps :-).
 
Barry Gaunt
Ranch Hand
Posts: 7729
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
But this question is for Michael: why do you say
All following iterations are entering the if statement and "hello" is never
printed again.
?

There are no following iterations. Execution is complete when break lab is performed because it breaks out of the outer loop.
 
Michael Imhof
Greenhorn
Posts: 24
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

why do you say

There are no following iterations. Execution is complete when break lab is performed because it breaks out of the outer loop.


I thought, a labelled break is working like a "goto". So after calling
"break lab" it breaks the loop and returns to the label.
 
Aneesha Singh
Ranch Hand
Posts: 47
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Michael Imhof:


I thought, a labelled break is working like a "goto". So after calling
"break lab" it breaks the loop and returns to the label.


If you modify the code to check if it goes into the outer loop after teh break lab statement as follows:


You will get the following output:

in lab
hello
in lab
hello
in lab

which shows that the outer loop exits after the labelled break. You are right its 'LIKE' a goto but the difference is that it will goto the label and break the loop that has the label ... I hope that gives it a bit of clarity! :-)
 
seemapanth Joshi
Ranch Hand
Posts: 47
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What would happen if we said "break" instead of "break lab"? So I guess the point is that when it does not reach the if statement "hello" prints but the moment if statement is satisfied the execution completes and the "break lab" statement takes you out of both for loops.
 
Joseph Maddison
Ranch Hand
Posts: 53
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
A break without a label exits the innermost loop. If you want to resume the evaluation of the outer loop, try "continue lab" instead of "break lab".

Hope this helps,
jdmaddison
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic