![Page 1: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/1.jpg)
Lecture III Start programming in
Fortran
Yi Lin
Jan 11, 2007
![Page 2: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/2.jpg)
A simple example: Roots finding
Finding roots for quadratic aX^2+bX+c=0
Input a, b, c Output root(s):
(-b + SQRT(b*b - 4*a*c))/(2*a)
(-b - SQRT(b*b - 4*a*c))/(2*a)
![Page 3: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/3.jpg)
Roots finding (cont.)
start
Initialize a=1, b=-5, c=6
w = (b*b – 4*a*c)
R1 = (-b + sqrt(w))/(2*a)R2 = (-b - sqrt(w))/(2*a)
End
![Page 4: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/4.jpg)
Roots finding (cont.)PROGRAM ROOTSFINDING
INTEGER a, b, cREAL x, y, z, w, r1, r2
a=1b=-5c=6
! To calculate b*b – 4*a*cx = b*by = a*cz = 4*yw = x-z
r1 = (-b +SQRT(w))/(2*a)r2 = (-b – SQRT(w))/(2*a)
WRITE(*, *) r1, r2END PROGRAM
Declare variables,Must at the head of block
Statements:initialize variables with values
statements: calculation
statements:Output results
![Page 5: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/5.jpg)
Roots finding (cont.)
PROGRAM ROOTSFINDINGINTEGER a, b, cREAL x, y, z, w, r1, r2
a=1b=-5c=6
! To calculate b*b – 4*a*cx = b*by = a*cz = 4*yw = x-z
r1 = (-b +SQRT(w))/(2*a)r2 = (-b –SQRT(w))/(2*a)
WRITE(*, *) r1, r2END PROGRAM
variables
constants
operators
Keywords in Fortran90
![Page 6: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/6.jpg)
Variables and constants
Constants (e.g., 1, -5, 6, 4, 2) A variable (e.g., a, b, c, x, y, z, w) is a unique
name which a FORTRAN program applies to a word of memory and uses to refer to it. Naming convention
alphanumeric characters (letters, numerals and the underscore character)
The first character must not be a letter. No case sensitivity Don’t use keywords in Fortran as variables’ names
![Page 7: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/7.jpg)
Variable data types INTEGER
E.g., a, b, c REAL
E.g., x, y, z, w LOGICAL COMPLEX CHARACTER Examples:
Data type is important INTEGER::a=1,b=-5,c=6 REAL::r1, r2
IMPLICIT NONE needed to prevent errors. Comment out “IMPLICIT NONE” write(*, *) r1, r3 ! You want to print r1 and r2, but by mistakes you type r3
![Page 8: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/8.jpg)
DeclarationsPROGRAM RootFinding IMPLICIT NONE
INTEGER :: a, b, c REAL :: x,y,z,w REAL :: r1, r2 . . .END PROGRAM RootFinding
Declarations tell the compiler To allocate space in memory for a variable What “shape” the memory cell should be (i.e. what type of value
is to be placed there) What name we will use to refer to that cell
![Page 9: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/9.jpg)
Declare variables
INTEGER a, b, c
REAL x, y, z, w
A=1
B=-5
C=6
INTEGER:: a=1, b=-5, c=6REAL:: x, y, z, w
same
![Page 10: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/10.jpg)
Variable precision INTEGER(KIND=2)::a OR
INTEGER(2)::a
KIND BITs Value range
1 8 -2**7 <= a < +2**7 (i.e., [-128,127])
2 16 -2**15 <= a < +2**15
(i.e., [-32768,-32767])
4(default) 32 -2**31 <= a < +2**31
8 64 -2**63 <= a < +2**63
11111111
1 byte = 8 bits
![Page 11: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/11.jpg)
Example
program test
implicit none
integer(1)::a=127
integer(2)::b=128
write(*,*) "a=", a, “b=“,b
End PROGRAM
Outputa=127 b=-128
![Page 12: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/12.jpg)
Variable precision (cont.)
REAL(KIND=4)
CHARACTER KIND=1 only
KIND BITs
4(default) 32
8(equivalent to DOUBLE PRECISION)
64
16 8*16
![Page 13: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/13.jpg)
Arithmetic Expressions
An arithmetic expression is formed using the operations:+ (addition), - (subtraction)* (multiplication), / (division)** (exponentiation)
If the operands are integers, the result will be an integer value
If the operands are real, the result will be a real valueIf the operands are of different types, the expression is
called mixed mode.
![Page 14: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/14.jpg)
Arithmetic expressions
Variable operator variable operator …. E.g., 5 + 2 *3 E.g., b**2 – 4*a*c
It has a value by itself E.g. The value of expression 5 + 2*3 is 11
![Page 15: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/15.jpg)
Simple Expressions 1 + 3 --> 4 1.23 - 0.45 --> 0.78 3 * 8 --> 24 6.5/1.25 --> 5.2 8.4/4.2 --> 2.0 rather than 2, since the result
must be of REAL type. -5**2 --> -25 12/4 --> 3 13/4 --> 3 rather than 3.25. Since the operands
are of INTEGER type, so is the result. The computer will truncate the mathematical result to make it an integer.
3/5 --> 0 rather than 0.6.
![Page 16: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/16.jpg)
Evaluating Complex Expressions
Evaluate operators in order of precedence. First evaluate operators of higher precedence
3 * 4 – 5 7
3 + 4 * 5 23 For operators of the same precedence, use
associativity. Exponentiation is right associative, all others are left associative
Expressions within parentheses are evaluated first
![Page 17: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/17.jpg)
Arithmetic operators: precedence
2+3*4 = ?
= 5 * 4 = 20
Or
= 2+12 = 14
(2+3)*4 = 20
operators Precedence
() 1
** 2
*, / 3
+, - 4
![Page 18: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/18.jpg)
Arithmetic operators: associativityoperators associativity
() Left to right
** Right to left
*, / Left to right
+, - Left to right
associativity resolves the order of operations when two operators of the same precedence compete for three operands:
2**3**4 = 2**(3**4) = 2**81, 72/12/ 3 = (72/12)/3 = 6/3 = 2 30/5*3 = (30/5)*3 = 18 if *,/ associativity is from right to left30/5*3 = 30/(5*3) = 2
![Page 19: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/19.jpg)
Examples
2 * 4 * 5 / 3 ** 2 --> 2 * 4 * 5 / [3 ** 2] --> 2 * 4 * 5 / 9 --> [2 * 4] * 5 / 9 --> 8 * 5 / 9 --> [8 * 5] / 9 --> 40 / 9 --> 4
The result is 4 rather than 4.444444 since the operands are all integers.
![Page 20: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/20.jpg)
Examples
100 + (1 + 250 / 100) ** 3 --> 100 + (1 + [250 / 100]) ** 3 --> 100 + (1 + 2) ** 3 --> 100 + ([1 + 2]) ** 3 --> 100 + 3 ** 3 --> 100 + [3 ** 3] --> 100 + 27 --> 127 Parentheses are evaluated first
![Page 21: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/21.jpg)
Examples1.0 + 2.0 * 3.0 / ( 6.0*6.0 + 5.0*44.0) ** 0.25 --> 1.0 + [2.0 * 3.0] / (6.0*6.0 + 5.0*44.0) ** 0.25 --> 1.0 + 6.0 / (6.0*6.0 + 5.0*55.0) ** 0.25 --> 1.0 + 6.0 / ([6.0*6.0] + 5.0*44.0) ** 0.25 --> 1.0 + 6.0 / (36.0 + 5.0*44.0) ** 0.25 --> 1.0 + 6.0 / (36.0 + [5.0*44.0]) ** 0.25 --> 1.0 + 6.0 / (36.0 + 220.0) ** 0.25 --> 1.0 + 6.0 / ([36.0 + 220.0]) ** 0.25 --> 1.0 + 6.0 / 256.0 ** 0.25 --> 1.0 + 6.0 / [256.0 ** 0.25] --> 1.0 + 6.0 / 4.0 --> 1.0 + [6.0 / 4.0] --> 1.0 + 1.5 --> 2.5
![Page 22: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/22.jpg)
Mixed Mode Expressions
If one operand of an arithmetic operator is INTEGER and the other is REAL the INTEGER value is converted to REAL the operation is performed the result is REAL
1 + 2.5 3.5
1/2.0 0.5
2.0/8 0.25
-3**2.0 -9.0
4.0**(1/2) 1.0 (since 1/2 0)
![Page 23: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/23.jpg)
Example of Mixed Mode
25.0 ** 1 / 2 * 3.5 ** (1 / 3) 25.0 ** 1 / 2 * 3.5 ** (1 / 3) 25.0 ** 1 / 2 * 3.5 ** (1 / 3) 25.0 ** 1 / 2 * 3.5 ** ([1 / 3]) [25.0 ** 1] / 2 * 3.5 ** 0 25.0 / 2 * [3.5 ** 0] 25.0 / 2 * 1.0 [25.0 / 2] * 1.0 12.5 * 1.0 12.5
![Page 24: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/24.jpg)
Statements
Assignment statement:Variable = expression
e.g., b = -5
(never the other way around, show an example) General statement:
INTEGER a, b, c
write (*,*) ‘Hello world!’
![Page 25: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/25.jpg)
Assignment Statement
The assignment statement has syntax:variable = expression
Semantics1. Evaluate the expression2. If the type of result is the same as the type of the variable store
the result in the variable3. Otherwise convert the value to the type of the variable and
then store it– If the value is REAL and the variable is INTEGER remove
the decimal part (truncate)– If the value is INTEGER and the variable is REAL convert
the value to a decimal4. The original value of the variable is destroyed
![Page 26: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/26.jpg)
Assignment statements examples
REAL::X=3.5
X=2 * 2.4 ! X=4.8
INTEGER X=3
X=2 * 2.4 ! X=4
X=2 * 2.6 ! X=5
![Page 27: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/27.jpg)
Roots finding revisitedPROGRAM
ROOTSFINDINGINTEGER::a=1, b=-5, c=6REAL x, r1, r2
! To calculate b*b – 4*a*cx = b**2- 4*a*c
r1 = (-b +SQRT(x))/(2*a)r2 = (-b – SQRT(x))/(2*a)
WRITE(*, *) r1, r2END PROGRAM
Declare variables,Must at the head of block
statements: calculation
statements:Output results
![Page 28: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/28.jpg)
Example in a previous finalPROGRAM Q1
IMPLICIT NONEINTEGER :: I, J, KREAL :: A, B, CA = 3.2 + 4B = 22/7C = 22.0/7.0I = 3.7 + MOD(78,5)J = 45/3*3+1-3*4K = CWRITE(*,*) I,J,K,A,B,C
END PROGRAM Q1a) 6 34 3 7.200 3.000 3.143b) 7.200 3.000 3.143 6 34 3c) 6.700 34.000 3.143 7.200 3.000 3.143d) 6 34 3 7.200 3.143 3.143
![Page 29: Lecture III Start programming in Fortran Yi Lin Jan 11, 2007](https://reader036.vdocuments.site/reader036/viewer/2022062519/5697bfe11a28abf838cb3e29/html5/thumbnails/29.jpg)
Example in midterm05What does the following program
output?PROGRAM midterm
REAL A,B,CINTEGER I,J,K
A = 3.5I = AJ = 5.25K = I*2B = A*IC = J/3
WRITE (*,*) A,B,C,I,J,K
END PROGRAM midterm
A. 3.5 10.5 1. 3 5 7B. 3.5 12.25 1. 3 5 6C. 3.5 10.5 1. 3 5 6D. 3.5 10.5 1.75 3 5 6E. None of the above