TUTORIAL se PFD

Embed Size (px)

Citation preview

  • 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