# Chapter 3 IF & SELECT. Control Constructs: Branches Definitions: Code: statements or expressions in a program Block: a group of codes Branching: selecting.

## Presentation on theme: "Chapter 3 IF & SELECT. Control Constructs: Branches Definitions: Code: statements or expressions in a program Block: a group of codes Branching: selecting."— Presentation transcript:

Chapter 3 IF & SELECT

Control Constructs: Branches Definitions: Code: statements or expressions in a program Block: a group of codes Branching: selecting or skipping certain blocks in a program Branching can be done using: IF Statement SELECT CASE

IF.. statement IF construct A block of code is executed if-and-only-if a certain logical expression is true. IF (logical_expr) THEN Statement 1 Statement 2 … END IF If the logical_expression is true, the program executes the block of codes between IF & END IF

IF.. statement.FALSE..TRUE. IF (logical_expr) THEN Statement 1 Statement 2 … END IF

IF.. statement Example: Solving quadratic equation PROGRAM QUADRATIC IMPLICIT NONE …… IF (b**2 – 4*a*c < 0) THEN WRITE (*,*) There are two complex roots to this equation. END IF …… END PROGRAM

IF.. statement Example: Solving quadratic equation PROGRAM QUADRATIC IMPLICIT NONE …… IF (b**2 – 4*a*c < 0) THEN WRITE (*,*) There are two complex roots to this equation. END IF …… END PROGRAM.FALSE..TRUE.

IF, ELSE IF and ELSE IF: if true then execute, if false then skip What if we had other situations? Use ELSE IF & ELSE IF (logical_expr1) THEN Statement 1 Statement 2 … ELSE IF (logical_expr2) THEN Statement 1 Statement 2 … ELSE Statement 1 Statement 2 … END IF

IF, ELSE IF and ELSE.TRUE..FALSE. END IF Example:

IF, ELSE IF and ELSE Example: IF (b**2-4*a*c < 0.0) THEN WRITE(*,*) This equation has complex roots. ELSE IF ( b**2-4*a*c > 0.0 ) THEN WRITE(*,*) This equation has two distinct real roots. ELSE WRITE(*,*) This equation has two identical real roots. END IF

Example 3-2 (The Quadratic Equation) Problem Design and write a program to solve for the roots of a quadratic equation regardless of type. Reminder: (Design Procedure) 1.Problem statement 2.Defining inputs and outputs 3.Algorithm design 1.Task subtasks 2. pseudo code or/and flowchart 4.Turn algorithm into Fortran statements 5.Test

Example 3-2 (The Quadratic Equation) Problem Design and write a program to solve for the roots of a quadratic equation regardless of type. 1. Problem statement (make it more clear) Design and write a program that calculates the two roots of the quadratic equation a.x 2 +b.x+c=0. Depending on the three coefficients entered by the user the roots might be real or complex. Furthermore, the two real roots might be distinct or identical. The program should solve for all of these conditions and display the two roots and clearly state the type of the roots.

Example 3-2 (The Quadratic Equation) 2. Defining inputs and outputs Inputs Equation coefficients (real) a, b, c Outputs Roots (real) and statement that describe their type x 1, x 2 (complex, real distinct or identical)

Example 3-2 (The Quadratic Equation) 3. Design Algorithm Main tasks Read the input data (a,b,c) Calculate the roots Write the roots (x 1, x 2 )

Example 3-2 (The Quadratic Equation) 3. Design Algorithm Main tasks Read the input data (a,b,c) Calculate the roots Write the roots (x 1, x 2 ) Ask user to enter coefficients Read coefficient a, b, c Calculate discriminant: disc b 2 - 4 * a * c IF disc > 0 THEN Calculate two distinct real roots Write the distinct real roots ELSE IF disc < 0 THEN Calculate complex roots Write the two complex roots ELSE Calculate one real root Write the repeated root END IF

Ask user to enter coefficients Read coefficient a, b, c Calculate discriminant: disc b 2 - 4 * a * c IF disc > 0 THEN Calculate two distinct real roots Write the distinct real roots ELSE IF disc < 0 THEN Calculate complex roots Write the two complex roots ELSE Calculate one real root Write the repeated root END IF Ask user to enter coefficients Read coefficient a, b, c Calculate discriminant: disc b 2 - 4 * a * c IF disc > 0 THEN x1 (-b+sqrt(disc))/(2. * a) x2 (-b-sqrt(disc))/(2. * a) Write message that equation has two distinct real roots Write x1 and x2 ELSE IF disc < 0 THEN real_part -b/(2. * a) Imag_part sqrt(abs(disc))/(2. * a) Write message that equation has two complex roots Write the two complex roots ELSE x1 -b/(2. * a) Write message that equation has two identical real roots Write x1 END IF

Ask user to enter coefficients Read coefficient a, b, c Calculate discriminant: disc b 2 - 4 * a * c IF disc > 0 THEN x1 (-b+sqrt(disc))/(2. * a) x2 (-b-sqrt(disc))/(2. * a) Write message that equation has two distinct real roots Write x1 and x2 ELSE IF disc < 0 THEN real_part -b/(2. * a) Imag_part sqrt(abs(disc))/(2. * a) Write message that equation has two complex roots Write the two complex roots ELSE x1 -b/(2. * a) Write message that equation has two identical real roots Write x1 END IF

