Presentation is loading. Please wait.

Presentation is loading. Please wait.

© Calvin College, 2009 1 For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the.

Similar presentations


Presentation on theme: "© Calvin College, 2009 1 For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the."— Presentation transcript:

1 © Calvin College, 2009 1 For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the density of go to statements in the programs they produce. More recently I discovered why the use of the go to statement has such disastrous effects, and I became convinced that the go to statement should be abolished from all "higher level" programming languages … - Edsger W. Dijkstra, “Go To Statement Considered Harmful”, CACM, 1968“Go To Statement Considered Harmful”

2 © Calvin College, 2009 2 Control Structures ● Motivation ● Control Structures: Control Structures – Sequence Sequence – Selection Selection – Repetition Repetition ● Animation and Repetition Animation and Repetition ● Structured Programming Structured Programming

3 © Calvin College, 2009 3 Introduction ● Von Neumann architectures execute statements one at a time. ● The sequence of this execution is called the control flow of a program. ● Control structures specify the nature of this flow.

4 © Calvin College, 2009 4 Sequential Execution Processing executes blocked statements sequentially: { statement 1 statement 2... statement N } statement 1 statement 2 statement n

5 © Calvin College, 2009 5 Example: Design (1) ● We start with the restricted goal of drawing an ellipse and its center point. ● Algorithm: – Data: x, y, diameter, radius – Setup: 1. Setup 300x300 panel with white background 2. Initialize x, y, diameter and radius – Draw: 1. Draw an circle at x, y with diameter. 2. Draw the center point.

6 © Calvin College, 2009 6 Example: Implementation (1) ● Relevant implementation tools: – sequential execution

7 © Calvin College, 2009 7 Example: Testing (1) ● The resulting output should show an ellipse with its center point.

8 © Calvin College, 2009 8 final int WIDTH = 300, HEIGHT = WIDTH, ellipseX, ellipseY, ellipseDiameter; void setup() { size(WIDTH, HEIGHT); smooth(); ellipseX = WIDTH / 2; ellipseY = HEIGHT / 2; ellipseDiameter = 100; } void draw() { background(255); strokeWeight(2); ellipse(ellipseX, ellipseY, ellipseDiameter, ellipseDiameter); strokeWeight(5); point(ellipseX, ellipseY); }

9 © Calvin College, 2009 9 Selective Execution if statements execute their statements selectively, based on a boolean condition: if (condition) statement 1

10 © Calvin College, 2009 10 Selection: The Simple if The if statement has different forms. The first form is called the simple if: if (condition) statement condition statement T F

11 © Calvin College, 2009 11 Iteration 2 ● Analysis ● Design ● Implementation ● Test

