0% found this document useful (0 votes)
37 views

Lecture 2

This document provides an overview of selective execution, repetitive execution, and logical expressions in Fortran. It discusses if/else, if/elseif/else, and select case statements for selective execution. For repetitive execution, it covers iterative do loops with control variables to repeat a set number of times, and do forever loops to repeat indefinitely while a condition is true. It also discusses logical operators and order of evaluation for logical expressions.

Uploaded by

Hassan GDOURA
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views

Lecture 2

This document provides an overview of selective execution, repetitive execution, and logical expressions in Fortran. It discusses if/else, if/elseif/else, and select case statements for selective execution. For repetitive execution, it covers iterative do loops with control variables to repeat a set number of times, and do forever loops to repeat indefinitely while a condition is true. It also discusses logical operators and order of evaluation for logical expressions.

Uploaded by

Hassan GDOURA
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 50

CENG 303

MATLAB, MAPLE, AND FORTRAN


FOR CHEMICAL ENGINEERS

MATTEO PASQUALI
[email protected]
713-348-5830
AL B-243

FORTRAN LECTURE 2
SELECTIVE EXECUTION

PROBLEM(s)
1. DECIDE WHETHER A CERTAIN
SET OF INSTRUCTIONS
SHOULD BE EXECUTED
DEPENDING ON CERTAIN CONDITIONS
2. DECIDE WHICH (AMONG SEVERAL)
SET OF INSTRUCTIONS
SHOULD BE EXECUTED
DEPENDING ON CERTAIN CONDITIONS
1. SIMPLE SELECTION

INSTRUCTIONS

FALSE TRUE
CHOICE

INSTRUCTIONS
1. SIMPLE SELECTION: IF STATEMENT

STRUCTURE:

if (LOGICAL EXPRESSION) then


INSTRUCTION SET
endif INSTRUCTIONS
or end if ARE EXECUTED
IF EXPRESSION
IS TRUE

INSTRUCTIONS SHOULD BE INDENTED


BY A FEW (3 to 5) SPACES
TO IMPROVE PROGRAM READABILITY
EXAMPLES:

if (area < 0) then


write(*,*) ‘Negative input: using abs value’
area = abs(area)
endif

if (temperature >= 40.0) then


write(*,*) ‘Warning:’
write(*,*) ‘high temperature in fermenter’
write(*,*) ‘cell damage may occur’
endif
2. TWO-WAY SELECTION

INSTRUCTIONS

TRUE FALSE
CHOICE

INSTRUCTION INSTRUCTION
SET 1 SET 2
2. TWO-WAY SELECTION:
IF... ELSE STATEMENT

STRUCTURE:

if (LOGICAL EXPRESSION) then


INSTRUCTION SET 1
else
INSTRUCTION SET 2
endif
EXAMPLE:
SOLVING A QUADRATIC EQUATION

delta = b**2 - 4 * a * c
if (delta >= 0) then
x1 = (– b – sqrt(delta)) / (2 * a)
x2 = (– b + sqrt(delta)) / (2 * a)
write(*,*) ‘Solutions:’, x1, x2
else
write(*,*) ‘No real solution’
endif
INDENTATION FOR CLARITY
3. MULTIPLE SELECTION

CHOICE

DO NOTHING
INSTR. INSTR. INSTR.
SET 1 SET 2 SET 3

DECIDE BETWEEN SEVERAL SETS OF


INSTRUCTIONS, INCLUDING DOING NOTHING
3. MULTIPLE SELECTION

TWO DISTINCT CONSTRUCTS:


•CHOICE BASED ON VALUE OF
INTEGER VARIABLE
select case CONSTRUCT
•ANY OTHER SITUATION
if ... elseif ... CONSTRUCT
3a. MULTIPLE SELECTION:
IF... ELSEIF... (ELSE) STATEMENT
STRUCTURE:
if (LOGICAL EXPRESSION1) then
INSTRUCTION SET 1
elseif (LOGICAL EXPRESSION2) then
INSTRUCTION SET 2
elseif (LOGICAL EXPRESSION3) then
INSTRUCTION SET 3
...
else THIS MAY BE
INSTRUCTION SET N ABSENT
endif
3a. MULTIPLE SELECTION:
IF... ELSEIF... STATEMENT

EXECUTION: COMPUTER CHECKS


SEQUENTIALLY EXPRESSION1,
EXPRESSION2, ..., EXPRESSIONn

