Transcript Chapter 2

Chapter 2
Basic Elements of
Fortran Programming
1
Character set (Table 2-1)








26:
26:
10:
1:
5:
17:
UPPER CASE
lower case
Digits
Underscore
Arithmetic symbols
Other symbols
A–Z
a–z
0–9
_
+ - * / **
().=,‘$:
!“%&;<>?
and blank
2
Case insensitive

Example:





Apple
apple
ApPLe
ApplE
Example:


read (*,*) Name
write (*,*) name
3
Fortran Statements

Executable statements:

Actions taken by program





Examples:
Read (*,*) x, y
Z=x+y
Write (*,*) “The result = “, z
Nonexecutable statements

information for proper operation of program




Examples:
Program name
! This is a comment
End program
4
Fortran Statements


Each line is 132 characters long
If it does not fit, use & to split a statement







Example:
Output = input1 + input2
Output = input1 &
+ input2
Output = input1 &
& + input2
A statement can be split up to 40 lines
5
Fortran Statements











Statements can be named using a label
Example:
program counter
10
integer :: count = 5
20
write (*,*) “count = “, count
end program
A label should be unique
It does not indicate line numbers
It can be used more than once
It does not indicate the program sequence/order
Not used in modern Fortran 90/95
6
Fortran Statements








Comments:
Ignored by Fortran compiler
can appear any where in a line
start with ! to the end of the line
Examples:
! This is a counting program
a = b + 1 ! This statement adds one
! Can I put a comment here? a = b + 1
7
Fortran Program Structure

Declaration section



Execution section


Program’s name
Types of variables and constants
Actions to be performed by program
Termination section

Stopping (ending) program execution
8
Fortran Program Structure








Example:
program first_program
! This is my first program
integer, parameter :: x = 3, y=4
integer :: z
z=x+y
write (*,*) “ x + y = “ , z
end program
9
Rules of NAMES

Any name (program/variable/constant) can be used only once





Names <= 31 characters






this_is_a_very_long_variable_name
Spaces not allowed
Alphabets + digits + _
Must start with alphabet


program counter
integer :: counter = 5
write (*,*) “counter = “, counter
end program
The following is not acceptable:
Program 1st_user
Exercise:
What’s wrong with this name:
A$
10
Program styles

A programmer should use a consistent style:
Example 1:
PROGRAM example1

REAL :: x, y, z
WRITE (*,*) “ Enter x, y “
WRITE (*,*) “ ”
READ (*,*) x, y, z
z=x+y
WRITE (*,*) “x + y = “, z
END PROGRAM
11
Program styles

Another programmer can use a different style:
Example 2:
program example1

real :: x, y, z
write (*,*) “ Enter x, y “
write (*,*) “ ”
read (*,*) x, y, z
z=x+y
write (*,*) “x + y = “, z
end program
12
Program styles

This style is not acceptable (but it works!):
Example 3:
program example1

real :: x, y, z
WRITE (*,*) “ Enter x, y “
write (*,*) “ ”
READ (*,*) x, y, z
z=x+y
write (*,*) “x + y = “, z
end PROGRAM
13
Variable vs. Constant

Constant:



Once declared, cannot be changed during execution
If you try to change it, you get an error
Example:



REAL, PARAMETER :: GRADE = 88
GRADE = GRADE / 100
Variable:


Can change value during execution
Example


REAL :: GRADE = 88
GRADE = GRADE / 100
14
Data dictionary










In the header of the program
Example:
program converter
! This program converts US Dollars to Omani Rials.
! We use the variables:
!
USD: US Dollars
!
OR: Omani Rials
…
…
end program
15
More about data types

3 Numeric:




1 Strings of Characters:


CHARACTER
1 Logical:


INTEGER
REAL
COMPLEX (not covered)
LOGICAL
Others:

Chapter 12: derived data types (not covered in this course)
16
More about data types

INTEGER:






Either constant or variable
+ve, -ve, zero
1,000,000
(error: commas not allowed)
-100.
(error: decimal point not allowed)
17
More about data types

REAL:









Constants must have a decimal points ( 300.)
10,000,000.
(error: commas not allowed)
105
(error: decimal point missing)
123E5
(error: decimal point missing in mantissa)
-34E2.5
(error: decimal point not allowed in exponents)
18
More about data types


CHARACTER:
Example1




Example2




Character :: name
name = ‘Ramadhan’
Write (*,*) name
Character (len=8) :: name
name = ‘Ramadhan’
Write (*,*) name
Example3





Character (len=14) :: word1
Character (len=6) :: word2
word1 = ‘Ramadhan’
Word2 = ‘kareem’
Write (*,*) word1, word2
19
More about data types

CHARACTER:


Using single/double quotes
Example1:








Name = Abdullah
Name = ‘Abdullah‘
Name = “Abdullah”
Name = ‘Abdullah”
Write (*,*) ‘I read qura’n daily’
Write (*,*) ‘I read qura’’n daily’
Write (*,*) “I read qura’n daily”
Each one surrounds the other:


‘ “Solar energy is a clean source of energy” ‘
“He’s wasting time watching useless TV programs”
20
Implicit none


