Control Structures

14
pes of Structured Sequential Control ypes of Unstructured Control GOTO coroutines ynchronous Control (stay tuned) ncurrent Control (stay tuned)

description

Control Structures. Types of Structured Sequential Control. Types of Unstructured Control.  GOTO.  coroutines. Asynchronous Control (stay tuned). Concurrent Control (stay tuned). Simple Sequence - execute instructions in the written order. - PowerPoint PPT Presentation

Transcript of Control Structures

Page 1: Control Structures

Types of Structured Sequential Control

Types of Unstructured Control

GOTO

coroutines

Asynchronous Control (stay tuned)

Concurrent Control (stay tuned)

Page 2: Control Structures

Simple Sequence - execute instructions in the written order

What instructions are inherently sequential?

Why {...} notation (or begin ... end)?

Selection - choose between alternative code clauses

What are the two forms in Java/C++ ?

Distinguishing characteristics between selection control structures:

Examples:

if -- Java CASE -- Modula-2 COND -- Scheme arithmetic-IF -- FORTRAN

IF (expression) 100, 200, 300

Page 3: Control Structures

Java/C/C++

Pascal/Algol 60

if (condition) thenClause;else elseClause;

if condition then thenClauseelse elseClause

Modula-2/Adaif condition thenClause;else elseClause;end if

Page 4: Control Structures

1st Generation IF ≈ optional branch (2-way selection)

examples:conditional branches -- assemblerlogical IF -- FORTRANIF -- BASIC

2nd Generation if-then-else replaces if-then examples: Pascal & C

concern: branching into the midst of a clause

concern: dangling else

Page 5: Control Structures

When does the else clause execute?

if (condition1) if (condition2) thenClause; else elseClause ;

How to write the code as indented?

Page 6: Control Structures

1st Generation IF either branches or not (2-way selection)

examples:conditional branches -- assemblerlogical IF -- FORTRANIF -- BASIC

2nd Generation if-then-else replaces if-then examples: Pascal & C

concern: branching into the midst of a clause

concern: dangling else

3rd Generation elseif option is included examples: Algol 68, Ada & Modula-2

Page 7: Control Structures

Computed-GOTO -- FORTRAN

GOTO (10, 20, 30, 40), integerExpression10 Instruction1

...GOTO 100

20 Instruction2...GOTO 100

30 Instruction3...GOTO 100

40 Instruction4...GOTO 100

100 CONTINUE

Page 8: Control Structures

Select -- PL/1SELECT (Expression); WHEN(0, 1) Instruction1; WHEN(7) Instruction2;

...

OTHERWISE InstructionN;END;

OR

SELECT; WHEN(Condition1) Instruction1; WHEN(Condition2) Instruction2;

...

OTHERWISE InstructionN;END;

Page 9: Control Structures

switch -- C

switch (Expression) { case constant1:

Instruction1;break;

case constant2: case constant3:

Instruction1;break;

...

default: InstructionN;break;

}

Page 10: Control Structures

Guarded-IF (by Edsgar Dijkstra)if condition1 clause1 condition2 clause2 condition3 clause3

... conditionN clauseNfi

Non-deterministic code has alternative valid behavior under the same circumstances.

Ada Select select when condition1 => clause1 or when condition2 => clause2 or when condition3 => clause3

... or when conditionN => clauseNend select

Page 11: Control Structures

Repetition Control Structures - execute a body repeatedly

EXIT -- Modula-2 & Ada break -- C et. al. LEAVE -- PL/1

(What occurs when a continue instruction (C) executed?)

DO J=1 TO 10 BY 2, 17, 23 WHILE (X>0);...IF (Y=1) THEN LEAVE;...

END;

control structures run amuck - PL/1

top of loop (while) bottom of loop (repeat/do)

Page 12: Control Structures

The Counting Loop -- What hath FORTRAN wrought?

Early versions of FORTRAN had one loop construct.

DO 1000 j=1,20,1...

1000 CONTINUE

Modern versions of this loop are called for loops.

Modula-2 restrictions.

Ada version:

for ControlVar in 7..20 loop...

end loop

Under what circumstances do these Modula-2 loops behave differently?

FOR J:=1 TO A[N] DO loopBody;END;

J:=1;WHILE J<=A[N] DO loopBody; J:=J+1;END;

Page 13: Control Structures

Zahn’s Event Indicator

<eventLoop> loop until <eventList> <instructions> repeat then

<signalList> fi

<eventList> <eventName>

| <eventName> or <eventList> <signalList> <signalCase> | <signalCase> <signalList>

<signalCase> <eventName> : <instructions> ;

BNF loop until E1 or ... or EN

loopBodyrepeatthen E1 : Instruction1; ... EN : InstructionN;fi

Skeleton

Page 14: Control Structures

Example: sequential array searchj := 1;loop until Found or NotThere begin if j>arraySize then NotThere; if A[j]=lookupValue then Found; j := j + 1; endrepeat then Found: index := j; NotThere: begin /* append value to array end */ arraySize := arraySize + 1; A[arraySize] := lookupValue; index := arraySize; endfi/* assert: A[index] = lookupValue */