Programming Fundamentals: Control Flow and Math Operations, Slides of Computer Programming

The basics of programming, focusing on control flow structures such as if statements and while loops, as well as mathematical operations. It includes examples and exercises for practicing these concepts.

Typology: Slides

2011/2012

Uploaded on 07/15/2012

sajeev
sajeev 🇮🇳

3.5

(2)

48 documents

1 / 13

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1.3 Conditionals and Loops
Introduction to Programming in Java: An Interdisciplinary Approach · Robert Sedgewick and Kevin Wayne · Copyright © 2008 · February 10, 2009 10:07 PM
2
A Foundation for Programming
objects
functions and modules
graphics, sound, and image I/O
arrays
conditionals and loops
Math text I/O
assignment statementsprimitive data types
equivalent
to a calculator
any program you might want to write
3
A Foundation for Programming
objects
functions and modules
graphics, sound, and image I/O
arrays
any program you might want to write
to infinity
and beyond!
conditionals and loops
Math text I/O
assignment statementsprimitive data types
4
Control Flow
Control flow.
!Sequence of statements that are actually executed in a program.
!Conditionals and loops: enable us to choreograph control flow.
statement 2
statement 1
statement 4
statement 3 boolean 2 true
false
statement 2
boolean 1
statement 3
false
statement 1
true
straight-line control flow control flow with conditionals and loops
docsity.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Partial preview of the text

Download Programming Fundamentals: Control Flow and Math Operations and more Slides Computer Programming in PDF only on Docsity!

1.3 Conditionals and Loops

Introduction to Programming in Java: An Interdisciplinary Approach · Robert Sedgewick and Kevin Wayne · Copyright © 2008 · February 10, 2009 10:07 PM 2

A Foundation for Programming

objects functions and modules graphics, sound, and image I/O arrays conditionals and loops Math text I/O primitive data types assignment statements equivalent to a calculator any program you might want to write 3

A Foundation for Programming

objects functions and modules graphics, sound, and image I/O arrays any program you might want to write to infinity conditionals and loops and beyond! Math text I/O primitive data types assignment statements 4

Control Flow

Control flow.

! Sequence of statements that are actually executed in a program.

! Conditionals and loops: enable us to choreograph control flow.

statement 2 statement 1 statement 4 statement 3 boolean 2^ true false statement 2 boolean 1 statement 3 false statement 1 true straight-line control flow control flow with conditionals and loops

Conditionals

6

If Statement

The if statement. A common branching structure.

! Evaluate a boolean expression.

! If true, execute some statements.

! If false, execute other statements.

if ( boolean expression ) { statement T ; } else { statement F ; } can be any sequence of statements statement T true false boolean expression statement F 7

If Statement

The if statement. A common branching structure.

! Evaluate a boolean expression.

! If true, execute some statements.

! If false, execute other statements.

8

If Statement

Ex. Take different action depending on value of variable.

public class Flip { public static void main(String[] args) { if (Math.random() < 0.5) System.out.println("Heads"); elseMath.random() < 0.5) System.out.println("Tails"); } } % java Flip Heads % java Flip Heads % java Flip Tails % java Flip Heads

13

Powers of Two