Ask user to enter coefficients Read coefficient a, b, c Calculate discriminant: disc b 2 - 4 * a * c IF disc > 0 THEN x1 (-b+sqrt(disc))/(2. * a) x2 (-b-sqrt(disc))/(2. * a) Write message that equation has two distinct real roots Write x1 and x2 ELSE IF disc < 0 THEN real_part -b/(2. * a) Imag_part sqrt(abs(disc))/(2. * a) Write message that equation has two complex roots Write the two complex roots ELSE x1 -b/(2. * a) Write message that equation has two identical real roots Write x1 END IF 4. Turn it into Fortran statements

PROGRAM roots IMPLICIT NONE REAL :: a, b, c, disc, imag_part, real_part, x1,x2 WRITE (*,*) 'Enter the three coefficints a,b, and c : ' READ (*,*) a, b, c disc = b**2 - 4. *a * c IF (disc > 0.) THEN x1 = (-b + SQRT(disc))/(2. * a) x2 = (-b - SQRT(disc))/(2. * a) WRITE (*,*) ' The equation has two distict real roots.' WRITE (*,*) ' X1= ', x1, ' X2= ', x2 ELSE IF (disc < 0.) THEN real_part = (-b)/(2. *a) imag_part = SQRT(ABS(disc))/(2. * a) WRITE (*,*) ' The equation has two complex roots.' WRITE (*,*) ' X1= ', real_part, '+ i', imag_part, ' X2= ', real_part, '- i', imag_part ELSE x1 = (-b)/(2. * a) WRITE (*,*) ' The equation has two identical real roots.' WRITE (*,*) ' X1= X2 = ', x1 END IF END PROGRAM 4. Turn it into Fortran statements

IF, ELSE IF and ELSE READING ASSIGNMENT: EXAMPLE 3-3 (PAGE 97) You should read the above example which illustrates the steps of designing a program using IF statements Problem statement Defining inputs and outputs Algorithm design Task subtasks pseudocode and flowchart Turn algorithm into Fortran statements Test

Naming & Nested IFs PROGRAM mixup … IF (test1) THEN … END IF IF (test2) THEN … END IF IF (test3) THEN … END IF END PROGRAM mixup

Naming & Nested IFs PROGRAM mixup … outer: IF (test1) THEN … middle: IF (test2) THEN … inner: IF (test3) THEN … END IF inner … END IF middle … END IF outer … END PROGRAM mixup Nested IF ( one or more IF block inside another one)

Naming & Nested IFs PROGRAM mixup … outer: IF (test1) THEN … middle: IF (test2) THEN … inner: IF (test3) THEN … END IF inner … END IF middle … END IF outer … END PROGRAM mixup Naming IF ( up to 31 alphanumeric)

Naming & Nested IFs outer: IF (test1) THEN … middle: IF (test2) THEN … inner: IF (test3) THEN … END IF inner … END IF middle … END IF outer outer: IF (test1) THEN … middle: IF (test2) THEN … inner: IF (test3) THEN … END IF inner … END IF middle … END IF outer What is the advantage of naming IF blocks?

Naming & Nested IFs outer: IF (test1) THEN … middle: IF (test2) THEN … inner: IF (test3) THEN … END IF inner … END IF middle … END IF outer outer: IF (test1) THEN … middle: IF (test2) THEN … inner: IF (test3) THEN … END IF inner … END IF middle … END IF outer What is the advantage of naming IF blocks? END IF missing Compiler

Special IF construct One line statement that is equivalent to if block with one statement IF (logical _expr) Statement IF (mark > 95) grade= A

SELECT CASE Another branching method Used to select a block of code to execute based on the value of a single integer, character, or logical expression General Form: SELECT CASE (Case_expr) CASE (selector_1) Statement 1 Statement 2 … CASE (selector_2) Statement 1 Statement 2 … CASE DEFAULT Statement 1 Statement 2 … END SELECT

SELECT CASE Forms of case selectors: (RANGES) CASE ( value1 : value2 ) value1 to value2 CASE ( value1 : ) value1 and above CASE ( : value2 ) value2 and below CASE ( value ) a single value CASE (value1, value2, value3, value4) a list of values

SELECT CASE Forms of case selectors: (RANGES) CASE ( 1 : 10 ) CASE ( 10 : ) CASE ( : 10 ) CASE ( 7 ) CASE ( 3, 4, 7) Reading assignment: Example 3-5 (Page 107): Selecting day of the week

Example: Month s Name

program month implicit none CHARACTER(LEN=9) :: month_name INTEGER :: month_number WRITE (*,*) "Enter the month of the year (1-12)" WRITE (*,*) "" READ (*,*) month_number SELECT CASE (month_number) CASE (1) WRITE (*,*) 'JANUARY' CASE (2) WRITE (*,*) 'FEBRAURY' CASE (3) WRITE (*,*) 'MARCH' CASE (4) WRITE (*,*) 'APRIL'

Example: Month s Name CASE (5) WRITE (*,*) 'MAY' CASE (6) WRITE (*,*) 'JUNE' CASE (7) WRITE (*,*) 'JULY' CASE (8) WRITE (*,*) 'AUGUST' CASE (9) WRITE (*,*) 'SEPTEMBER' CASE (10) WRITE (*,*) 'OCTOBER' CASE (11) WRITE (*,*) 'NOVEMBER CASE (12) WRITE (*,*) 'DECEMBER' CASE DEFAULT WRITE (*,*) Error: out of range' END SELECT end program

Similar presentations