Post on 08-Apr-2018
transcript
8/7/2019 TUTORIAL se PFD
1/56
A F o r t r a n 9 0 T u t o r i a l
Z a n e D o d s o n
y
C o m p u t e r S c i e n c e D e p a r t m e n t
U n i v e r s i t y o f N e w M e x i c o
J u n e 2 7 , 1 9 9 4
C o n t e n t s
1 S u r v e y o f t h e N e w F o r t r a n S t a n d a r d 3
1 . 1 N e w S o u r c e F o r m : : : : : : : : : : : : : : : : : : : : : : : : : : : 3
1 . 2 A r r a y P r o c e s s i n g : : : : : : : : : : : : : : : : : : : : : : : : : : : 3
1 . 3 M o d u l e s : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4
1 . 4 D e r i v e d T y p e s a n d G e n e r i c F u n c t i o n s : : : : : : : : : : : : : : : 5
1 . 5 P o i n t e r s a n d D y n a m i c D a t a S t r u c t u r e s : : : : : : : : : : : : : : : 6
1 . 6 P a r a m e t e r i z e d D a t a T y p e s : : : : : : : : : : : : : : : : : : : : : : 7
1 . 7 N u m e r i c a l I n q u i r y a n d M a n i p u l a t i o n F u n c t i o n s : : : : : : : : : : 8
2 E x a m p l e s a n d E x e r c i s e s 1 0
2 . 1 G e t t i n g S t a r t e d : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 0
2 . 2 B a s i c F o r t r a n P r o g r a m s : : : : : : : : : : : : : : : : : : : : : : : 1 0
2 . 3 I n t e r n a l S u b p r o g r a m s : : : : : : : : : : : : : : : : : : : : : : : : 1 2
2 . 4 A r r a y s : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 2
2 . 5 M o d u l e s : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 4
2 . 6 I n t e r f a c e s a n d G e n e r i c S u b p r o g r a m s : : : : : : : : : : : : : : : : 1 6
2 . 7 R e c u r s i v e S u b p r o g r a m s : : : : : : : : : : : : : : : : : : : : : : : 1 7
2 . 8 D y n a m i c D a t a S t r u c t u r e s : : : : : : : : : : : : : : : : : : : : : : 1 9
2 . 9 O p t i o n a l a n d K e y w o r d A r g u m e n t s : : : : : : : : : : : : : : : : : 2 5
2 . 1 0 A c h i e v i n g P o r t a b i l i t y : : : : : : : : : : : : : : : : : : : : : : : : : 2 9
3 A d v a n c e d N u m e r i c a l E x p e r i m e n t s 3 1
3 . 1 I n t e r v a l A r i t h m e t i c : : : : : : : : : : : : : : : : : : : : : : : : : : 3 1
3 . 2 S u b t l e t i e s i n S o l v i n g a Q u a d r a t i c E q u a t i o n : : : : : : : : : : : : 3 3
T h i s w o r k p a r t i a l l y s u p p o r t e d b y t h e N u m e r i c a l A l g o r i t h m s G r o u p L t d . a n d t h e N a t i o n a l
S c i e n c e F o u n d a t i o n ( C D A - 9 0 1 7 9 5 3 ) .
y
d z d o d @ c s . u n m . e d u
1
8/7/2019 TUTORIAL se PFD
2/56
4 C o m p l e t e E x a m p l e P r o g r a m s 3 6
4 . 1 R a t i o n a l A r i t h m e t i c : : : : : : : : : : : : : : : : : : : : : : : : : 3 6
4 . 2 L i n e a r E q u a t i o n S o l v e r s : : : : : : : : : : : : : : : : : : : : : : : 4 0
4 . 3 O n e - D i m e n s i o n a l M u l t i g r i d : : : : : : : : : : : : : : : : : : : : : 4 7
2
8/7/2019 TUTORIAL se PFD
3/56
1 S u r v e y o f t h e N e w F o r t r a n S t a n d a r d
F o r t r a n 9 0 h a s m a n y n e w f e a t u r e s t h a t m a k e i t a m o d e r n a n d r o b u s t l a n g u a g e
f o r n u m e r i c a l p r o g r a m m i n g . I n a d d i t i o n t o p r o v i d i n g m a n y n e w l a n g u a g e c o n -
s t r u c t s , F o r t r a n 9 0 c o n t a i n s F o r t r a n 7 7 a s a s u b s e t ( e x c e p t f o r f o u r s m a l l i n -
c o n s i s t e n c i e s ) . C o n s e q u e n t l y , a l l F o r t r a n 7 7 p r o g r a m s c a n b e c o m p i l e d a n d
s h o u l d p r o d u c e i d e n t i c a l r e s u l t s . H o w e v e r , a f e w a s p e c t s o f F o r t r a n 7 7 h a v e
b e e n l a b e l e d a s o b s o l e t e a n d m a y b e r e m o v e d f r o m t h e n e x t s t a n d a r d , a l l o w i n g
a p r o g r e s s i o n o f t h e l a n g u a g e w i t h o u t s u p p o r t i n g a l l p r e v i o u s l y a v a i l a b l e f e a -
t u r e s . T h i s s u r v e y s e c t i o n i s m e a n t t o h i g h l i g h t m o s t o f t h e n e w f e a t u r e s i n
F o r t r a n 9 0 a n d g i v e s o m e i n d i c a t i o n o f t h e i r u s e . E x a m p l e s a n d e x e r c i s e s b e g i n
i n s e c t i o n 2 .
1 . 1 N e w S o u r c e F o r m
O n e o f t h e m o s t v i s i b l e f e a t u r e s o f t h e n e w F o r t r a n s t a n d a r d i s i t s f r e e s o u r c e
f o r m . F o r t r a n s t a t e m e n t s m a y n o w a p p e a r a n y w h e r e o n a s o u r c e l i n e , a n d
c o l u m n s a r e n o l o n g e r r e s e r v e d . L i n e c o n t i n u a t i o n h a s a l s o b e e n i m p r o v e d a n d
u s e s t h e ` & ' c h a r a c t e r a t t h e e n d o f s o u r c e l i n e t o b e c o n t i n u e d . T r a i l i n g c o m -
m e n t s m a y b e u s e d a n d b e g i n w i t h a ` ! ' c h a r a c t e r a n d c o n t i n u e t o t h e e n d o f
t h e s o u r c e l i n e . T h e s e m i c o l o n , ` ' , i s u s e d a s a s t a t e m e n t s e p a r a t o r a n d a l l o w s
m u l t i p l e s t a t e m e n t s t o b e p l a c e d o n a s i n g l e s o u r c e l i n e . T h i s n e w s o u r c e f o r m
i s i l l u s t r a t e d i n t h e f o l l o w i n g p r o g r a m s e g m e n t .
t m p = x x = y y = t m p ! S w a p x a n d y .
p r i n t * , ' T h e v a l u e s o f x a n d y a r e ' , &
x y
B l a n k s a r e n o w s i g n i c a n t a n d t h e u n d e r s c o r e c h a r a c t e r i s p e r m i s s i b l e i n
a n i d e n t i e r . T h e n u m b e r o f s i g n i c a n t c h a r a c t e r s i n a n i d e n t i e r n a m e h a s
i n c r e a s e d f r o m 6 t o 3 1 . F o r t r a n 7 7 ' s x e d s o u r c e f o r m , l i n e c o n t i n u a t i o n , a n d
c o m m e n t s p e c i c a t i o n i s a l s o a c c e p t a b l e i n F o r t r a n 9 0 .
1 . 2 A r r a y P r o c e s s i n g
A r r a y p r o c e s s i n g f e a t u r e s a r e t h e m o s t s i g n i c a n t o f t h e l a n g u a g e e n h a n c e m e n t s
o e r e d b y t h e n e w s t a n d a r d . P o p u l a r F o r t r a n 7 7 e x t e n s i o n s , s u c h a s w h o l e a r r a y
o p e r a t i o n s , m a s k e d a s s i g n m e n t , a r r a y s e c t i o n s , a n d v e c t o r s u b s c r i p t i n g t h a t a r e
c o m m o n i n C r a y F o r t r a n a n d C M ( C o n n e c t i o n M a c h i n e ) F o r t r a n , a r e n o w p a r t
o f t h e F o r t r a n 9 0 s t a n d a r d . T h e s e t y p e s o f c o n s t r u c t s a r e i m p o r t a n t f o r p a r a l l e l
a n d v e c t o r c o m p u t e r s .
A r i t h m e t i c a n d l o g i c a l o p e r a t i o n s w o r k e l e m e n t a l l y o n a r r a y s , s o t h a t , f o r
e x a m p l e , C = A + B c a l c u l a t e s t h e s u m o f t w o m a t r i c e s , e l e m e n t - b y - e l e m e n t ,
s t o r i n g t h e r e s u l t i n C . T h e s t a t e m e n t Z = ( A > 0 ) c r e a t e s a l o g i c a l a r r a y
w i t h e l e m e n t s w h o s e e n t r i e s a r e . t r u e . w h e r e t h e e l e m e n t s o f A a r e g r e a t e r
3
8/7/2019 TUTORIAL se PFD
4/56
t h a n 0 a n d . f a l s e . e l s e w h e r e . L o g i c a l e x p r e s s i o n s o f t h i s k i n d m a y b e u s e d
i n a m a s k e d a s s i g n m e n t s t a t e m e n t , p e r f o r m i n g t h e s p e c i e d a s s i g n m e n t o n l y
w h e r e t h e m a s k i s t r u e .
T o a c c o m p a n y t h i s n e w n o t a t i o n a l c o n v e n i e n c e , m o s t o f t h e i n t r i n s i c f u n c - I n t r i n s i c f u n c t i o n
a r e d e n e d b y t h e l a n
g u a g e a n d a r e t h e r e f o
p r e s e n t i n a n y s t a n d a r d
c o n f o r m i n g i m p l e m e n t
t i o n .
t i o n s a c t e l e m e n t a l l y o n a r r a y s , s o t h a t a n e x p r e s s i o n s u c h a s l o g ( A ) a p p l i e s
t h e s c a l a r l o g f u n c t i o n t o e a c h e l e m e n t i n A ( i n a n u n s p e c i e d o r d e r ) .
A r r a y s m a y n o w b e d y n a m i c a l l y a l l o c a t e d a t r u n - t i m e u s i n g p o i n t e r s o r
a l l o c a t a b l e a r r a y s .
p r o g r a m A l l o c a t a b l e M a t r i c e s
r e a l , a l l o c a t a b l e : : A ( : , : )
i n t e g e r n
p r i n t * , ' E n t e r a n i n t e g e r f o r t h e a r r a y d i m e n s i o n : '
r e a d * , n
! D y n a m i c a l l y a l l o c a t e a n n x n m a t r i x .
a l l o c a t e ( A ( n , n ) )
c a l l r a n d o m _ n u m b e r ( A ) ! F i l l A w i t h 0 , 1 ) r a n d o m r e a l s .
! M a s k e d a s s i g n m e n t .
w h e r e ( A / = 0 . 0 )
A = 1 . 0 / A
e l s e w h e r e
A = - 1 . 0
e n d w h e r e
p r i n t * , ' A = '
p r i n t * , A
e n d p r o g r a m A l l o c a t a b l e M a t r i c e s
A u t o m a t i c a r r a y s a r e a l s o p r o p e r l y h a n d l e d a n d a r e c r e a t e d o n e n t r y t o a
s u b p r o g r a m a n d d e s t r o y e d u p o n e x i t . L a c k o f t h i s f e a t u r e i n F o r t r a n 7 7 w a s
a s e v e r e l i m i t a t i o n a n d o f t e n r e q u i r e d t h a t s c r a t c h v a r i a b l e s b e p a s s e d i n t h e
a r g u m e n t l i s t . F u n c t i o n s m a y a l s o b e a r r a y - v a l u e d , a s c a n b e s e e n f r o m s u c h
a s s i g n m e n t s a s A = l o g ( B )
1 . 3 M o d u l e s
C o m m o n b l o c k s i n F o r t r a n 7 7 w e r e t h e o n l y p o r t a b l e m e a n s o f a c h i e v i n g g l o b a l
a c c e s s o f d a t a t h r o u g h o u t a c o l l e c t i o n o f s u b p r o g r a m s . T h i s i s u n s a f e , e r r o r -
p r o n e , a n d e n c o u r a g e s b a d p r o g r a m m i n g p r a c t i c e s i n g e n e r a l . F o r t r a n 9 0 p r o -
v i d e s a n e w p r o g r a m u n i t , a m o d u l e , t h a t r e p l a c e s t h e c o m m o n b l o c k a n d a l s o
p r o v i d e s m a n y o t h e r f e a t u r e s t h a t a l l o w m o d u l a r i z a t i o n a n d d a t a h i d i n g , k e y
c o n c e p t s i n d e v e l o p i n g l a r g e , m a i n t a i n a b l e n u m e r i c a l c o d e .
M o d u l e s c o n s i s t o f a s e t o f d e c l a r a t i o n s a n d m o d u l e p r o c e d u r e s t h a t a r e M o d u l e p r o c e d u r e
a r e s u b p r o g r a m s d e n e
w i t h i n a m o d u l e .
g r o u p e d u n d e r a s i n g l e g l o b a l n a m e a v a i l a b l e f o r a c c e s s i n a n y o t h e r p r o g r a m
u n i t v i a t h e u s e s t a t e m e n t . I n t e r f a c e s t o t h e c o n t a i n e d m o d u l e p r o c e d u r e s a r e
A n i n t e r f a c e d e s c r i b e
a s u b p r o g r a m , i t s a
t r i b u t e s , a n d t h e a
t r i b u t e s o f i t s a r g u
m e n t s , t o t h e c a l l i n
p r o g r a m o r s u b p r o g r a m
e x p l i c i t a n d p e r m i t c o m p i l e t i m e t y p e - c h e c k i n g i n a l l p r o g r a m u n i t s t h a t u s e t h e
4
8/7/2019 TUTORIAL se PFD
5/56
m o d u l e . V i s i b i l i t y o f i t e m s i n a m o d u l e m a y b e r e s t r i c t e d b y u s i n g t h e p r i v a t e
a t t r i b u t e . T h e p u b l i c a t t r i b u t e i s a l s o a v a i l a b l e . T h o s e i d e n t i e r s n o t d e c l a r e d
p r i v a t e i n a m o d u l e i m p l i c i t l y h a v e t h e p u b l i c a t t r i b u t e .
m o d u l e T y p i c a l M o d u l e
p r i v a t e s w a p ! M a k e s w a p v i s i b l e o n l y w i t h i n t h i s m o d u l e .
c o n t a i n s
s u b r o u t i n e o r d e r ( x , y ) ! P u b l i c b y d e f a u l t .
i n t e g e r , i n t e n t ( i n o u t ) : : x , y
i f ( a b s ( x ) < a b s ( y ) ) c a l l s w a p ( x , y )
e n d s u b r o u t i n e o r d e r
s u b r o u t i n e s w a p ( x , y )
i n t e g e r , i n t e n t ( i n o u t ) : : x , y
i n t e g e r t m p
t m p = x x = y y = t m p ! S w a p x a n d y .
e n d s u b r o u t i n e s w a p
e n d m o d u l e T y p i c a l M o d u l e
p r o g r a m U s e T y p i c a l M o d u l e
u s e T y p i c a l M o d u l e
! D e c l a r e a n d i n i t i a l i z e x a n d y .
i n t e g e r : : x = 1 0 , y = 2 0
p r i n t * , x , y
c a l l o r d e r ( x , y )
p r i n t * , x , y
e n d p r o g r a m U s e T y p i c a l M o d u l e
1 . 4 D e r i v e d T y p e s a n d G e n e r i c F u n c t i o n s
D e r i v e d o r u s e r - d e n e d t y p e s , s i m i l a r t o r e c o r d s o r s t r u c t u r e s i n o t h e r l a n g u a g e s ,
a r e a v a i l a b l e i n F o r t r a n 9 0 . D e r i v e d t y p e s a r e b u i l t f r o m t h e i n t r i n s i c t y p e s o r
o t h e r d e r i v e d t y p e s a n d a l l o w t h e c r e a t i o n o f d a t a t y p e s t h a t b e h a v e a s i f t h e y
w e r e i n t r i n s i c t y p e s . G e n e r i c f u n c t i o n s , a n o t h e r n e w f e a t u r e i n F o r t r a n 9 0 , G e n e r i c f u n c t i o n s a r
f u n c t i o n s w i t h t h e s a m
n a m e w h i c h b e h a v e d i
f e r e n t l y b a s e d o n t h
t y p e s o f t h e a r g u m e n
r e c e i v e d . A n e x a m p l e
t h e ` + ' o p e r a t o r , w h i c
o p e r a t e s o n i n t e g e r s a
w e l l a s o a t i n g p o i n
n u m b e r s .
h e l p t o m a k e t h e s u p p o r t f o r d e r i v e d d a t a t y p e s c o m p l e t e . A g e n e r i c f u n c t i o n
s u c h a s ` + ' m a y b e e x t e n d e d t o o p e r a t e d i r e c t l y o n a d e r i v e d t y p e , c o m b i n i n g t h e
n o t a t i o n a l c o n v e n i e n c e a n d c l a r i t y o f o p e r a t o r s w i t h t h e a b s t r a c t i o n o f d e r i v e d
t y p e s . T h e m o d u l e a n d p r o g r a m b e l o w i l l u s t r a t e t h e e x t e n s i o n o f t h e g e n e r i c
o p e r a t o r ` + ' , t o o p e r a t e o n a d e r i v e d t y p e , i n t e r v a l
m o d u l e I n t e r v a l A r i t h m e t i c
t y p e i n t e r v a l
r e a l a ! L e f t e n d p o i n t
r e a l b ! R i g h t e n d p o i n t
e n d t y p e i n t e r v a l
5
8/7/2019 TUTORIAL se PFD
6/56
i n t e r f a c e o p e r a t o r ( + )
m o d u l e p r o c e d u r e a d d I n t e r v a l s
e n d i n t e r f a c e
c o n t a i n s
f u n c t i o n a d d I n t e r v a l s ( f i r s t , s e c o n d )
t y p e ( i n t e r v a l ) a d d I n t e r v a l s
t y p e ( i n t e r v a l ) , i n t e n t ( i n ) : : f i r s t , s e c o n d
! N u m e r i c a l l y , t h e l e f t a n d r i g h t e n d p o i n t s o f t h e i n t e r v a l
! s u m s h o u l d b e r o u n d e d d o w n a n d u p , r e s p e c t i v e l y , t o
! e n s u r e t h a t n u m b e r s i n t h e t w o i n t e r v a l s a r e a l s o i n t h e
! s u m . T h i s h a s b e e n o m i t t e d t o s i m p l i f y t h e e x a m p l e .
a d d I n t e r v a l s = i n t e r v a l ( f i r s t % a + s e c o n d % a , &
f i r s t % b + s e c o n d % b )
e n d f u n c t i o n a d d I n t e r v a l s
e n d m o d u l e I n t e r v a l A r i t h m e t i c
p r o g r a m I n t e r v a l s
u s e I n t e r v a l A r i t h m e t i c
t y p e ( i n t e r v a l ) : : x = i n t e r v a l ( 1 . 0 , 2 . 0 )
t y p e ( i n t e r v a l ) : : y = i n t e r v a l ( 3 . 0 , 4 . 0 )
t y p e ( i n t e r v a l ) z
z = x + y
p r i n t * , ' I n t e r v a l s u m : ( ' , z % a , ' , ' , z % b , ' ) . '
e n d p r o g r a m I n t e r v a l s
1 . 5 P o i n t e r s a n d D y n a m i c D a t a S t r u c t u r e s
F o r t r a n 9 0 c o n t a i n s 3 t y p e s o f d y n a m i c d a t a : a l l o c a t a b l e a r r a y s , a u t o m a t i c d a t a
o b j e c t s , a n d p o i n t e r s . A l l o c a t a b l e a r r a y s w e r e d e s c r i b e d b r i e y i n s e c t i o n 1 . 2
a n d a p p l y o n l y t o a r r a y s . A u t o m a t i c d a t a o b j e c t s c o n s i s t o f t h o s e o b j e c t s t h a t
a r e c r e a t e d o n e n t r y t o a s u b p r o g r a m a n d d e s t r o y e d u p o n e x i t . P o i n t e r s m a y
b e u s e d w i t h s c a l a r o r a r r a y q u a n t i t i e s o f a n y t y p e a n d a r e u s e d t o c o n s t r u c t
d y n a m i c s t r u c t u r e s s u c h a s l i n k e d l i s t s a n d t r e e s .
T h e f o l l o w i n g p r o g r a m i l l u s t r a t e s h o w a d y n a m i c d a t a s t r u c t u r e c a n b e d e -
c l a r e d a n d m a n i p u l a t e d .
p r o g r a m L i n k e d L i s t
t y p e n o d e
r e a l d a t a
t y p e ( n o d e ) , p o i n t e r : : n e x t
e n d t y p e n o d e
t y p e ( n o d e ) , p o i n t e r : : l i s t , c u r r e n t
n u l l i f y ( l i s t ) ! I n i t i a l i z e l i s t t o p o i n t t o n o t a r g e t .
6
8/7/2019 TUTORIAL se PFD
7/56
! P l a c e t w o e l e m e n t s i n t h e l i s t .
a l l o c a t e ( l i s t ) ! R e s e r v e s p a c e f o r f i r s t n o d e .
c a l l r a n d o m _ n u m b e r ( l i s t % d a t a ) ! I n i t i a l i z e d a t a p o r t i o n .
a l l o c a t e ( l i s t % n e x t ) ! R e s e r v e s p a c e f o r s e c o n d n o d e .
c a l l r a n d o m _ n u m b e r ( l i s t % n e x t % d a t a ) ! I n i t i a l i z e d a t a p o r t i o n .
n u l l i f y ( l i s t % n e x t % n e x t ) ! I n i t i a l i z e n e x t t o p o i n t t o n o t a r g e t .
! O u t p u t t h e l i s t .
c u r r e n t = > l i s t ! A s s i g n t a r g e t o f l i s t t o t a r g e t o f c u r r e n t .
d o w h i l e ( a s s o c i a t e d ( c u r r e n t ) )
p r i n t * , c u r r e n t % d a t a
c u r r e n t = > c u r r e n t % n e x t
e n d d o
e n d p r o g r a m L i n k e d L i s t
1 . 6 P a r a m e t e r i z e d D a t a T y p e s
P o r t a b i l i t y o f n u m e r i c a l c o d e h a s l o n g b e e n d i c u l t , p r i m a r i l y d u e t o d i e r e n c e s
i n t h e w o r d s i z e s o f t h e c o m p u t e r s o n w h i c h t h e c o d e i s r u n . F o r t r a n 9 0 i n t r o -
d u c e s p a r a m e t e r i z e d t y p e s , i n c r e a s i n g p o r t a b i l i t y o f s o f t w a r e f r o m m a c h i n e t o
m a c h i n e . T h i s i s d o n e u s i n g k i n d v a l u e s , c o n s t a n t s a s s o c i a t e d w i t h a n i n t r i n s i c
t y p e s u c h a s i n t e g e r o r r e a l . P a r a m e t e r i z a t i o n o f k i n d v a l u e s a l l o w s p r e c i s i o n
c h a n g e s b y c h a n g i n g a s i n g l e c o n s t a n t i n t h e p r o g r a m . S e v e r a l i n t r i n s i c f u n c -
t i o n s a r e p r o v i d e d t o s e l e c t k i n d v a l u e s b a s e d o n t h e r a n g e a n d p r e c i s i o n d e s i r e d
a n d i n q u i r e a b o u t a v a r i a b l e ' s p r e c i s i o n c h a r a c t e r i s t i c s i n a p o r t a b l e w a y .
m o d u l e P r e c i s i o n
! D e f i n e Q t o b e t h e k i n d n u m b e r c o r r e s p o n d i n g t o a t l e a s t 1 0
! d e c i m a l d i g i t s w i t h a d e c i m a l e x p o n e n t o f a t l e a s t 3 0 .
i n t e g e r , p a r a m e t e r : : Q = s e l e c t e d _ r e a l _ k i n d ( 1 0 , 3 0 )
e n d m o d u l e P r e c i s i o n
m o d u l e S w a p p i n g
u s e P r e c i s i o n
c o n t a i n s
s u b r o u t i n e s w a p ( x , y )
r e a l ( Q ) , i n t e n t ( i n o u t ) : : x , y
r e a l ( Q ) t m p
t m p = x x = y y = t m p
e n d s u b r o u t i n e s w a p
e n d m o d u l e S w a p p i n g
p r o g r a m P o r t a b l e
u s e P r e c i s i o n
u s e S w a p p i n g
! D e c l a r e a n d i n i t i a l i z e a a n d b u s i n g c o n s t a n t s w i t h k i n d v a l u e
7
8/7/2019 TUTORIAL se PFD
8/56
! g i v e n b y Q i n t h e P r e c i s i o n m o d u l e .
r e a l ( Q ) : : a = 1 . 0 _ Q , b = 2 . 0 _ Q
p r i n t * , a , b
c a l l s w a p ( a , b )
p r i n t * , a , b
e n d p r o g r a m P o r t a b l e
1 . 7 N u m e r i c a l I n q u i r y a n d M a n i p u l a t i o n F u n c t i o n s
F o r t r a n 9 0 i n t r o d u c e s s e v e r a l i n t r i n s i c f u n c t i o n s t o i n q u i r e a b o u t m a c h i n e d e -
p e n d e n t c h a r a c t e r i s t i c s o f a n i n t e g e r o r r e a l . F o r e x a m p l e , t h e i n q u i r y f u n c t i o n ,
h u g e , c a n b e u s e d t o n d t h e l a r g e s t m a c h i n e r e p r e s e n t a b l e n u m b e r f o r a n i n -
t e g e r o r r e a l v a l u e . T h e i n t e g e r m o d e l u s e d b y t h e s e i n q u i r y f u n c t i o n s i s
1
i = s
q 1
X
k = 0
d
k
r
k
w h e r e
i i s t h e i n t e g e r v a l u e
s i s t h e s i g n ( + 1 o r - 1 )
r i s t h e r a d i x ( r > 1 )
q i s t h e n u m b e r o f d i g i t s ( q > 0 )
d
k
i s t h e k t h d i g i t , 0 d
k
< r
T h e o a t i n g - p o i n t m o d e l u s e d b y t h e i n q u i r y f u n c t i o n s i s
x = s b
e
p
X
k = 1
f
k
b
k
w h e r e
x i s t h e r e a l v a l u e
s i s t h e s i g n ( + 1 o r - 1 )
b i s t h e b a s e ( b > 1 )
e i s t h e e x p o n e n t
p i s t h e n u m b e r o f m a n t i s s a d i g i t s ( p > 1 )
f
k
i s t h e k t h d i g i t , 0 f
k
< b f
1
= 0 ) f
k
= 0 8 k
T a b l e 1 l i s t s i n t r i n s i c f u n c t i o n s t h a t i n q u i r e a b o u t t h e n u m e r i c a l e n v i r o n m e n t .
T a b l e 2 l i s t s i n t r i n s i c f u n c t i o n s t h a t m a n i p u l a t e t h e n u m e r i c a l c h a r a c t e r i s t i c s
o f v a r i a b l e s i n t h e r e a l m o d e l . A n i m p o r t a n t f e a t u r e o f a l l o f t h e s e i n t r i n s i c
f u n c t i o n s i s t h a t t h e y a r e g e n e r i c a n d m a y b e u s e d t o o b t a i n i n f o r m a t i o n a b o u t
a n y k i n d o f i n t e g e r o r r e a l s u p p o r t e d b y t h e F o r t r a n 9 0 i m p l e m e n t a t i o n .
1
I n f o r m a t i o n o n t h e i n t e g e r a n d o a t i n g - p o i n t m o d e l s , a s w e l l a s t h e f o l l o w i n g t a b l e s i s
t a k e n f r o m c h a p t e r 1 3 o f 1 ] .
8
8/7/2019 TUTORIAL se PFD
9/56
F u n c t i o n D e s c r i p t i o n
d i g i t s ( x ) q f o r a n i n t e g e r a r g u m e n t , p f o r a r e a l a r g u m e n t
e p s i l o n ( x ) b
1 p
f o r a r e a l a r g u m e n t
h u g e ( x ) L a r g e s t i n t h e i n t e g e r o r r e a l m o d e l
m i n e x p o n e n t ( x ) M i n i m u m v a l u e o f e i n t h e r e a l m o d e l
m a x e x p o n e n t ( x ) M a x i m u m v a l u e o f e i n t h e r e a l m o d e l
p r e c i s i o n ( x ) D e c i m a l p r e c i s i o n ( r e a l o r c o m p l e x )
r a d i x ( x ) T h e b a s e b o f t h e i n t e g e r o r r e a l m o d e l
r a n g e ( x ) D e c i m a l e x p o n e n t r a n g e ( r e a l , c o m p l e x , o r i n t e g e r )
t i n y ( x ) S m a l l e s t p o s i t i v e v a l u e i n t h e r e a l m o d e l
T a b l e 1 : N u m e r i c I n q u i r y F u n c t i o n s
F u n c t i o n D e s c r i p t i o n
e x p o n e n t ( x ) V a l u e o f e i n t h e r e a l m o d e l
f r a c t i o n ( x ) F r a c t i o n a l p a r t i n t h e r e a l m o d e l
n e a r e s t ( x ) N e a r e s t p r o c e s s o r n u m b e r i n a g i v e n d i r e c t i o n
r r s p a c i n g ( x ) R e c i p r o c a l o f r e l a t i v e s p a c i n g n e a r a r g u m e n t
s e t e x p o n e n t ( x ) S e t t h e v a l u e o f e t o a s p e c i e d v a l u e
s p a c i n g ( x ) M o d e l a b s o l u t e s p a c i n g n e a r t h e a r g u m e n t
T a b l e 2 : N u m e r i c M a n i p u l a t i o n F u n c t i o n s
9
8/7/2019 TUTORIAL se PFD
10/56
2 E x a m p l e s a n d E x e r c i s e s
2 . 1 G e t t i n g S t a r t e d
T h e F o r t r a n 9 0 c o m p i l e r i s i n v o k e d , s i m i l a r t o a n y o t h e r c o m p i l e r , b y i s s u i n g
a c o m m a n d w i t h t h e n a m e o f t h e c o m p i l e r , s u c h a s f 9 0 < p r o g > , a t t h e s h e l l
p r o m p t . T h e N A G F o r t r a n 9 0 c o m p i l e r h a s s e v e r a l n a m i n g c o n v e n t i o n s t h a t a r e
u s e f u l . I f t h e l e n a m e ' s e x t e n s i o n e n d s w i t h f , i t i s a s s u m e d t o b e F o r t r a n 7 7
s o u r c e u s i n g i t s x e d s o u r c e f o r m . U s i n g . f 9 0 a s t h e e x t e n s i o n , i t i s a s s u m e d
t h a t t h e s o u r c e l e u s e s t h e f r e e s o u r c e f o r m . T h e s e c a n b e o v e r r i d d e n u s i n g
c o m p i l e r s w i t c h e s a n d o p t i o n s . S e e t h e m a n u a l p a g e f o r t h e f 9 0 c o m m a n d f o r
m o r e d e t a i l s .
A s a r s t a t t e m p t a t u s i n g t h e F o r t r a n 9 0 c o m p i l e r , t r y t h e f o l l o w i n g e x e r c i s e .
E x e r c i s e 2 . 1 E n t e r , c o m p i l e , a n d r u n t h e H e l l o p r o g r a m g i v e n b e l o w . C a l l t h e
l e h e l l o . f 9 0 . I t c a n b e c o m p i l e d b y i s s u i n g t h e c o m m a n d f 9 0 h e l l o a t t h e
s h e l l p r o m p t . N o t e t h e u s e o f F o r t r a n 9 0 ' s f r e e s o u r c e f o r m .
p r o g r a m H e l l o
p r i n t * , ' H e l l o , w o r l d '
e n d p r o g r a m H e l l o
2 . 2 B a s i c F o r t r a n P r o g r a m s
D e c l a r a t i o n s o f v a r i a b l e s a n d p a r a m e t e r s i n F o r t r a n 7 7 h a v e b e e n c h a n g e d
s l i g h t l y i n t h e n e w s t a n d a r d t o a l l o w f o r m o r e c o n c i s e s p e c i c a t i o n o f a n i d e n -
t i e r ' s a t t r i b u t e s . T h e F o r t r a n 7 7 d e c l a r a t i o n ,
i n t e g e r N
p a r a m e t e r ( N = 1 0 )
n o w c a n b e w r i t t e n m o r e c o n c i s e l y a s
i n t e g e r , p a r a m e t e r : : N = 1 0
A s s h o w n i n t h e a b o v e d e c l a r a t i o n , c o n s t a n t s a n d v a r i a b l e s a l i k e m a y b e
i n i t i a l i z e d a t t h e t i m e o f d e c l a r a t i o n .
2
S e v e r a l n e w c o n t r o l c o n s t r u c t s , m a n y i m p l e m e n t e d a s e x t e n s i o n s t o F o r -
t r a n 7 7 , a r e n o w o c i a l l y p a r t o f F o r t r a n 9 0 . T h e s e i n c l u d e d o . . . e n d
d o d o w h i l e ( c o n d i t i o n ) . . . e n d d o , a n d s e l e c t c a s e ( c a s e e x p r
) . . . e n d c a s e . T h e d o w h i l e ( c o n d i t i o n ) . . . e n d d o c o n s t r u c t i s
i l l u s t r a t e d i n n e x t e x e r c i s e . N o t e t h a t a l i n e n u m b e r a n d t h e c o n t i n u e s t a t e -
m e n t a r e n o l o n g e r n e c e s s a r y t o m a r k t h e e n d o f a d o l o o p .
F o r t r a n 9 0 i n t r o d u c e s s y n o n y m s f o r s e v e r a l r e l a t i o n a l o p e r a t o r s , m a k i n g
t h e m m o r e n a t u r a l a n d s i m i l a r t o r e l a t i o n a l o p e r a t o r s i n o t h e r l a n g u a g e s . T h e s e
a r e s u m m a r i z e d i n T a b l e 3 . E i t h e r s t y l e i s a c c e p t a b l e i n F o r t r a n 9 0 a n d t h e s t y l e s
2
T h e d o u b l e c o l o n , ` : : ' , i s n e c e s s a r y w h e n m o r e t h a n o n e a t t r i b u t e i s g i v e n f o r a v a r i a b l e ,
o r t h e v a r i a b l e i s t o b e i n i t i a l i z e d .
1 0
8/7/2019 TUTORIAL se PFD
11/56
F o r t r a n 7 7 F o r t r a n 9 0 S y n o n y m
. l t . <
. l e . < =
. e q . = =
. g t . >
. g e . > =
. n e . / =
T a b l e 3 : F o r t r a n 9 0 R e l a t i o n a l O p e r a t o r s
m a y b e u s e d i n t e r c h a n g e a b l y i n e i t h e r s o u r c e f o r m .
N o n - a d v a n c i n g I / O i s a n o t h e r n e w f e a t u r e o f F o r t r a n 9 0 i l l u s t r a t e d i n t h e
n e x t e x e r c i s e . I t p e r m i t s s e v e r a l w r i t e s t a t e m e n t s t o o u t p u t t o a s i n g l e l i n e ,
s o m e t h i n g t h a t w a s n o t p o s s i b l e i n F o r t r a n 7 7 . T h e s p e c i c a t i o n o f t h e f o r m a t
f o r t h e o u t p u t h a s a l s o b e e n i m p r o v e d , e l i m i n a t i n g t h e n e e d f o r l i n e n u m b e r s
a n d a s e p a r a t e f o r m a t s t a t e m e n t .
C o m m e n t s m a y b e p l a c e d a n y w h e r e o n t h e s o u r c e l i n e , p r e c e d e d w i t h a
! ' c h a r a c t e r . T r a i l i n g c o m m e n t s a r e a l s o p o s s i b l e . A l l o f t h e s e f e a t u r e s a r e
i l l u s t r a t e d i n t h e f o l l o w i n g e x e r c i s e .
E x e r c i s e 2 . 2 W r i t e a C e l s i u s - F a h r e n h e i t c o n v e r s i o n t a b l e u s i n g t h e f o l l o w i n g
p r o g r a m a s a g u i d e . N o t e t h a t t h i s p r o g r a m o u t p u t s a F a h r e n h e i t - C e l s i u s t a b l e .
p r o g r a m F a h r e n h e i t _ C e l s i u s
! O u t p u t a t a b l e o f F a h r e n h e i t a n d e q u i v a l e n t C e l s i u s t e m p e r a t u r e s
! f r o m l o w t o h i g h i n s t e p s o f s t e p .
r e a l , p a r a m e t e r : : l o w = 0 . 0
r e a l , p a r a m e t e r : : h i g h = 1 0 0 . 0
r e a l , p a r a m e t e r : : s t e p = 1 0 . 0
r e a l f , c ! F a h r e n h e i t a n d C e l s i u s t e m p e r a t u r e s , r e s p e c t i v e l y .
f = l o w
d o w h i l e ( f < = h i g h )
w r i t e ( * , f m t = " ( F 8 . 3 ) " , a d v a n c e = " n o " ) f
c = 5 . 0 * ( f - 3 2 ) / 9 . 0
w r i t e ( * , f m t = " ( F 8 . 3 ) " ) c
f = f + s t e p ! A d v a n c e t h e F a h r e n h e i t t e m p e r a t u r e .
e n d d o
e n d p r o g r a m F a h r e n h e i t _ C e l s i u s
1 1
8/7/2019 TUTORIAL se PFD
12/56
2 . 3 I n t e r n a l S u b p r o g r a m s
I n F o r t r a n 7 7 , a l l s u b p r o g r a m s a r e e x t e r n a l w i t h t h e e x c e p t i o n o f s t a t e m e n t
f u n c t i o n s . I n t e r n a l s u b p r o g r a m s a r e n o w p o s s i b l e u n d e r F o r t r a n 9 0 a n d a c h i e v e
a n e e c t s i m i l a r t o F o r t r a n 7 7 ' s s t a t e m e n t f u n c t i o n s . T h e y a r e v i s i b l e o n l y
w i t h i n t h e c o n t a i n i n g p r o g r a m a n d h a v e a n e x p l i c i t i n t e r f a c e , g u a r d i n g a g a i n s t
t y p e m i s m a t c h e s i n c a l l s t o t h e s u b p r o g r a m . I n t e r n a l s u b p r o g r a m s m u s t b e
s e p a r a t e d f r o m t h e m a i n p r o g r a m b y t h e c o n t a i n s s t a t e m e n t . A n e x a m p l e
i l l u s t r a t i n g a n i n t e r n a l s u b p r o g r a m i s g i v e n b e l o w .
p r o g r a m T r i a n g l e
r e a l a , b , c
p r i n t * , ' E n t e r t h e l e n g t h s o f t h e t h r e e s i d e s o f t h e t r i a n g l e '
r e a d * , a , b , c
p r i n t * , ' T r i a n g l e ' ' s a r e a : ' , t r i a n g l e A r e a ( a , b , c )
c o n t a i n s
f u n c t i o n t r i a n g l e A r e a ( a , b , c )
r e a l t r i a n g l e A r e a
r e a l , i n t e n t ( i n ) : : a , b , c
r e a l t h e t a
r e a l h e i g h t
t h e t a = a c o s ( ( a * * 2 + b * * 2 - c * * 2 ) / ( 2 . 0 * a * b ) )
h e i g h t = a * s i n ( t h e t a )
t r i a n g l e A r e a = 0 . 5 * b * h e i g h t
e n d f u n c t i o n t r i a n g l e A r e a
e n d p r o g r a m T r i a n g l e
E x e r c i s e 2 . 3 R e w r i t e t h e C e l s i u s - F a h r e n h e i t p r o g r a m o f t h e p r e v i o u s e x e r c i s e
t o u s e a n i n t e r n a l f u n c t i o n t o c a l c u l a t e t h e F a h r e n h e i t t e m p e r a t u r e .
2 . 4 A r r a y s
A r r a y s a n d a r r a y o p e r a t i o n s h a v e u n d e r g o n e e x t e n s i v e c h a n g e i n t h e n e w F o r t r a n
s t a n d a r d . I n F o r t r a n 9 0 , i t i s p o s s i b l e t o t r e a t a n a r r a y a s a s i n g l e o b j e c t . T h i s
p e r m i t s a r r a y - v a l u e d e x p r e s s i o n s s u c h a s C = A + B w i t h o u t t h e n e e d f o r d o
l o o p s t h a t a r e r e q u i r e d i n F o r t r a n 7 7 t o p r o c e s s t h e e l e m e n t s o f t h e a r r a y s o n e
a t a t i m e . A l t h o u g h s u c h s t a t e m e n t s a r e n o t a t i o n a l l y c o n v e n i e n t a n d o e r a
m o r e n a t u r a l f o r m o f e x p r e s s i o n , t h e y a r e a l s o i m p o r t a n t i n u t i l i z i n g t h e h i g h
c o m p u t a t i o n a l s p e e d s o f p a r a l l e l a n d v e c t o r c o m p u t e r s .
3
F u n c t i o n s m a y n o w
3
A n o t h e r i m p o r t a n t f e a t u r e o f a r r a y - v a l u e d e x p r e s s i o n s i s t h a t t h e r e i s n o d e n e d o r d e r
i n w h i c h t h e o p e r a t i o n s m u s t b e d o n e . T h e o p e r a t i o n s m a y b e p e r f o r m e d i n a n y o r d e r o r
s i m u l t a n e o u s l y .
1 2
8/7/2019 TUTORIAL se PFD
13/56
b e a r r a y - v a l u e d , w h i c h w a s i m p o s s i b l e t o a c h i e v e i n F o r t r a n 7 7 . M o s t i n t r i n s i c
f u n c t i o n s h a v e b e e n e x t e n d e d a n d a c t e l e m e n t a l l y o n a r r a y s , a s d o t h e i n t r i n s i c
o p e r a t o r s , s u c h a s ` + ' a b o v e .
4
A r r a y s e c t i o n s a r e o b t a i n e d u s i n g a s y n t a x s i m i l a r
t o M a t l a b A ( : , i ) i s t h e i t h c o l u m n o f A . T h e ` : ' r e p r e s e n t s a l l e l e m e n t s
i n t h e e x t e n t o f t h e p a r t i c u l a r d i m e n s i o n . A ( 2 : 4 , 3 : 5 ) i s t h e 3 3 a r r a y
o b t a i n e d f r o m r o w s 2 t h r o u g h 4 a n d c o l u m n s 3 t h r o u g h 5 o f A . A s t r i d e m a y
a l s o b e s p e c i e d , a c h i e v i n g a n e e c t s i m i l a r t o t h e s t e p o f a d o l o o p . F o r e x a m p l e ,
A ( 2 : 1 0 : 2 , 2 : 1 0 ) i s t h e 5 9 a r r a y o b t a i n e d f r o m r o w s 2 , 4 , 6 , 8 , a n d 1 0 a n d
c o l u m n s 2 t h r o u g h 1 0 o f A .
P a s s i n g a r r a y s t o s u b p r o g r a m s i s a n o t h e r a r e a o f i m p r o v e m e n t i n t h e n e w
s t a n d a r d . I n F o r t r a n 7 7 , o n l y t h e e x t e n t s i n t h e l a s t d i m e n s i o n c a n b e a s s u m e d
i n a s u b p r o g r a m . T h i s o f t e n r e q u i r e s e x t e n d i n g t h e a r g u m e n t l i s t o f a s u b p r o -
g r a m t o i n c l u d e t h e e x t e n t s o f e a c h d i m e n s i o n o f t h e a r r a y . F o r t r a n 9 0 s u p p o r t s
a s s u m e d - s h a p e a r r a y s i n d u m m y a r g u m e n t s i n a s u b p r o g r a m . T h e e x t e n t s c a n
b e d e t e r m i n e d b y t h e s u b p r o g r a m t h r o u g h t h e u s e o f t h e n e w i n t r i n s i c f u n c -
t i o n s i z e
5
T h e s e a r r a y p r o c e s s i n g f e a t u r e s o f F o r t r a n 9 0 a r e i l l u s t r a t e d b y t h e
M a t r i x V e c t o r p r o g r a m b e l o w .
p r o g r a m M a t r i x V e c t o r
i m p l i c i t n o n e
i n t e g e r , p a r a m e t e r : : N = 3
r e a l , d i m e n s i o n ( N , N ) : : A
r e a l , d i m e n s i o n ( N ) : : b , c
! F i l l A a n d b w i t h r a n d o m e n t r i e s .
c a l l r a n d o m _ n u m b e r ( A )
c a l l r a n d o m _ n u m b e r ( b )
! C o m p u t e t h e m a t r i x - v e c t o r p r o d u c t , A * b .
c = m a t r i x V e c t o r M u l t i p l y ( A , b )
p r i n t * , ' T h e m a t r i x - v e c t o r p r o d u c t i s ' , c
c o n t a i n s
f u n c t i o n m a t r i x V e c t o r M u l t i p l y ( A , b ) r e s u l t ( c )
i m p l i c i t n o n e
! A s s u m e t h e s h a p e o f A a n d b .
r e a l , d i m e n s i o n ( : , : ) , i n t e n t ( i n ) : : A
r e a l , d i m e n s i o n ( : ) , i n t e n t ( i n ) : : b
r e a l , d i m e n s i o n ( s i z e ( b ) ) : : c
4
M o s t b i n a r y o p e r a t i o n s o p e r a t e e l e m e n t a l l y o n a r r a y o p e r a n d s , r e q u i r i n g t h a t t h e t w o
a r r a y o p e r a n d s b e c o n f o r m a b l e , t h a t i s , t h e s a m e s i z e a n d s h a p e . F o r e x a m p l e , t h e b i n a r y
o p e r a t o r ` * ' f o r m s a n e l e m e n t - b y - e l e m e n t p r o d u c t o f t w o m a t r i c e s . S c a l a r s m a y a l s o b e u s e d
i n s u c h o p e r a t i o n s , a s t h e y a r e r s t b r o a d c a s t t o a c o n f o r m a b l e a r r a y b e f o r e t h e e l e m e n t a l
o p e r a t i o n i s p e r f o r m e d .
5
T h e r a n k o f a n a r r a y i s x e d a t c o m p i l e - t i m e a n d m a y n o t b e a s s u m e d b y a s u b p r o g r a m .
1 3
8/7/2019 TUTORIAL se PFD
14/56
i n t e g e r N
i n t e g e r i
N = s i z e ( b )
c = 0 . 0
d o i = 1 , N
c = c + b ( i ) * A ( : , i )
e n d d o
e n d f u n c t i o n m a t r i x V e c t o r M u l t i p l y
e n d p r o g r a m M a t r i x V e c t o r
E x e r c i s e 2 . 4 D e r i v e a f o r m u l a f o r m a t r i x - m a t r i x m u l t i p l i c a t i o n t h a t f o r m s t h e
m a t r i x p r o d u c t C = A B b y a c c e s s i n g A b y c o l u m n s . I t i s q u i t e s i m i l a r t o
t h e m a t r i x - v e c t o r m u l t i p l i c a t i o n g i v e n i n t h e p r e v i o u s e x a m p l e . S u c h a n a l -
g o r i t h m i s c o l u m n - o r i e n t e d , a n d e x p l o i t s F o r t r a n ' s a r r a y s t o r a g e c o n v e n t i o n s .
W r i t e a n d t e s t a p r o g r a m t h a t u s e s t h i s c o l u m n - o r i e n t e d a l g o r i t h m t o o b t a i n
t h e m a t r i x - m a t r i x p r o d u c t . T o c h e c k y o u r r e s u l t s , u s e t h e i n t r i n s i c f u n c t i o n ,
m a t m u l . H o w i s t h i s c o l u m n - o r i e n t e d m u l t i p l i c a t i o n a l g o r i t h m s i m i l a r t o t h e
m a t r i x - v e c t o r m u l t i p l i c a t i o n a l g o r i t h m i n t h e p r e v i o u s e x a m p l e ?
E x e r c i s e 2 . 5 S i m i l a r t o t h e p r e v i o u s e x e r c i s e , d e r i v e a f o r m u l a f o r m a t r i x -
m a t r i x m u l t i p l i c a t i o n t h a t f o r m s t h e m a t r i x p r o d u c t C = A B b y a c c e s s i n g B b y
r o w s . S u c h a n a l g o r i t h m i s r o w - o r i e n t e d , a n d i s t h e w o r s t m a t r i x m u l t i p l i c a t i o n
a l g o r i t h m f o r F o r t r a n . W r i t e a n d t e s t a p r o g r a m t h a t u s e s t h i s r o w - o r i e n t e d
a l g o r i t h m t o o b t a i n t h e m a t r i x - m a t r i x p r o d u c t . T o c h e c k y o u r r e s u l t s , u s e t h e
i n t r i n s i c f u n c t i o n , m a t m u l
E x e r c i s e 2 . 6 T h e t r a d i t i o n a l a p p r o a c h t o m a t r i x m u l t i p l i c a t i o n f o r m s t h e m a -
t r i x p r o d u c t C = A B u t i l i z i n g a d o t - p r o d u c t o p e r a t i o n b e t w e e n a r o w o f A a n d
a c o l u m n o f B . F o r m u l a t e s u c h a n a l g o r i t h m a n d w r i t e a n d t e s t a p r o g r a m t h a t
u s e s t h i s a l g o r i t h m t o o b t a i n t h e m a t r i x - m a t r i x p r o d u c t . W r i t e a s u p p o r t i n g
d o t P r o d u c t
6
f u n c t i o n t o f o r m e a c h e l e m e n t i n t h e m a t r i x p r o d u c t a n d c a l l i t
f r o m w i t h i n y o u r m a t r i x m u l t i p l i c a t i o n f u n c t i o n . Y o u w i l l w a n t t o m a k e u s e o f
a r r a y s e c t i o n s t o p a s s y o u r d o t P r o d u c t f u n c t i o n a r o w o f A a n d a c o l u m n o f
B . U s e t h e i n t r i n s i c f u n c t i o n , m a t m u l , o r y o u r p r e v i o u s a l g o r i t h m s , t o t e s t t h i s
d o t p r o d u c t a l g o r i t h m .
2 . 5 M o d u l e s
M o d u l e s r e p r e s e n t a t r e m e n d o u s i m p r o v e m e n t i n p r o g r a m r e a d a b i l i t y a n d m a i n -
t a i n a b i l i t y o v e r F o r t r a n 7 7 ' s c o m m o n b l o c k . H o w e v e r , m o d u l e s o e r m u c h m o r e
f u n c t i o n a l i t y t h a n t h e g l o b a l a c c e s s o f d a t a p r o v i d e d b y t h e c o m m o n b l o c k . A
m o d u l e c a n b e u s e d t o g r o u p a s e t o f r e l a t e d d e c l a r a t i o n s a n d m o d u l e p r o c e -
d u r e s , u n d e r a s i n g l e g l o b a l n a m e , p r o v i d i n g a m e a n s o f g l o b a l a c c e s s t o c o n - S u b p r o g r a m s d e
c l a r e d w i t h i n a m o d u
a r e c a l l e d m o d u l e p r o c e
d u r e s
6
W r i t e y o u r o w n f u n c t i o n r a t h e r t h a n u s i n g t h e i n t r i n s i c f u n c t i o n d o t p r o d u c t
1 4
8/7/2019 TUTORIAL se PFD
15/56
s t a n t s , v a r i a b l e s , u s e r - d e n e d t y p e s , a n d o t h e r f u n c t i o n s a n d s u b r o u t i n e s . T h e
c o n t e n t s o f a m o d u l e m a y b e m a d e a v a i l a b l e t o a n y p r o g r a m u n i t v i a t h e u s e
s t a t e m e n t . D a t a h i d i n g a n d e n c a p s u l a t i o n a r e s u p p o r t e d t h r o u g h t h e p r i v a t e
a n d p u b l i c a t t r i b u t e s . T h o s e i t e m s d e c l a r e d p r i v a t e a r e a v a i l a b l e o n l y w i t h i n
t h e m o d u l e a n d a r e h i d d e n f r o m a n y s u b p r o g r a m u s i n g t h e m o d u l e . B y d e f a u l t ,
a l l i t e m s w i t h i n a m o d u l e a r e p u b l i c . T h e c o n t a i n s s t a t e m e n t i n a m o d u l e
m a r k s t h e b e g i n n i n g o f o n e o r m o r e m o d u l e p r o c e d u r e s , j u s t a s i t w a s u s e d t o
m a r k t h e b e g i n n i n g o f o n e o r m o r e i n t e r n a l s u b p r o g r a m s i n s e c t i o n 2 . 3 .
T h e m a t r i x V e c t o r M u l t i p l y f u n c t i o n i n t h e p r e v i o u s e x a m p l e c o u l d b e p l a c e d
i n a m o d u l e a n d u s e d i n a n y p r o g r a m n e e d i n g t o p e r f o r m m a t r i x - v e c t o r m u l t i p l i -
c a t i o n . A n e x a m p l e o f s u c h a m o d u l e i s g i v e n b e l o w . O n e s i g n i c a n t a d v a n t a g e
o f m o d u l e p r o c e d u r e s i s t h e i r e x p l i c i t i n t e r f a c e | t h e F o r t r a n 9 0 c o m p i l e r c a n
d e t e c t t y p e m i s m a t c h e s i n c a l l s t o s u b p r o g r a m s w i t h i n a m o d u l e .
m o d u l e M a t r i x V e c t o r O p e r a t i o n s
i n t e g e r , p a r a m e t e r : : N = 3 ! A g l o b a l c o n s t a n t .
c o n t a i n s ! M o d u l e p r o c e d u r e d e f i n i t i o n s a p p e a r b e l o w .
f u n c t i o n m a t r i x V e c t o r M u l t i p l y ( A , b ) r e s u l t ( c )
i m p l i c i t n o n e
! A s s u m e t h e s h a p e o f A a n d b .
r e a l , d i m e n s i o n ( : , : ) , i n t e n t ( i n ) : : A
r e a l , d i m e n s i o n ( : ) , i n t e n t ( i n ) : : b
r e a l , d i m e n s i o n ( s i z e ( b ) ) : : c
i n t e g e r N
i n t e g e r i
N = s i z e ( b )
c = 0 . 0
d o i = 1 , N
c = c + b ( i ) * A ( : , i )
e n d d o
e n d f u n c t i o n m a t r i x V e c t o r M u l t i p l y
e n d m o d u l e M a t r i x V e c t o r O p e r a t i o n s
p r o g r a m M a t r i x V e c t o r
u s e M a t r i x V e c t o r O p e r a t i o n s
i m p l i c i t n o n e
r e a l , d i m e n s i o n ( N , N ) : : A
r e a l , d i m e n s i o n ( N ) : : b , c
! F i l l A a n d b w i t h r a n d o m e n t r i e s .
c a l l r a n d o m _ n u m b e r ( A )
1 5
8/7/2019 TUTORIAL se PFD
16/56
c a l l r a n d o m _ n u m b e r ( b )
! C o m p u t e t h e m a t r i x - v e c t o r p r o d u c t , A * b .
c = m a t r i x V e c t o r M u l t i p l y ( A , b )
p r i n t * , ' T h e m a t r i x - v e c t o r p r o d u c t i s ' , c
e n d p r o g r a m M a t r i x V e c t o r
E x e r c i s e 2 . 7 C r e a t e a M a t r i x M a t r i x O p e r a t i o n s m o d u l e a n d p l a c e t h e c o l u m n -
o r i e n t e d m a t r i x m u l t i p l i c a t i o n f u n c t i o n o f e x e r c i s e 2 . 4 i n t h i s m o d u l e . T e s t i t
b y u s i n g i t w i t h a m a i n p r o g r a m .
2 . 6 I n t e r f a c e s a n d G e n e r i c S u b p r o g r a m s
I n t e r f a c e s r e f e r t o t h e h o w m u c h k n o w l e d g e t h e c o m p i l e r h a s a b o u t a n p r o c e d u r e
d u r i n g c o m p i l a t i o n . I f t h e i n t e r f a c e i s e x p l i c i t , t h e n t h e c o m p i l e r c a n v e r i f y t h a t
t h e s u b p r o g r a m i s b e i n g c a l l e d c o r r e c t l y . I f , h o w e v e r , t h e i n t e r f a c e i s i m p l i c i t
t h e n t h e F o r t r a n 9 0 c o m p i l e r h a s n o i n f o r m a t i o n a b o u t t h e t y p e s a n d n u m b e r
o f t h e s u b p r o g r a m ' s a r g u m e n t s o r t h e r e t u r n v a l u e o f t h e r e s u l t f o r a f u n c t i o n .
( I m p l i c i t t y p i n g i s u s e d i n t h e c a l l i n g p r o g r a m t o d e t e r m i n e t h e r e t u r n r e s u l t
o f a f u n c t i o n i f n o d e c l a r a t i o n i s g i v e n . ) C o n s e q u e n t l y , n o t y p e - c h e c k i n g c a n b e
d o n e t o v e r i f y t h a t a s u b p r o g r a m h a s b e e n c a l l e d c o r r e c t l y . I m p l i c i t i n t e r f a c e s
a r e a l l t h a t a r e a v a i l a b l e i n F o r t r a n 7 7 .
S u b p r o g r a m s s u c h a s m o d u l e p r o c e d u r e s a n d i n t e r n a l f u n c t i o n s h a v e a n e x -
p l i c i t i n t e r f a c e b y d e f a u l t , a n d n o e x p l i c i t i n t e r f a c e b l o c k i s n e c e s s a r y . E x t e r n a l
s u b p r o g r a m s h a v e a n i m p l i c i t i n t e r f a c e b y d e f a u l t , a n d a n i n t e r f a c e b l o c k i s n e c -
e s s a r y t o s p e c i f y a n e x p l i c i t i n t e r f a c e o f a n e x t e r n a l s u b p r o g r a m a s m e n t i o n e d
a b o v e , t h i s a l l o w s t y p e - c h e c k i n g o f a c t u a l a n d f o r m a l a r g u m e n t s i n a r e f e r e n c e
t o a s u b p r o g r a m . E x a m p l e s o f i n t e r f a c e b l o c k s f o r t w o e x t e r n a l f u n c t i o n s , f a n d
g , a r e g i v e n b e l o w .
i n t e r f a c e
f u n c t i o n f ( x )
r e a l f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n f
f u n c t i o n g ( y )
i n t e g e r g
i n t e g e r , i n t e n t ( i n ) : : y
e n d f u n c t i o n g
e n d i n t e r f a c e
I n t e r f a c e s a r e a l s o n e c e s s a r y t o d e n e a g e n e r i c s u b p r o g r a m . G e n e r i c s u b -
p r o g r a m s s h o u l d b e f a m i l i a r f r o m F o r t r a n 7 7 i n t r i n s i c s s u c h a s s i n o r o p e r a t o r s
s u c h a s ` + ' . T h e s e i n t r i n s i c f u n c t i o n s w e r e s p e c i a l c a s e s i n F o r t r a n 7 7 a n d w e r e
o v e r l o a d e d t o w o r k o n a v a r i e t y o f a r g u m e n t t y p e s | s i n ( x ) w i l l p r o p e r l y O v e r l o a d i n g r e f e r s t o u s
i n g a g e n e r i c n a m e t
s p e c i f y a f u n c t i o n w h o s
b e h a v i o r i s d e p e n d e n
u p o n t h e t y p e s o f i t s a
g u m e n t s .
c o m p u t e t h e s i n e o f i t s a r g u m e n t , w h e t h e r x i s s i n g l e o r d o u b l e p r e c i s i o n , r e a l
1 6
8/7/2019 TUTORIAL se PFD
17/56
o r c o m p l e x . I n F o r t r a n 9 0 , u s e r - d e n e d s u b p r o g r a m s c a n b e g e n e r i c i n t h e s a m e
s e n s e . G e n e r i c f u n c t i o n s a n d s u b r o u t i n e s m a y b e d e n e d , s i m i l a r t o a n y o t h e r
s u b p r o g r a m , a l t h o u g h t h e i n t e r f a c e m u s t b e e x p l i c i t . T h e u s u a l w a y t o d e n e
s u c h a g e n e r i c f u n c t i o n i s t o p l a c e i t i n a m o d u l e a s i n t h e e x a m p l e b e l o w .
m o d u l e R a t i o n a l A r i t h m e t i c
t y p e r a t i o n a l
i n t e g e r n , d ! N u m e r a t o r a n d d e n o m i n a t o r .
e n d t y p e r a t i o n a l
i n t e r f a c e o p e r a t o r ( * )
m o d u l e p r o c e d u r e i n t e g e r R a t i o n a l M u l t i p l y , &
r a t i o n a l I n t e g e r M u l t i p l y
e n d i n t e r f a c e
c o n t a i n s
f u n c t i o n i n t e g e r R a t i o n a l M u l t i p l y ( i , r )
t y p e ( r a t i o n a l ) i n t e g e r R a t i o n a l M u l t i p l y
i n t e g e r , i n t e n t ( i n ) : : i
t y p e ( r a t i o n a l ) , i n t e n t ( i n ) : : r
i n t e g e r R a t i o n a l M u l t i p l y = r a t i o n a l ( i * r % n , r % d )
e n d f u n c t i o n i n t e g e r R a t i o n a l M u l t i p l y
f u n c t i o n r a t i o n a l I n t e g e r M u l t i p l y ( r , i )
t y p e ( r a t i o n a l ) r a t i o n a l I n t e g e r M u l t i p l y
t y p e ( r a t i o n a l ) , i n t e n t ( i n ) : : r
i n t e g e r , i n t e n t ( i n ) : : i
r a t i o n a l I n t e g e r M u l t i p l y = r a t i o n a l ( i * r % n , r % d )
e n d f u n c t i o n r a t i o n a l I n t e g e r M u l t i p l y
e n d m o d u l e R a t i o n a l A r i t h m e t i c
T h i s u s e o f o p e r a t o r s o n d e r i v e d t y p e s i s a m u c h m o r e n a t u r a l f o r m o f e x -
p r e s s i o n f o r m a n y m a t h e m a t i c a l o b j e c t s t h a t c a n b e m o d e l e d w i t h u s e r - d e n e d
t y p e s . T h e o v e r l o a d i n g o f f u n c t i o n n a m e s a n d o p e r a t o r s i s h a n d l e d c o m p l e t e l y
b y t h e c o m p i l e r . A r e f e r e n c e t o t h e ` + ' o p e r a t o r i n t h e e x a m p l e a b o v e c a u s e s
t h e c o m p i l e r t o i n s e r t a c a l l t o t h e a p p r o p r i a t e f u n c t i o n b a s e d o n t h e t y p e s o f
a r g u m e n t s i n t h e p a r t i c u l a r c a l l . T h i s f u n c t i o n s u b s t i t u t i o n c a n b e c o m p l e t e l y
d e t e r m i n e d a t c o m p i l e t i m e a n d i n c u r s n o r u n - t i m e o v e r h e a d .
E x e r c i s e 2 . 8 W h y a r e t w o d i e r e n t f u n c t i o n s n e e d e d t o p e r f o r m i n t e g e r - r a t i o n a l
m u l t i p l i c a t i o n ? W r i t e a n d t e s t a p r o g r a m t o u s e t h i s m o d u l e , u s i n g t h e o v e r -
l o a d e d o p e r a t o r ` * '
2 . 7 R e c u r s i v e S u b p r o g r a m s
A n o t h e r a r e a i n w h i c h F o r t r a n 7 7 h a s b e e n e x t e n d e d i s r e c u r s i o n . A l t h o u g h
n o t p o s s i b l e i n F o r t r a n 7 7 , F o r t r a n 9 0 s u p p o r t s r e c u r s i o n . I f a s u b p r o g r a m c a l l s
1 7
8/7/2019 TUTORIAL se PFD
18/56
i t s e l f , d i r e c t l y o r i n d i r e c t l y , t h e k e y w o r d r e c u r s i v e m u s t a p p e a r i n t h e s u b -
p r o g r a m s t a t e m e n t .
7
R e c u r s i v e f u n c t i o n s m u s t a l s o d e c l a r e a r e s u l t v a r i a b l e
t o a v o i d a m b i g u i t y w i t h a r r a y - v a l u e d f u n c t i o n s t h a t a r e d i r e c t l y r e c u r s i v e . T h e
r e s u l t v a r i a b l e i s u s e d t o h o l d t h e f u n c t i o n r e s u l t f o r e a c h f u n c t i o n i n v o c a t i o n
t h e f u n c t i o n n a m e i s u s e d t o i n v o k e t h e f u n c t i o n i t s e l f . C o n s e q u e n t l y , t h e r e -
c u r s i v e f u n c t i o n ' s n a m e s h o u l d n e v e r a p p e a r o n t h e l e f t s i d e o f a n a s s i g n m e n t
s t a t e m e n t . A n e x a m p l e o f a r e c u r s i v e f a c t o r i a l f u n c t i o n i s s h o w n b e l o w .
r e c u r s i v e f u n c t i o n f a c t o r i a l ( n ) r e s u l t ( f )
i n t e g e r f
i n t e g e r , i n t e n t ( i n ) : : n
i f ( n < = 0 ) t h e n
f = 1
e l s e
f = n * f a c t o r i a l ( n - 1 )
e n d i f
e n d f u n c t i o n f a c t o r i a l
E x e r c i s e 2 . 9 E n h a n c e t h e R a t i o n a l A r i t h m e t i c m o d u l e i n t h e p r e v i o u s e x e r -
c i s e t o u s e a g r e a t e s t c o m m o n d i v i s o r f u n c t i o n t o c a n c e l c o m m o n d i v i s o r s f r o m
t h e i n t e g e r m u l t i p l i e r a n d t h e d e n o m i n a t o r o f t h e r a t i o n a l n u m b e r . C a l l t h e
f u n c t i o n g c d , a n d m a k e i t r e c u r s i v e , b a s e d o n t h e f o l l o w i n g r e l a t i o n s h i p , v a l i d
f o r 0 m < n
g c d ( 0 n ) = n
g c d ( m n ) = n m o d m m > 0
V e r i f y c o r r e c t o p e r a t i o n o f t h e g c d f u n c t i o n b y t e s t i n g i t u s i n g a m a i n p r o g r a m .
E x e r c i s e 2 . 1 0 U s i n g t h e g c d f u n c t i o n w r i t t e n i n t h e p r e v i o u s e x e r c i s e , e x t e n d
t h e ` + ' o p e r a t o r t o o p e r a t e c o r r e c t l y o n r a t i o n a l n u m b e r s . V e r i f y t h a t y o u r p r o -
g r a m i s w o r k i n g c o r r e c t l y , t h a t i s , i t f o r m s t h e s u m o f t w o r a t i o n a l n u m b e r s
w h o s e n u m e r a t o r a n d d e n o m i n a t o r a r e r e l a t i v e l y p r i m e . A n e c i e n t i m p l e -
m e n t a t i o n s h o u l d c a n c e l t h e g r e a t e s t c o m m o n d i v i s o r i n a w a y t h a t k e e p s t h e
i n t e r m e d i a t e i n t e g e r p r o d u c t s a s s m a l l a s p o s s i b l e .
E x e r c i s e 2 . 1 1 U s i n g t h e r e s u l t s o f t h e p r e v i o u s e x e r c i s e , y o u s h o u l d b e a b l e
t o e x t e n d t h e ` - ' o p e r a t o r r e l a t i v e l y e a s i l y . W r i t e a n o t h e r s e t o f f u n c t i o n s t o
e x t e n d t h i s o p e r a t o r a n d v e r i f y t h a t y o u r p r o g r a m w o r k s c o r r e c t l y a s d i s c u s s e d
i n t h e p r e v i o u s e x e r c i s e .
E x e r c i s e 2 . 1 2 R e l a t i o n a l o p e r a t o r s m a y a l s o b e e x t e n d e d t o o p e r a t e o n u s e r -
d e n e d t y p e s . E x t e n d t h e ` . e q . ' o p e r a t o r t o p r o p e r l y c o m p a r e t w o r a t i o n a l
n u m b e r s . R e c a l l t h a t ` = = ' i s a s y n o n y m f o r t h e ` . e q . ' o p e r a t o r .
7
T h e r e c u r s i v e k e y w o r d i s r e q u i r e d f o r t h e b e n e t o f t h e c o m p i l e r a n d m a y h e l p w i t h t h e
o p t i m i z a t i o n o f p r o c e d u r e c a l l s .
1 8
8/7/2019 TUTORIAL se PFD
19/56
2 . 8 D y n a m i c D a t a S t r u c t u r e s
L a c k o f d y n a m i c d a t a s t r u c t u r e s i s a n o t h e r s h o r t c o m i n g o f F o r t r a n 7 7 t h a t h a s
b e e n o v e r c o m e i n F o r t r a n 9 0 . L i n k e d l i s t s , t r e e s , g r a p h s , a n d o t h e r d y n a m i c
d a t a s t r u c t u r e s t h a t a r e a l l o c a t e d a t r u n t i m e c a n b e c o n s t r u c t e d u s i n g s o m e
o f F o r t r a n 9 0 ' s n e w c a p a b i l i t i e s . T h e f o l l o w i n g p r o g r a m i n d i c a t e s t h e b a s i c
f e a t u r e s o f F o r t r a n 9 0 ' s p o i n t e r s .
p r o g r a m T r y P o i n t e r s
i n t e g e r , p o i n t e r : : p , q
i n t e g e r , t a r g e t : : n
i n t e g e r m
n = 5
p = > n
q = > p
a l l o c a t e ( p )
p = 4
m = p + q + n
p r i n t * , " m = " , m
e n d p r o g r a m T r y P o i n t e r s
T h e p r o g r a m a b o v e i l l u s t r a t e s m a n y k e y c o n c e p t s i n t h e d e s i g n o f F o r t r a n
9 0 p o i n t e r s .
T h e p o i n t e r a t t r i b u t e i s u s e d t o i d e n t i f y v a r i a b l e s t h a t s e r v e a s d e s c r i p -
t o r s f o r o t h e r d a t a o b j e c t s o n l y . I n t h e p r o g r a m a b o v e , p a n d q a r e \ p o i n t -
e r s t o i n t e g e r s " .
T h e v a r i a b l e n i s d e c l a r e d w i t h t h e t a r g e t a t t r i b u t e . T h i s i n d i c a t e s t h a t
n m a y s e r v e a s a t a r g e t t o a n i n t e g e r p o i n t e r s u c h a s p o r q . A t a r g e t i s
a n o b j e c t t h a t m a y b e r e f e r e n c e d v i a a p o i n t e r . T h e t a r g e t o f a p o i n t e r
i s v e r y r e s t r i c t i v e | o n l y v a r i a b l e s w i t h t h e t a r g e t o r p o i n t e r a t t r i b u t e s
m a y b e r e f e r e n c e d v i a a p o i n t e r .
8
T h e s t a t e m e n t p = > n i s c a l l e d a p o i n t e r a s s i g n m e n t s t a t e m e n t , a n d i s
u s e d t o a s s o c i a t e t h e t a r g e t , n , w i t h t h e p o i n t e r , p . T h i s i s p o s s i b l e b e c a u s e
n h a s b e e n d e c l a r e d w i t h t h e t a r g e t a t t r i b u t e .
9
I n e e c t , p i s a n a l i a s f o r
n a n d m a y b e u s e d j u s t a s n i s u s e d ( p c a n b e t h o u g h t o f a s \ p o i n t i n g t o "
n )
1 0
8
T h i s r e s t r i c t i o n c a n a i d t h e c o m p i l e r i n o p t i m i z i n g t h e c o d e . T h e t a r g e t a t t r i b u t e i n f o r m s
t h e c o m p i l e r o f a l l v a r i a b l e s t h a t c a n s e r v e a s p o i n t e r t a r g e t s . A l l o t h e r v a r i a b l e s c a n n o t b e
r e f e r e n c e d v i a a p o i n t e r a n d d o n o t s u e r f r o m t h e s i d e e e c t s o f p o i n t e r r e f e r e n c e s .
9
T h e o t h e r i n t e g e r v a r i a b l e m d e c l a r e d i n t h e p r o g r a m d o e s n o t h a v e t h e t a r g e t a t t r i b u t e .
C o n s e q u e n t l y , i t m a y n o t b e a s s o c i a t e d w i t h a p o i n t e r .
1 0
A F o r t r a n 9 0 p o i n t e r h a s t h r e e p o s s i b l e s t a t e s : a s s o c i a t e d , d i s a s s o c i a t e d , a n d u n d e n e d .
I n i t i a l l y , a p o i n t e r ' s a s s o c i a t i o n s t a t u s i s u n d e n e d . I t m a y b e a s s o c i a t e d u s i n g p o i n t e r a s -
1 9
8/7/2019 TUTORIAL se PFD
20/56
T h e f o l l o w i n g s t a t e m e n t , q = > p , i s d i e r e n t . I n t h e p r e v i o u s p o i n t e r
a s s i g n m e n t s t a t e m e n t , a p o i n t e r i s a s s o c i a t e d w i t h a n o n - p o i n t e r v a r i a b l e ,
n . H o w e v e r , t h i s p o i n t e r a s s i g n m e n t s t a t e m e n t c o n t a i n s v a r i a b l e s t h a t a r e
p o i n t e r s o n b o t h t h e l e f t a n d r i g h t h a n d s i d e s . I n t h i s c a s e , q i s a s s o c i a t e d
w i t h t h e t a r g e t o f p , n a m e l y n , r a t h e r t h a n p i t s e l f .
1 1
T h e a l l o c a t e s t a t e m e n t i s u s e d t o d y n a m i c a l l y a l l o c a t e s p a c e f o r a t a r g e t
a n d a s s o c i a t e t h e p o i n t e r w i t h t h e t a r g e t . T h u s , a l l o c a t e ( p ) r e s e r v e s
s p a c e f o r a n i n t e g e r t a r g e t t h a t i s a s s o c i a t e d w i t h p . A t t h i s t i m e , t h e
c o n t e n t s o f t h e t a r g e t a r e n o t d e n e d . T h e p r e v i o u s t a r g e t o f p n i s
u n a e c t e d . S i m i l a r l y , b e c a u s e q i s n o t a s s o c i a t e d w i t h p , t h e t a r g e t o f q
i s u n a e c t e d .
T h e s t a t e m e n t p = 4 d e n e s t h e t a r g e t o f p t o c o n t a i n t h e i n t e g e r 4 a n d
i l l u s t r a t e s a n i m p o r t a n t c h a r a c t e r i s t i c o f F o r t r a n 9 0 ' s p o i n t e r s | t h e r e i s
n o d e r e f e r e n c e o p e r a t o r . I n s t e a d , t h e p o i n t e r s a r e r e s o l v e d t o t h e i r t a r g e t s
b e f o r e t h e a s s i g n m e n t i s m a d e . T h i s o c c u r s i n a n y e x p r e s s i o n i n v o l v i n g
p o i n t e r s w i t h t h e e x c e p t i o n o f t h e p o i n t e r a s s i g n m e n t s t a t e m e n t d e s c r i b e d
a b o v e .
A s m e n t i o n e d a b o v e , p o i n t e r s a r e r e s o l v e d t o t h e i r t a r g e t s i n a n y e x p r e s -
s i o n n o t i n v o l v i n g p o i n t e r a s s i g n m e n t . C o n s e q u e n t l y , t h e s t a t e m e n t m =
p + q + n u s e s t h e v a l u e s o f t h e t a r g e t s o f p a n d q a n d t h e v a l u e o f n t o
e v a l u a t e t h e e x p r e s s i o n . B e c a u s e t h e v a l u e s o f t h e t a r g e t s o f p a n d q a r e 4
a n d 5 , r e s p e c t i v e l y , a n d n i s 5 , t h e i r s u m , 1 4 , i s a s s i g n e d t o t h e t h e i n t e g e r
m
A m o r e c o m p l e t e e x a m p l e o f a d y n a m i c d a t a s t r u c t u r e i s g i v e n b e l o w w h i c h
m a n i p u l a t e s a l i n k e d l i s t o f r e a l n u m b e r s . E l e m e n t s a r e a l l o c a t e d a s n e e d e d a n d
d e a l l o c a t e d a f t e r u s e .
p r o g r a m L i n k e d L i s t
t y p e n o d e
r e a l d a t a
t y p e ( n o d e ) , p o i n t e r : : n e x t
e n d t y p e n o d e
t y p e ( n o d e ) , p o i n t e r : : l i s t , c u r r e n t , p r e v i o u s
i n t e g e r , p a r a m e t e r : : N = 1 0
n u l l i f y ( l i s t ) ! I n i t i a l i z e l i s t t o p o i n t t o n o t a r g e t .
! A d d t h e 1 s t e l e m e n t a s a s p e c i a l c a s e .
i f ( N > 0 ) t h e n
a l l o c a t e ( l i s t )
s i g n m e n t o r t h e a l l o c a t e s t a t e m e n t . I t m a y b e d i s a s s o c i a t e d u s i n g t h e n u l l i f y s t a t e m e n t o r
b y a s s i g n i n g i t a d i s a s s o c i a t e d p o i n t e r t h r o u g h p o i n t e r a s s i g n m e n t .
1 1
T h i s i m m e d i a t e l y i m p l i e s t h a t p o i n t e r s c a n n o t p o i n t t o o t h e r p o i n t e r s .
2 0
8/7/2019 TUTORIAL se PFD
21/56
n u l l i f y ( l i s t % n e x t )
c a l l r a n d o m _ n u m b e r ( l i s t % d a t a )
e n d i f
c u r r e n t = > l i s t
! A d d N r a n d o m n u m b e r s t o t h e l i s t .
d o i = 2 , N
a l l o c a t e ( c u r r e n t % n e x t )
n u l l i f y ( c u r r e n t % n e x t % n e x t )
c a l l r a n d o m _ n u m b e r ( c u r r e n t % n e x t % d a t a )
c u r r e n t = > c u r r e n t % n e x t
e n d d o
! O u t p u t t h e l i s t , d e a l l o c a t i n g t h e m a f t e r u s e .
p r i n t * , ' L i s t e l e m e n t s a r e : '
c u r r e n t = > l i s t
d o w h i l e ( a s s o c i a t e d ( c u r r e n t ) )
p r i n t * , c u r r e n t % d a t a
p r e v i o u s = > c u r r e n t
c u r r e n t = > c u r r e n t % n e x t
d e a l l o c a t e ( p r e v i o u s )
e n d d o
e n d p r o g r a m L i n k e d L i s t
E x e r c i s e 2 . 1 3 R e w r i t e t h e d o i = 2 , N l o o p t o a l l o c a t e a n o d e o f t h e l i s t u s i n g
a t e m p o r a r y p o i n t e r . I n i t i a l i z e t h e d a t a a n d n e x t c o m p o n e n t s o f t h e n o d e a n d
l i n k t h e n o d e t o t h e e x i s t i n g l i s t a s t h e l a s t s t e p i n t h e l o o p .
E x e r c i s e 2 . 1 4 A l i n k e d l i s t c a n b e u s e d t o m o d e l a n i n t e g e r o f a r b i t r a r y l e n g t h .
T h e f o l l o w i n g p r o g r a m i m p l e m e n t s u n s i g n e d e x t e n d e d i n t e g e r a r i t h m e t i c u s i n g
t h i s i n t e g e r m o d e l , w h e r e t h e h e a d o f t h e l i n k e d l i s t p o i n t s t o t h e l e a s t s i g n i c a n t
d i g i t i n t h e e x t e n d e d i n t e g e r . F o r e x a m p l e , t h e e x t e n d e d i n t e g e r 9 8 7 6 5 4 3 2 1 i s
r e p r e s e n t e d a s t h e l i s t 1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9 ! w h e r e t h e l a s t
p o i n t e r i n t h e i n t e g e r i s n u l l i e d t o m a r k t h e e n d o f t h e l i s t .
m o d u l e E x t e n d e d I n t e g e r s
! A k i n d v a l u e r e p r e s e n t i n g a s i n g l e d i g i t o n l y .
i n t e g e r , p a r a m e t e r : : Q = s e l e c t e d _ i n t _ k i n d ( 1 )
p r i v a t e Q
t y p e U n s i g n e d E x t e n d e d I n t e g e r
i n t e g e r ( Q ) d i g i t
t y p e ( U n s i g n e d E x t e n d e d I n t e g e r ) , p o i n t e r : : n e x t
e n d t y p e U n s i g n e d E x t e n d e d I n t e g e r
t y p e E x t e n d e d I n t e g e r
t y p e ( U n s i g n e d E x t e n d e d I n t e g e r ) , p o i n t e r : : n u m b e r
e n d t y p e E x t e n d e d I n t e g e r
2 1
8/7/2019 TUTORIAL se PFD
22/56
i n t e r f a c e o p e r a t o r ( + )
m o d u l e p r o c e d u r e a d d E x t e n d e d I n t e g e r
e n d i n t e r f a c e
c o n t a i n s
f u n c t i o n a d d E x t e n d e d I n t e g e r ( m , n )
t y p e ( E x t e n d e d I n t e g e r ) a d d E x t e n d e d I n t e g e r
t y p e ( E x t e n d e d I n t e g e r ) , i n t e n t ( i n ) : : m , n
t y p e ( E x t e n d e d I n t e g e r ) s u m
t y p e ( U n s i g n e d E x t e n d e d I n t e g e r ) , p o i n t e r : : c u r r e n t 1 , c u r r e n t 2
t y p e ( U n s i g n e d E x t e n d e d I n t e g e r ) , p o i n t e r : : c u r r e n t , p r e v i o u s
i n t e g e r ( Q ) c a r r y
i n t e g e r d i g i t S u m
! A l l o c a t e s p a c e f o r t h e n u m b e r c o m p o n e n t o f s u m .
a l l o c a t e ( s u m % n u m b e r )
n u l l i f y ( s u m % n u m b e r % n e x t )
! A d d t h e f i r s t t w o d i g i t s o f m a n d n a s a s p e c i a l c a s e .
! A s s o c i a t e c u r r e n t 1 a n d c u r r e n t 2 w i t h t h e f i r s t d i g i t s o f t h e n u m b e r s
! o f m a n d n .
c u r r e n t 1 = > m % n u m b e r
c u r r e n t 2 = > n % n u m b e r
d i g i t S u m = c u r r e n t 1 % d i g i t + c u r r e n t 2 % d i g i t
! C h e c k f o r c a r r y
i f ( d i g i t S u m > 9 ) t h e n
d i g i t S u m = d i g i t S u m - 1 0
c a r r y = 1
e l s e
c a r r y = 0
e n d i f
! A s s i g n t h e f i r s t d i g i t i n t o t h e s u m .
s u m % n u m b e r % d i g i t = d i g i t S u m
p r e v i o u s = > s u m % n u m b e r
c u r r e n t 1 = > c u r r e n t 1 % n e x t
c u r r e n t 2 = > c u r r e n t 2 % n e x t
! B e g i n t h e g e n e r a l a d d i t i o n o f m a n d n . m a n d n s h o u l d b e
! h a v e t h e i r e n d s m a r k e d w i t h n u l l p o i n t e r s .
d o w h i l e ( a s s o c i a t e d ( c u r r e n t 1 ) . a n d . a s s o c i a t e d ( c u r r e n t 2 ) )
d i g i t S u m = c u r r e n t 1 % d i g i t + c u r r e n t 2 % d i g i t + c a r r y
! C h e c k f o r c a r r y
i f ( d i g i t S u m > 9 ) t h e n
d i g i t S u m = d i g i t S u m - 1 0
c a r r y = 1
e l s e
2 2
8/7/2019 TUTORIAL se PFD
23/56
c a r r y = 0
e n d i f
! A s s i g n c u r r e n t d i g i t i n t o s u m .
a l l o c a t e ( p r e v i o u s % n e x t )
n u l l i f y ( p r e v i o u s % n e x t % n e x t )
p r e v i o u s % n e x t % d i g i t = d i g i t S u m
p r e v i o u s = > p r e v i o u s % n e x t
c u r r e n t 1 = > c u r r e n t 1 % n e x t
c u r r e n t 2 = > c u r r e n t 2 % n e x t
e n d d o
! c u r r e n t 1 , c u r r e n t 2 , o r b o t h h a v e b e e n e x h a u s t e d . C o n t i n u e w i t h c u r r e n t .
i f ( a s s o c i a t e d ( c u r r e n t 1 ) ) t h e n
c u r r e n t = > c u r r e n t 1
e l s e
c u r r e n t = > c u r r e n t 2
e n d i f
d o w h i l e ( a s s o c i a t e d ( c u r r e n t ) )
d i g i t S u m = c u r r e n t % d i g i t + c a r r y
! C h e c k f o r c a r r y
i f ( d i g i t S u m > 9 ) t h e n
d i g i t S u m = d i g i t S u m - 1 0
c a r r y = 1
e l s e
c a r r y = 0
e n d i f
! A s s i g n c u r r e n t d i g i t i n t o s u m .
a l l o c a t e ( p r e v i o u s % n e x t )
n u l l i f y ( p r e v i o u s % n e x t % n e x t )
p r e v i o u s % n e x t % d i g i t = d i g i t S u m
p r e v i o u s = > p r e v i o u s % n e x t
c u r r e n t = > c u r r e n t % n e x t
e n d d o
! C h e c k f o r a c a r r y t h a t h a s p r o p a g a t e d t o t h e m o s t s i g n i f i c a n t
! p l a c e .
i f ( c a r r y / = 0 ) t h e n
! A s s i g n c a r r y d i g i t i n t o s u m .
a l l o c a t e ( p r e v i o u s % n e x t )
n u l l i f y ( p r e v i o u s % n e x t % n e x t )
p r e v i o u s % n e x t % d i g i t = c a r r y
e n d i f
! P r e p a r e t o r e t u r n s u m .
a d d E x t e n d e d I n t e g e r = s u m
e n d f u n c t i o n a d d E x t e n d e d I n t e g e r
s u b r o u t i n e r e a d E x t e n d e d I n t e g e r ( n )
t y p e ( E x t e n d e d I n t e g e r ) , i n t e n t ( o u t ) : : n
2 3
8/7/2019 TUTORIAL se PFD
24/56
t y p e ( U n s i g n e d E x t e n d e d I n t e g e r ) , p o i n t e r : : n e w
c h a r a c t e r c h
i n t e g e r ( Q ) v a l u e
n u l l i f y ( n % n u m b e r ) ! N o l i s t i n i t i a l l y .
d o w h i l e ( . t r u e . )
r e a d ( * , f m t = " ( A ) " , a d v a n c e = " n o " , e o r = 1 0 0 ) c h
! D e t e r m i n e t h e n u m e r i c a l v a l u e o f t h e c h a r a c t e r .
s e l e c t c a s e ( c h )
c a s e ( ' 0 ' )
v a l u e = 0
c a s e ( ' 1 ' )
v a l u e = 1
c a s e ( ' 2 ' )
v a l u e = 2
c a s e ( ' 3 ' )
v a l u e = 3
c a s e ( ' 4 ' )
v a l u e = 4
c a s e ( ' 5 ' )
v a l u e = 5
c a s e ( ' 6 ' )
v a l u e = 6
c a s e ( ' 7 ' )
v a l u e = 7
c a s e ( ' 8 ' )
v a l u e = 8
c a s e ( ' 9 ' )
v a l u e = 9
c a s e d e f a u l t
p r i n t * , ' I n p u t e r r o r i n r e a d i n g e x t e n d e d i n t e g e r '
s t o p
e n d s e l e c t
! A l l o c a t e a n e w n o d e f o r t h e d i g i t
a l l o c a t e ( n e w )
n e w % d i g i t = v a l u e
i f ( . n o t . a s s o c i a t e d ( n % n u m b e r ) ) t h e n
! L i s t n o t y e t s t a r t e d .
n u l l i f y ( n e w % n e x t )
e l s e
! L i s t a l r e a d y s t a r t e d .
n e w % n e x t = > n % n u m b e r
e n d i f
n % n u m b e r = > n e w
e n d d o
1 0 0 e n d s u b r o u t i n e r e a d E x t e n d e d I n t e g e r
2 4
8/7/2019 TUTORIAL se PFD
25/56
e n d m o d u l e E x t e n d e d I n t e g e r s
A s u b r o u t i n e t o i n p u t u n s i g n e d e x t e n d e d i n t e g e r s i s i n c l u d e d i n t h e m o d -
u l e . W r i t e a s u b r o u t i n e t o o u t p u t a n e x t e n d e d i n t e g e r b a s e d o n t h e m o d e l o f
r e p r e s e n t a t i o n d e s c r i b e d a b o v e . W r i t e a p r o g r a m t o t e s t y o u r f u n c t i o n a n d t h e
E x t e n d e d I n t e g e r s m o d u l e .
2 . 9 O p t i o n a l a n d K e y w o r d A r g u m e n t s
O p t i o n a l a r g u m e n t s p e r m i t a s u b p r o g r a m t o a c c e p t a d e f a u l t v a l u e f o r m i s s i n g
a r g u m e n t s i n a c a l l . I n n u m e r i c a l c o m p u t i n g , t h i s i s m o s t u s e f u l f o r s p e c i f y i n g a
t o l e r a n c e . I f s p e c i e d , t h e v a l u e m a y o v e r r i d e t h e d e f a u l t t o l e r a n c e o t h e r w i s e ,
t h e d e f a u l t t o l e r a n c e i s u s e d . B e c a u s e a n y a r g u m e n t i n t h e a r g u m e n t l i s t o f
a s u b p r o g r a m m a y b e o p t i o n a l , t h e r e m a y b e a p r o b l e m m a t c h i n g a c t u a l a n d
f o r m a l a r g u m e n t s i n a c a l l t o a s u b p r o g r a m w i t h o p t i o n a l a r g u m e n t s . I n t h i s
c a s e , k e y w o r d a r g u m e n t s m u s t b e u s e d t o e s t a b l i s h u n a m b i g u o u s l y t h e c o r r e -
s p o n d e n c e b e t w e e n a c t u a l a n d f o r m a l a r g u m e n t s . T h e R o o t F i n d e r s m o d u l e
b e l o w i l l u s t r a t e s s o m e o f t h e s e f e a t u r e s .
m o d u l e R o o t F i n d e r s
! M a x i m u m e r r o r p e r m i t t e d i n t h e a p p r o x i m a t i o n o f a r o o t .
r e a l , p a r a m e t e r : : D E F A U L T _ T O L E R A N C E = e p s i l o n ( 1 . 0 )
! R e s t r i c t t h e v i s i b i l i t y o f t h e s e f u n c t i o n s t o t h i s m o d u l e .
p r i v a t e s e c a n t , n e w t o n
c o n t a i n s
! U s e t h e s e c a n t m e t h o d t o f i n d a r o o t o f f i f d f , t h e
! d e r i v a t i v e o f f , i s u n a v a i l a b l e , o t h e r w i s e , u s e N e w t o n ' s
! m e t h o d . a a n d b a r e u s e d a s a s t a r t i n g i n t e r v a l f o r
! t h e s e c a n t m e t h o d . T h e a v e r a g e o f a a n d b i s u s e d a s
! t h e i n i t i a l g u e s s f o r N e w t o n ' s m e t h o d .
f u n c t i o n f i n d R o o t ( a , b , f , d f , t o l e r a n c e )
i m p l i c i t n o n e
r e a l f i n d R o o t
r e a l , i n t e n t ( i n ) : : a , b
r e a l , o p t i o n a l , i n t e n t ( i n ) : : t o l e r a n c e
i n t e r f a c e
f u n c t i o n f ( x )
r e a l f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n f
f u n c t i o n d f ( x )
r e a l d f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n d f
e n d i n t e r f a c e
o p t i o n a l d f
2 5
8/7/2019 TUTORIAL se PFD
26/56
8/7/2019 TUTORIAL se PFD
27/56
r o o t = s e c a n t ( b , c , f , t o l )
e n d i f
e n d i f
e n d f u n c t i o n s e c a n t
r e c u r s i v e f u n c t i o n n e w t o n ( g u e s s , f , d f , t o l ) r e s u l t ( r o o t )
i m p l i c i t n o n e
r e a l r o o t
r e a l , i n t e n t ( i n ) : : g u e s s , t o l
i n t e r f a c e
f u n c t i o n f ( x )
r e a l f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n f
f u n c t i o n d f ( x )
r e a l d f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n d f
e n d i n t e r f a c e
r e a l f G u e s s , d f G u e s s ! f ( g u e s s ) , d f ( g u e s s ) , r e s p e c t i v e l y .
r e a l n e w G u e s s
! C a l c u l a t e d f ( g u e s s ) a n d f ( g u e s s ) .
f G u e s s = f ( g u e s s ) d f G u e s s = d f ( g u e s s )
! C h e c k f o r a s u f f i c i e n t r o o t a t c . T h i s c o u l d c a u s e a n
! i n f i n i t e l o o p i f t h e r o u n d - o f f e r r o r i n t h e e v a l u a t i o n
! o f f ( c ) e x c e e d s t h e t o l e r a n c e .
i f ( a b s ( f G u e s s ) < = t o l ) t h e n ! R o o t f o u n d .
r o o t = g u e s s
e l s e ! G o a g a i n .
n e w G u e s s = g u e s s - f G u e s s / d f G u e s s
r o o t = n e w t o n ( n e w G u e s s , f , d f , t o l )
e n d i f
e n d f u n c t i o n n e w t o n
e n d m o d u l e R o o t F i n d e r s
T h e f i n d R o o t f u n c t i o n d e n e d a b o v e i s q u i t e c o n v e n i e n t i n i t s u s e o f o p -
t i o n a l a r g u m e n t s . F o r e x a m p l e , x = f i n d R o o t ( a , b , g , d g ) u s e s t h e d e -
f a u l t t o l e r a n c e a n d c a l l s n e w t o n , d u e t o t h e p r e s e n c e o f t h e d e r i v a t i v e , d g x
= f i n d R o o t ( a , b , g , d g , 1 . 0 e - 1 0 ) m a y b e u s e d t o o v e r r i d e t h i s d e f a u l t
t o l e r a n c e . W h e n t h e d e r i v a t i v e o f t h e f u n c t i o n i s n o t a v a i l a b l e , a c a l l s u c h a s
x = f i n d R o o t ( a , b , g ) , u s e s t h e d e f a u l t t o l e r a n c e a n d c a l l s s e c a n t , a s n o
d e r i v a t i v e i s p r e s e n t . x = f i n d R o o t ( a , b , g , t o l e r a n c e = 1 . 0 e - 1 0 ) o v e r -
r i d e s t h e d e f a u l t t o l e r a n c e a n d c a l l s s e c a n t . N o t i c e t h a t o v e r r i d i n g t h e d e -
f a u l t t o l e r a n c e w h e n t h e d e r i v a t i v e i s n o t p a s s e d r e q u i r e s u s i n g t h e k e y w o r d
t o l e r a n c e . I f t h i s k e y w o r d w e r e n o t u s e d , t h e f o u r t h a r g u m e n t w o u l d b e i n -
c o r r e c t l y p a i r e d w i t h t h e f o r m a l a r g u m e n t d f , r e s u l t i n g i n a t y p e m i s m a t c h . A
2 7
8/7/2019 TUTORIAL se PFD
28/56
t e s t p r o g r a m f o r t h e R o o t F i n d e r s m o d u l e i s g i v e n b e l o w .
p r o g r a m T e s t
u s e R o o t F i n d e r s
i m p l i c i t n o n e
r e a l a , b
r e a l , p a r a m e t e r : : t o l = 1 . 0 e - 6
i n t e r f a c e
f u n c t i o n f ( x )
r e a l f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n f
f u n c t i o n d f ( x )
r e a l d f
r e a l , i n t e n t ( i n ) : : x
e n d f u n c t i o n d f
e n d i n t e r f a c e
p r i n t * , ' E n t e r l e f t a n d r i g h t e n d p o i n t s '
r e a d * , a , b
p r i n t * , ' N e w t o n : T h e r o o t o f f i s ' , f i n d R o o t ( a , b , f , d f )
p r i n t * , ' S e c a n t : T h e r o o t o f f i s ' , f i n d R o o t ( a , b , f )
e n d p r o g r a m T e s t
f u n c t i o n f ( x )
r e a l f
r e a l , i n t e n t ( i n ) : : x
f = x + e x p ( x )
e n d f u n c t i o n f
f u n c t i o n d f ( x )
r e a l d f
r e a l , i n t e n t ( i n ) : : x
d f = 1 + e x p ( x )
e n d f u n c t i o n d f
E x e r c i s e 2 . 1 5 C o m p i l e a n d r u n t h e t e s t p r o g r a m a n d m o d u l e g i v e n a b o v e .
T h e n , r e w r i t e s e c a n t a n d n e w t o n t o p e r f o r m t h e i r t a s k s n o n - r e c u r s i v e l y . T e s t
y o u r r o o t n d i n g f u n c t i o n s w i t h s e v e r a l f u n c t i o n s . A n e c i e n t i m p l e m e n t a -
t i o n s h o u l d m i n i m i z e t h e n u m b e r o f f u n c t i o n e v a l u a t i o n s n e c e s s a r y d u r i n g t h e
a l g o r i t h m .
E x e r c i s e 2 . 1 6 N e i t h e r t h e s e c a n t m e t h o d n o r N e w t o n ' s m e t h o d a r e g u a r a n t e e d
t o c o n v e r g e t o a r o o t o f t h e f u n c t i o n i n a n i t e n u m b e r o f s t e p s . A d d a n o t h e r
o p t i o n a l a r g u m e n t t o f i n d R o o t , s p e c i f y i n g t h e m a x i m u m n u m b e r o f i t e r a t i o n s t o
p e r f o r m . M a k e t h e s e c h a n g e s t o y o u r i t e r a t i v e v e r s i o n o f t h e R o o t F i n d e r s m o d -
u l e . I n a d d i n g t h i s o p t i o n a l a r g u m e n t , c o n s i d e r i t s p l a c e m e n t i n t h e a r g u m e n t
2 8
8/7/2019 TUTORIAL se PFD
29/56
l i s t s o t h a t t h e f u n c t i o n m a y b e c o n v e n i e n t l y c a l l e d w i t h o r w i t h o u t i n c l u d i n g t h e
a r g u m e n t i n t h e c a l l .
2 . 1 0 A c h i e v i n g P o r t a b i l i t y
P o r t a b i l i t y r e f e r s t o t h e e a s e w i t h w h i c h s o u r c e c o d e c a n b e m o v e d f r o m m a c h i n e
t o m a c h i n e . A p o r t a b l e p r o g r a m r e q u i r e s l i t t l e o r n o c h a n g e t o t h e s o u r c e c o d e
w h e n c o m p i l e d a n d r u n o n a d i e r e n t m a c h i n e . P o r t a b i l i t y o f n u m e r i c a l c o d e i s
i m p o r t a n t f o r s e v e r a l r e a s o n s .
N u m e r i c a l l i b r a r i e s , s u c h a s L i n p a c k o r t h e N A G l i b r a r i e s , a r e a v a i l a b l e .
I f t h i s c o d e i s n o t p o r t a b l e , i t m u s t b e t a i l o r e d t o t h e p a r t i c u l a r i m p l e -
m e n t a t i o n o n w h i c h i t i s u s e d .
A c c e s s t o h i g h p e r f o r m a n c e m a c h i n e s i s s o m e t i m e s l i m i t e d . O f t e n , a p r o -
g r a m i s d e v e l o p e d a n d t e s t e d o n a s m a l l w o r k s t a t i o n , t h e n p o r t e d t o a
h i g h p e r f o r m a n c e m a c h i n e t o r u n l a r g e r p r o b l e m s . W i t h o u t p o r t a b i l i t y ,
t h i s i s n o t p o s s i b l e .
M a n y s m a l l w o r k s t a t i o n s s u c h a s D E C , S u n , a n d I B M , a r e o f t e n a v a i l a b l e
a t a p a r t i c u l a r s i t e o n a l o c a l n e t w o r k . I t i s s i m p l y i n c o n v e n i e n t t o r e s t r i c t
c o d e t o a p a r t i c u l a r i m p l e m e n t a t i o n .
F o r t r a n 9 0 i n t r o d u c e s s e v e r a l n e w m e c h a n i s m s t o a i d i n p o r t i n g n u m e r i -
c a l c o d e t o o t h e r m a c h i n e s . T h e m o s t d i c u l t p r o b l e m i n p o r t i n g n u m e r i c a l
p r o g r a m s i s i n t h e p o r t a b l e s e l e c t i o n o f p r e c i s i o n . S e l e c t i n g t h e p r e c i s i o n o f a
c o m p u t a t i o n i n a p o r t a b l e w a y w a s i m p o s s i b l e w i t h F o r t r a n 7 7 . H o w e v e r , w i t h
t h e i n t r o d u c t i o n o f k i n d v a l u e s a s w e l l a s i n t r i n s i c e n v i r o n m e n t a l i n q u i r y f u n c -
t i o n s f o r s e l e c t i n g a n d i n q u i r i n g a b o u t p r e c i s i o n , F o r t r a n 9 0 p r o g r a m s s h o u l d
b e m u c h e a s i e r t o p o r t t o o t h e r m a c h i n e s .
K i n d v a l u e s a r e i n t e g e r c o n s t a n t s t h a t c a n b e u s e d t o f u r t h e r s p e c i f y t h e
c h a r a c t e r i s t i c s o f a n i n t r i n s i c t y p e , s u c h a s i n t e g e r o r r e a l . F o r e x a m p l e ,
r e a l ( 2 ) s e l e c t s a r e a l t y p e w i t h k i n d v a l u e 2 . U n f o r t u n a t e l y , k i n d v a l u e s
a r e p r o c e s s o r - d e p e n d e n t a n d a r e t h e r e f o r e n o t s t a n d a r d i z e d . H o w e v e r , t h e r e
a r e s e v e r a l p o r t a b l e w a y s t o s e l e c t k i n d v a l u e s b a s e d o n t h e p r e c i s i o n d e s i r e d .
T w o s u c h f u n c t i o n s a r e s e l e c t e d i n t k i n d a n d s e l e c t e d r e a l k i n d . T h e
f o l l o w i n g P r e c i s i o n m o d u l e i l l u s t r a t e s a p o r t a b l e m e a n s o f s e l e c t i n g p r e c i s i o n
p a r a m e t r i c a l l y .
m o d u l e P r e c i s i o n
i n t e g e r , p a r a m e t e r : : Q = s e l e c t e d _ r e a l _ k i n d ( 1 0 , 1 0 )
e n d m o d u l e P r e c i s i o n
T h e s e l e c t e d r e a l k i n d f u n c t i o n a b o v e s e l e c t s t h e k i n d v a l u e c o r r e s p o n d -
i n g t o a r e a l n u m b e r w i t h a t l e a s t 1 0 d e c i m a l d i g i t s o f p r e c i s i o n a n d a d e c i m a l
e x p o n e n t r a n g e o f a t l e a s t 1 0 i n m a g n i t u d e . T h e s e l e c t e d i n t k i n d f u n c -
t i o n i s s i m i l a r , a n d a n e x p r e s s i o n s u c h a s s e l e c t e d i n t k i n d ( 1 0 ) s e l e c t s
2 9
8/7/2019 TUTORIAL se PFD
30/56
t h e k i n d v a l u e c o r r e s p o n d i n g t o a i n t e g e r n u m b e r w i t h m a g n i t u d e i n t h e r a n g e
( 1 0
1 0
1 0
1 0
) . O t h e r e n v i r o n m e n t a l i n q u i r y a n d m a n i p u l a t i o n f u n c t i o n s a r e d e -
s c r i b e d i n t a b l e s 1 a n d 2 i n s e c t i o n 1 . A d v a n c e d u s e s o f t h e s e f u n c t i o n s a n d
o t h e r p o r t a b i l i t y i s s u e s a r e d e s c r i b e d i n s e c t i o n 3 .
E x e r c i s e 2 . 1 7 I n t h e R o o t F i n d e r s m o d u l e , a d d p a r a m e t e r i z e d t y p e s t o a l l v a r i -
a b l e s , c o n s t a n t s , a n d f u n c t i o n s t h a t w e r e p r e v i o u s l y d e c l a r e d a s r e a l . U s e t h e
P r e c i s i o n m o d u l e g i v e n a b o v e , s o t h a t