COMP 110 LOOPS Instructor Prasun Dewan PREREQUISITE Conditionals

  • Slides: 26
Download presentation
COMP 110 LOOPS Instructor: Prasun Dewan

COMP 110 LOOPS Instructor: Prasun Dewan

PREREQUISITE Conditionals . 2

PREREQUISITE Conditionals . 2

LOOPING print. Hello(2); print. Hello(3); hello hello 3

LOOPING print. Hello(2); print. Hello(3); hello hello 3

LOOPS public static void print. Hellos(int n) { int counter = 0; if (counter

LOOPS public static void print. Hellos(int n) { int counter = 0; if (counter < n) { counter = counter + 1; System. out. println (“hello”); } } 4

LOOPS public static void print. Hellos(int n) { int counter = 0; while (counter

LOOPS public static void print. Hellos(int n) { int counter = 0; while (counter < n) { counter = counter + 1; System. out. println (“hello”); } } 5

IF VS. WHILE STATEMENT if (<bool expr>) <statement>; while (<bool expr>) <statement>; 6

IF VS. WHILE STATEMENT if (<bool expr>) <statement>; while (<bool expr>) <statement>; 6

IF STATEMENT true <statement> <boolean expression> false 7

IF STATEMENT true <statement> <boolean expression> false 7

WHILE STATEMENT true <statement> <boolean expression> false 8

WHILE STATEMENT true <statement> <boolean expression> false 8

WHILE LOOP <statement> <boolean expression> true false 9

WHILE LOOP <statement> <boolean expression> true false 9

SENTINEL-BASED FOLDING 10

SENTINEL-BASED FOLDING 10

ADDING FIXED NUMBER OF LOANS Loan loan 1 = read. Loan(); Loan loan 2

ADDING FIXED NUMBER OF LOANS Loan loan 1 = read. Loan(); Loan loan 2 = read. Loan(); Loan loan 3 = read. Loan(); Loan loan 4 = read. Loan(); Loan sum. Loan = ALoan. add( loan 1, ALoan. add(loan 2, ALoan. add(loan 3, loan 4)) ); print(sum. Loan); 11

GENERALIZING TO VARIABLE NUMBER OF LOANS Loan loan 1 = read. Loan(); Loan loan

GENERALIZING TO VARIABLE NUMBER OF LOANS Loan loan 1 = read. Loan(); Loan loan 2 = read. Loan(); Loan loan 3 = read. Loan(); Loan loan 4 = read. Loan(); … Loan loan. N = read. Loan(); Variable Number of Statements Loops and Arrays Loan sum. Loan = ALoan. add(loan 1, ALoan. add(loan 2, ALoan. add(loan 3, ALoan. add(loan 4, ……( ALoan. add(loan. N-1, loan. N)*; print (sum. Loan); Variable Number of Subexpressions (function calls) Recursion 12

SPACE-EFFICIENT ADDING OF FIXED NUMBER OF LOANS Loan loan 1 = read. Loan(); Loan

SPACE-EFFICIENT ADDING OF FIXED NUMBER OF LOANS Loan loan 1 = read. Loan(); Loan loan 2 = read. Loan(); Loan sum. Loan = ALoan. add(loan 1, loan 2); loan 1 = read. Loan(); // 3 rd loan sum. Loan = ALoan. add(sum. Loan, loan 1); loan 1 = read. Loan(); // 4 th loan sum. Loan = ALoan. add(sum. Loan, loan 1); print (sum. Loan); 13

MORE SPACE-EFFICIENT ADDING OF FIXED NUMBER OF LOANS Loan sum. Loan = read. Loan();

MORE SPACE-EFFICIENT ADDING OF FIXED NUMBER OF LOANS Loan sum. Loan = read. Loan(); //first loan Loan next. Loan = read. Loan(); //second loan sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // 3 rd loan sum. Loan = ALoan. add(sum. Loan, next. Loan); next. Loan = read. Loan(); // 4 th loan sum. Loan = ALoan. add(sum. Loan, next. Loan); print (sum. Loan); 14

MORE SPACE-EFFICIENT ADDING OF VARIABLE NUMBER OF LOANS Loan sum. Loan = read. Loan();

MORE SPACE-EFFICIENT ADDING OF VARIABLE NUMBER OF LOANS Loan sum. Loan = read. Loan(); //first loan Loan next. Loan = read. Loan(); //second loan sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // 3 rd loan sum. Loan = ALoan. add(sum. Loan, next. Loan); next. Loan = read. Loan(); // 4 th loan sum. Loan = ALoan. add(sum. Loan, next. Loan); next. Loan = read. Loan(); //Nth loan sum. Loan = ALoan. add(sum. Loan, next. Loan); next. Loan = read. Loan(); //sentinel print (sum. Loan); N-1 Repetitions 15

WHILE LOOP Loan sum. Loan = read. Loan(); //first loan Loan next. Loan =

WHILE LOOP Loan sum. Loan = read. Loan(); //first loan Loan next. Loan = read. Loan(); //second loan while (next. Loan(). get. Principal() >= 0) { sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // next loan or sentinel } print (sum. Loan); Input -1 Result Program waits forever for second loan Boundary Condition 16

CORRECT SOLUTION Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan =

CORRECT SOLUTION Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan = read. Loan(); //second loan while (next. Loan(). get. Principal() >= 0) { sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // next loan or sentinel } print (sum. Loan); ALoan. add(new ALoan(0), add(loan 1, add (…. , loan. N) Identity 17

A SINGLE SENTINEL VALUE Loan sum. Loan = new ALoan(0); //initial value Loan next.

A SINGLE SENTINEL VALUE Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan = read. Loan(); //second loan while (next. Loan(). get. Principal() >= 0) { sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // next loan or sentinel } print (sum. Loan); 18

A SINGLE LOAN Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan

A SINGLE LOAN Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan = read. Loan(); //second loan while (next. Loan(). get. Principal() >= 0) { sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // next loan or sentinel } print (sum. Loan); 19

TWO LOANS Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan =

TWO LOANS Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan = read. Loan(); //second loan while (next. Loan(). get. Principal() >= 0) { sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // next loan or sentinel } print (sum. Loan); 20

MULTIPLYING NUMBERS (EDIT) public class ANumber. Multiplier { public static void main(String[] args) {

MULTIPLYING NUMBERS (EDIT) public class ANumber. Multiplier { public static void main(String[] args) { int product = 1; int next. Int = Console. read. Int(); while (next. Int >= 0) { product = product * next. Int; next. Int = Console. read. Int(); } System. out. println(product); } } 21

MULTIPLYING NUMBERS int product = 1; int num = Console. read. Int(); while (num

MULTIPLYING NUMBERS int product = 1; int num = Console. read. Int(); while (num >= 0) { product = product*num; num = Console. read. Int(); } print (product); 1 * 20 * 2 * 3 Identify 22

COMPARING TWO SOLUTIONS result next. Val int product = 1; int num = Console.

COMPARING TWO SOLUTIONS result next. Val int product = 1; int num = Console. read. Int(); while (num >= 0) { product = product*num; num = Console. read. Int(); } print (product); Binary folding function Read first value Read other value Identity !is. Sentinel(next. Val) Loan sum. Loan = new ALoan(0); //initial value Loan next. Loan = read. Loan(); //second loan while (next. Loan(). get. Principal() >= 0) { sum. Loan = ALoan. add(next. Loan, sum. Loan); next. Loan = read. Loan(); // next loan or sentinel } print (sum. Loan); 23

GENERALIZED FOLDING OF A SENTINEL-TERMINATED LIST a 1 a 2 a 3 an a

GENERALIZED FOLDING OF A SENTINEL-TERMINATED LIST a 1 a 2 a 3 an a 1 f: T, T T F(x, I) x a 1 24

GENERALIZED FOLDING FUNCTION Loan, int new ALoan(0), 1 T result = I; T next.

GENERALIZED FOLDING FUNCTION Loan, int new ALoan(0), 1 T result = I; T next. Value = get. Next. Value() while (!is. Sentinel(next. Value)) { result = f(result, next. Value); next. Value = get. Next. Value(. . ); } ALoan. add(), * ≥ 0 25

COMPARING TWO SOLUTIONS (COMMENTS) int product = 1; //identity int num = Console. read.

COMPARING TWO SOLUTIONS (COMMENTS) int product = 1; //identity int num = Console. read. Int(); // read next list value while (num >= 0) { // sentinel checking product = product*num; // binary folding function num = Console. read. Int(); // read next value } print (product); // print value Loan sum. Loan = new ALoan(0); //identity Loan next. Loan = read. Loan(); // read next list value while (next. Loan(). get. Principal() >= 0) {// sentinel checking = Aloan. add(next. Loan, sum. Loan); // binary folding function next. Loan = read. Loan(); // read next list value } print (sum. Loan); // print value sum. Loan 26