public class PowersOfTwo { public static void main(String[] args) { // last power of two to print int N = Integer.parseInt(args[ 0 ]); int i = 0 ; // loop control counter int v = 1 ; // current power of two while (i <= N) { System.out.println(i + " " + v); i = i + 1 ; v = 2 * v; } } } % java PowersOfTwo 4 0 1 1 2 2 4 3 8 % java PowersOfTwo 6 0 1 1 2 2 4 3 8 4 16 5 32 6 64 print i and ith power of two 14

While Loop Challenge

Q. Anything wrong with the following code for printing powers of 2?

int i = 0 ; int v = 1 ; while (i <= N) System.out.println(i + " " + v); i = i + 1 ; v = 2 * v; 16

A Wonderful Square Root

Copyright 2004, Sidney Harris, http://www.sciencecartoonsplus.com % java Sqrt 60481729

17

While Loops: Square Root

Q. How might we implement Math.sqrt()?

A. To compute the square root of c:

! Initialize t 0 = c.

! Repeat until ti = c / ti, up to desired precision:

set ti+1 to be the average of ti and c / ti.

t 0 = 2. t 1 = 12 ( t 0 + (^) t^20 ) = 1. t 2 = 12 ( t 1 + (^2) t 1 ) = 1. t 3 = 12 ( t 2 + (^) t^22 ) = 1. t 4 = 12 ( t 3 + (^) t^23 ) = 1. t 5 = 12 ( t 4 + (^) t^24 ) = 1. computing the square root of 2

18 public class Sqrt { public static void main(String[] args) { double epsilon = 1e-15; double c = Double.parseDouble(args[ 0 ]); double t = c; while (Math.abs(t - c/t) > t*epsilon) { t = (c/t + t) / 2.0; } System.out.println(t); } } (^) % java Sqrt 2.

relative error tolerance 15 decimal digits of accuracy in 5 iterations

While Loops: Square Root

Q. How might we implement Math.sqrt()?

A. To compute the square root of c:

! Initialize t 0 = c.

! Repeat until ti = c / ti, up to desired precision:

set ti+1 to be the average of ti and c / ti.

19

Square root method explained.

! Goal: find root of any function f(x).

! Start with estimate t 0.

! Draw line tangent to curve at x= ti.

! Set ti+1 to be x-coordinate where line hits x-axis.

! Repeat until desired precision.

Caveat. f(x) must be smooth; t 0 must be good estimate.

Newton-Raphson Method

f(x) = x^2 - c to compute "c 20

The For Loop

Copyright 2004, FoxTrot by Bill Amend www.ucomics.com/foxtrot/2003/10/ 21

For Loops

The for loop. Another common repetition structure.

! Execute initialization statement.

! Evaluate a boolean expression.

! If true, execute some statements.

! And then the increment statement.

! Repeat.

for ( init ; boolean expression ; increment ) { statement 1 ; statement 2 ; } statement 1 true false boolean expression statement 2 init increment body loop continuation condition

26

Nesting

27

Nesting Conditionals and Loops

Conditionals enable you to do one of 2n sequences of operations with n lines.

More sophisticated programs.

! Nest conditionals within conditionals.

! Nest loops within loops.

! Nest conditionals within loops within loops.

if (a0 > 0 ) System.out.print( 0 ); if (a1 > 0 ) System.out.print( 1 ); if (a2 > 0 ) System.out.print( 2 ); if (a3 > 0 ) System.out.print( 3 ); if (a4 > 0 ) System.out.print( 4 ); if (a5 > 0 ) System.out.print( 5 ); if (a6 > 0 ) System.out.print( 6 ); if (a7 > 0 ) System.out.print( 7 ); if (a8 > 0 ) System.out.print( 8 ); if (a9 > 0 ) System.out.print( 9 ); Loops enable you to do an operation n times using only 2 lines of code. double sum = 0.0; for (int i = 1 ; i <= 1024 ; i++) sum = sum + 1.0 / i; 210 = 1024 possible results, depending on input computes 1/1 + 1/2 + ... + 1/ 28

Nested If Statements

Ex. Pay a certain tax rate depending on income level.

double rate; if (income < 47450 ) rate = 0.22; else if (income < 114650 ) rate = 0.25; else if (income < 174700 ) rate = 0.28; else if (income < 311950 ) rate = 0.33; else if (income < 311950 ) rate = 0.35; graduated income tax calculation 0 - 47,450 22% Income Rate 47,450 – 114,650 25% 114,650 – 174,700 28% 174,700 – 311,950 33% 311,950 - 35% 5 mutually exclusive alternatives 29

Nested If Statements

is shorthand for

Be careful when nesting if-else statements. (See Q+A on p. 75.)

if (income < 47450 ) rate = 0.22; else if (income < 114650 ) rate = 0.25; else if (income < 174700 ) rate = 0.28; else if (income < 311950 ) rate = 0.33; else if (income < 311950 ) rate = 0.35; if (income < 47450) rate = 0.22; else { if (income < 114650) rate = 0.25; else { if (income < 174700) rate = 0.28; else { if (income < 311950) rate = 0.33; else if (income < 311950) rate = 0.35; } } }

30

Nested If Statement Challenge

Q. Anything wrong with the following for income tax calculation?

double rate = 0.35; if (income < 47450 ) rate = 0.22; if (income < 114650 ) rate = 0.25; if (income < 174700 ) rate = 0.28; if (income < 311950 ) rate = 0.33; wrong graduated income tax calculation 0 - 47,450 22% Income Rate 47,450 – 114,650 25% 114,650 – 174,700 28% 174,700 – 311,950 33% 311,950 - 35% 31

Monte Carlo Simulation

32

Gambler's Ruin

Gambler's ruin. Gambler starts with $stake and places $1 fair bets

until going broke or reaching $goal.

! What are the chances of winning?

! How many bets will it take?

One approach. Monte Carlo simulation.

! Flip digital coins and see what happens.

! Repeat and compute statistics.

33 public class Gambler { public static void main(String[] args) { int stake = Integer.parseInt(args[ 0 ]); int goal = Integer.parseInt(args[ 1 ]); int T = Integer.parseInt(args[ 2 ]); int wins = 0 ; System.out.println(wins + " wins of " + T); } } // repeat experiment N times for (int t = 0 ; t < T; t++) { } // do one gambler's ruin experiment int cash = stake; while (cash > 0 && cash < goal) { } if (cash == goal) wins++; // flip coin and update if (Math.random() < 0.5) cash++; else cash--;

Gambler's Ruin

38

95% of Program Development

Debugging. Cyclic process of editing, compiling, and fixing errors.

! Always a logical explanation.

! What would the machine do?

! Explain it to the teddy bear.

You will make many mistakes as you write programs. It's normal.

“ If I had eight hours to chop down a tree, I would spend six hours sharpening an axe. ” — Abraham Lincoln “As soon as we started programming, we found out to our surprise that it wasn't as easy to get programs right as we had thought. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs. ” — Maurice Wilkes 39

Debugging Example

Factor. Given an integer N > 1, compute its prime factorization.

Application. Break RSA cryptosystem (factor 200-digit numbers).

3,757,208 = 2^3 # 7 # 132 # 397

40

Debugging Example

Factor. Given an integer N > 1, compute its prime factorization.

Brute-force algorithm. For each putative factor i = 2, 3, 4, …,

check if N is a multiple of i, and if so, divide it out.

3757208/ 41

Debugging: 95% of Program Development

Programming. A process of finding and fixing mistakes.

! Compiler error messages help locate syntax errors.

! Run program to find semantic and performance errors.

public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]) for (i = 0 ; i < N; i++) { while (N % i == 0 ) System.out.print(i + " ") N = N / i } } } this program has many bugs! as long as i is a factor, divide it out check if i is a factor