IF EXPRESSION i IS TRUE,
INSTRUCTION SET i IS EXECUTED,
AND THE IF BLOCK IS EXITED;
OTHERWISE EXPRESSION i+1 IS EVALUATED
3a. MULTIPLE SELECTION:
IF... ELSEIF... STATEMENT

TRUE FALSE EXECUTION SEQUENCE


EX1
TRUE FALSE
EX2
INS1 TRUE FALSE
EX3
INS2
TRUE FALSE
EX4
INS3

INS4 INS5

(DO NOTHING IF ABSENT)


EXAMPLE: ASSIGNING LETTER GRADES
if (grade >= 90.0) then
write(*,*) ‘A’
elseif (grade >= 80.0) then
write(*,*) ‘B’
elseif (grade >= 70.0) then
write(*,*) ‘C’
elseif (grade >= 60.0) then
write(*,*) ‘D’
else
write(*,*) ‘F’
endif
3a. MULTIPLE SELECTION:
SELECT CASE... CASE... STATEMENT
STRUCTURE:
SELECT CASE (INTEGER VARIABLE)
case (VALUE RANGE or LIST 1)
INSTRUCTION SET 1
case (VALUE RANGE or LIST 2)
INSTRUCTION SET 2
...
case default THIS MAY BE
INSTRUCTION SET N ABSENT
endselect
EXAMPLE: ASSIGNING LETTER GRADES
select case (igrade)
case (90:) HERE igrade
write(*,*) ‘A’ MUST BE
case (80:89) AN INTEGER

write(*,*) ‘B’
case (70:79)
write(*,*) ‘C’
case (60:69)
write(*,*) ‘D’
case default
write(*,*) ‘F’
endselect
EXAMPLE: SEVEN ELEVEN (CRAPS)

select case (dice)


case (7, 11) HERE dice
MUST BE
write(*,*) ‘You win’ AN INTEGER
case (2, 3, 12)
write(*,*) ‘You lose’
case default
target = dice
write(*,*) ‘Roll again until you get’, target
endselect
SIMPLE LOGICAL EXPRESSIONS
THREE TYPES:
• LOGICAL CONSTANT (.true. & .false.)
• LOGICAL VARIABLE
• RELATIONAL EXPRESSION

LOGICAL VARIABLES CAN ONLY BE


TRUE OR FALSE
LOGICAL VARIABLES CAN BE USED
IN IF STATEMENTS
EXAMPLE: USING LOGICAL VARIABLES

logical :: test, condition


...
if (condition) then
...
elseif (test) then
...
else
...
endif
RELATIONAL EXPRESSIONS
SIX RELATIONAL LOGIC OPERATORS

OPERATOR MEANING
== EQUAL TO
/= NOT EQUAL TO
> GREATER THAN
>= GREATER THAN OR EQUAL TO
< LESS THAN
<= LESS THAN OR EQUAL TO
RELATIONAL EXPRESSIONS ARE FORMED
BY COMBINING AND COMPARING
VARIABLES AND EXPRESSIONS
logical :: test, l_angle
real :: alpha, beta
...
if (alpha <= beta) then
...
elseif (test) then
...
endif
l_angle = (alpha > beta)
COMPLEX LOGICAL EXPRESSIONS
FORMED BY COMBINING SIMPLE
LOGICAL EXPRESSIONS THROUGH
COMBINATORIAL LOGIC OPERATORS

SYNTAX
EX1 OP EX2

(EX1 OP EX2) OP EX3

EX1 OP (( EX2 OP EX3) OP EX4)

NOTE: ORDER MATTERS!


COMPLEX LOGICAL EXPRESSIONS
FIVE COMBINATORIAL LOGIC OPERATORS

OPERATOR DEFINITION
EX1 .and. EX2 TRUE IF BOTH EX1 & EX2 TRUE
EX1 .or. EX2 TRUE IF EITHER OR BOTH
EX1 & EX2 TRUE
EX1 .eqv. EX2 TRUE IF EX1 & EX2 ARE SAME
(BOTH TRUE OR FALSE)
EX1 .neqv. EX2 TRUE IF EX1 & EX2 ARE DIFFERENT
(ONE TRUE AND ONE FALSE)
.not. EX1 TRUE IF EX1 FALSE
EXAMPLE

logical :: test, condition


real :: alpha, beta
...
if (condition .and. test) then
...
elseif (.not. test) then
...
elseif (alpha >= beta**2 .or. abs(alpha) > 0.1) then
...
endif
ORDER OF EVALUATION OF EXPRESSIONS

1. EVALUATE ALL ARITHMETIC OPERATORS