12 © Calvin College, 2009 12 void mouseClicked() { if (dist(mouseX, mouseY, ellipseX, ellipseY) <= ellipseRadius) { fillColor = color(random(255), random(255), random(255)); }

13 © Calvin College, 2009 13 Selection: The Two-Branch if if (condition) statement 1 else statement 2 condition statement 1 T F statement 2 The second form of if statement includes an else clause and a second statement:

14 © Calvin College, 2009 14 Iteration 3 ● Analysis ● Design ● Implementation ● Test

15 © Calvin College, 2009 15 void mouseClicked() { if (dist(mouseX, mouseY, ellipseX, ellipseY) <= ellipseRadius) { fillColor = color(random(255), random(255), random(255)); } else { backgroundColor = color(random(255), random(255), random(255)); }

16 © Calvin College, 2009 16 Selection: The Multi-branch if The final form nests the if statements: if (Cond 1 ) { Stmts 1 } else if (Cond 2 ) { Stmts 2... } else if (Cond N ) { Stmts N } else { Stmts N+1 } Stmts N+1 Cond 1 Stmts 1 TF Stmts 2 Cond 2 TF Stmts N Cond N TF...

17 © Calvin College, 2009 17 Iteration 4 ● Analysis ● Design ● Implementation ● Test

18 © Calvin College, 2009 18 void mouseClicked() { if (dist(mouseX, mouseY, ellipseX, ellipseY) <= ellipse2Radius){ ellipse2Color = a random color; } else if (dist(mouseX, mouseY, ellipseX, ellipseY) <= ellipseRadius){ ellipseColor = a random color; } else { backgroundColor = a random color; }

19 © Calvin College, 2009 19 int width = 300, height = width; int ellipseX, ellipseY, ellipse1Diameter, ellipse1Radius, ellipse2Diameter, ellipse2Radius; color ellipse1Color, ellipse2Color, backgroundColor; void setup() { size(width, height); smooth(); ellipseX = width / 2; ellipseY = height / 2; ellipse1Diameter = 150; ellipse1Radius = ellipse1Diameter / 2; ellipse2Diameter = 75; ellipse2Radius = ellipse2Diameter / 2; ellipse1Color = color(255); ellipse2Color = color(255); backgroundColor = color(255); } void draw() { background(backgroundColor); strokeWeight(2); fill(ellipse1Color); ellipse(ellipseX, ellipseY, ellipse1Diameter, ellipse1Diameter); fill(ellipse2Color); ellipse(ellipseX, ellipseY, ellipse2Diameter, ellipse2Diameter); strokeWeight(5); point(ellipseX, ellipseY); } Continued

20 © Calvin College, 2009 20 void mouseClicked() { if (dist(mouseX, mouseY, ellipseX, ellipseY) <= ellipse2Radius) { ellipse2Color = color(random(255), random(255), random(255)); } else if (dist(mouseX, mouseY, ellipseX, ellipseY) <= ellipse1Radius) { ellipse1Color = color(random(255), random(255), random(255)); } else { backgroundColor = color(random(255), random(255), random(255)); }

21 © Calvin College, 2009 21 Selection: Issues

22 © Calvin College, 2009 22 Repetitive Execution Repetition statements execute their statements repeatedly, usually based on a Boolean condition.

23 © Calvin College, 2009 23 Repetition: The for Loop for (initExpr; loopCond; incrExpr) Statement InitExpr LoopCond Statement IncrExpr F T The counting for statement repeats based on a counter.

24 © Calvin College, 2009 24 The for statement is normally used to count things. Repetition: The Counting Loop for (int count = first; count <= last; count++) Statement Example: for (int i = 1; i <= 5; i++) { println(i); }

25 © Calvin College, 2009 Example 25

26 © Calvin College, 2009 26 Iteration 5 ● Analysis ● Design ● Implementation ● Test

27 © Calvin College, 2009 27 final int COUNT = 13; void setup() { size(500, 250); noLoop(); } void draw() { for (int i = 0; i < COUNT; i++) { rect(0, i * height/COUNT, width - 1, height/COUNT); }

28 © Calvin College, 2009 28 Iteration 6 ● Analysis ● Design ● Implementation ● Test

29 © Calvin College, 2009 29 void draw() { for (int i = 0; i < COUNT; i++) { if (i % 2 == 0) { fill(191, 10, 48); } else { fill(255); } rect(0, i * height/COUNT, width-1, height/COUNT); }

30 © Calvin College, 2009 30 Repetition: Nested for Loops for (initExpr 1 ; loopCond 1 ; incrExpr 1 ) for (initExpr 2 ; loopCond 2 ; incrExpr 2 ) Statement InitExpr 1 LoopCond 1 IncrExpr 1 F T Loops can be nested as well. InitExpr 2 LoopCond 2 Statement IncrExpr 2 F T

31 © Calvin College, 2009 31 Iteration 7 ● Analysis ● Design ● Implementation ● Test

32 © Calvin College, 2009 32 fill(0,40,104); rect(0, 0, 190, 134); stroke(255); strokeWeight(5); for (int row = 0; row < 9; row++ ) { for (int column = 0; column < 11; column++) { if ((row%2==0 && column%2==0) || (row%2!=0 && column%2!=0)) { point(column*190/11 + 10, row*134/9 + 5); }

33 © Calvin College, 2009 33 /** * USA draws a properly scaled US flag (see http://en.wikipedia.org/wiki/Usa_flag#Design) http://en.wikipedia.org/wiki/Usa_flag#Design * * @author kvlinden * @version 28april2009 */ int unit=250; float height = unit, width = height*1.9; float unionHeight, unionWidth, stripeHeight, starDiameter; PImage star; void setup() { size((int)width,(int)height); background(191,10,48); fill(255); smooth(); noStroke(); noLoop(); unionHeight=height*7/13; unionWidth=width*2/5; stripeHeight=height/13; starDiameter=height*0.0616; star = loadImage("whiteStar100.gif"); imageMode(CENTER); } Continued

34 © Calvin College, 2009 34 void draw() { // Draw stripes. for (int i=1; i<13; i+=2) { rect(0,i*(int)stripeHeight, (int)width,(int)stripeHeight); } // Draw stars. fill(0,40,104); rect(0,0,(int)unionWidth,(int)unionHeight); for (int row = 1; row <= 9; row++) { for (int column = 1; column <= 11; column++) { // Add a star for odd rows/cols or // even rows/columns. if (((row%2!=0) && (column%2!=0)) || ((row%2==0) && (column%2==0))) { image(star, column*unionWidth/12, row*unionHeight/10, starDiameter, starDiameter); }

35 © Calvin College, 2009 35 Repetition: Issues

36 © Calvin College, 2009 36 Example: Analysis (1) ● We’d like to draw regular polygons. ● We should be able to: – Set the number of sides; – Approximate the area of the enclosing circle; – Drag the polygon around. ● Some sample images are shown here.

37 © Calvin College, 2009 37 Example: Analysis (1) ● The program should: – Draw n-gons; – Check the validity of n; – Compute the n-gon’s area.

38 © Calvin College, 2009 Animation and Repetition ● We have now discussed two forms of repetition in Processing: – Processing implements animation by repeatedly calling the draw() method; – You can program your own repetition using the for statement. ● Your program can contain both forms of repetition. 38

39 © Calvin College, 2009 39 Iteration 8 ● Analysis ● Design ● Implementation ● Test

40 © Calvin College, 2009 40 void drawPolygon(int sides) { if (sides < 3) { println("invalid number of sides: " + sides + "\nsimplePolygon exiting"); exit(); } float angle = 360.0 / sides, theta1, theta2; strokeWeight(1); for (int i = 0; i < sides; i = i+1) { theta1 = radians(angle * i); theta2 = radians(angle * (i + 1)); line(polygonX + cos(theta1) * polygonRadius, polygonY + sin(theta1) * polygonRadius, polygonX + cos(theta2) * polygonRadius, polygonY + sin(theta2) * polygonRadius); }

41 © Calvin College, 2009 41 Iteration 9 ● Analysis ● Design ● Implementation ● Test

42 © Calvin College, 2009 42 void setup() { size(width, height); smooth(); numSides = 3; frameRate(4); } void draw() { background(255); strokeWeight(5); point(polygonX, polygonY); drawPolygon(numSides++); }

43 © Calvin College, 2009 43 Iteration 10 ● Analysis ● Design ● Implementation ● Test

44 © Calvin College, 2009 44 float drawPolygon(int sides) { // Check the parameter as before. float angle = 360.0 / sides, theta1, theta2; strokeWeight(1); for (int i = 0; i < sides; i = i+1) { theta1 = radians(angle * i); theta2 = radians(angle * (i + 1)); triangle(polygonX, polygonY, polygonX + cos(theta1) * polygonRadius, polygonY + sin(theta1) * polygonRadius, polygonX + cos(theta2) * polygonRadius, polygonY + sin(theta2) * polygonRadius); } // Compute n-gon area. return (sides * polygonRadius * sin(2 * PI / sides)) / 2.0; }

45 © Calvin College, 2009 45 Iteration 11 ● Analysis ● Design ● Implementation ● Test

46 © Calvin College, 2009 46 float drawPolygon(int sides) { // repeated code removed here… for (int i = 0; i < sides; i = i+1) { if (i % 2 == 0) { fill(random(255), random(255), random(255)); } else { fill(0); } // Compute thetas as before. triangle(polygonX, polygonY, // 4 points as before… ); } return (sides * polygonRadius * sin(2 * PI / sides)) / 2.0; }

47 © Calvin College, 2009 47 Out of Control Structures Unrestricted go-to statements can be used to produce “spaghetti” code: 00 if (condition) then statements A goto 20 endif statements B 10 continue statements C 20 continue statements D 30 if (condition) goto 10

48 © Calvin College, 2009 48 _main: pushl %ebp movl %esp,%ebp subl $24,%esp call ___main movl $0,-4(%ebp).align 4 L3: cmpl $9,-4(%ebp) jle L6 jmp L4.align 4 L6: cmpl $4,-4(%ebp) jg L5 L7: L5: incl -4(%ebp) jmp L3.align 4 L4: xorl %eax,%eax jmp L2.align 4 L2: movl %ebp,%esp popl %ebp ret int main() { for (int i = 0; i < 10; i++) if (i < 5) ; } Control in Assembly Code

49 © Calvin College, 2009 49 Edsger Dijkstra (1930-2002) Structured Programming ● Dijkstra argued that control flow should be structured. ● He had opinions on languages as well: – FORTRAN - "the infantile disorder" – PL/I -- "the fatal disease" -- belongs more to the problem set than the solution set. – It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. – The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense. What’s the Big Idea picture from www.cs.utexas.edu


Download ppt "© Calvin College, 2009 1 For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the."

Similar presentations


Ads by Google