It checks that variables’ types are declared
Without it:



Any undeclared variable starting with I, J, K, L, M, N are
integers (default typing)
Other variables are real (default typing)
Examples:





Program checking
read (*,*) monthly_income
annual_income = monthly_income * 12
write (*,*) “Annual income = “, annual_income
End program
21
Initializing Variables

Three ways to initialize



Initialize at declaration section
Using assignment statement at execution section
Using READ to initialize from input device

Non-initialized variables might or might not produce an error. Program might
work in some machines and fail in others or at the same machine might work
some times and fail other times depending on the values stored at the
memory location.

Rule: All variables must be initialized before using them.
22
Input/output statments

READ (*,*)



Standard input device (keyboard)
Free input format (decided by variable type)
e.g: (try inputting more values for each statement)
READ i
 READ i, j
 READ i, j, x, char
(Note: character with specific length will be left justified with all others filled with blank
if not entered)


WRITE(*,*)



Standard output device (screen)
Free output format
E.g:




WRITE(*,*) x
WRITE(*,*) ‘Result is: ’, x
WRITE(*,*) ‘Result is: ’, COS(x)
WRITE(*,*) ‘Result is: ’, x, ‘ And cosine will be: ’, cos(x)
23
Arithmetic operators

Assignment:


Variable_name = expression
Example:



= is called assignment operator
Binary arithmetic operators (e.g. a + b):






Days = months * 30
+
Addition
- Subtraction
* Multiplication
/
Division
**
Exponentiation
Unary arithmetic operators (e.g. –b)


+ 34
-a
24
Rules

No two operators may occur side by side




Implied multiplication is illegal



A*-b
A ** -2
A ** (-2)
x(y+z)
x*(y+z)
Use parentheses to group terms

2 ** ((8+2)/5)
25
Real Arithmetic (const. & var.)








3. / 4. = 0.75
4. / 4. = 1.
5. / 4. = 1.25
6. / 4. = 1.5
7. / 4. = 1.75
8. / 4. = 2.
9. / 4. = 2.25
1. / 3. = 0.3333333
26
Integer Arithmetic (const. & var.)








3/4=0
4/4=1
5/4=1
6/4=1
7/4=1
8/4=2
9/4=2
Truncation of fractions
27
Be careful..




3. * (1. / 3.) ≠ 1.
3. * (0.3333333) = 0.9999999
2. * (1. / 2.) = 1.
2. * (0.5) = 1.
28
Evaluating expressions

Example:



Distance = 0.5 * accel * time **2
Distance = (0.5 * accel * time) **2
Rules:
Parentheses first ( innermost)
2*(3+(4–2)–2)
Exponentials (right to left)
2 **2 **3 = 2 **8 = 256
Multiplication & Division (left to right)
2*4/6
Additions & Subtractions (left to right)
2 + 6 - 12
29
Evaluating expressions










Exercise:
Power
= (2 – 6) + ( 2 – 1 * (5+5) **2 **0) – 8
= (2 – 6) + ( 2 – 1 * (10) **2 **0) – 8
= (2 – 6) + ( 2 – 1 * (10) **1) – 8
= (2 – 6) + ( 2 – 1 * 10) – 8
= (2 – 6) + ( 2 – 10) – 8
= – 4 + ( – 8) – 8
= –4–8–8
= – 20
Note: parentheses must be balanced.
30
Mixed-Mode expressions

1 + 1 /4 = 1

1. + 1 / 4 = 1.

1 + 1. / 4 = 1.25

Rule:

An integer is automatically converted into real in case of
mixed arithmetic
31
Mixed-Mode expressions

1 + 1 /4 = 1

1. + 1 / 4 = 1.

1 + 1. / 4 = 1.25

Rule:


An integer is automatically converted into real in case of mixed arithmetic
Raising a negative number to real power is not possible




2 ** 2 = 4
-2 ** 2 = 4
4 ** 0.5 = 2
-2 ** 0.5 ??
32
Data conversion

To convert real to integer, use INT






To convert integer to real, use REAL




Anything after the decimal point is truncated
Example:
INT(3.3) = 3
INT(3.) = 3
INT(0.3) = 0
A decimal point is added
Example:
REAL(3) = 3.
Be careful: NINT ≠ INT





NINT is used to round to the nearest integer
Example:
NINT(3.2) = 3
NINT(3.5) = 4
INT(3.5) = 3
33
INTRINSIC FUNCTIONS

Functions:



Examples:









Generic functions (accept more than one type of inputs)
Specific functions (accept one data type only)
SQRT(X)
ABS(X)
SIN(X), COS(X), TAN(X)
ASIN(X), ACOS(X), ATAN(X)
EXP(X)
LOG(X), LOG10(X)
MAX(A,B), MIN(A,B)
MOD (A,B)
[X in radian]
[result in radian]
More (Table 2-4)
34
Debugging Fortran Program



Errors (bugs)
Eliminating error (debugging)
Types of errors:




Syntax errors
Run-time errors
Logical errors
Good practice:






Use IMPLICIT NONE
Echo all inputs
Initialize all variables
Use parentheses properly
If statement is very long break it into multiple lines
Make sure all function and variables in same units
35