(ORDER DISCUSSED IN LECTURE 1)
2. EVALUATE ALL RELATIONAL OPERATORS
FROM LEFT TO RIGHT
3. EVALUATE .not. OPERATORS L TO R
4. EVALUATE .and. OPERATORS L TO R
5. EVALUATE .or. OPERATORS L TO R
6. EVALUATE .eqv. AND .neqv. OPERATORS
L TO R

PARENTHESES CAN BE USED TO SPECIFY ORDER


EXAMPLE
logical :: z = .false.
real :: a = 3.0
real :: b = -1.5
real :: i = 2
...
if (a <= b .and. i /= 0) then
...
elseif ( (.not. z) .eqv. (b**i <= a)) then
...
elseif (a * b < 0.0 .or. (i == 2 .and. sqrt (a) > 1.5)) then
...
endif
REPETITIVE EXECUTION

PROBLEM(s)

1. REPEAT THE SAME TASK FOR A


PREDETERMINED NUMBER OF TIMES
(ITERATIVE or COUNTING LOOP)

2. REPEAT THE SAME TASK FOR AN


INDEFINITE NUMBER OF TIMES,
AS LONG AS A
CERTAIN CONDITION HOLDS
(DO FOREVER or WHILE LOOP)
1. PREDETERMINED REPETITIVE EXECUTION
ITERATIVE DO LOOP

INSTRUCTIONS

loop:
CV = IV to FV,
STEP
INSTRUCTIONS

CV CONTROL VARIABLE (COUNTER)


IV and FV : INITIAL AND FINAL VALUES OF CV
STEP : INCREMENT OF CV AT EVERY ITERATION
1. PREDETERMINED REPETITIVE EXECUTION:
ITERATIVE DO LOOP
STRUCTURE:
IF ABSENT
do cv = iv, fv, step
step = 1
INSTRUCTION SET
enddo
or end do

INSTRUCTIONS SHOULD BE INDENTED


BY A FEW (3 to 5) SPACES
TO IMPROVE PROGRAM READABILITY
EXAMPLES:

do icount = 1, nmax, 2
write(*,*) icount, ‘is odd’
enddo

write(*,*) ‘Starting countdown:’


do number = 30, 0, -1
write(*,*) number, ‘seconds to launch’
enddo
1. PREDETERMINED REPETITIVE EXECUTION
ITERATIVE DO LOOP
NOTES:
CV CONTROL VARIABLE (COUNTER)
MUST BE A DUMMY INTEGER
IV and FV : INITIAL AND FINAL VALUES OF CV
MUST BE INTEGER NUMBERS OR
KNOWN (PREASSIGNED) INTEGER
VARIABLES
STEP : INCREMENT OF CV AT EVERY ITERATION
MUST BE AN INTEGER NUMBER OR A
KNOWN INTEGER VARIABLE
2. INDEFINITE REPETITIVE EXECUTION
DO FOREVER (WHILE) LOOP

INSTRUCTIONS

TRUE LOGICAL FALSE


EXPRESSION
INSTRUCTIONS

REPEAT INSTRUCTIONS UNTIL LOGICAL EXPRESSION


BECOMES TRUE (or FALSE)
2. INDEFINITE REPETITIVE EXECUTION:
DO FOREVER LOOP
STRUCTURE:
do
INSTRUCTION SET 1
if (LOGICAL EXPRESSION) then
exit
TERMINATES
endif LOOP
INSTRUCTION SET 2
enddo or end do

NOTE: AT LEAST ONE OF THE INSTRUCTIONS IN


LOOP MUST CHANGE VALUE OF LOGICAL
EXPRESSION, TO AVOID INFINITE LOOP
EXAMPLES:

x = 1.1
do
x = x*2
write (*,*) ‘ x = ‘, x
if (x >= 100.0) then
exit
endif
enddo CAN HAVE
MORE THAN ONE
EXIT CLAUSES
3. PREMATURE TERMINATION OF
ITERATIVE DO LOOP
exit STATEMENT
EXAMPLE: prime number algorithm

do i = 2, nmax
q = (n / i) * i
if (q == n) then
write(*,*) n, ‘is not a prime number’
exit
endif
enddo NO NEED TO CONTINUE
THE LOOP: WE ALREADY KNOW
THAT n IS NOT PRIME
4. PREMATURE TERMINATION OF
LOOP ITERATION
cycle STATEMENT
EXAMPLE: evaluate f(x) = log(x) - sqrt(x)
do
write (*,*) ‘input x’
read (*,*) x
if (x <= 0.0) then
write(*,*) x, ‘is not positive’
cycle
endif
f = log(x) - sqrt(x)
...
enddo
POSSIBLE PROBLEMS WITH DO LOOPS
INITIALIZATION
m = 28
n = 20 IF m > n
do i = m, n, 2 NEVER EXECUTED
(STEP > 0)
...
enddo
p = -7
q=1 IF p < q
do j = p, q, -1 NEVER EXECUTED
(STEP < 0)
...
enddo
POSSIBLE PROBLEMS WITH DO LOOPS
INFINITE LOOPS

