Title: week 4
1Introduction to Scientific Engineering
Computing Basic Building Blocks
In all ways of life, the easiest way to solve
most problems is to break them down into smaller
sub_problems and then to deal with each of these
in turn, further sub-dividing these subproblems
as necessary.
2Programs and modules
- Main program unit
- program name
- use statements
- .
- .
- .
- Specification statements
- .
- .
- .
- Executable statements
- .
- .
- .
- end program name
3(No Transcript)
4 Modules
- Programs for solving complex problems should be
designed in a modular fashion. - The problem should be divided into simpler
subproblems, so that the subprograms can be
written to solve each of them. - Every program must include exactly one main
program and may also include one or more modules.
5 Modules
- Modules are a second type of program unit.
- The basic structure of a module is similar to the
main program unit. - The initial module statement of each module
specifies the name of that module based on the F
language rules. - A module unit ends with an end module statement
incuding its name. - A module does not contain any executable
statements. - A module may contain any number of subprograms
which are seperated from the other statements by
a contain statement.
6Procedures
- A Special section of program which is, in some
way, referred to whenever required, is known as
a procedure. - Â Programs can be written by the programmer
- By some other person who allows the programmer
to use them - Can be a part of the F language itself (i.e.
intrinsic procedures whose names are - reserved words ? must always be written in lower
case). - Subprograms can also be categorized
as subroutines  - Functions ( create only a single result there
are a lot of intrinsic functions available in F )
7Procedures
- Procedures - origin
- Write your own (homemade)
- Intrinsic (built-in, comes with F )
- sin(x), cos(x), abs(x),
- Written by someone else (libraries)
- Procedures (subprograms) form
- Functions
- Subroutines
8Procedures
- name (argument_1, argument_2, ...)
- Examples
- a b log (c)
- -b sqrt ( b b 4.0 a c)
9- The F language does not accept procedures that
are not in a module. - Most features of Fortran 90/95 that are related
to modules and module procedures are included. - Statement functions are not in F.
- Functions and subroutines are intended to be
included as module procedures.
10Subprograms
Functions Functions may, of course, be provided
by the user and they are normally implemented by
means of an F subprogram which is physically
placed within a module as is explained in
Modules. Â On the other hand, very important
principle which applies to all procedures in F is
that the main program and any subprograms need
never be aware of the internal details of any
other program unit or subprograms . A function
subprogram can be called by     the main
program     another subroutine
subprogram     another function
11Functions
- function name (d1, d2, ) result(result_name)
- Specifications part
- .
- .
- Execution part
- end function name
- Variables
- Internal (local) variables
- Result variable (keyword result)
- Dummy argument (keyword intent(in))
attribute
12Subroutines
- call name (arg1, arg2, )
- intent(in),intent(out),intent(inout)
13Arguments
- Actual arguments in the calling program
- Dummy arguments in the subroutine or function
- The order and types of the actual arguments must
correspond exactly with the order and types of
the corresponding dummy arguments
14Objects
- The PRIVATE and PUBLIC attributes specify the
accessibility of entities in a module. (These
attributes are also called accessibility
attributes.) - Local variables versus global variables
- private versus public objects
15Example
FUNCTION SUBPROGRAM
MAIN PROGRAM
16Example Write a subprogram which calculates the
cube root of a positive real number
MAIN PROGRAM program test_cube_root use
maths real x print , Type a positive real
number read , x Print , The cube root of
,x, is , cube_root(x) a b cube_root(x)
d end program test_cube_root
17module maths Publiccube_root contains function
cube_root (x) result (root) ! a function to
calculate the cube root of a positive real
number ! Dummy arguments declaration real,
intent (in) x ! Result variable
declaration real root ! Local variable
declaration reallog_x ! Calculate cube root by
using logs log_x log (x) root exp (log_x /
3.0) function cube_root end module maths
18Attributes
- intent (in) the dummy argument only provides
information to the procedure and is not allowed
to change its value any way - intent (out) the dummy argument only returns
information from the procedure to the calling
program - intent (inout) the dummy argument provides
information in both directions
19Examples of subprograms
- Write a program using either subroutine or
function - read the edges of a rectangle,
- write a subprogram which calculate
- area of rectangle
20program
subprogram
!this program is calculates area of a
rectangle !using subroutine program
area_calculation use rec reala,b,al print ,
"enter two edges of the rectangle" read ,
a,b call area (a,b,al) print ,
"a",a print,"b",b print , "area_of_rectangle"
,al endprogram area_calculation
module rec publicarea contains subroutine
area(a,b,al) real, intent(in)a,b real, intent
(out)al alab return endsubroutine area end
module rec
21program
subprogram
!this program is calculates area of a
rectangle program area_calculation use
rec reala,b,al print , "enter two edges of the
rectangle" read , a,b alarea (a,b) print ,
"a",a print,"b",b print , "area_of_rectangle"
,al endprogram area_calculation
module rec publicarea contains function
area(a,b)result (al) real, intent(in)a,b reala
l alab return endfunction area end module rec
22- Write a program using either subroutine or
function - read the three edges of a triangle,
- write a subprogram which calculate area of
triangle
23! This program written by SALIH SARIHAN studying
Electrical Engineering in ITU ! This program
calculate area of a triangle and control the rule
of drawn a triangle. ! this program writen by
using subroutine ! emailsarihans_at_itu.edu.tr mod
ule al_tria publicarea contains subroutine
area(a,b,c,al) real,intent(in)a,b,c real,inten
t(out)al reals s(abc)/2 alsqrt(s(s-a)
(s-b)(s-c)) return end subroutine area end
module al_tria
24program triangle_area use al_tria reala,b,c,al p
rint,"Please enter edges of the
triangle!" read,a,b,c call area(a,b,c,al) !
s(abc)/2 and area_of_trianglesqrt(s(s-a)(s-b
)(s-c)) if a triangle can be drawn, ! it
provides the a-bltcltab rule. Therefore if
a triangle is drawnable, ! s(s-a)(s-b)(s-c)
be a pozitive integers not a negative integer or
zero. ! Finally, if a triangle can be drawn, area
of triangle will be bigger than zero. if (algt0)
then print,"a",a print,"b",b print,"c",c pri
nt,"area of triangle is",al else print,"
This triangle can not be
drawn!!!" print," Please check the edges value
of the triangle and enter correct values
again!!!" end if end program triangle_area
25!This program written by Adem GÃœNEL from ITU
Meteorology Department module Arithmeticpublic
Addition,Subtraction,Multiplication,Division subr
outine Addition(x,y,z) integer,intent(in)x,y i
nteger,intent(out)zzxyend subroutine
Addition subroutine Subtraction(x,y,z) integer,i
ntent(in)x,y integer,intent(out)zzx-yend
subroutine SubtractionÂ
subroutine Multiplication(x,y,z)Â integer,intent(i
n)x,y integer,intent(out)zzxyend
subroutine Multiplication subroutine
Division(x,y,z) integer,intent(in)x,y integer,
intent(out)zzx/yend subroutine Divisionend
module Arithmetic
26!This program written by Adem GÃœNEL from ITU
Meteorology Department program
Arithmetic_Operationsuse Arithmeticintegera,y,
z,x do print, " Which arithmetic operations do
you want to?" print, "Addition (1)
Print, Subtraction (2)" print,
"Multiplication (3)" print, "Division
(4)" print, "Exit
(5)"read,a select case(a) case(1)
print, "Please enter two numbers"
read,x,ycall Subtraction(x,y,z) print,"Sum
of ,x,y, is ",z case(2) print, "Please
enter two numbers" read,x,y call
Subtraction(x,y,z) print,"Subtraction of
,x,y, is ",z
case(3) read,x,ycall Multiplication(x,y,z)
print,"Multiplication of ,x,y, is ",z
case(4) print, "Please enter two numbers"
read,x,ycall Division(x,y,z)
print,"Division of ,x,y, is ",zcase(5)
exit case default end selectenddoend
program Arithmetic_Operations
27program
subprogram
module ak public alan contains function
alan(a,b,c) result (al) real, intent(in)
a,b,c real al real s s(abc)/2.0
alsqrt(s(s-a)(s-b)(s-c)) return end
function alan end module ak
program triangle_area use ak real
a,b,c,al print ,"a,b,c" read ,a,b,c al
alan(a,b,c) print ,al end program triangle_area
28Write a subroutine which, when supplied with the
coordinates of two points (x1,y1) and (x2,y2),
calculates the distance of each point from the
origin and the distance between the points.
Note you can use these formulas
module distance_m publicdistancecontainssubro
utine distance(x1,y1,x2,y2,d12,d1,d2)!dummy
argument declarationreal, intent(in)x1,y1,x2,y2
real, intent(out)d12,d1,d2!calculate distance
of the first point from origind1 sqrt(x12
y12)!calculate distance of the second point
from origind2 sqrt(x22 y22)!calculate
distance between the two points.d12
sqrt((x2-x1)2 (y2-y1)2)!exit subend
subroutine distanceend module distance_m
program distance_proguse distance_m!variable
declarationrealx1,y1,x2,y2,d1,d2,d12!read the
first point (x1,y1)print ,"enter the first
point as (x1,y1)"read ,x1,y1!read the second
point (x2,y2)print ,"enter the first point as
(x2,y2)"read ,x2,y2!call subroutine distance
call distance(x1,y1,x2,y2,d12,d1,d2)!print
resultsprint,"the distance of the first point
to origin is gt d1",d1print,"the distance of
the second point to origin is gt
d2",d2print,"the distance between the two
points is gt d12",d12!end of the main
programend program distance_prog
29Write a function, which will return the cube root
of its argument.
module testcube publiccube_root contains functio
n cube_root(x) result(root) ! This function
program calculates the cube root of any real
number ! Dummy argument and result
declarations !Dummy argument declaration real,
intent(in)x !Result variable declaration realr
oot !Local variable declaration reallog_x !elimi
nate the zero case if(x0.0) then root
0.0 !Calculate cube root by using logs else if
(xlt0.0) then ! calculate the cube root by using
logs negative argument log_x log(-x) root
-exp(log_x/3.0) else !positive argument log_x
log(x) root exp(log_x/3.0) end if end function
cube_root end module testcube
Structure plan Function cube_root(x) If
x0 Return zero Else if xlt0 Return
exp(log(-x)/3) Else Return exp(log(x)/3)
30program e_4_1 use m1 real x1,y1,x2,y2,d_1,d_2,di
stance print ,"Koordinatlari giriniz ,
x1,y1,x2,y2" read , x1,y1,x2,y2 call
s1(x1,y1,x2,y2,d_1,d_2,distance) end program
e_4_1 module m1 public s1 contains
subroutine s1(x1,y1,x2,y2,d1,d2,d) real, intent
(in) x1,y1,x2,y2 real, intent (out)
d1,d2,d d1sqrt(x1x1y1y1)
d2sqrt(x2x2y2y2) dsqrt((x2-x1)2
(y2-y1)2) print ,"Merkezden uzaklik (x1,y1)
icin",d1 print ,"Merkezden uzaklik (x2,y2)
icin",d2 print ,"Noktalar arasi uzaklik",d
end subroutine s1 end module m1
31 program distance_prog! variable
declaration realx,y,b ! read the value of
x print ,"enter the values of x and b (both
must be positive)" read ,x,b! call function
for the log. y log_b_x(x,b)! print
results print ,"the logarithm of number x",x,"
to base b",b," is ",y! end of the main
program end program exercise_2!
function log_b_x(x,b) ! dummy argument
declaration real, intent(in)x,b real
log_denominator,log_nominator ! calculate the
nominator of the formula log_nominator
log10(x)! calculate the nominator of the
formula log_denominator log10(b)! calculate
the result log_b_x log_nominator /
log_denominator! exit sub end function log_b_x
32module cube_root_calc_1 public
cube_root contains function cube_root(x)
result(root)! Dummy argument declaration realx
! Result variable declaration realroot! Local
variable declaration reallog_x! Calculate
cube root by using logs log_x log(x) root
exp(log_x/3.0) end function cube_root end
module cube_root_calc_1!
program
test_cube_root use cube_root_calc_1 real
x print ," type real positive number" read ,
x print ,"the cube root of x",x,"
is",cube_root(x)end program test_cube_root
33module various_roots_1public
rootscontainssubroutine roots(x,square_root,cube
_root,fourth_root,fifth_root)!subroutine to
calculatebvarious rots of a positive real
numbers! Supplied as the first argument, and
returned them in the second to fifth
arguments!Dummy argument declarationreal,
intent(in)x!Result variable declarationreal,
intent(out)square_root,cube_root,fourth_root,fif
th_root!ocal variable declarationreallog_x!Ca
lculate square root using intrinsic
sqrt()square_root sqrt(x)!Calculate other
root by using logslog_x log(x)cube_root
exp(log_x/3.0)fourth_root exp(log_x/4.0)fifth_
root exp(log_x/5.0)end subroutine rootsend
module various_roots_1!
34program various_roots use various_roots_1!A
program to show the use of the subroutineroots re
al x,root_2,root_3,root_4,root_5 print ,"
type real positive number" read , x! obtain
roots call roots(x,root_2,root_3,root_4,root_5)
print ,"the square root of x",x,"
is",root_2 print ,"the cube root of x",x,"
is",root_3 print ,"the fourth root of x",x,"
is",root_4 print ,"the fifth root of x",x,"
is",root_5 end program various_roots
35module make_full_name_1 contains
subroutine get_full_name(first_name,last_name,full
_name)! Subroutine to join two names to form a
full name with a single! space between the
first and last names! Dummy argument
declaration character (len), intent(in)
first_name,last_name character (len),
intent(out) full_name! use adjustl to remove
redundant leading blanks, and trim! to
remove redundant blanks atr the end of first
name full_name trim(adjustl(first_name)) // "
" // c adjustl(last_name) end
subroutine get_full_name end module
make_full_name_1!
program
make_full_name use make_full_name_1! Variable
declaration character (len80)name_1,name_2,nam
e! read the first name print ,"enter the first
name" read ,name_1! read the surname print
,"enter the surname" read ,name_2! combine
two names by using the subroutine named
get_fuul_name call get_full_name(name_1,name
_2,name) print ,"the combination of the two
names is gt ",name end program make_full_name
36module Natural_Constantsreal,parameter,publicpi
3.1415927,g 9.81, e2.7182818end module
Natural_Constants!
program module_example_1 use
Natural_Constants print ,g,pi end program
module_example_1
37! Example P.8. (Catherine Spade, 11 October
1999) ! Temperature Converter with Procedures.
program A08 use A08M implicit none
real Fahr, Cels ! start program A08 call
Input( Fahr ) ! Subroutine reference Cels
Temp_C( Fahr ) ! Function reference call Output(
Fahr, Cels ) ! Subroutine reference stop end
program A08
38module A08M implicit none public Input,
Temp_C, Output Contains End
module A08M
subroutine Input( F_Temp ) real,
intent(out) F_Temp ! start subroutine Input
write (unit , fmt ) " Please enter the
Fahrenheit temperature. " read (unit ,
fmt ) F_Temp return end subroutine
Input
function Temp_C( F_Temp ) result( Temp_C_R )
real, intent(in) F_Temp real
Temp_C_R real, parameter T_SCALE 1.8,
OFFSET 32.0 ! start function Output
Temp_C_R (F_Temp - OFFSET) / T_SCALE
return end function Temp_C
subroutine Output( F_Temp, Temp_C_R ) real,
intent(in) F_Temp, Temp_C_R ! start
subroutine Output write (unit , fmt )
F_Temp, " deg. F ", Temp_C_R, " deg. C"
return end subroutine Output
39! Example 2.14 program C14 use C14M
implicit none ! start program C14 call Input(
) call Calculate( ) call Output( )
stop end program C14
module C14M implicit none public
Input, Calculate, Output real, private
Fahr, Cels contains subroutine Input( ) !
start subroutine Input write (unit , fmt
) " Enter the Fahrenheit temperature. "
read (unit , fmt ) Fahr return
end subroutine Input subroutine Calculate( )
real, parameter T_SCALE 1.8, OFFSET
32.0 ! start subroutine Calculate Cels
(Fahr - OFFSET) / T_SCALE return end
subroutine Calculate subroutine Output( ) !
start subroutine Output write (unit ,
fmt ) Fahr, " deg. F ", Cels, " deg. C"
return end subroutine Output end module
C14M
40Prepare a computer program which calculates and
prints, the bottom surface area and the volume of
a concrete cylinder block having the following
initial values  radius r 210 cm
height h 315 cm
41program question4 realr,h,bsa, vol real,
parameterpi3.14 r210 h315 bsapirr volbsa
h print,"bottom surface area",bsa,
"cm2" print,"volume", vol, "cm3" end program
question4
42Write a function which, when supplied with the
coordinates of two points (x1, y1) and (x2,
y2), calculates the distance between the points
by means of following formula. Â d (x2 - x1)
2 (y2 - y1) 2 1/2
43!this program is calculates distance !between two
points program distance use distance_m realx1,y1
,x2,y2,d print , "enter coordinates of two
points" read , x1,y1,x2,y2 ddist(x1,y1,x2,y2) pr
int , "x1",x1, "y1",y1 print,"x2",x2,"y2",y2
print , "distance",d endprogram distance
module distance_m publicdist contains function
dist(x1,y1,x2,y2)result (d) real,
intent(in)x1,y1,x2,y2 reald dsqrt((x2-x1)2
(y2-y1)2) return endfunction dist end module
distance_m
44module mod1public fun1,fun2,fun3,sub1contains
function fun1(x) result(a)real, intent(in)
xreal aa2x33xend function
fun1function fun2(x) result(b)real, intent(in)
xreal bb3x24end function
fun2function fun3(x) result(c)real, intent(in)
xreal cc 7x5end function
fun3subroutine sub1(a,b,c,z,fz)real, intent(in)
a,b,c,zreal, intent(out) fzfz
az2b2cend subroutine sub1end module mod1
pragram calculation use mod1 real
a,b,c,x,z,fz print , "enter a value for x" read
, x print , "enter a value for z" read , z a
fun1(x) b fun2(x) c fun3(x) call
sub1(a,b,c,z,fz) print , "fz is equal, fz end
program calculation
45HOMEWORK
PROBLEM Consider a geometrical body which
consists of a steel-cylinder and a cone of lead
having the same radius. Then, prepare a computer
program having the structure described in below
46- The main program will read the input values
(radius r50cm, height of the cylinder, h1300cm,
height of the cone h2 150cm, density of steel,
d1 7.85 t/m3, density of lead d2 11.40 t/m3
) - calculate the total volume of the given body
- calculate the total weight of the given body
- finally print,
- the input values
- the volume of the cylinder
- the weight
- the volume of the cone
- the weight of the cone
- the total volume of the given body
- the total weight of the given body
- using list directed output command including the
above-given expressions for the input values and
the results obtained.
47A function sub-program will calculate only the
bottom surface area  A subroutine sub-program
will calculate the volume of the cylinder the
weight of the cylinder  Another subroutine
sub-program will calculate the volume of the
cone the weight of the cone