1.3 conditionals and loops copyright 2004, foxtrot by bill amend
DESCRIPTION
ConditionalsTRANSCRIPT
![Page 1: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/1.jpg)
1.3 Conditionals and Loops
Copyright 2004, FoxTrot by Bill Amendwww.ucomics.com/foxtrot/2003/10/03
![Page 2: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/2.jpg)
2
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
![Page 3: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/3.jpg)
Conditionals
![Page 4: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/4.jpg)
4
If Statement
The if statement. A common branching structure. Check boolean condition. If true, execute some statements. If false, execute other statements.
if (boolean expression) { statement T;}else { statement F;}
can be any sequenceof statements
statement T
true false
boolean expression
statement F
![Page 5: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/5.jpg)
5
If Statement
The if statement. A common branching structure. Check boolean condition. If true, execute some statements. If false, execute other statements.
![Page 6: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/6.jpg)
6
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"); }}
![Page 7: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/7.jpg)
7
If Statement Examples
![Page 8: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/8.jpg)
8
The While Loop
![Page 9: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/9.jpg)
9
While Loop
The while loop. A common repetition structure. Check a boolean expression. Execute a sequence of statements. Repeat.
while (boolean expression) { statement 1; statement 2;} statement 1
true
false
boolean expression
statement 2
loop body
loop continuation condition
![Page 10: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/10.jpg)
10
While Loops: Powers of Two
Ex. Print first n powers of 2. Increment i from 1 to n. Double v each time.
int i = 0;int v = 1;while (i <= N) { System.out.println(v); i = i + 1; v = 2 * v;}
% java Powers 1248163264128
0 1
i v
1 2
2 4
3 8
true
i <= N
true
true
true
4 16
5 32
6 64
7 128
true
true
true
false
N = 7
![Page 11: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/11.jpg)
11
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(v); i = i + 1; v = 2 * v; } }}
% java PowersOfTwo 41248
% java PowersOfTwo 61248163264print ith power of two
![Page 12: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/12.jpg)
12
The For Loop
![Page 13: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/13.jpg)
13
For Loops
The for loop. Another common repetition structure. Execute initialization statement. Check boolean expression. Execute sequence of statements. Execute increment statement. Repeat.
for (init; boolean expression; increment) { statement 1; statement 2;}
statement 1true
false
boolean expression
statement 2
initincrement
body
loop continuation condition
![Page 14: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/14.jpg)
14
For Loops: Subdivisions of a Ruler
Create subdivision of a ruler. Initialize ruler to empty string. For each value i from 1 to N:
sandwich two copies of ruler on either side of i.
public class Ruler { public static void main(String[] args) { int N = Integer.parseInt(args[0]); String ruler = " "; for (int i = 1; i <= N; i++) { ruler = ruler + i + ruler; } System.out.println(ruler); }}
1 " 1 "
i ruler
2 " 1 2 1 "
3 " 1 2 1 3 1 2 1 "
" "
![Page 15: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/15.jpg)
Observation. Loops can produce a huge amount of output!
15
% java Ruler 1 1
% java Ruler 2 1 2 1
% java Ruler 3 1 2 1 3 1 2 1
% java Ruler 4 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
% java Ruler 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
% java Ruler 100Exception in thread "main"java.lang.OutOfMemoryError
For Loops: Subdivisions of a Ruler
![Page 16: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/16.jpg)
16
Loop Examples
![Page 17: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/17.jpg)
17
Nesting
![Page 18: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/18.jpg)
18
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 operationn 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/1024
![Page 19: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/19.jpg)
19
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 exclusivealternatives
![Page 20: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/20.jpg)
20
Nested If Statements
is equivalent to:
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;
0 - 47,450 22%
Income Rate
47,450 – 114,650 25%
114,650 – 174,700 28%
174,700 – 311,950 33%
311,950 - 35%
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 rate = 0.35; } }}
![Page 21: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/21.jpg)
21
Nested If Statements
Ex. Pay a certain tax rate depending on income level.
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%
![Page 22: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/22.jpg)
22
Divisor Pattern (p. 59)
Print an NxN table where an asterisk in (i,j) means evenly divides…
Nested loops!
> java DivisorPattern 8* * * * * * * * 1* * * * * 2* * * 3* * * * 4* * 5* * * * 6* * 7* * * * 8
![Page 23: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/23.jpg)
23
Divisor Pattern (p. 59)
Print an NxN table where an asterisk in (i,j) means evenly divides…
Nested loops!public class DivisorPattern { public static void main(String[] args) { int N = Integer.parseInt(args[0]);
for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { if (i % j == 0 || j % i == 0) { System.out.print("* "); } else { System.out.print(" "); } } System.out.println(i); } }}
> java DivisorPattern 8* * * * * * * * 1* * * * * 2* * * 3* * * * 4* * 5* * * * 6* * 7* * * * 8
![Page 24: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/24.jpg)
24
Debugging
Admiral Grace Murray Hopper
http://www.history.navy.mil/photos/images/h96000/h96566kc.htm
![Page 25: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/25.jpg)
25
Debugging a Program
Factor. Given an integer N, compute its prime factorization.
Application. Break RSA cryptosystem.
3,757,208 = 23 7 132 397
3757208/8
![Page 26: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/26.jpg)
Syntax error. Illegal Java program. Compiler error messages help locate problem. Eventually, a file named Factors.class.
26
Debugging a Program: Syntax Errors
public class Factors1 { 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 } }}
As long as i is a factor, divide it out.
Check if iis a factor.
Compile-time error
![Page 27: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/27.jpg)
Semantic error. Legal but wrong Java program. Use "System.out.println" method to identify problem.
27
Debugging a Program: Semantic Errors
public class Factors2 { public static void main(String[] args) { long N = Long.parseLong(args[0]); for (long i = 2; i < N; i++) { while (N % i == 0) System.out.print(i + " "); N = N / i; } }}
As long as i is a factor, divide it out.
Check if iis a factor.
no output (17) or infinite loop (49)
Run-time error
![Page 28: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/28.jpg)
28
Debugging a Program: Performance Errors
Performance error. Correct program but too slow. Use profiling to discover bottleneck. Devise better algorithm.
public class Factors3 { public static void main(String[] args) { long N = Long.parseLong(args[0]); for (long i = 2; i <= N; i++) { while (N % i == 0) { System.out.print(i + " "); N = N / i; } } }}
As long as i is a factor, divide it out.
Check if iis a factor.
Performance error
too slow for large N (999,999,937)
![Page 29: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/29.jpg)
Fact. If N has a factor, it has one less than or equal to its square root.Impact. Many fewer iterations of for loop.
29
public class Factors { public static void main(String[] args) { long N = Long.parseLong(args[0]);
for (long i = 2; i*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 a Program: Success
Check if iis a factor.
Corner case: biggestfactor occurs once.
As long as i is a factor, divide it out.
![Page 30: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/30.jpg)
30
Debugging a Program: Trace
% java Factors 37572082 2 2 7 13 13 397
3757208/8
![Page 31: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/31.jpg)
31
Q. How large an integer can I factor?
% java Factors 1682 2 2 3 7
% java Factors 37572082 2 2 7 13 13 397
% java Factors 92011111697555557039201111169755555703
Debugging a Program: Analysis
† estimated
largest factor 3 instantdigits (i <= N)
6 0.15 seconds9 77 seconds12 21 hours †
instant(i*i <= N)
instantinstant
0.16 seconds15 2.4 years †
18 2.4 millennia †
2.7 seconds92 seconds
after a few minutes of computing….
![Page 32: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/32.jpg)
32
Programming in Java
Programming in Java. [a slightly more realistic view]
1. Create the program.
2. Compile it..Compiler says: That’s not a legal program.Back to step 1 to fix your errors of syntax.
3. Execute it.Result is bizarrely (or subtly) wrong.Back to step 1 to fix your errors of semantics.
4. Enjoy the satisfaction of a working program!
![Page 33: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/33.jpg)
33
Debugging a Program
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.
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
If I had 8 hours to chop down a tree, I would spend 6 hours sharpening an axe. - Abraham Lincoln
![Page 34: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/34.jpg)
More Examples
Fall 2008 Examples– From lab 2: Roll7– Simulates how likely to roll two dice and get 7
– New example: FlushOdds– Simulates how likely to draw 5 cards of the same suit (a flush in poker)
34
![Page 35: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/35.jpg)
35
A Wonderful Square Root
Copyright 2004, Sidney Harris, http://www.sciencecartoonsplus.com
% java Sqrt 604817297777.0
![Page 36: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/36.jpg)
36
While Loops: Square Root
Q. How might we implement Math.sqrt() ?A. To compute the square root of c:
Initialize t0 = c. Repeat until ti = c / ti, up to desired precision:
set ti+1 to be the average of ti and c / ti. – Remember: if ti really equals c / ti then c = ti
2 and ti is √c.
computing the square root of 2
![Page 37: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/37.jpg)
37
public class Sqrt { public static void main(String[] args) { double EPS = 1E-15; double c = Double.parseDouble(args[0]); double t = c; while (Math.abs(t - c/t) > t*EPS) { t = (c/t + t) / 2.0; } System.out.println(t); }} % java Sqrt 2.0
1.414213562373095
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 t0 = c. Repeat until ti = c / ti, up to desired precision:
set ti+1 to be the average of ti and c / ti.
![Page 38: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/38.jpg)
38
Newton-Raphson Method
Square root method explained. Goal: find root of function f(x). Start with estimate t0. Draw line tangent to curve at x= ti. Set ti+1 to be x-coordinate where line hits x-axis. Repeat until desired precision.
f(x) = x2 - c to compute c
![Page 39: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/39.jpg)
39
Monte Carlo Simulation
![Page 40: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/40.jpg)
40
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.
![Page 41: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/41.jpg)
41
public class Gambler { public static void main(String[] args) { int stake = Integer.parseInt(args[0]); int goal = Integer.parseInt(args[1]); int trials = Integer.parseInt(args[2]); int wins = 0;
System.out.println(wins + " wins of " + trials); }}
// repeat experiment N timesfor (int t = 0; t < trials; ++t) {
}
// do one gambler's ruin experimentint cash = stake;while (cash > 0 && cash < goal) {
}if (cash == goal) wins++;
// flip coin and updateif (Math.random() < 0.5) ++cash;else --cash;
Gambler's Ruin
![Page 42: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/42.jpg)
42
Simulation and Analysis
Fact. Probability of winning = stake goal.Fact. Expected number of bets = stake desired gain.Ex. 20% chance of turning $500 into $2500, but expectto make one million $1 bets.
Remark. Both facts can be proved mathematically; for more complex scenarios, computer simulation is often the best plan of attack.
% java Gambler 5 25 1000191 wins of 1000
% java Gambler 5 25 1000203 wins of 1000
% java Gambler 500 2500 1000197 wins of 1000
stake goal trials
after a few hours of computing….
![Page 43: 1.3 Conditionals and Loops Copyright 2004, FoxTrot by Bill Amend](https://reader034.vdocuments.us/reader034/viewer/2022052514/5a4d1ae47f8b9ab0599787ba/html5/thumbnails/43.jpg)
43
Control Flow Summary
Control flow. Sequence of statements that are actually executed in a
program. Conditionals and loops: enables us to choreograph the control
flow.
Straight-lineprograms
All statements areexecuted in the order given.
ConditionalsCertain statements are
executed depending on thevalues of certain variables.
ifif-else
LoopsCertain statements are
executed repeatedly untilcertain conditions are met.
whilefor
do-while
Control Flow Description Examples