x = 100.0
do
x = sqrt (x)
if (x < 0.0) then
exit THIS EXPRESSION
endif WILL NEVER
BE TRUE
enddo
INFINITE LOOPS, OTHER EXAMPLE
x = 1.0
fmax = 10.0
do VALUE OF fmax
IS NEVER UPDATED
f = x**2
write (*,*) ‘x = ‘, x, ‘f = ‘, f
if (fmax > 100.0) then
exit
endif
x = x + 0.5
enddo
TOO MANY / TOO FEW / INFINITE ITERATIONS
DUE TO TRUNCATION ERROR
step = (5.0 - 3.0) / 11.0
do x = 3.0, 5.0, step MAY GET x = 4.999...
OR x = 5.000001
... DUE TO TRUNCATION;
enddo ONE MORE (LESS)
ITERATION
step = (5.0 - 3.0) / 11.0
x = 3.0 BETTER
do i = 1, 12 ALTERNATIVE,
NEVER USE REALS
... AS CONTROL
x = x + step VARIABLES
enddo
ATTEMPTS AT MODIFYING:
COUNTER, LIMITS, OR STEP

do i = m, n, step
...
i=i-3 ILLEGAL STATEMENTS;
m = 12 WILL BE IGNORED
AND / OR
n = i**3
CAUSE ERRORS
step = step + 2
enddo

COUNTER, LIMITS, and STEP CANNOT


BE CHANGED IN AN ITERATIVE DO LOOP
NESTING DO LOOPS AND IF BLOCKS

PROBLEMS
•MAKE DECISIONS INSIDE DO LOOP
•MAKE DECISIONS INSIDE IF BLOCK
•REPEAT INSTRUCTIONS INSIDE DO LOOP
•REPEAT INSTRUCTIONS INSIDE IF BLOCK
DO LOOPS & IF BLOCKS CAN BE NESTED,
i.e., ONE CAN BE PLACED INSIDE ANOTHER

INNER LOOP / BLOCK MUST BE ENTIRELY


CONTAINED INSIDE OUTER LOOP / BLOCK
NESTING EXAMPLES

if ( x > 0.0) then


do i = 1, 15
x = sqrt (x)
write(*,*) x
enddo
endif
NESTING EXAMPLES

if ( x > 0.0) then


do i = 1, 15
x = sqrt (x)
write (*,*) x
enddo
else
do i = 1, 15
x = x - 15.0
write (*,*) x
enddo
endif
NESTING EXAMPLES

do i = 1, 100
if (i / 2 * 2 == i) then
write (*,*) i, ‘is even’
else
write (*,*) i, ‘is odd’
endif
enddo
NESTED LOOPS MUST HAVE
DIFFERENT COUNTERS
do i = 1, 100
do j = 1, 100
write (*,*) i, j, i*j
enddo
enddo ILLEGAL

do i = 1, 100
do i = 1, 100
write (*,*) i, i*i
enddo
enddo
NAMED DO LOOPS and IF & SELECT BLOCKS
SYNTAX

NAME1: do
...
enddo NAME1

NAME2: if (EX) then


...
endif NAME2

NAME MUST BE UNIQUE and DIFFERENT


FROM ANY VARIABLE NAME
NAMED LOOPS & BLOCKS USEFUL
WHEN NESTING
EXAMPLE

outer_do: do i = 1, n
...
inner_if: if (x > 0.0) then
...
endif inner_if
enddo outer_do
NAMED CYCLE STATEMENT
EXAMPLE
outer_do: do i = 1, n
...
inner_do: do j = 1, n
...
if (x < 0.0) then
cycle outer_do
endif
IF NO NAME
... IS SPECIFIED
enddo inner_do WILL CYCLE
INNERMOST LOOP
enddo outer_do
NAMED EXIT STATEMENT
EXAMPLE
outer_do: do i = 1, n
...
inner_do: do j = 1, n
...
if (x < 0.0) then
exit outer_do
endif
IF NO NAME
... IS SPECIFIED
enddo inner_do WILL EXIT
INNERMOST LOOP
enddo outer_do

You might also like