Basic Building Blocks In all ways of life, the easiest way to solve most problems is to break them...
-
date post
21-Dec-2015 -
Category
Documents
-
view
213 -
download
0
Transcript of Basic Building Blocks In all ways of life, the easiest way to solve most problems is to break them...
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.
Seven Golden Rules
Always plan ahead
Develop in stages
Modularize
Keep it simple
Test throughly
Document all programs
Enjoy your programming
Programs and modules Main program unit
program name
use statements...Specification statements...Executable statements...
end program name
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.
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.
Module program unit
module name
use statements...Specification statements.
contains(Procedure definitions)
subprogram_1subprogram_2..subprogram_n
end module name
ProceduresA 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 ( there are 5 intrinsic subroutines ) functions ( create only a single result ; there are 97 intrinsic functions available in F )
Procedures 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
Procedures The main program and any subprogram need
never be aware of the internal details of any other program or subprogram!
Main program
Procedure 1
Procedure 2Procedure 3
Procedures
name (argument_1, argument_2, ...)
Examples:
a + b * log (c)
-b + sqrt ( b * b – 4.0 * a * c)
ProceduresA) PROBLEM : A farmer has a triangular field which he wishes to sow with wheat.
Write a program that reads the lenghts of the 3 sides of the field (in meters) and the sowing density (in grams per square meters)
Print the number of 10 kilo bags of wheat he must purchase in order to sow the whole field.
B.) ANALYSIS : STRUCTURE PLAN of the PROBLEM
read lenghts of the sides of the field ( a, b, c ) and calculate the area of the field
area = ( s (s-a)(s-b)(s-c) ) ½
2s = a + b + c
• read the sowing density
• calculate the quantity of wheat seed required
• calculate the number of 10 kilo bags this represents
C) SOLUTION
program wheat_sowing
! This program calculate quantity of wheat required to sow a triangular field
! Variable declarations
real : : a, b, c,s, area, density, quantity
integer : : num_bags
! read the lengths of the sides of the field
print *, “type the lengths of the 3 sides of the field in metres : “
read *, a, b, c
! calculate the area of the field
s = 0.5 * ( a + b + c )
area = sqrt( s * (s - a)*(s - b)*(s - c) )
! read sowing density
print *, “ What is the sowing density (gms/sq.m) ?”
read *, density
! calculate quantity of wheat and the number of 10 kilo bags
! round up more than 1 kg
quantity = density * area
num_bags = 0.0001 * quantity + 0.9
! print results
print *, “the area of the field is “, area,” sq. metres”
print *, “and “, num_bags,” 10 kilo bags will be required”
end program wheat_sowing
SubprogramsFunctions : 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
Functions 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
Functionsfunction cube_root result(root)! A function to calculate the cube root of ! a positive real number! Dummy argument declaration
real, intent(in) :: x! Result variable declaration
real :: root! Local variable declaration
real :: log_x! Calculate cube root by using logs
log_x = log(x)root = exp(log_x/3.0)
end function cube_root
Subroutinessubroutine roots (x, square_root, cube_root, fourth_root, & fifth_root)! Subroutine to calculate various roots of positive real! Number supplied as the first argument, and return them in! the second to fifth arguments
! Dummy argument declarations real, intent(in) :: x real, intent(out) :: square_root, cube_root, & fourth_root, fifth_root ! Local variable declaration real :: log_x ! Calculate square root using intrinsic sqrt square_root = sqrt(x) ! Calculate other roots by using logs log_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 roots
Arguments 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
Saving the values of local objects Local entities within a procedure are not accessible
from outside that procedure Once an exit has been made, they cease to exist If you want their values to ‘survive’ between calls,
usereal, save :: list of real variables
real, save::a, b=1.23, c
Integer, save::count=0
Example
MAIN PROGRAM
program ……..
real : : Alpha, Beta, Gamma
.
.
Alpha = Fkt ( Beta, Gamma )
.
.
end program ……….
FUNCTION SUBPROGRAM
function Fkt ( x, y )
real : : Fkt
real : : x, y
Fkt = x ** 2 - 2.5 * y + 3.7 * y ** 2
x = 0.0
end function Fkt
Example: 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
module maths
Public::cube_root
contains
function cube_root (x) result (root)
! a function to calculate the cube root of a positive real number
! Dummy arguments
real , intent (in) : : x
! Result variable declaration
real : : root
! Local variable declaration
real : : log_x
! Calculate cube root by using logs
log_x = log (x)
root = exp (log_x / 3.0)
function cube_root
end module maths
Attributes 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
Examples of subprograms
Write a program using either subroutine or function:
read the edges of a rectangle, write a subprogram which
calculate area of rectangle
!this program is calculates area of a rectangle
!using subroutine
program area_calculation
use rec
real::a,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
public::area
contains
subroutine area(a,b,al)
real, intent(in)::a,b
real, intent (out)::al
al=a*b
return
endsubroutine area
end module rec
program subprogram
!this program is calculates area of a rectangle
program area_calculation
use rec
real::a,b,al
print *, "enter two edges of the rectangle"
read *, a,b
al=area (a,b)
print *, "a=",a
print*,"b=",b
print *, "area_of_rectangle=",al
endprogram area_calculation
module rec
public::area
contains
function area(a,b)result (al)
real, intent(in)::a,b
real::al
al=a*b
return
endfunction area
end module rec
program subprogram
Write a program using either subroutine or function:
read the three edges of a triangle,
write a subprogram which calculate area of triangle
!this program calculate area of a triangle
!using subroutine
program triangle_area
use ak
real :: a,b,c,al
print *,"a,b,c"
read *,a,b,c
call alan(a,b,c,al)
print *,al
end program triangle_area
module ak
public :: alan
contains
subroutine alan(a,b,c,al)
real, intent (in)::a,b,c
real, intent (out)::al
real :: s
s=(a+b+c)/2
al=sqrt(s*(s-a)*(s-b)*(s-c))
return
end subroutine alan
end module ak
program subprogram
program subprogram
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
module ak
public :: alan
contains
function alan(a,b,c) result (al)
real, intent(in) :: a,b,c
real :: al
real :: s
s=(a+b+c)/2.0
al=sqrt(s*(s-a)*(s-b)*(s-c))
return
end function alan
end module ak
HOMEWORK 2 Dead Line : 28 / 03 / 2001
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 :
The main program will: read the input values (radius r=50cm, height of the cylinder, h1=300cm, 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.