control structures

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

Upload: geoffrey-rios

Post on 30-Dec-2015

25 views

Category:

Documents


0 download

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

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 */