control structures sequence of execution of high-level statements
TRANSCRIPT
Control Structures
sequence of execution of high-level statements
Control is control of sequence of execution
machine level – manipulate address register: (un)conditional branch
high level branch to label goto GOTO GO
TO constrained branch: break high level: selection, iteration
Control by branching - FORTRAN
IF(X .EQ. Y) X=X+1
IF(X .EQ. Y) GO TO 100
<< ‘else’ statements >>
GO TO 200
100 CONTINUE (dummy statement)
<< ‘then’ statements >>
200 CONTINUE
<< rest of program >>
Control by branching - FORTRAN
IF(X-Y) 10,10,20
10 CONTINUE
<< statements for X<=Y
GO TO 30
20 CONTINUE
<< statements for X>Y >>
30 CONTINUE
<< rest of program >>
Statement labels
integers: FORTRAN, Pascal identifiers as constants: ALGOL, C variables! PL/1
The ‘goto’ debate: is branching needed?
powerful: only control needed easy to abuse: readability, reliability
suffer
‘goto’ unnecessary (Böhm and Jacopini, 1966) but most languages retain limited (unlabelled) branching – e.g., break
Top-down structured programming 1975
flow chart model: no goto3 flow structures-sequence-if-then-else (selection)-do-while (iteration)
boolean expr
statement
Selection: either / or how many alternatives:
1 do something or nothing 2 if then else 3 IF (X-Y) 10,20,30 many switch, nested IF, COND (LISP)
variations on the selection structure
Selection design decisions - 1
control of multiple statements in the control statement
if (condition)then
<statements>else
<statements>endif
compound statement / block
Selection design decisions - 1
control of multiple statements in the control statement
compound statement / blockif (condition) if (condition)
<statement> { <statements>else }<statement> else
{ <statements>
}
Selection design decisions - 2 nesting selection – syntax and logic
syntax – use block or control structureif (sum==0) if (count==0) then result = 0; endif;else result = 1;endif;
convention/rule
Selection design decisions - 2
nesting selection – syntax and logic syntax – use block or control structure convention/rule java, etc
if (sum==0) //p.347 ? if (count==0)
result = 0;
else
result = 1;
Multiple selection
many variations1. FORTRAN computed goto is multiple branch
GO TO (10,20,30,40,50,60), X^^2+Y
2. case / switch model (independent selections)• design decisions
• default case allowed/ignored?• branch after section
3. nested ifs (dependent selections)4. guarded statements
Multiple selection - 1FORTRAN computed goto is multiple branch
GO TO (10,20,30,40,50,60), X^^2+Ylabel list computed index
semantics:compute indexif index < 1 or > max(6), go to next statementgo to label at index location in label list
Multiple selection - 2
switch/case model
Multiple selection - 3 using if
Ada:if (condition)
<stmt>
elsif (condition)
<stmt>
elsif (condition)
<stmt>
else
<stmt>
LISP(COND ((condition)(value))
((condition)(value)) ((condition)(value)) ( T
(value)))
4
1
1
1 2
2
2
3
3
3
4
4
Multiple selection - 4 guarded statements – Dijkstra
evaluate all conditions: none true – error one true – do statement many true – select statement at random
if <condition> -> <statement>[] <condition> -> <statement>[] <condition> -> <statement>[] <condition> -> <statement>fi
Iteration: repetition of statements
control by counter - for loop control by data (by logic) - while loop
number of executions: 0 or more - pretest at beginning of loop body 1 or more - posttest at end of loop body
branching models of repetition
Counter controlled loops developed with array indexing counter (loop variable) parameters
start, stop, stepsize
Counter controlled loops design decision
parameters computed whenonce or every execution?
x = 10; do I = 0 to x x = x - 111 executions or 6 executions
Counter controlled loops design decisions:
loop variable type, scope and value x = 0; I = 100; do I = 1 to 10 by 3 begin x = x + I; I = I - 1; print I end; print I, x;
Counter controlled loops FORTRAN DO loop
posttest, parameters evaluated once, number of executions predetermined, loop variable retains last value
DO 100 K = 1, 10, 2 << body >>100 CONTINUE
Generalizing the counter start, stop, step - FORTRAN sequence, index expression & condition,
“all of the above” - ALGOLfor i = 4,5,6 i*10 while i,10000, 12, 14 step
10 until 25 do
simple counting – Ada, Pascal expressions – C,C++,javafor (<expr1>,<expr2>,<expr3>)
<statement>
Logical control design issue: pretest or posttest? most languages have ‘while’ pretest loop posttest:
Pascal C sum := 0; sum = 0;
repeat do
sum := sum + 15 sum += 15;
until (sum > 100); while (sum <= 100);
Constrained branching
break switch statement programmer control of loop
when to exit (between start and end) branch to end or branch out orthogonality – separate repetition
(infinite loop) from branching out