42 public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]) for (i = 0 ; i < N; i++) { while (N % i == 0 ) System.out.print(i + " ") N = N / i } } } % javac Factors.java Factors.java:6: ';' expected for (i = 2; i < N; i++) ^ 1 error

Debugging: Syntax Errors

Syntax error. Illegal Java program.

! Compiler error messages help locate problem.

! Goal: no errors and a file named Factors.class.

the first error 43 public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]); for (int i = 0 ; i < N; i++) { while (N % i == 0 ) System.out.print(i + " "); N = N / i; } } }

Debugging: Syntax Errors

Syntax error. Illegal Java program.

! Compiler error messages help locate problem.

! Goal: no errors and a file named Factors.class.

syntax (compile-time) errors need to declare variable i need terminating semicolons 44 public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]); for (int i = 0 ; i < N; i++) { while (N % i == 0 ) System.out.print(i + " "); N = N / i; } } }

Debugging: Semantic Errors

Semantic error. Legal but wrong Java program.

! Run program to identify problem.

! Add print statements if needed to produce trace.

% javac Factors.java % java Factors Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Factors.main(Factors.java:5) oops, no argument 45 public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]); for (int i = 0 ; i < N; i++) { while (N % i == 0 ) System.out.print(i + " "); N = N / i; } } }

Debugging: Semantic Errors

Semantic error. Legal but wrong Java program.

! Run program to identify problem.

! Add print statements if needed to produce trace.

% javac Factors.java % java Factors 98 Exception in thread "main" java.lang.ArithmeticExeption: / by zero at Factors.main(Factors.java:8) need to start at 2 because 0 and 1 cannot be factors

50

Performance error. Correct program, but too slow.

public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]); for (int i = 2 ; i < N; i++) { while (N % i == 0 ) { System.out.print(i + " "); N = N / i; } } if (N > 1) System.out.println(N); else System.out.println(); } }

Debugging: Performance Error

% java Factors 11111111 11 73 11 137 % java Factors 11111111111 21649 51329 % java Factors 11111111111111 11 239 4649 909091 % java Factors 11111111111111111 2071723 very long wait (with a surprise ending) 51 public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[ 0 ]); for (int i = 2 ; i <= N/i; i++) { while (N % i == 0 ) { System.out.print(i + " "); N = N / i; } } if (N > 1) System.out.println(N); else System.out.println(); } }

Performance error. Correct program, but too slow.

Solution. Improve or change underlying algorithm.

Debugging: Performance Error

% java Factors 11111111 11 73 11 137 % java Factors 11111111111 21649 51329 % java Factors 11111111111111 11 239 4649 909091 % java Factors 11111111111111111 2071723 5363222357 fixes performance error: if N has a factor, it has one less than or equal to its square root 52

Q. How large an integer can I factor?

Note. Can't break RSA this way (experts are still trying).

% java Factors 3757208 2 2 2 7 13 13 397 % java Factors 9201111169755555703 9201111169755555703

Program Development: Analysis

† estimated largest factor (^3) instant digits (i^ <=^ N) 6 0.15 seconds 9 77 seconds 12 21 hours † instant (i*i <= N) instant instant 0.16 seconds 15 2.4 years † 18 2.4 millennia † 2.7 seconds 92 seconds after a few minutes of computing…. 53

Debugging

Programming. A process of finding and fixing mistakes.

1. Create the program.

2. Compile it.

Compiler says: That’s not a legal program.

Back to step 1 to fix syntax errors.

3. Execute it.

Result is bizarrely (or subtly) wrong.

Back to step 1 to fix semantic errors.

4. Enjoy the satisfaction of a working program!

5. Too slow? Back to step 1 to try a different algorithm.