control structures sequence of execution of high-level statements

Post on 04-Jan-2016

229 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related