340 likes | 488 Views
Control Structures. Control. Control – the order in which instructions are performed in a program. Control structures are well defined ways of determining instruction flow. Two main types Selection Repetition Others later. Selection : One way Conditional. Sometimes need to make a choice
E N D
Control • Control – the order in which instructions are performed in a program. • Control structures are well defined ways of determining instruction flow. • Two main types • Selection • Repetition • Others later
Selection : One way Conditional • Sometimes need to make a choice • If the amount of an Amazon.com purchase is less than 25 then add shipping • If a bank withdrawal would yield a negative balance then don’t allow the withdrawal • If a user enters a SSN that is not consist of exactly 9 digits then print an error message.
Selection : One way Conditional • The single-branch (one way) if statement is the simplest selection. • if( some_condition ) { • then_clause • } • some_condition: Any expression that has boolean type • then_clause: A statement sequence • the ‘{}’ is not needed if the then clause is a single statement but should be used
Example PROBLEM: Write a code fragment that determines a pay amount given an hourly wage and the hours worked in a week. Time and a half is given for work over 40 hours during a week. double pay, wage, hours, bonus; // assume that wage, hours, and bonus // values have been initialized
Conditional : Two-way • The if-else statement is a two-way conditional. • if( some_condition ) { • then_clause • } else { • else_clause • } • some_condition: Any expression that has boolean type • then_clause: A statement sequence • else_clause: A statement sequence
Conditional Example PROBLEM: Write a code fragment that determines the total cost of an internet purchase. The company charges a flat fee of $5 shipping if the purchase amount is less than $30 otherwise they charge $5 plus 5% of the purchase for shipping. All values are in pennies. int totalCost, purchaseAmount; //assume purchaseAmount is initialized
Conditional Examples PROBLEM: Write a code fragment that takes two ints (variables ‘a’ and ‘b’) and computes the largest of the two values as variable ‘max’. PROBLEM: Write a code fragment that takes three ints and computes the largest of the three values.
Conditionals : Multiway • The if statement can be ‘multi-way’ • if( condition1 ) { • clause1 • } else if( condition2 ) { • clause2 • } else if( condition3) { • clause3 • } else { • default • }
Conditionals : Example PROBLEM: Write a code fragment that determines the final cost for an internet purchase. If the purchase amount exceeds $100 the discount is 15%. If the amount is more than $75 up to $100 the discount is 10% else if the amount is more than $50 up to $75 the discount is 5% else the discount is 2.5%. int finalCost, purchaseAmount; //assume purchaseAmount is initialized
Sample program • A certain bank offers 10, 20 and 30 year fixed rate mortgages. The interest rate is 8% for a 10 year loan, 7% for 20 and 6% for 30. • Write a program to read the number of years of the mortgage and the mortgage amount. Compute the monthly payment amount. • M = P * R / (1 – (1 + R)^(-N)) • P = Principal • R = Periodic interest rate • N = Number of payment periods • M = periodic payment
Repetition • Sometime need to execute a code fragment more than once. • Loops can be classified as either ‘definite’ or ‘indefinite’ • Definite – the number of repetitions is known by the programmer immediately prior to execution of the loop. • Indefinite – the number of repetitions is not known by the programmer.
Examples • Assume the following problems are to be solved with loops. Identify as either definite or indefinite. • Print the first ten letters of the alphabet. • Print the alphabet up to and including the letter “R” • Calculate the first integer power of 83 that is greater than one billion • Starting with distance d1 and d2 repeatedly divide them both in half until the resulting lengths are within 1 inch of each other.
Repetition: While • While loop • Best used to solve indefinite looping problems while( condition ) { loopBody }
While loop example int sum, count; sum = 0; count = 1; while (count < 6 ) { sum = sum + count; count++; } System.out.println(sum);
Parts to a loop • Every loop has four parts • Initialization – establish the state prior to entering the loop • Primary work – the code that is to be repeatedly executed • Condition – a boolean criteria that controls when the loop stops • Make progress – code that moves the loop toward termination. int sum, count; sum = 0; count = 1; while (count < 6 ) { sum = sum + count; count++; } System.out.println(sum);
Tweaking the parts • Original: sum == 1+2+3+4+5 • What changes are needed to cause the following postconditions? • sum == 1+2+3+…+25 • sum == 3+4+5+…+25 • sum == 1+3+5+…+11 int sum, count; sum = 0; count = 1; while (count < 6 ) { sum = sum + count; count++; } System.out.println(sum);
Examples • Write code to print the circumference and area of circles with radius of 10, 20, …, 100. • Sam earns $100 per day with a daily raise of $100. Sue earns $0.01 per day with a salary that doubles every day. How many days pass before Sue’s total income exceeds Sam’s?
Sample Solution totalSam = 0; totalSue = 0; perDaySam = 10000; perDaySue = 1; dayCount = 0; while ( totalSue <= totalSam ) { dayCount++; totalSam = totalSam + perDaySam; totalSue = totalSue + perDaySue; perDaySam = perDaySam + 10000; perDaySue = perDaySue * 2; }
Example • Write a code fragment to compute N! • Factorial definition • N! = 1*2*3*…*N • By convention we define 0! = 1 • N must be non-negative int n = Keyboard.readInt(); intresult = 1; while( n > 0) { result = result * n; n--; }
Example • Write a code fragment to compute X raised to the Y power. • X can be any real value • Y must be a non-negative integer double x = Keyboard.readDouble(); int y = Keyboard.readInt(); double result = 1; while( y > 0) { result = result * x; y--; }
Infinite Loop • An infinite loop occurs when termination is never reached. The loop never ends! int x = Keyboard.readInt(); int sum = 0; while( x != 0) { sum = sum + x; x = x - 2; } int x = Keyboard.readInt(); while( x > 0) { x = Math.round( x/ 2.0); }
Infinite Loops • Infinite loops are not always ‘bad’! int n = Keyboard.readInt(); int result = 1; while(n != 0) { result = result * n; n--; } Computes n! but what about the logic of n=-1? int n = Keyboard.readInt(); int result = 1; while(n > 0) { result = result * n; n--; } Which is more logically correct?
Off by one Which of these executes the main work 100 times? int k = 1; while( k != 100 ) { // main work k++; } int k = 100; while( k >= 0 ) { // main work k--; } int k = 1; while( k < 100 ) { // main work k++; } int k = 99; while( k > 0 ) { // main work k--; } int k = 0; while( k < 99 ) { // main work k++; }
Nested Loops • Premise: A loop is a Java statement • Premise: The body of a loop contains a sequence of Java statements • Conclusion: The body of a loop may contain a loop. int x = 1; while(x < 4) { int y = 1; while(y < 5) { System.out.print(x*y); System.out.print(“ “); y++; } System.out.println(); x++; }
Do Loop • A repetition statement that executes the body 1 or more times. do { loopBody } while( condition );
Do Loop Example • Write a code fragment that reads input from the keyboard asking the user repeatedly for input until the input is valid. intminValue = 10, maxValue = 100; int result; do { result = Keyboard.readInt(); } while( ?? );
For Loop • Best used for ‘definite’ looping • Typically uses a counter for( init ; condition ; make_progress) { main_work }
For Loop Example • Print all whole numbers between 5 and 10 for( int n=1; n <= 5; n++) { System.out.println(n + 4); } for( int n=0; n < 5; n++) { System.out.println(n + 5); } for( int n=5; n <= 10; n++) { System.out.println(n); }
For Loop Example • Print all odd numbers between 1 and 100 for( int n=1; n <= 100; n+=2) { System.out.println(n); }
Nested For Loops 1 1 1 1 1 2 4 8 16 32 3 9 27 81 243 4 16 63 256 1024 5 25 125 625 3125 • Write code to print the first 5 powers of each integer value between 1 and N where N is a positive integer read from the keyboard. Print each values power on a single line. int n = Keyboard.readInt(); for(int base=1; base<=n; base++) { for(int exp=1; exp<=5; exp++) { System.out.print(((int)Math.pow(base,exp)) + “ “); } System.out.println(); }
Switch statement(cleaning up with conditionals) • A specialized conditional • Use when there are many cases • Can be more efficient switch( expression ) { case CONSTANT1: statements1; break; case CONSTANT2: statements2; break; … case CONSTANTN: statements3; break; default: statementsDefault; }
Switch example • Write a code fragment to determine the interest rate for a mortgage. The bank allows customers to take 3, 5, 7, 20, and 30 year mortgages with annual interest rates of 9%, 8.3%, 7.8%, 7.4% and 6.2% respectively. double interestRate; System.out.print(“Enter the number of years (3,5,7,20,30): “); int years = Keyboard.readInt(); switch( years ) { case 3: interestRate = .09; break; case 5: interestRate = .083; break; case 7: interestRate = .078; break; case 20: interestRate = .074; break; case 30: interestRate = .062; break; default: System.out.println(“invalid year selection”); }