F. Marić, P. Janičić: Osnove programiranja kroz programski jezik C

Embed Size (px)

Citation preview

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    1/176

    O s n o v e p r o g r a m i r a n j a

    k r o z p r o g r a m s k i j e z i k C D e o I I

    P r e d r a g J a n i c i c i F i l i p M a r i c

    2 9 . j u l i 2 0 1 4

    1

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    2/176

    S a d r z a j

    S a d r z a j 2

    I O s n o v e r a z v o j a s o f t v e r a 5

    1

    Z i v o t n i c i k l u s r a z v o j a s o f t v e r a 7

    1 . 1 M e t o d o l o g i j e r a z v o j a s o f t v e r a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1 . 2 P l a n i r a n j e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1

    2 P r i n c i p i p i s a n j a p r o g r a m a 1 5

    2 . 1 T i m s k i r a d i k o n v e n c i j e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5

    2 . 2 V i z u a l n i e l e m e n t i p r o g r a m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5

    2 . 3 I m e n o v a n j e p r o m e n l j i v i h i f u n k c i j a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 7

    2 . 4 P i s a n j e i z r a z a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 8

    2 . 5 K o r i s c e n j e i d i o m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 9

    2 . 6 K o r i s c e n j e m a k r o a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0

    2 . 7 K o r i s c e n j e k o n s t a n t i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1

    2 . 8 P i s a n j e k o m e n t a r a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2

    2 . 9 M o d u l a r n o s t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3

    3 E k a s n o s t p r o g r a m a i s l o z e n o s t i z r a c u n a v a n j a 2 7

    3 . 1 M e r e n j e i p r o c e n j i v a n j e k o r i s c e n i h r e s u r s a . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 7

    3 . 2

    On o t a c i j a i r e d s l o z e n o s t i a l g o r i t m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 9

    3 . 3 I z r a c u n a v a n j e s l o z e n o s t i f u n k c i j a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2

    3 . 4 R e k u r e n t n e j e d n a c i n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2

    3 . 5 P r i m e r i i z r a c u n a v a n j a s l o z e n o s t i f u n k c i j a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5

    3 . 6 K l a s e s l o z e n o s t i P i N P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 6

    3 . 7 P o p r a v l j a n j e v r e m e n s k e s l o z e n o s t i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 8

    3 . 8 P o p r a v l j a n j e p r o s t o r n e s l o z e n o s t i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 0

    4 I s p r a v n o s t p r o g r a m a 4 5

    4 . 1 O s n o v n i p r i s t u p i i s p i t i v a n j u i s p r a v n o s t i p r o g r a m a . . . . . . . . . . . . . . . . . . . . . . . 4 6

    4 . 2 D i n a m i c k o v e r i k o v a n j e p r o g r a m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6

    4 . 3 S t a t i c k o i s p i t i v a n j e i s p r a v n o s t i p r o g r a m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 9

    I I O s n o v i a l g o r i t m i k e 5 9

    5 R e k u r z i j a 6 1

    5 . 1 P r i m e r i r e k u r z i v n i h f u n k c i j a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2

    5 . 2 U z a j a m n a r e k u r z i j a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5

    5 . 3 D o b r e i l o s e s t r a n e r e k u r z i j e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7

    2

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    3/176

    5 . 4 E l i m i n i s a n j e r e k u r z i j e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 8

    6 F u n d a m e n t a l n i a l g o r i t m i 7 7

    6 . 1 P r e t r a z i v a n j e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7

    6 . 2 S o r t i r a n j e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4

    6 . 3 J e d n o s t a v n i a l g e b a r s k o - n u m e r i c k i a l g o r i t m i . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0 5

    6 . 4 G e n e r i s a n j e k o m b i n a t o r n i h o b j e k a t a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0 6

    6 . 5 A l g o r i t m i z a s n o v a n i n a b i t o v s k i m o p e r a t o r i m a . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1

    7 F u n d a m e n t a l n e s t r u k t u r e p o d a t a k a 1 1 9

    7 . 1 L i s t e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 9

    7 . 2 S t a b l a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 0

    7 . 3 G r a f o v i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 5

    7 . 4 H e s t a b e l e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 5

    I I I O s n o v e p r o g r a m s k i h j e z i k a 1 4 5

    8 P r o g r a m s k i j e z i c i i p a r a d i g m e 1 4 7

    8 . 1 I s t o r i j a t r a z v o j a v i s i h p r o g r a m s k i h j e z i k a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4 7

    8 . 2 P r o g r a m s k e p a r a d i g m e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4 8

    9 U v o d u p r e v o de n j e p r o g r a m s k i h j e z i k a 1 5 1

    9 . 1 I m p l e m e n t a c i j a p r o g r a m s k i h j e z i k a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 1

    9 . 2 K r a t k a i s t o r i j a r a z v o j a k o m p i l a t o r a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 1

    9 . 3 M o d e r n i k o m p i l a t o r i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 2

    9 . 4 S t r u k t u r a k o m p i l a t o r a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 2

    9 . 5 L e k s i c k a a n a l i z a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 3

    9 . 6 S i n t a k s n a a n a l i z a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 3

    9 . 7 P r i m e r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 4

    9 . 8 T e o r i j a f o r m a l n i h j e z i k a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 5

    9 . 9 N a c i n i o p i s a l e k s i k e i s i n t a k s e p r o g r a m s k i h j e z i k a . . . . . . . . . . . . . . . . . . . . . . . 1 5 9

    9 . 1 0 N a c i n i o p i s a s e m a n t i k e p r o g r a m s k i h j e z i k a . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6 4

    I V R a c u n a r i i d r u s t v o 1 6 7

    1 0 I s t o r i j s k i i d r u s t v e n i k o n t e k s t r a c u n a r s t v a 1 6 9

    1 0 . 1 D r u s t v e n i z n a c a j r a c u n a r s t v a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6 9

    1 0 . 2 R a c u n a r s t v o k a o n a u c n a d i s c i p l i n a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6 9

    1 0 . 3 R i z i c i i p o u z d a n o s t r a c u n a r s k i h s i s t e m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6 9

    1 0 . 4 P r i v a t n o s t i g r a

    da n s k e s l o b o d e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6 9

    1 1 P r a v n i a s p e k t i r a c n a r s t v a 1 7 1

    1 1 . 1 I n t e l e k t u a l n a s v o j i n a i l i c e n c e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 7 1

    1 1 . 2 P i r a t e r i j a i r a c u n a r s k i k r i m i n a l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 7 1

    1 2 E k o n o m s k i a s p e k t i r a c u n a r s t v a 1 7 3

    1 3 E t i c k i a s p e k t i r a c u n a r s t v a 1 7 5

    3

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    4/176

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    5/176

    D e o I

    O s n o v e r a z v o j a s o f t v e r a

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    6/176

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    7/176

    G l a v a

    1

    Z i v o t n i c i k l u s r a z v o j a s o f t v e r a

    P o d r a z v o j e m s o f t v e r a c e s t o s e n e m i s l i s a m o n a n e p o s r e d n o p i s a n j e p r o g r a m a , v e c i n a p r o c e s e k o j i

    m u p r e t h o d e i s l e d e . U t o m , s i r e m s m i s l u r a z v o j s o f t v e r a s e n a z i v a i z i v o t n i c i k l u s r a z v o j a s o f t v e r a .

    R a z v o j s o f t v e r a s e r a z l i k u j e o d s l u c a j a d o s l u c a j a , a l i u n e k o j f o r m i o b i c n o i m a s l e d e c e f a z e i p o d f a z e :

    P l a n i r a n j e : O v a f a z a o b u h v a t a p r i k u p l j a n j e i a n a l i z u z a h t e v a o d n a r u c i o c a s o f t v e r a , r a z r e s a v a n j e n e p o t -

    p u n i h , v i s e s m i s l e n i h i l i k o n t r a d i k t o r n i h z a h t e v a i k r e i r a n j e p r e c i z n e s p e c i k a c i j e p r o b l e m a i d i z a j n a

    s o f t v e r s k o g r e s e n j a . P o d f a z e o v e f a z e s u :

    A n a l i z a i s p e c i k o v a n j e p r o b l e m a ( o b i c n o j e s p r o v o d i a n a l i t i c a r , k o j i n i j e n u z n o i n f o r m a t i c a r ,

    a l i m o r a d a p o z n a j e r e l e v a n t n e p o s l o v n e i l i d r u g e p r o c e s e ) ;

    M o d e l o v a n j e r e s e n j a ( o b i c n o j e s p r o v o d i p r o j e k t a n t , k o j i m o r a d a r a z u m e i s p e c i k a c i j u p r o b -

    l e m a i d a j e u s t a n j u d a i z a b e r e a d e k v a t n a s o f t v e r s k a r e s e n j a , n p r . p r o g r a m s k i j e z i k , b a z u

    p o d a t a k a , r e l e v a n t n e b i b l i o t e k e , s t r u k t u r e p o d a t a k a , m a t e m a t i c k u r e p r e z e n t a c i j u p r o b l e m a ,

    a l g o r i t a m s k a r e s e n j a , i t d ) ;

    D i z a j n s o f t v e r s k o g r e s e n j a ( s p r o v o d e j e p r o g r a m e r i ) .

    R e a l i z a c i j a : O v a f a z a o b u h v a t a i m p l e m e n t i r a n j e d i z a j n i r a n o g s o f t v e r s k o g r e s e n j a u n e k o m k o n k r e t n o m

    p r o g r a m s k o m j e z i k u . I m p l e m e n t a c i j a t r e b a d a s l e d i o p s t e p r e p o r u k e , k a o i p r e p o r u k e s p e c i c n e z a

    r e a l i z a t o r a i l i z a k o n k r e t a n p r o j e k a t . P o u z d a n o s t i u p o t r e b l j i v o s t s o f t v e r s k o g p r o i z v o d a p r o v e r a v a

    s e a n a l i z o m e k a s n o s t i i i s p r a v n o s t i , a z a n a r u c i o c a s e p r i p r e m a i d o k u m e n t a c i j a . P o d f a z e o v e f a z e

    s u :

    I m p l e m e n t i r a n j e ( k o d i r a n j e , p i s a n j e p r o g r a m a ) ( o n e k i m a s p e k t i m a o v e f a z e g o v o r i g l a v a 2 ) ;

    A n a l i z a e k a s n o s t i i i s p r a v n o s t i ( o n e k i m a s p e k t i m a o v i h f a z a g o v o r e r e d o m g l a v a 3 i g l a v a 4 ) ;

    I z r a d a d o k u m e n t a c i j e ( o b i c n o k o r i s n i c k e d o k u m e n t a c i j e k o j a o p i s u j e k o r i s c e n j e p r o g r a m a i

    t e h n i c k e d o k u m e n t a c i j e d o k u m e n t a c i j e k o j a o p i s u j e i z v o r n i k o d ) ;

    E k s p l o a t a c i j a : O v a f a z a p o c i n j e n a k o n s t o j e i s p r a v n o s t s o f t v e r a a d e k v a t n o p r o v e r e n a i n a k o n s t o

    j e s o f t v e r o d o b r e n z a u p o t r e b u . P u s t a n j e u r a d u k l j u c u j e i n s t a l i r a n j e , p o d e s a v a n j a u s k l a d u s a

    s p e c i c n i m p o t r e b a m a i z a h t e v i m a k o r i s n i k a a l i i t e s t i r a n j e u r e a l n o m o k u z e n j u i s v e u k u p n u e v a l -

    u a c i j u s i s t e m a . O r g a n i z u j e s e o b u k a z a o s n o v n e i n a p r e d n e k o r i s n i k e i o b e z b e

    du j e o d r z a v a n j e k r o z

    k o j e s e i s p r a v l j a j u g r e s k e i l i d o d a j u n o v e m a n j e f u n k c i o n a l n o s t i . U o d r z a v a n j e s e o b i c n o u l o z i v i s e

    o d t r i c e t v r t i n e u k u p n o g r a d a u c i t a v o m z i v o t n o m c i k l u s u s o f t v e r a . P o d f a z e o v e f a z e s u :

    O b u k a i t e h n i c k a p o d r s k a ;

    P u s t a n j e u r a d ;

    O d r z a v a n j e .

    P o s t o j e i m e du n a r o d n i s t a n d a r d i , k a o s t o j e I S O / I E C 1 2 2 0 7 i I S O / I E C 1 5 5 0 4 , k o j i o p i s u j u z i v o t n i c i k l u s s o f t v e r a , k r o s p r e c i z n o o p i s a n e p o s t u p k e i z b o r a , i m p l e m e n t a c i j e i n a d g l e d a n j a r a z v o j a s o f t v e r a .

    K v a l i t e t r a z v i j e n o g p o s l a c e s t o s e o c e n j u j e p r e m a n i v o u u s k l a

    de n o s t i s a o v i m s t a n d a r d i m a .

    7

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    8/176

    S l i k a 1 . 1 : F a z e r a z v o j a s o f t v e r a i l u s t r o v a n e n a s a l j i v n a c i n

    F a z e r a z v o j a s o f t v e r a i m o g u c e p r o b l e m e n a s a l j i v n a c i n i l u s t r u j e c u v e n a k a r i k a t u r a p r i k a z a n a n a s l i c i

    1 . 1 .

    Z a r a z v o j s o f t v e r a r e l e v a n t n i s u i p r o c e s i i s t r a z i v a n j a t r z i s t a , n a b a v k e s o f t v e r a , n a r u c i v a n j a s o f t v e r a ,

    r a z m a t r a n j e p o n u d a i s l i c n i , a l i u o v o m t e k s t u c e b i t i r e c i s a m o o r a z v o j u s o f t v e r a o d f a z e p l a n i r a n j a .

    F a z a p l a n i r a n j a c e b i t i u k r a t k o o p i s a n a u n a s t a v k u o v o g p o g l a v l j a , d o k c e f a z a r e a l i z a c i j e i n j e n e p o d f a z e

    b i t i o p i s a n e d e t a l j n i j e u n a r e d n i m g l a v a m a .

    1 . 1 M e t o d o l o g i j e r a z v o j a s o f t v e r a

    I u t e o r i j i i u p r a k s i p o s t o j e m n o g e m e t o d o l o g i j e r a z v o j a s o f t v e r a . U p r a k s i s u o n e c e s t o p o m e s a n e

    i c e s t o j e t e s k o r a z v r s t a t i s t v a r n e p r o j e k t e u p o s t o j e c e m e t o d o l o g i j e . U n a s t a v k u j e o p i s a n o n e k o l i k o

    b i t n i h m e t o d o l o g i j a i i d e j a n a k o j i m a s u z a s n o v a n e .

    M e t o d o l o g i j a v o d o p a d a . U s t r o g o j v a r i j a n t i m e t o d o l o g i j e v o d o p a d a ( e n g . w a t e r f a l l ) , n a s l e d e c u f a z u

    u r a z v o j u s o f t v e r a p r e l a z i s e t e k k a d a j e j e d n a k o m p l e t n o z a v r s e n a . O v a m e t o d o l o g i j a i l u s t r o v a n a

    j e s l i k o m 1 . 2 . M e t o d o l o g i j a s e s m a t r a p r i m e n l j i v o m a k o s u i s p u n j e n i s l e d e c i u s l o v i :

    s v i z a h t e v i p o z n a t i s u u n a p r e d ;

    z a h t e v i n e m a j u n e r a z r e s e n e , p o t e n c i j a l n o r i z i c n e f a k t o r e ( n p r . r i z i k e k o j i s e o d n o s e n a c e n u ,

    t e m p o r a d a , e k a s n o s t , b e z b e d n o s t , i t d ) ;

    p r i r o d a z a h t e v a s e n e m e n j a b i t n o u t o k u r a z v o j a ;

    z a h t e v i s u u s k l a d u s a o c e k i v a n j i m a s v i h r e l e v a n t n i h s t r a n a ( i n v e s t i t o r i , k o r i s n i c i , r e a l i z a t o r i ,

    i t d . ) ;

    p o g o d n a a r h i t e k t u r a r e s e n j a m o z e b i t i o p i s a n a i p o d r o b n o s h v a c e n a ;

    n a r a s p o l a g a n j u j e d o v o l j n o v r e m e n a z a r a d u e t a p a m a .

    O v a j m o d e l n e p r e d v i da m o d i k o v a n j e p r e t h o d n i h f a z a j e d n o m k a d a s u z a v r s e n e i o v a o s o b i n a j e p r e d m e t n a j c e s c i h k r i t i k a . N a i m e , i z r a d a a p l i k a c i j a c e s t o t r a j e t o l i k o d u g o d a s e z a h t e v i p r o m e n e

    u m e

    du v r e m e n u i z a v r s n i p r o i z v o d v i s e n i j e s a s v i m a d e k v a t a n a p o n e k a d n i u o p s t e u p o t r e b l j i v .

    8

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    9/176

    A n a l i z a i s p e c i k o v a n j e p r o b l e m a

    M o d e l o v a n j e r e s e n j a

    D i z a j n s o f t v e r s k o g r e s e n j a

    I m p l e m e n t a c i j a

    A n a l i z a e k a s n o s t i i i s p r a v n o s t i

    I z r a d a d o k u m e n t a c i j e

    O b u k a i t e h n i c k a p o d r s k a

    P u s t a n j e u r a d

    O d r z a v a n j e

    S l i k a 1 . 2 : I l u s t r a c i j a z a m e t o d o l o g i j u v o d o p a d a

    M e t o d o l o g i j a i t e r a t i v n o g i i n k r e m e n t a l n o g r a z v o j a . U o v o j m e t o d o l o g i j i , d i z a j n s e o p i s u j e u i t -

    e r a c i j a m a i p r o j e k a t s e g r a d i i n k r e m e n t a l n o . I t e r a c i j e o b i c n o d o n o s e v i s e d e t a l j a i f u n k c i o n a l n o s t i ,

    a i n k r e m e n t a l n o s t p o d r a z u m e v a d o d a v a n j e j e d n o g p o j e d n o g m o d u l a , p r i c e m u i o n i m o g u b i t i

    m o d i k o v a n i u b u d u c e . U j e d n o m t r e n u t k u , v i s e r a z l i c i t i h f a z a z i v o t n o g c i k l u s a s o f t v e r a m o z e b i t i

    u t o k u . U o v o j m e t o d o l o g i j i v r a c a n j e u n a z a d j e m o g u c e . O v a m e t o d o l o g i j a i l u s t r o v a n a j e s l i k o m

    1 . 3 .

    I n i c i j a l n o p l a n i r a n j e

    P l a n i r a n j e I m p l e m e n t a c i j a

    E v a l u a c i j a E k s p l o a t a c i j a

    S l i k a 1 . 3 : I l u s t r a c i j a z a i t e r a t i v n u m e t o d o l o g i j u

    M e t o d o l o g i j a r a p i d n o g r a z v o j a . U o v o j m e t o d o l o g i j i ( e n g l . r a p i d a p p l i c a t i o n d e v e l o p m e n t ) , f a z a

    p l a n i r a n j a j e s v e d e n a n a m i n i m u m z a r a d b r z o g d o b i j a n j a p r o t o t i p o v a u i t e r a c i j a m a . F a z a p l a n i r a n j a

    j e p o m e s a n a s a f a z o m i m p l e m e n t a c i j e s t o o l a k s a v a i z m e n e z a h t e v a u h o d u i b r z e i m p l e m e n t i r a n j e .

    P r o c e s r a z v o j a k r e c e s a r a z v o j e m p r e l i m i n a r n o g m o d e l a p o d a t a k a i a l g o r i t a m a , r a z v i j a j u s e p r o -

    t o t i p o v i n a o s n o v u k o j i h s e d e n i s u , p r e c i z i r a j u i l i p o t v r du j u i l i z a h t e v i n a r u c i o c a i l i k o r i s n i k a .O v a j p o s t u p a k s e p o n a v l j a i t e r a t i v n o , s v e d o z a v r s n o g p r o i z v o d a .

    S l a b a s t r a n a o v e m e t o d o l o g i j e j e u t o m e s t o m o z e d o v e s t i d o n i z a p r o t o t i p o v a k o j i n i k a d a n e d o s t i z u

    d o z a d o v o l j a v a j u c e n a l n e a p l i k a c i j e .

    C e s t i z v o r t a k v i h p r o b l e m a s u g r a c k i k o r i s n i c k i i n t e r f e j s i

    ( e n g l . g r a p h i c a l u s e r i n t e r f a c e ; G U I ) . N a i m e , k o r i s n i c i n a p r e d a k u r a z v o j u a p l i k a c i j e d o z i v l j a v a j u

    p r v e n s t v e n o k r o z n a p r e d a k g r a c k o g k o r i s n i c k o g i n t e r f e j s a . T o p o d s t i c e p r o g r a m e r e , p a i v o

    de

    p r o j e k a t a , d a s e u p r o t o t i p o v i m a u s r e d s r e

    du j u n a d e t a l j e g r a c k o g i n t e r f e j s a u m e s t o n a d r u g e

    9

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    10/176

    s e g m e n t e a p l i k a c i j e ( k a o s t o s u , n a p r i m e r , p o s l o v n i p r o c e s i i o b r a d a p o d a t a k a ) .

    C a k i m n o g i

    r a z v o j n i a l a t i p r i v i l e g o v a n o m e s t o u r a z v o j u s o f t v e r a d a j u r a z v o j u g r a c k i h i n t e r f e j s a . O v a k a v

    r a z v o j a p l i k a c i j e c e s t o d o v o d i d o n i z a p r o t o t i p o v a s a r a z r a

    de n i m k o r i s n i c k i m i n t e r f e j s o m , a l i b e z

    a d e k v a t n i h o b r a d a k o j e s t o j e i z a n j e g a .

    S p i r a l n a m e t o d o l o g i j a . O v a m e t o d o l o g i j a k o m b i n u j e a n a l i z u r i z i k a s a n e k i m o s o b i n a m a m e t o d o l o g i j e

    v o d o p a d a i m e t o d o l o g i j e r a p i d n o g r a z v o j a . S p i r a l a k o j a i l u s t r u j e o v u m e t o d o l o g i j u p r o l a z i u i t e r a c i -

    j a m a k r o z n e k o l i k o f a z a k a o s t o s u p l a n i r a n j e i d i z a j n , i m p l e m e n t a c i j a , a n a l i z a r i z i k a , e v a l u a c i j a

    t e k u c e v e r z i j e i m p l e m e n t a c i j e . U s v a k o j i t e r a c i j i a n a l i z i r a j u s e r e l e v a n t n i f a k t o r i r i z i k a ( n p r . r i z i c i

    k o j i s e o d n o s e n a c e n u , t e m p o r a d a , e k a s n o s t , b e z b e d n o s t , i t d ) . A k o n e k i r i z i k n e m o z e b i t i

    e l i m i n i s a n , n a r u c i l a c m o r a d a o d l u c i d a l i s e s a p r o j e k t o m n a s t a v l j a i l i n e . U k o l i k o s e s a p r o j e k t o m

    n a s t a v l j a , u l a z i s e u s l e d e c u i t e r a c i j u .

    O v a m e t o d o l o g i j a s e o b i c n o n e k o r i s t i u p r o j e k t i m a u k o j i m a a n a l i z a r i z i k a m o z e d a u g r o z i i s p l a t i v o s t

    p r o j e k t a .

    M e t o d o l o g i j a e k s t r e m n o g r a z v o j a . O v o j e j e d n a o d t z v . a g i l n i h m e t o d o l o g i j a u k o j i m a s e k o r i s t i

    p o j e d n o s t a v l j e n i i t e r a t i v n i r a z v o j u c i j e m c e n t r u s u p o j e d i n a c n i p r o g r a m e r i . U m e t o d o l o g i j i e k -

    s t r e m n o g p r o g r a m i r a n j a , f a z e s e s p r o v o d e u v e o m a m a l i m k o r a c i m a i p r v a i t e r a c i j a m o z e d a d o v e d e ,

    d o s v e s n o n e p o t p u n e a l i f u n k c i o n a l n e c e l i n e , v e c z a j e d a n d a n i l i n e d e l j u ( z a r a z l i k u o d n e k o l i k o

    m e s e c i i l i c a k g o d i n a u m e t o d o l o g i j i v o d o p a d a ) .

    O s n o v n i p r i n c i p i k o j e a g i l n i r a z v o j p r a t i s u s l e d e c i :

    L j u d i i n j i h o v a k o m u n i k a c i j a s u b i t n i j i o d p r o c e s a i a l a t a s a m o o r g a n i z o v a n j e , m o t i v a c i j a

    p r o g r a m e r a i n j i h o v e m e du s o b n e i n t e r a k c i j e s u j a k o v a z n e ( p o d s t i c e s e , n a p r i m e r , r a d u p a r o v i m a ) . P r o j e k a t n e m o z e d a u s p e a k o l j u d i n i s u k v a l i t e t n i . I z g r a d n j a t i m a v a z n i j a j e o d

    i z g r a d n j e o k r u z e n j a .

    N a r u c i o c u j e m n o g o b o l j e t o k o m s a s t a n a k a p r i k a z i v a t i s o f t v e r k o j i n e s t o r a d i ( n e s v e i n e

    s a v r s e n o ) n e g o m u p r i k a z i v a t i s a m o p l a n o v e i d o k u m e n t e . D o k u m e n t a c i j a m o r a d a p o s t o j i , a l i

    p r e v i s e d o k u m e n t a c i j e m o z e b i t i g o r e n e g o p r e m a l o ( n a i m e , o s n o v n i c i l j p r o j e k t a o b i c n o n i j e

    d o k u m e n t a c i j a , v e c s o f t v e r ) .

    Z a h t e v i n e m o g u d a s e u p o t p u n o s t i u t v r d e n a s a m o m p o c e t k u p a n a r u c i l a c t r e b a d a k o n -

    s t a n t n o b u d e u k l j u c e n u r a z v o j n i t i m .

    Z a h t e v i s e m e n j a j u i m n o g o j e b o l j e n a n j i h o d g o v a r a t i o d m a h n e g o s e s t r i k t n o d r z a t i u n a p r e d

    z a c r t a n o g p l a n a . V i z i j a i g l a v n i c i l j e v i m o r a j u d a p o s t o j e , a l i t r e b a b i t i e k s i b i l a n i d o p u s t i t i

    p r o m e n e t o k o m r a z v o j a .

    A g i l n i r a z v o j v e z a n j e c e s t o i z a a u t o m a t i z o v a n e t e s t o v e k o j i m a s e s a j e d n e s t r a n e p r e c i z i r a j u

    z a h t e v i k o j e o d r e de n e s o f t v e r s k e k o m p o n e n t e ( n a p r i m e r , f u n k c i j e ) t r e b a d a z a d o v o l j e , a s a d r u g e s t r a n e p r o v e r a v a s e k o l i k o t e k o m p o n e n t e z a i s t a i s p u n j a v a j u d a t e z a h t e v e . T e s t o v i s e c e s t o p i s u p r e

    i m p l e m e n t a c i j e s a m i h f u n k c i j a , u n j i m a s e v r s e p o z i v i f u n k c i j a z a o d r e de n e k a r a k t e r i s t i c n e u l a z e i p r o v e r a v a s e d a l i s e v r a c e n i r e z u l t a t i p o k l a p a j u s a o c e k i v a n i m i z l a z i m a . T e s t o v i s e p i s u n a o s n o v u

    o p s t i h p r a v i l a z a t e s t i r a n j e s o f t v e r a o k o j i m a c e b i t i v i s e r e c i u n a r e d n i m p o g l a v l j i m a .

    U e k s t r e m n o m r a z v o j u , p r o g r a m i r a n j e s e o b i c n o v r s i u p a r u . D v a p r o g r a m e r a i s t o v r e m e n o r e s a v a j u

    p r o b l e m , j e d a n p i s e k o d d o k d r u g i p r o v e r a v a n j e g o v o p i s a n j e i p o k u s a v a d a p r o n a

    de i u k a z e n a

    e v e n t u a l n e g r e s k e i n e d o s t a t k e . T o k o m r a z v o j a s v i u n a p r e d z a d a t i t e s t o v i t r e b a d a b u d u z a d o v o l j e n i ,

    a l i t o k o m r a z v o j a p r o g r a m e r i m o g u i d a d o d a j u n o v e t e s t o v e . I m p l e m e n t a c i j a s e z a v r s a v a t e k k a d a

    o b a p r o g r a m e r a b u d u z a d o v o l j n a k o d o m , k a d a k o d p r o l a z i s v e t e s t o v e i k a d a p r o g r a m e r i n e m o g u

    d a s e s e t e n o v i h t e s t o v a k o j e b i t r e b a l o d o d a t i .

    D i z a j n i a r h i t e k t u r a k o d a s e n e z a d a j u u n a p r e d , v e c s e o n i j a v l j a j u t o k o m s a m o g k o d i r a n j a i

    k a s n i j e , u p r o c e s u r e f a k t o r i s a n j a k o d a ( i z m e n e n j e g o v e u n u t r a s n j e s t r u k t u r e b e z i z m e n e f u n k c i o n a l -

    n o s t i ) . D a k l e , i s t i l j u d i k o j i r a d e k o d i r a n j e b r i n u o d i z a j n u . N e k o m p l e t n i , a l i f u n k c i o n a l n i s i s t e m

    s e k o n s t a n t n o d e m o n s t r i r a n a r u c i o c u ( i o s t a t k u t i m a , a l i i k r a j n j i m k o r i s n i c i m a ) . T a d a s e k r e c e s a

    p i s a n j e m t e s t o v a z a n a r e d n i v a z a n d e o s i s t e m a .

    1 0

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    11/176

    1 . 2 P l a n i r a n j e

    F a z a p l a n i r a n j a m o z e d a o b u h v a t i s l e d e c e z a d a t k e :

    a n a l i z u i s p e c i k o v a n j e p r o b l e m a ,

    m o d e l o v a n j e r e s e n j a ,

    d i z a j n s o f t v e r s k o g r e s e n j a .

    A n a l i z a s e p r e s v e g a b a v i s a m i m p r o b l e m o m t j . n j e g o v o m p r e c i z n o m p o s t a v k o m i f o r m u l a c i j o m , d o k

    s e m o d e l o v a n j e i d i z a j n b a v e r e s e n j e m p r o b l e m a k o j i j e d e n i s a n u f a z i a n a l i z e . U f a z i p l a n i r a n j a s i s t e m a

    o b i c n o s e k o r i s t e r a z l i c i t e d i j a g r a m s k e t e h n i k e i s p e c i j a l i z o v a n i a l a t i k o j i p o d r z a v a j u k r e i r a n j e o v a k v i h

    d i j a g r a m a ( t z v . C A S E a l a t i C o m p u t e r A i d e d S o f t w a r e E n g i n e e r i n g ) .

    1 . 2 . 1 A n a l i z a i s p e c i k o v a n j e p r o b l e m a

    S o b z i r o m n a t o d a s e s o f t v e r o b i c n o p i s e z a n a r u c i o c e , u p r o c e s u a n a l i z e i s p e c i k o v a n j a p r o b l e m a

    v r s i s e i n t e n z i v n a k o m u n i k a c i j a a n a l i t i c a r a s a n j i m a . K a d a s e s o f t v e r p r a v i p o n a r u d z b i n i , n a r u c i o c i

    m o g u d a b u d u k r a j n j i k o r i s n i c i i l i n j i h o v i p r e d s t a v n i c i , a l i c e s t s l u c a j u v e l i k i m k o m p a n i j a m a j e d a

    u l o g u n a r u c i o c a p r e u z i m a j u r a d n i c i z a p o s l e n i u o d e l j e n j u p r o d a j e i l i m a r k e t i n g a ( k o j i i m a j u i d e j u k a k a v

    p r o i z v o d b i k a s n i j e m o g l i d a p r o d a j u ) .

    T o k o m s a s t a n a k a c e s t o s e n a j p r e v r s i a n a l i z a p o s t o j e c i h r e s e n j a ( n a p r i m e r , p o s t o j e c e g p o s l o v n o g

    p r o c e s a u k o m p a n i j i k o j a u v o d i i n f o r m a c i o n i s i s t e m ) i r a z m a t r a j u s e m o g u c n o s t i n j i h o v o g u n a p r e de n j a u v o

    de n j e m n o v o g s o f t v e r a . K a k o n a r u c i o c i o b i c n o n e m a j u p o t r e b n o i n f o r m a t i c k o o b r a z o v a n j e , o n i c e s t o

    n i s u s v e s n i s v i h m o g u c n o s t i k o j e n o v i s o f t v e r m o z e d a i m p r u z i . J e d a n o d z a d a t a k a a n a l i t i c a r a j e

    d a o v a k v e m o g u c n o s t i u o c a v a i d a o n j i m a k o m u n i c i r a s a n a r u c i o c i m a . N a r u c i o c i f o r m u l i s u z a h t e v e

    ( e n g l . r e q u i r e m e n t s ) k o j e s o f t v e r k o j i s e p r o i z v o d i t r e b a d a z a d o v o l j i . Z a h t e v i s u c e s t o n e p r e c i z n i , p a c a k

    i k o n t r a d i k t o r n i , i z a d a t a k a n a l i t i c a r a j e d a i h u s a r a d n j i s a n a r u c i o c i m a p r e c i z i r a i u o b l i c i .

    P o r e d p r e c i z n e a n a l i z e z a h t e v a , z a d a t a k a n a l i z e j e i d a s e n a p r a v e p r o c e n e o b i m a , c e n e i v r e m e n a

    p o t r e b n o g d a s e p r o j e k a t r e a l i z u j e . P r e c i z n i j e , a n a l i z a t r e b a d a p r o c e n i :

    o b i m p o s l a k o j i c e d a s e r a d i ( p o t r e b n o j e p r e c i z n o d e n i s a t i s t a p r o j e k a t t r e b a d a o b u h v a t i , a s t a n e ) ;

    r i z i k e k o j i p o s t o j e ( i d a d e n i s e o d g o v a r a j u c e r e a k c i j e p r o j e k t n o g t i m a u s l u c a j u d a n e s t o p o ded r u g a c i j e n e g o s t o j e p l a n i r a n o ) ;

    r e s u r s e ( l j u d s k e , m a t e r i j a l n e ) k o j i s u p o t r e b n i ;

    o c e k i v a n u c e n u r e a l i z a c i j e p r o j e k t a i n j e g o v i h d e l o v a ;

    p l a n r a d a ( p o f a z a m a ) k o j i j e n e o p h o d n o p o s t o v a t i .

    O b i m p o s l a c e s t o s e i z r a z a v a u t e r m i n i m a b r o j a p o t r e b n i h c o v e k - m e s e c i ( 1 c o v e k - m e s e c p o d r a z u m e v a

    d a j e d a n c o v e k n a p r o j e k t u r a d i m e s e c d a n a ) .

    R e z u l t a t a n a l i z e j e p r e c i z n a s p e c i k a c i j a p r o b l e m a . S p e c i k a c i j o m j e p o t r e b n o s t o p r e c i z n i j e o p i s a t i

    p r o b l e m , p r i r o d u u l a z n i h p o d a t a k a i o b l i k u k o m e s e z e l e r e s e n j a i z l a z n i r e z u l t a t i . S p e c i k a c i j a

    p r o g r a m a b a v i s e p i t a n j e m s t a p r o g r a m t r e b a d a u r a d i , k o j o m b r z i n o m , k o j a m u j e m a k s i m a l n a d o z v o l j e n a

    v e l i c i n a , i t d .

    K a d a j e p r o b l e m p r e c i z n o s p e c i k o v a n , p r e l a z i s e n a s l e d e c e f a z e u k o j i m a s e m o d e l u j e i d i z a j n i r a

    r e s e n j e s p e c i k o v a n o g p r o b l e m a .

    1 . 2 . 2 M o d e l o v a n j e r e s e n j a

    M o d e l o v a n j e r e s e n j a o b i c n o s p r o v o d i p r o j e k t a n t , k o j i m o r a d a r a z u m e s p e c i k a c i j u p r o b l e m a i d a j e u

    s t a n j u d a i z r a d i m a t e m a t i c k e m o d e l e p r o b l e m a i d a i z a b e r e a d e k v a t n a s o f t v e r s k a r e s e n j a , n p r . p r o g r a m s k i

    j e z i k , b a z u p o d a t a k a , r e l e v a n t n e b i b l i o t e k e , s t r u k t u r e p o d a t a k a , m a t e m a t i c k u r e p r e z e n t a c i j u p r o b l e m a ,

    a l g o r i t a m s k a r e s e n j a , i t d ) .

    1 1

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    12/176

    1 . 2 . 3 D i z a j n s o f t v e r s k o g r e s e n j a

    T o k o m d i z a j n a v r s i s e p r e c i z i r a n j e r e s e n j a i m a j u c i u v i d u k o n k r e t n u h a r d v e r s k u i s o f t v e r s k u p l a t f o r m u

    n a k o j o j r e s e n j e t r e b a d a b u d e r e a l i z o v a n o . K o n c e p t i k o j i s u u r a n i j i m f a z a m a n e z a v i s n i o d k o n k r e t -

    n i h t e h n o l o g i j a s e r a z r a

    du j u i d o b i j a s e o p s t i p l a n k a k o s i s t e m t r e b a d a b u d e i z g r a

    de n n a k o n k r e t n o j

    t e h n o l o g i j i . T o k o m d i z a j n a c e s t o s e k o r i s t e n e k i u n a p r e d p o n u de n i u z o r c i ( e n g l . d e s i g n p a t t e r n s ) z a k o j e j e p r a k s a p o k a z a l a d a p r e d s t a v l j a j u k v a l i t e t n a r e s e n j a z a o d r e

    de n u k l a s u p r o b l e m a .

    U j e d n o s t a v n i j i m s l u c a j e v i m a ( n a p r i m e r k a d a s o f t v e r t r e b a d a r a d i a u t o n o m n o , b e z k o r i s n i k a i

    k o r i s n i c k o g i n t e r f e j s a ) , d i z a j n m o z e b i t i d a t i u n e f o r m a l n o m t e k s t u a l n o m o b l i k i l i u v i d u j e d n o s t a v n o g

    d i j a g r a m a t o k a p o d a t a k a t j . t o k o v n i k a ( e n g l . d a t a o w d i a g r a m ) . U k o m p l e k s n i j i m s l u c a j e v i m a m o g u s e

    k o r i s t i t i n a p r e d n i j i s i s t e m i p o p u t U M L ( U n i e d M o d e l i n g L a n g u a g e ) . U M L j e s t a n d a r d i z o v a n a g r a c k a

    n o t a c i j a ( k a z e s e i g r a c k i j e z i k ) k o j a o m o g u c a v a m o d e l o v a n j e p o d a t a k a , m o d e l o v a n j e p o s l o v n i h p r o c e s a

    i m o d e l o v a n j e s o f t v e r s k i h k o m p o n e n t i . U M L m o z e b i t i k o r i s c e n i u d r u g i m f a z a m a z i v o t n o g c i k l u s a

    s o f t v e r a .

    O s n o v n i p o j m o v i d i z a j n a s o f t v e r a s u

    A p s t r a h o v a n j e ( e n g l . a b s t r a c t i o n ) a p s t r a h o v a n j e j e p r o c e s g e n e r a l i z a c i j e k o j i m s e o d b a c u j u n e b i t n e

    i n f o r m a c i j e t o k o m m o d e l o v a n j a n e k o g e n t i t e t a i l i p r o c e s a i z a d r z a v a j u s a m o o n e i n f o r m a c i j e k o j e

    s u b i t n e z a s a m s o f t v e r . T o k o m a p s t r a k c i j e v r s i s e i i d e n t i k a c i j a s r o d n i h e n t i t e t a . N a p r i m e r ,

    a p s t r a h o v a n j e m s e u o c a v a d a b o j a o c i j u s t u d e n t a n e m a n i k a k v o g z n a c a j a u i n f o r m a c i o n o m s i s t e m u

    f a k u l t e t a i t a i n f o r m a c i j a s e o n d a o d b a c u j e p r i l i k o m p r e d s t a v l j a n j a s t u d e n t a u s i s t e m u . A p s t r a h o -

    v a n j e p o d r a z u m e v a i a p s t r a h o v a n j e k o n t r o l e p r o g r a m a , i a p s t r a h o v a n j e p o d a t a k a . O b j e k t i i k l a s e

    u o b j e k t n o - o r i j e n t i s a n o m p r o g r a m i r a n j u k o m b i n u j u o v a d v a o b l i k a a p s t r a h o v a n j a .

    P r o n j a v a n j e ( e n g l . r e n e m e n t ) p r o n j a v a n j e j e p r o c e s r a z v o j a p r o g r a m a o d o z g o - n a n i z e . N e r a z r a

    de n i

    k o r a c i s e t o k o m p r o n j a v a n j a s v e v i s e p r e c i z i r a j u d o k s e n a s a m o m k r a j u n e d o

    de d o s a s v i m p r e -

    c i z n o g o p i s a u o b l i k u i z v r s n o g p r o g r a m s k o g k o d a . U s v a k o m k o r a k u j e d n a i l i v i s e f u n k c i j a t j . n a r e d b i

    s e r a z l a z e n a d e t a l j n i j e f u n k c i j e t j . n a r e d b e . N a p r i m e r , p o z i v p o z o v i _ p r i j a t e l j a ( ) m o z e d a

    s e r a z l o z i n a i d i _ d o _ t e l e f o n a ( ) , p o d i g n i _ s l u s a l i c u ( ) , o k r e n i _ b r o j ( ) , i t d . A p s t r a h o v a n j e i

    p r o n j a v a n j e m e du s o b n o s u s u p r o t n i p r o c e s i .

    M o d u l a r n o s t ( e n g l . m o d u l a r i t y ) s o f t v e r s e d e l i n a k o m p o n e n t e k o j e s e n a z i v a j u m o d u l i . S v a k i

    m o d u l i m a p r e c i z n o d e n i s a n u f u n k c i o n a l n o s t i p o z e l j n o j e d a m o d u l i s t o m a n j e z a v i s e j e d n i o d

    d r u g i h k a k o b i m o g l i d a s e k o r i s t e i u d r u g i m p r o g r a m i m a .

    S a k r i v a n j e i n f o r m a c i j a ( e n g l . i n f o r m a t i o n h i d i n g ) m o d u l i t r e b a d a b u d u d i z a j n i r a n i t a k o d a n j i h o v e

    u n u t r a s n j e i n f o r m a c i j e n e m o g u b i t i d o s t u p n e i z d r u g i h m o d u l a ( t a k o s e s m a n j u j e z a v i s n o s t i z m e

    du

    m o d u l a i p o s t i z e s e u n u t r a s n j a k o h e r e n t n o s t s v a k o g m o d u l a ) . K o r i s n i c i m a m o d u l a v a z n o j e s a m o

    k o j u f u n k c i o n a l n o s t i m t a j m o d u l p r u z a , a l i n e i n a c i n n a k o j i j e t a f u n k c i o n a l n o s t r e a l i z o v a n a .

    A r h i t e k t u r a s o f t v e r a ( e n g l . s o f t w a r e a r c h i t e c t u r e ) a r h i t e k t u r a s e o d n o s i n a c e l o k u p n u s t r u k t u r u

    s o f t v e r a i n a c i n e n a k o j e t a s t r u k t u r a o b e z b e du j e i n t e g r i t e t i u s p e h s i s t e m a . D o b r a a r h i t e k t u r a t r e b a d a o b e z b e d i z e l j e n i i s h o d p r o j e k t a ( d o b r e p e r f o r m a n s e , k v a l i t e t a n s o f t v e r , p o s t o v a n j e r o k o v a

    i u k l a p a n j e u p l a n i r a n e t r o s k o v e ) .

    P o d e l a s t r u k t u r e ( e n g l . s t r u c t u r a l p a r t i t i o n i n g ) s t r u k t u r a p r o g r a m a t r e b a d a b u d e p o d e l j e n a

    i v e r t i k a l n o i h o r i z o n t a l n o . H o r i z o n t a l n a p o d e l a d e n i s e h i j e r a r h i j u m o d u l a z a s v a k u k r u p n i j u

    f u n k c i o n a l n o s t s o f t v e r a . V e r t i k a l n a p o d e l a s u g e r i s e d a k o n t r o l a i p o d e l a p o s l a t r e b a d a b u d e d i s -

    t r i b u i r a n a o d o z g o n a n i z e u s t r u k t u r i p r o g r a m a .

    J e d n a o d n a j z n a c a j n i j i h v e s t i n a p o t r e b n i h z a r a z v o j d o b r i h p r o g r a m a j e s t r u k t u r n a d e k o m p o z i c i j a .

    1

    D i z a j n u v i d u t o k o v n i k a

    D i z a j n u v i d u t o k o v n i k a p r e d s t a v l j a n i z t r a n s f o r m a c i j a ( z a d a t i h u o b l i k u f u n k c i j a ) k o j i m a s e d a t i u l a z

    p r e v o d i u z e l j e n i i z l a z . O v a k a v d i z a j n p r e d s t a v l j a s e u o b l i k u d i j a g r a m a t o k a p o d a t a k a ( t z v . t o k o v n i k a ) .

    O v i d i j a g r a m i i l u s t r u j u k a k o p o d a c i t e k u k r o z s i s t e m i k a k o s e i z l a z i z v o d i i z u l a z a k r o z n i z f u n k c i o n a l n i h

    t r a n s f o r m a c i j a . T o k o v n i c i s u o b i c n o k o r i s t a n i i n t u i t i v a n n a c i n z a o p i s s i s t e m a . O b i c n o i h j e m o g u c e

    1

    D e l o m z a s n o v a n o n a p o g l a v l j u F u n c t i o n - o r i e n t e d d e s i g n k n j i g e I a n S o m m e r v i l l e : S o f t w a r e E n g i n e e r i n g .

    1 2

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    13/176

    r a z u m e t i i b e z p r e t h o d n e o b u k e . M n o g i a l a t i k o j i s e k o r i s t e t o k o m d i z a j n a s o f t v e r a ( n p r . C A S E a l a t i )

    o m o g u c u j u k r e i r a n j e t o k o v n i k a . N o t a c i j a k o j a s e k o r i s t i u t o k o v n i c i m a n i j e s t a n d a r d i z o v a n a , a l i r a z l i c i t e

    n o t a c i j e s u c e s t o s l i c n e . N a p r i m e r ,

    Z a o b l j e n i p r a v o u g a o n i c i p r e d s t a v l j a j u f u n k c i j e k o j e t r a n s f o r m i s u u l a z u i z l a z . I m e u p r a v o u g a o n i k u

    o z n a c a v a i m e f u n k c i j e .

    P r a v o u g a o n i c i o z n a c a v a j u s k l a d i s t a p o d a t a k a . I n j i m a j e p o z e l j n o d a t i i l u s t r a t i v n a i m e n a .

    K r u g o v i p r e d s t a v l j a j u k o r i s n i k e k o j i i n t e r a g u j u s a s i s t e m o m d a j u c i u l a z i l i p r i h v a t a j u c i i z l a z .

    S t r e l i c e o z n a c a v a j u s m e r t o k a p o d a t a k a . N a s t r e l i c a m a s e o z n a c a v a v r s t a p o d a t a k a k o j a s e p r e n o s i .

    T o k o v n i c i o p i s u j u f u n k c i j s k e t r a n s f o r m a c i j e , a l i n e s u g e r i s u k a k o s e o n e m o g u i m p l e m e n t i r a t i . N a

    p r i m e r , s i s t e m o p i s a n n a o v a j n a c i n m o z e b i t i i m p l e m e n t i r a n u o b l i k u j e d n o g p r o g r a m a s a v i s e f u n k c i j a

    i l i u o b l i k u n i z a p r o g r a m a k o j i m e

    du s o b n o k o m u n i c i r a j u .

    F u n k c i j s k i - o r i j e n t i s a n d i z a j n

    U f u n k c i j s k i - o r i j e n t i s a n o m d i z a j n u s v a k i s o f t v e r s k i m o d u l j e o d g o v o r a n s a m o z a j e d a n z a d a t a k i

    s p r o v o d i g a s a m i n i m a l n i m u t i c a j e m n a d r u g e d e l o v e . O v o o m o g u c a v a j e d n o s t a v n i j e o d r z a v a n j e s i s t e m a .

    U f u n k c i j s k i - o r i j e n t i s a n o m d i z a j n u s i s t e m s e d e k o m p o n u j e n a s k u p f u n k c i j a k o j e i n t e r e a g u j u s a z a -

    j e d n i c k i m c e n t r a l n i m s t a n j e m s i s t e m a . F u n k c i j e t a k o de m o g u d a i m a j u i s v o j e l o k a l n o s t a n j e , a l i o n o s e c u v a s a m o t o k o m i z v r s a v a n j a f u n k c i j e . O v a k a v d i z a j n s e n e f o r m a l n o p r a k t i k o v a o j o s o d p o c e t a k a

    p r o g r a m i r a n j a . P r o g r a m i s u d e k o m p o n o v a n i u p o t p r o g r a m e k o j i s u f u n k c i j s k i p o s v o j o j p r i r o d i .

    F u n k c i j s k i o r i j e n t i s a n d i z a j n s a k r i v a d e t a l j e a l g o r i t a m a u s a m e f u n k c i j e , a l i s t a n j e s i s t e m a n i j e s a k r i v e n o .

    O v o m o z e d a d o v e d e d o p r o b l e m a j e r f u n k c i j e ( s v o j i m s p o r e d n i m e f e k t i m a ) m o g u d a p r o m e n e s t a n j e n a

    n a c i n n a k o j i t o d r u g e f u n k c i j e n e o c e k u j u . I z m e n a j e d n e f u n k c i j e i n a c i n a n a k o j i o n a m e n j a s t a n j e

    s i s t e m a m o z e d a p r o i z v e d e e f e k a t n a p o n a s a n j e o s t a l i h f u n k c i j a . D a k l e , f u n k c i j s k i - o r i j e n t i s a n d i z a j n

    m o z e d a b u d e u s p e s a n u s l u c a j e v i m a k a d a j e s t a n j e s i s t e m a m i n i m a l n o i k a d a j e r a z m e n a i n f o r m a c i j a

    i z m e

    du f u n k c i j a e k s p l i c i t n a . S i s t e m i u k o j i m a o d g o v o r z a v i s i o d p o j e d i n a c n o g u n o s a ( u k o j i m a i s t o r i j a

    r a n i j i h u s l o v a n i j e r e l e v a n t n a d a b i s e d o b i o o d g o v o r n a t e k u c i u n o s ) s u p r i r o d n o f u n k c i j s k i - o r i j e n t i s a n i .

    N a p r i m e r , s o f t v e r k o j i k o n t r o l i s e b a n k o m a t e j e t a k a v u s l u g a k o j a s e p r u z a k o r i s n i k u n e z a v i s i o d

    p r e t h o d n i h t r a n s a k c i j a . S i s t e m s e i m p l e m e n t i r a k a o n e p r e k i d n a p e t l j a u k o j o j s e a k c i j e p o k r e c u k a d a

    s e u b a c i k a r t i c a . S i s t e m j e i m p l e m e n t i r a n k r o z f u n k c i j e p o p u t i z b a c i _ n o v a c , p r o v e r i _ b r o j _ r a c u n a ,

    i z d a j _ p o t v r d u i s l i c n o . S t a n j e p r o g r a m a j e m i n i m a l n o .

    S t r u k t u r n a d e k o m p o z i c i j a

    P o n e k a d s t r u k t u r n a i f u n k c i o n a l n a p o d e l a n i s u i s t o i a k o t r a d i c i o n a l n o r a c u n a r s t v o c e s t o p o l a z i o d

    p r e t p o s t a v k e d a j e s u . S t r u k t u r n a d e k o m p o z i c i j a s e o d n o s i n a p o d e l u s i s t e m a n a d e l o v e t j . n a k o m -

    p o n e n t e . F u n k c i o n a l n a d e k o m p o z i c i j a s e o d n o s i n a p o d e l u f u n k c i j a s i s t e m a .

    C e s t o p o s t o j i t e s n a v e z a

    i z m e

    du d e l o v a i f u n k c i o n a l n o s t i k o j u s v a k i o d d e l o v a p r u z a , a l i p o n e k a d s t r u k t u r n a i f u n k c i o n a l n a p o d e l a

    i p a k n i s u i s t o .

    P o r e d d i j a g r a m a t o k a p o d a t a k a c e s t o j e k o r i s n o n a p r a v i t i i s t r u k t u r n i m o d e l s i s t e m a k o j i p r i k a z u j e

    k a k o j e f u n k c i j a i m p l e m e n t i r a n a t i m e s t o s e p r i k a z u j e k o j e d r u g e f u n k c i j e o n a p o z i v a . S t r u k t u r n i d i -

    j a g r a m i p r e d s t a v l j a j u g r a c k i n a c i n d a s e p r e d s t a v i o v a k v a h i j e r a r h i j a . F u n k c i j e s e c e s t o p r e d s t a v l j a j u

    p r a v o u g a o n i c i m a , d o k s e h i j e r a r h i j a p r i k a z u j e p o v e z i v a n j e m p r a v o u g a o n i k a l i n i j a m a . U l a z i i z l a z ( k o j i

    s e i m p l e m e n t i r a j u k a o p a r a m e t r i f u n k c i j a i l i k a o d e l j e n e g l o b a l n e p r o m e n l j i v e ) p r i k a z u j u s e o z n a c e n i m

    s t r e l i c a m a . S t r e l i c a k o j a u l a z i u p r a v o u g a o n i k p r e d s t a v l j a u l a z , a o n a k o j a i z l a z i i z n j e g a p r e d s t a v l j a

    i z l a z . S k l a d i s t a p o d a t a k a s e p r e d s t a v l j a j u k a o z a o k r u z e n i p r a v o u g a o n i c i , a k o r i s n i c k i u l a z i k a o k r u g o v i .

    K r e i r a n j e s t r u k t u r n o g d i j a g r a m a n a o s n o v u t o k o v n i k a z a h t e v a e l a b o r a c i j u , i n v e n t i v n o s t i k r e a t i v n o s t

    d i z a j n e r a . I p a k p o s t o j e n e k a o p s t a u p u t s t v a , n e k a o d n j i h s u n a b r o j a n a u n a s t a v k u .

    M n o g i s i s t e m i , n a r o c i t o p o s l o v n i , z a k o j e f u n k c i o n a l n i d i z a j n i m a s m i s l a m o g u d a s e s h v a t e k a o

    t r o f a z n i s i s t e m i . U p r v o j f a z i s e p r i h v a t a u l a z i v r s i s e n j e g o v a p r o v e r a , z a t i m s e u d r u g o j f a z i v r s i

    o b r a d a u l a z a , a z a t i m s e u t r e c o j f a z i g e n e r i s e i z l a z ( c e s t o u f o r m i n e k o g i z v e s t a j a k o j i s e s m e s t a u

    n e k u d a t o t e k u ) . U s p u t s e o b i c n o m o d i k u j e i n e k o g l o b a l n o s k l a d i s t e p o d a t a k a . U p r v o j i t e r a c i j i

    1 3

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    14/176

    s t r u k t u r n o g d i j a g r a m a o b i c n o s e p r e p o z n a j u 3 - 4 f u n k c i j e k o j e o d g o v a r a j u u l a z u , o b r a d i , p r o m e n i

    g l o b a l n o g s k l a d i s t a p o d a t a k a i i z l a z u .

    A k o s e z a h t e v a p r o v e r a p o d a t a k a , f u n k c i j e k o j e v r s e p r o v e r u s u p o d r e

    de n e f u n k c i j i k o j a p r i h v a t a

    u l a z . F u n k c i j e z a f o r m a t i r a n j e i z l a z a , s t a m p u i p i s a n j e n a d i s k p o d r e

    de n e s u f u n k c i j i k o j a g e n e r i s e

    i z l a z .

    F u n k c i j e p r i v r h u h i j e r a r h i j e i m a j u z a d a t a k d a k o n t r o l i s u i k o o r d i n i s u s k u p f u n k c i j a n i z e g n i v o a .

    C i l j p r o c e s a d i z a j n a j e d a s e d o

    de d o v e o m a s l a b o s p r e g n u t i h f u n k c i j a , o d k o j i h s v a k a i m a v i s o k

    s t e p e n u n u t r a s n j e k o h e z i j e . F u n k c i j e z a t o t r e b a d a r a d e j e d n u i s a m o j e d n u s t v a r .

    S v a k o m c v o r u u s t r u k t u r n o m d i j a g r a m u o d g o v a r a i z m e

    du 2 i 7 p o d r e

    de n i h c v o r o v a . A k o p o s t o j i

    s a m o j e d a n , t o g o v o r i d a f u n k c i j a p r e d s t a v l j e n a t i m c v o r o m i m a s l a b s t e p e n k o h e z i j e . P o d r e de n ak o m p o n e n t a m o z d a n e t r e b a d a b u d e z a s e b n a f u n k c i j a . A k o p o s t o j i p r e v i s e p o d r e

    de n i h f u n k c i j a t o

    m o z e d a z n a c i d a j e d i z a j n p r e v i s e r a z r a de n z a o v a j n i v o a p s t r a k c i j e .

    P i t a n j a i z a d a c i z a v e z b u

    P i t a n j e 1 . 1 . N a v e s t i f a z e r a z v o j a s o f t v e r a i k o i h o b i c n o s p r o v o d i ?

    P i t a n j e 1 . 2 . O p i s a t i m e t o d o l o g i j e r a z v o j a s o f t v e r a .

    P i t a n j e 1 . 3 . K o j e d v e v r s t e d o k u m e n t a c i j e t r e b a d a p o s t o j e ?

    1 4

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    15/176

    G l a v a

    2

    P r i n c i p i p i s a n j a p r o g r a m a

    P r o g r a m i n a p i s a n i n a v i s e m p r o g r a m s k o m j e z i k u s r e d s t v o s u k o m u n i k a c i j e i z m e

    du c o v e k a i r a c u n a r a

    a l i i i z m e du l j u d i s a m i h . R a z u m l j i v o s t , c i t l j i v o s t p r o g r a m a , i a k o n e b i t n a z a r a c u n a r , o d o g r o m n e j e v a z n o s t i z a k v a l i t e t i u p o t r e b l j i v o s t p r o g r a m a . N a i m e , u o d r z a v a n j e p r o g r a m a s e o b i c n o u l o z i d a l e k o

    v i s e v r e m e n a i t r u d a n e g o u n j e g o v o p i s a n j e a o d r z a v a n j e s i s t e m a c e s t o n e r a d e o n i p r o g r a m e r i k o j i

    s u n a p i s a l i p r o g r a m . P o r e d t o g a , r a z u m l j i v o s t p r o g r a m a o m o g u c a v a l a k s u a n a l i z u n j e g o v e i s p r a v n o s t i

    i s l o z e n o s t i . P r e p o r u k e z a p i s a n j e o b i c n o n i s u k r u t a p r a v i l a i o n a n a j p r e p r e d s t a v l j a j u z a p r a v o i d e j e

    k o j i m a s e t r e b a r u k o v o d i t i u p i s a n j u p r o g r a m a , u a s p e k t i m a f o r m a t i r a n j a , n a z u b l j i v a n j a , i m e n o v a n j a

    p r o m e n l j i v i h i f u n k c i j a i t d .

    U d a l j e m t e k s t u c e , k a o n a j e d a n p r i m e r k o n v e n c i j a z a p i s a n j e p r o g r a m a , b i t i u k a z i v a n o n a p r e p o r u k e

    i z t e k s t a L i n u x K e r n e l C o d i n g S t y l e , L i n u s a T o r v a l d s a , a u t o r a o p e r a t i v n o g s i s t e m a L i n u x k o j i j e n a p i s a n

    n a j e z i k u C . N e k o l i k o s a v e t a i p r e p o r u k a u n a s t a v k u p r e u z e t o j e i z z n a m e n i t e k n j i g e T h e P r a c t i c e o f

    P r o g r a m m i n g a u t o r a B r a j a n a K e r n i g e n a i R o b a P a j k a . P r e p o r u k e n a v e d e n e u n a s t a v k u s e c e s t o o d n o s e

    n a s v e p r o g r a m s k e j e z i k e , a l i p o n e k a d s a m o n a j e z i k C .

    2 . 1 T i m s k i r a d i k o n v e n c i j e

    Z a s v a k i o b i m n i j i p r o j e k a t p o t r e b n o j e u s a g l a s i t i k o n v e n c i j e z a p i s a n j e p r o g r a m a . D a b i i h s e l a k s e

    p r i d r z a v a l o , p o t r e b n o j e d e t a l j n o m o t i v i s a t i i o b r a z l o z i t i p r a v i l a . I m a r a z l i c i t i h k o n v e n c i j a i o n e c e s t o

    i z a z i v a j u d u g e i z a p a l j i v e r a s p r a v e i z m e

    du p r o g r a m e r a . M n o g i c e , m e

    du t i m , r e c i d a n i j e n a j v a z n i j e k o j a

    k o n v e n c i j a s e k o r i s t i n e g o k o l i k o s t r o g o s e n j e p r i d r z a v a . S t r o g o i k o n z i s t e n t n o p r i d r z a v a n j e k o n v e n c i j e

    u o k v i r u j e d n o g p r o j e k t a i z u z e t n o j e v a z n o z a n j e g o v u u s p e s n o s t . J e d a n i s t i p r o g r a m e r t r e b a d a b u d e

    s p r e m a n d a u r a z l i c i t i m t i m o v i m a i r a z l i c i t i m p r o j e k t i m a k o r i s t i r a z l i c i t e k o n v e n c i j e .

    K a k o b i s e o l a k s a l o b a r a t a n j e p r o g r a m o m k o j i i m a n a s t o t i n e d a t o t e k a k o j e m e n j a v e l i k i b r o j p r o -

    g r a m e r a , u t i m s k o m r a d u o b i c n o s e k o r i s t e s i s t e m i z a k o n t r o l u v e r z i j a ( k a o s t o s u C V S , S V N , G i t , B a z a a r ,

    M e r c u r i a l , V i s u a l S o u r c e S a f e ) . I o v i s i s t e m i n a m e c u d o d a t n a p r a v i l a i o m o g u c a v a j u d o d a t n e k o n v e n c i j e

    k o j e t i m t r e b a d a p o s t u j e .

    2 . 2 V i z u a l n i e l e m e n t i p r o g r a m a

    P r v a i d e j a o p r o g r a m u f o r m i r a s e n a o s n o v u n j e g o v o g i z g l e d a n j e g o v i h v i z u a l n i h e l e m e n a t a , k a o

    s t o s u b r o j l i n i j a u d a t o t e c i , b r o j k a r a k t e r a u l i n i j i , n a z u b l j i v a n j e , g r u p i s a n j e l i n i j a i s l i c n o . V i z u a l n i

    e l e m e n t i p r o g r a m a i n j e g o v o f o r m a t i r a n j e c e s t o s u o d k l j u c n e v a z n o s t i z a n j e g o v u c i t l j i v o s t . F o r m a t i r a n j e ,

    k o n k r e t n o n a z u b l j i v a n j e , u n e k i m j e z i c i m a ( n p r . p y t h o n ) c a k u t i c e n a z n a c e n j e p r o g r a m a .

    F o r m a t i r a n j e i v i z u a l n i e l e m e n t i p r o g r a m a t r e b a d a o l a k s a j u r a z u m e v a n j e k o d a k o j i s e c i t a , a l i i

    p r o n a l a z e n j e p o t r e b n o g d e l a k o d a i l i d a t o t e k e s a d e l o m p r o g r a m a . F o r m a t i r a n j e i v i z u a l n i e l e m e n t i

    p r o g r a m a t r e b a d a o l a k s a j u i p r o c e s p i s a n j a p r o g r a m a . U t o m e , p o m o c a u t o r u p r o g r a m a p r u z a j u a l a t i u

    o k v i r u k o j i h s e p i s e p r o g r a m s p e c i j a l i z o v a n i e d i t o r i t e k s t a i l i i n t e g r i s a n a r a z v o j n a o k r u z e n j a ( e n g l . I D E ,

    I n t e g r a t e d D e v e l o p m e n t E n v i r o n m e n t ) k o j a p o v e z u j u e d i t o r , k o m p i l a t o r , d e b a g e r i d r u g e a l a t e p o t r e b n e

    u r a z v o j u s o f t v e r a .

    1 5

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    16/176

    2 . 2 . 1 B r o j k a r a k t e r a u r e d u

    U m o d e r n i m p r o g r a m s k i m j e z i c i m a d u z i n a r e d a p r o g r a m a n i j e o g r a n i c e n a . I p a k , p r e d u g i r e d o v i m o g u

    d a s t v a r a j u p r o b l e m e . N a p r i m e r , p r e d u g i r e d o v i m o g u d a z a h t e v a j u h o r i z o n t a l n o s k r o l o v a n j e k a k o b i

    s e v i d e o n j i h o v k r a j , s t o m o z e d a d r a s t i c n o o t e z a c i t a n j e i r a z u m e v a n j e p r o g r a m a . T a k o

    de , u k o l i k o s e

    p r o g r a m s t a m p a , d u g i r e d o v i m o g u d a b u d u p r e s e c e n i i d a n a r u s e f o r m a t i r a n j e . Z b o g o v i h i o v a k v i h

    p r o b l e m a , p r e p o r u c u j e s e p r i d r z a v a n j e n e k o g o g r a n i c e n j a o b i c n o 8 0 k a r a k t e r a u r e d u . K o n k r e t n a

    p r e p o r u k a z a 8 0 k a r a k t e r a u r e d u j e i s t o r i j s k a i p o t i c e o d o g r a n i c e n j a n a s t a r i m e k r a n i m a i s t a m p a c i m a

    i d r u g i m u r e

    da j i m a . I p a k , o n a j e i d a n a s s i r o k o p r i h v a c e n a k a o p o g o d n a . U k o l i k o r e d p r o g r a m a i m a

    v i s e o d 8 0 k a r a k t e r a , t o n a j c e s c e u k a z u j e n a t o d a k o d t r e b a r e o r g a n i z o v a t i u v o

    de n j e m n o v i h f u n k c i j a

    i l i p r o m e n l j i v i h . B r o j 8 0 ( i l i b i l o k o j i d r u g i ) k a o o g r a n i c e n j e z a b r o j k a r a k t e r a u r e d u n e t r e b a s h v a t a t i

    k r u t o v e c k a o n a c e l n u p r e p o r u k u k o j a m o z e b i t i n a r u s e n a a k o s e t a k o p o s t i z e b o l j a c i t l j i v o s t .

    2 . 2 . 2 B r o j n a r e d b i u r e d u , z a g r a d e i r a z m a c i

    R e d p r o g r a m a m o z e d a b u d e p r a z a n i l i d a s a d r z i j e d n u i l i v i s e n a r e d b i . P r a z n i r e d o v i m o g u d a

    i z d v a j a j u b l o k o v e b l i s k o p o v e z a n i h n a r e d b i ( n a p r i m e r , b l o k n a r e d b i z a k o j e s e m o z e n a v e s t i k o m e n t a r o

    t o m e s t a j e n j i h o v a s v r h a ) . A k o s e p r a z n i r e d o v i k o r i s t e n e o p r e z n o , m o g u d a n a r u s e u m e s t o d a p o p r a v e

    c i t l j i v o s t . N a i m e , u k o l i k o i m a p r e v i s e p r a z n i h l i n i j a , s m a n j e n j e d e o k o d a k o j i s e m o z e v i d e t i i s a g l e d a v a t i

    i s t o v r e m e n o n a e k r a n u . P o j e d n o j k o n v e n c i j i , z a g r a d e k o j e o z n a c a v a j u p o c e t a k i k r a j b l o k a n a v o d e s e

    u z a s e b n i m r e d o v i m a ( u i s t o j k o l o n i ) , a p o d r u g o j , o t v o r e n a z a g r a d a s e n a v o d i u n a s t a v k u p r e t h o d n e

    n a r e d b e , a z a t v o r e n a u z a s e b n o m r e d u i l i u r e d u z a j e d n o s a k l j u c n o m r e c j u w h i l e i l i e l s e . T o r v a l d s

    p r e p o r u c u j e o v u d r u g u k o n v e n c i j u , u z i z u z e t a k d a s e o t v o r e n a v i t i c a s t a z a g r a d a n a p o c e t k u d e n i c i j e

    f u n k c i j e p i s e u z a s e b n o m r e d u .

    N a r e d n i p r i m e r p r i k a z u j e d e o k o d a n a p i s a n s a v e c i m b r o j e m p r a z n i h r e d o v a i p r v o m k o n v e n c i j o m z a

    z a g r a d e :

    d o

    {

    p r i n t f ( " U n e s i c e o b r o j : " ) ;

    s c a n f ( " % d " , & i ) ;

    i f ( d u z i n a = = a l o c i r a n o )

    {

    a l o c i r a n o + = K O R A K ;

    a = r e a l l o c ( a , a l o c i r a n o * s i z e o f ( i n t ) ) ;

    i f ( a = = N U L L )

    r e t u r n 1 ;

    }

    a [ d u z i n a + + ] = i ;

    }

    w h i l e ( i ! = - 1 ) ;

    I s t i d e o k o d a m o z e b i t i n a p i s a n s a m a n j i m b r o j e m p r a z n i h r e d o v a i d r u g o m k o n v e n c i j o m z a z a g r a d e .

    O v a j p r i m e r p r i k a z u j e k o m p a k t n i j e z a p i s a n k o d k o j i j e v e r o v a t n o c i t l j i v i j i v e c i n i i s k u s n i h C p r o g r a m e r a :

    d o {

    p r i n t f ( " U n e s i c e o b r o j : " ) ;

    s c a n f ( " % d " , & i ) ;

    i f ( d u z i n a = = a l o c i r a n o ) {

    a l o c i r a n o + = K O R A K ;

    a = r e a l l o c ( a , a l o c i r a n o * s i z e o f ( i n t ) ) ;

    i f ( a = = N U L L )

    r e t u r n 1 ;

    1 6

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    17/176

    }

    a [ d u z i n a + + ] = i ;

    } w h i l e ( i ! = - 1 ) ;

    J e d a n r e d m o z e d a s a d r z i i v i s e o d j e d n e n a r e d b e . T o j e p r i h v a t l j i v o s a m o ( a t a d a m o z e d a b u d e i

    p r e p o r u c l j i v o ) a k o s e r a d i o j e d n o s t a v n i m i n i c i j a l i z a c i j a m a i l i j e d n o s t a v n i m d o d e l a m a v r e d n o s t i c l a n o v i m a

    s t r u k t u r e , n a p r i m e r :

    . . .

    i n t i = 1 0 ; d o u b l e s u m a = 0 ;

    t a c k a . x = 0 ; t a c k a . y = 0 ;

    U k o l i k o j e u p e t l j i i l i u i f b l o k u s a m o j e d n a n a r e d b a , o n d a n i s u n e o p h o d n e z a g r a d e k o j e o z n a c a v a j u

    p o c e t a k i k r a j b l o k a i m n o g i p r o g r a m e r i i h n e p i s u . M e

    du t i m , i a k o n i s u n e o p h o d n e o n e m o g u o l a k s a t i

    r a z u m e v a n j e k o d a u k o j e m p o s t o j i v i s e s t r u k a i f n a r e d b a . D o d a t n o , u k o l i k o s e u b l o k s a j e d n o m n a r e d -

    b o m i b e z v i t i c a s t i h z a g r a d a u n e k o m t r e n u t k u d o d a d r u g a n a r e d b a l a k o m o z e d a s e p r e v i d i d a p o s t a j e

    n e o p h o d n o n a v e s t i i z a g r a d e .

    V e l i c i n a b l o k o v a k o d a j e t a k o de v a z n a z a p r e g l e d n o s t , p a j e j e d n a o d p r e p o r u k a d a v e r t i k a l n o r a s t o - j a n j e i z m e

    du o t v o r e n e v i t i c a s t e z a g r a d e i z a t v o r e n e v i t i c a s t e z a g r a d e k o j a j o j o d g o v a r a n e b u d e v e c e o d

    j e d n o g e k r a n a .

    O b i c n o s e p r e p o r u c u j e n a v o de n j e r a z m a k a o k o k l j u c n i h r e c i i o k o b i n a r n i h o p e r a t o r a , i z u z e v . i - > .N e p r e p o r u c u j e s e k o r i s c e n j e r a z m a k a k o d p o z i v a f u n k c i j a , u n a r n i h o p e r a t o r a , i z u z e v o p e r a t o r a s i z e o f

    i o p e r a t o r a k a s t o v a n j a . N e p r e p o r u c u j e s e n a v o de n j e n e p o t r e b n i h z a g r a d a , p o s e b n o u o k v i r u p o v r a t n e v r e d n o s t i . N a p r i m e r :

    i f ( u s l o v ) {

    * a = - b + c + s i z e o f ( i n t ) + f ( x ) ;

    r e t u r n - 1 ;

    }

    2 . 2 . 3 N a z u b l j i v a n j e t e k s t a p r o g r a m a

    N a z u b l j i v a n j e t e k s t a p r o g r a m a n e b i t n o j e k o m p i l a t o r u , a l i j e s k o r o n e o p h o d n o p r o g r a m e r u . N a z u b l j i -

    v a n j e n a g l a s a v a s t r u k t u r u p r o g r a m a i o l a k s a v a n j e g o v o r a z u m e v a n j e . R e d p r o g r a m a m o z e b i t i u v u c e n u

    o d n o s u n a p o c e t n u k o l o n u z a n e k o l i k o b l a n k o k a r a k t e r a i l i n e k o l i k o t a b k a r a k t e r a . T a b k a r a k t e r m o z e

    d a s e u o k v i r u e d i t o r a i n t e r p r e t i r a n a r a z l i c i t e n a c i n e ( t j . k a o r a z l i c i t b r o j b e l i n a ) , t e j e p r e p o r u c l j i v o u

    p r o g r a m u s v e t a b k a r a k t e r e z a m e n i t i r a z m a c i m a ( z a s t a u v e c i n i e d i t o r a p o s t o j i m o g u c n o s t ) i c u v a t i g a

    u t o m o b l i k u . N a t a j n a c i n , s v a k o c e v i d e t i p r o g r a m ( n a e k r a n u i l i o d s t a m p a n ) n a i s t i n a c i n .

    N e p o s t o j i k r u t o p r a v i l o z a b r o j k a r a k t e r a z a j e d a n n i v o u v l a c e n j a . N e k i p r o g r a m e r i k o r i s t e 4 , a n e k i

    2 s a m o t i v a c i j o m d a u r e d o v i m a o d 8 0 k a r a k t e r a m o z e d a s t a n e i k o d s a d u b o k i m n i v o i m a . T o r v a l d s ,

    s a d r u g e s t r a n e , p r e p o r u c u j e b r o j 8 , j e r o m o g u c a v a b o l j u p r e g l e d n o s t . Z a p r o g r a m e k o j i i m a j u v i s e o d

    t r i n i v o a n a z u b l j i v a n j a , o n k a z e d a s u i o n a k o s p o r n i i z a h t e v a j u p r e p r a v k u .

    2 . 3 I m e n o v a n j e p r o m e n l j i v i h i f u n k c i j a

    I m e n o v a n j e p r o m e n l j i v i h i f u n k c i j a v e o m a j e v a z n o z a r a z u m l j i v o s t p r o g r a m a i s v e j e v a z n i j e s t o

    j e p r o g r a m d u z i . P r a v i l a i m e n o v a n j a m o g u d a o l a k s a j u i i z b o r n o v i h i m e n a t o k o m p i s a n j a p r o g r a m a .

    I m e n a p r o m e n l j i v i h i f u n k c i j a ( p a i d a t o t e k a p r o g r a m a ) t r e b a d a s u g e r i s u n j i h o v u u l o g u i t a k o o l a k s a j u

    r a z u m e v a n j e p r o g r a m a .

    G l o b a l n e p r o m e n l j i v e , s t r u k t u r e i f u n k c i j e t r e b a d a i m a j u o p i s n a i m e n a , p o t e n c i j a l n o s a c i n j e n a o d

    v i s e r e c i . U k a m i l j o j n o t a c i j i ( p o p u l a r n o j m e

    du J a v a i C + + p r o g r a m e r i m a ) , i m e n a o d v i s e r e c i z a p i s u j u

    s e t a k o s t o s v a k a n o v a r e c ( s e m e v e n t u a l n o p r v e ) p o c i n j e v e l i k i m s l o v o m , n a p r i m e r , b r o j K l i j e n a t a . U

    n o t a c i j i s a p o d v l a k a m a ( p o p u l a r n o j m e

    du C p r o g r a m e r i m a ) , s v e r e c i i m e n a s e p i s u m a l i m s l o v i m a a r e c i

    s u r a z d v o j e n e p o d v l a k a m a , n a p r i m e r , b r o j _ k l i j e n a t a . I m e n a m a k r o a i k o n s t a n t i p i s u s e o b i c n o s v i m

    v e l i k i m s l o v i m a , a i m e n a g l o b a l n i h p r o m e n l j i v i h p o c i n j u v e l i k i m s l o v o m .

    L o k a l n e p r o m e n l j i v e , a p o s e b n o p r o m e n l j i v e k o j e s e k o r i s t e k a o b r o j a c i u p e t l j a m a t r e b a d a i m a j u

    k r a t k a i j e d n o s t a v n a , a c e s t o n a j b o l j e , j e d n o s l o v n a i m e n a j e r s e r a z u m l j i v o s t l a k s e p o s t i z e s a z e t o s c u .

    1 7

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    18/176

    I m e n a z a b r o j a c e u p e t l j a m a s u c e s t o i , j , k , z a p o k a z i v a c e p i q , a z a n i s k e s i t . P r e p o r u k a j e i d a

    s e l o k a l n e p r o m e n l j i v e d e k l a r i s u s t o k a s n i j e u o k v i r u f u n k c i j e i u o k v i r u b l o k a u k o j e m s e k o r i s t e ( a n e u

    o k v i r u n e k o g s i r e g b l o k a ) .

    J e d a n , d e l i m i c n o s a l j i v , s a v e t z a i m e n o v a n j e ( i g l o b a l n i h i l o k a l n i h ) p r o m e n l j i v i h k a z e d a b r o j k a r a k -

    t e r a u i m e n u p r o m e n l j i v e t r e b a d a z a v i s i o d b r o j a l i n i j a n j e n o g d o s e g a i t o t a k o d a b u d e p r o p o r c i o n a l a n

    l o g a r i t m u b r o j a l i n i j a n j e n o g d o s e g a .

    Z a p r o m e n l j i v e i f u n k c i j e n i j e d o b r o k o r i s t i t i g e n e r i c k a i m e n a k a o r e z u l t a t , i z r a c u n a j ( . . . ) , u r a d i ( . . . )

    i s l i c n o , v e c s u g e s t i v n i j a , k a o s t o s u , n a p r i m e r , k a m a t a , i z r a c u n a j _ k a m a t u ( . . . ) , o d s t a m p a j _ i z v e s t a j _ o _ k a m a t i ( . . . ) .

    I m e n a f u n k c i j a d o b r o j e d a b u d u b a z i r a n a n a g l a g o l i m a , n a p r i m e r , i z r a c u n a j _ k a m a t u ( . . . ) u m e s t o

    k a m a t a ( . . . ) i g e t _ t i m e ( . . . ) u m e s t o t i m e ( . . . ) . Z a f u n k c i j e k o j e v r a c a j u i s t i n i t o s n u v r e d n o s t , i m e

    t r e b a d a j a s n o s u g e r i s e u k o m s l u c a j u s e v r a c a v r e d n o s t t a c n o , n a p r i m e r , b o l j e j e i m e i s _ p r i m e ( . . . )

    n e g o c h e c k _ p r i m e ( . . . ) .

    M n o g e p r o m e n l j i v e o z n a c a v a j u n e k i b r o j e n t i t e t a ( n a p r i m e r , b r o j k l i j e n a t a , b r o j s t u d e n a t a , b r o j

    a r t i k a l a ) i z a n j i h s e m o z e u s v o j i t i k o n v e n c i j a p o k o j o j i m e n a i m a j u i s t i p r e k s i l i s u k s ( n a p r i m e r ,

    b r _ s t u d e n a t a i l i n u m _ s t u d e n t s . U o v o m s m i s l u , z n a t n o d a l j e i d e m a

    da r s k a n o t a c i j a .

    1

    P o s t o j e z a -

    p r a v o d v e v a r i j a n t e m a

    da r s k e n o t a c i j e : s i s t e m s k a i a p l i k a c i j s k a . U s i s t e m s k o j m a

    da r s k o j n o t a c i j i i m e

    p r o m e n l j i v e p o c i n j e u v e k s l o v o m i l i s l o v i m a k o j a o d g o v a r a j u n j e n o m t i p u , n a p r i m e r , u B r o j K l i j e n a t a

    m o z e d a b u d e p r o m e n l j i v a t i p a u n s i g n e d i n t . I d e j a j e d a s e n a o v a j n a c i n t i p p r o m e n l j i v e v i d i n a s v a k o m

    m e s t u g d e s e o n a k o r i s t i ( p a n e m o r a d a s e p r o v e r a v a n j e n a d e k l a r a c i j a ) . U a p l i k a c i j s k o j m a da r s k o j n o - t a c i j i , i m e p r o m e n l j i v e s e k r e i r a n a o s n o v u n j e n e u l o g u u p r o g r a m u , a n e n a o s n o v u t i p a . N a p r i m e r , i m e n a

    p r o m e n l j i v i h m o g u d a p o c i n j u s a r w i c o l i o z n a c a v a j u p o z i c i j u k u r z o r a u d o k u m e n t u . J e d a n p a r t a k v i h

    p r o m e n l j i v i h m o g u d a b u d u , n a p r i m e r , r w O u t p u t W i n d o w i c o l O u t p u t W i n d o w . O v e d v e p r o m e n l j i v e s u

    i s t o g t i p a , a l i n e m a s m i s l a v r e d n o s t j e d n e p r i d r u z i t i d r u g o j i t o s u g e r i s u i z a b r a n i p r e k s i ( t e s e u k o d u

    l a k o m o g u p r i m e t i t i n e k a p o g r e s n a i z r a c u n a v a n j a ) . M a da r s k a n o t a c i j a ( p o s e b n o s i s t e m s k a ) i m a m n o g o k r i t i c a r a ( u k l j u c u j u c i T o r v a l d s a ) k o j i s m a t r a j u d a j e i n f o r m a c i j a o t i p o v i m a i o n a k o p o z n a t a k o m p i l a t o r a

    a d a d o d a t n i p r e k s i v i s e z b u n j u j u p r o g r a m e r a n e g o s t o m u p o m a z u .

    I p r o g r a m e r i k o j i m a t o n i j e m a t e r n j i j e z i k , i a k o t o n i j e z a h t e v p r o j e k t a , c e s t o i m e n u j u p r o m e n l j i v e i

    f u n k c i j e n a o s n o v u r e c i e n g l e s k o g j e z i k a . T o j e p o s l e d i c a i s t o r i j s k i h r a z l o g a i d o m i n a c i j e e n g l e s k o g j e z i k a

    u p r o g r a m e r s k o j p r a k s i , k a o i s a m i h k l j u c n i h r e c i s k o r o s v i h p r o g r a m s k i h j e z i k a ( k o j e s u n a e n g l e s k o m ) .

    P r i h v a t l j i v o j e ( a k o n i j e z a h t e v p r o j e k t a d r u g a c i j i ) i m e n o v a n j e i n a m a t e r n j e m j e z i k u i n a e n g l e s k o m j e z i k u

    j e d i n o j e n e p r i h v a t l j i v o m e s a n j e t a d v a . I m e n o v a n j e n a b a z i e n g l e s k o g i k o m e n t a r i n a e n g l e s k o m m o g u

    b i t i p o g o d n i u k o l i k o p o s t o j i i n a j m a n j a m o g u c n o s t d a s e i z v o r n i p r o g r a m k o r i s t i u d r u g i m z e m l j a m a ,

    i l i o d s t r a n e d r u g i h t i m o v a , i l i d a s e u c i n i j a v n o d o s t u p n i m i s l i c n o . N a i m e , u p r o g r a m i r a n j u ( k a o i u

    m n o g i m d r u g i m o b l a s t i m a ) e n g l e s k i j e z i k j e o p s t e p r i h v a c e n u s v i m d e l o v i m a s v e t a i t a k o s e m o z e o s i g u r a t i

    d a p r o g r a m l a k s e r a z u m e j u s v i .

    K v a l i t e t i m e n o v a n j a p r o m e n l j i v i h i f u n k c i j a m o z e s e t e s t i r a t i n a s l e d e c i z a n i m l j i v n a c i n : a k o s e k o d

    m o z e p r o c i t a t i p r e k o t e l e f o n a t a k o d a g a s a g o v o r n i k n a d r u g o j s t r a n i r a z u m e , o n d a j e i m e n o v a n j e d o b r o .

    2 . 4 P i s a n j e i z r a z a

    Z a d o b r o g p r o g r a m e r a n e o p h o d n o j e d a p o z n a j e s v a p r a v i l a p r o g r a m s k o g j e z i k a j e r c e v e r o v a t n o c e s c e

    i v i s e r a d i t i n a t u

    de m n e g o n a s v o m k o d u . S d r u g e s t r a n e , p r o g r a m e r u s v o j i m p r o g r a m i m a n e m o r a i

    n e t r e b a d a k o r i s t i s v a s r e d s t v a i z r a z a v a n j a t o g p r o g r a m s k o g j e z i k a , v e c m o z e i t r e b a d a i h k o r i s t i s a m o

    d e l o m , o p r e z n o i u v e k s a c i l j e m p i s a n j a r a z u m l j i v i h p r o g r a m a . P o n e k a d p r o g r a m e r u l a z e v e l i k u e n e r g i j u

    u p i s a n j e n a j k o n c i z n i j e g m o g u c e g k o d a s t o p o n e k a d m o z e d a b u d e p r o t r a c e n t r u d , j e r g l a v n i c i l j t r e b a

    d a b u d e p i s a n j e j a s n i h p r o g r a m a . S v e o v o s e o d n o s i n a m n o g e a s p e k t e p i s a n j a p r o g r a m a , u k l j u c u j u c i

    p i s a n j e i z r a z a .

    P r e p o r u c u j e s e p i s a n j e i z r a z a u j e d n o s t a v n o m i i n t u i t i v n o j a s n o m o b l i k u . N a p r i m e r , u m e s t o :

    ( ! ( c < 0 ) & & ! ( c > 9 ) )

    b o l j e j e :

    1

    A p l i k a c i j s k u m a da r s k u n o t a c i j u r a z v i o j e C a r l s S i m o n j i , p o r e k l o m i z M a da r s k e , k o j i j e t o k o m o s a m d e s e t i h g o d i n a

    b i o j e d a n o d v o d e c i h p r o g r a m e r a u k o m p a n i j i M i c r o s o f t . K o n v e n c i j a s e k o r i s t i l a i j o s s e k o r i s t i u m n o g i m p r o i z v o d i m a o v e

    k o m p a n i j e , a l i s u j e p r i h v a t i l i i m n o g i d r u g i p r o g r a m e r i .

    1 8

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    19/176

    ( c > = 0 & & c < = 9 )

    Z a g r a d e , c a k i a k o n i s u n e o p h o d n e , m o g u d a o l a k s a j u c i t l j i v o s t . P r e t h o d n i p r i m e r m o z e d a s e z a p i s e

    n a s l e d e c i n a c i n :

    ( ( c > = 0 ) & & ( c < = 9 ) )

    a n a r e d b a :

    p r e s t u p n a = g % 4 = = 0 & & g % 1 0 0 ! = 0 | | g % 4 0 0 = = 0 ;

    m o z e c i t l j i v i j e d a s e n a p i s e n a s l e d e c i n a c i n :

    p r e s t u p n a = ( ( g % 4 = = 0 ) & & ( g % 1 0 0 ! = 0 ) ) | | ( g % 4 0 0 = = 0 ) ;

    R a z m a k o k o o p e r a t o r a n e m o r a d a s e p i s e i n j e g o v o u k l a n j a n j e m o z e d a n a g l a s t i p r i o r i t e t i p o p r a v i

    c i t l j i v o s t . U n a v e d e n o m p r i m e r u z a t o p i s e g % 4 = = 0 u m e s t o g % 4 = = 0 .

    S u v i s e k o m p l i k o v a n e i z r a z e t r e b a z a m e n i t i j e d n o s t a v n i j i m i r a z u m l j i v i j i m . K e r n i g e n i P a j k n a v o d e

    p r i m e r :

    * x + = ( * x p = ( 2 * k < ( n - m ) ? c [ k + 1 ] : d [ k - - ] ) ) ;

    i b o l j u , j e d n o s t a v n i j u v a r i j a n t u :

    i f ( 2 * k < n - m )

    * x p = c [ k + 1 ] ;

    e l s e

    * x p = d [ k - - ] ;

    * x + = * x p ;

    K e r n i g e n i P a j k n a v o d e i p r i m e r u k o j e m j e m o g u c e i p o z e l j n o p o j e d n o s t a v i t i k o m p l i k o v a n a i z r a c u n a v a n j a .

    U m e s t o :

    s u b k e y = s u b k e y > > ( b i t o f f - ( ( b i t o f f > > 3 ) < < 3 ) ) ;

    b o l j i j e ( e k v i v a l e n t a n ) k o d :

    s u b k e y = s u b k e y > > ( b i t o f f & 0 x 7 ) ;

    Z b o g k o m p l i k o v a n i h , a u n e k i m s i t u a c i j a m a i n e d e n i s a n i h , p r a v i l a p o r e t k a i z r a c u n a v a n j a i d e j s t v a

    s p o r e d n i h e f e k a t a ( k a o , n a p r i m e r , k o d o p e r a t o r a i n k r e m e n t i r a n j a i d e k r e m e n t i r a n j a ) , d o b r o j e p o j e d -

    n o s t a v i t i k o d k a k o b i n j e g o v o i z v r s a v a n j e b i l o j e d n o z n a c n o i j a s n o . N a p r i m e r , u m e s t o :

    s t r [ i + + ] = s t r [ i + + ] = ;

    b o l j e j e :

    s t r [ i + + ] = ;

    s t r [ i + + ] = ;

    P o u c a n j e i s l e d e c i c u v e n i p r i m e r : n a k o n d o d e l e a [ a [ 1 ] ] = 2 ; , e l e m e n t a [ a [ 1 ] ] n e m a n u z n o v r e d n o s t

    2 ( a k o j e n a p o c e t k u v r e d n o s t a [ 1 ] b i l a j e d n a k a 1 , a v r e d n o s t a [ 2 ] r a z l i c i t a o d 2 ) . N a v e d e n i p r i m e r

    p o k a z u j e d a t r e b a b i t i v e o m a o p r e z a n s a k o r i s c e n j e m i n d e k s a n i z a k o j i s u i s a m i e l e m e n t i n i z a i l i n e k i

    k o m p l i k o v a n i i z r a z i .

    2 . 5 K o r i s c e n j e i d i o m a

    I d i o m i s u u s t a l j e n e j e z i c k e k o n s t r u k c i j e k o j e p r e d s t a v l j a j u c e l i n u . I d i o m i p o s t o j e u s v i m j e z i c i m a , p a

    i u p r o g r a m s k i m . T i p i c a n i d i o m u j e z i k u C j e s l e d e c i o b l i k f o r - p e t l j e :

    1 9

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    20/176

    f o r ( i = 0 ; i < n ; i + + )

    . . .

    K e r n i g e n i P a j k z a g o v a r a j u k o r i s c e n j e i d i o m a g d e g o d j e t o m o g u c e . N a p r i m e r , u m e s t o v a r i j a n t i

    i = 0 ;

    w h i l e ( i < = n - 1 )

    a [ i + + ] = 1 . 0 ;

    f o r ( i = 0 ; i < n ; )

    a [ i + + ] = 1 . 0 ;

    f o r ( i = n ; - - i > = 0 ; )

    a [ i ] = 1 . 0 ;

    s m a t r a j u d a j e b o l j a v a r i j a n t a :

    f o r ( i = 0 ; i < n ; i + + )

    a [ i ] = 1 . 0 ;

    j e r j e n a j c e s c a i n a j p r e p o z n a t l j i v i j a .

    S t a v i s e , K e r n i g e n i P a j k p r e d l a z u , d e l o m i e k s t r e m n o , d a s e , b e z

    d o b r o g r a z l o g a i n e k o r i s t i n i j e d n a f o r m a f o r - p e t l j i o s i m n a v e d e n e , z a t i m s l e d e c e , z a p r o l a z a k k r o z l i s t u

    ( v i d e t i p o g l a v l j e 7 . 1 ) :

    f o r ( p = l i s t ; p ! = N U L L ; p = p - > n e x t )

    . . .

    i s l e d e c e , z a b e s k o n a c n u p e t l j u :

    f o r ( ; ; )

    . . .

    G l a v n i a r g u m e n t z a k o r i s c e n j e i d i o m a j e d a s e k o d b r z o r a z u m e a i d a s v a k i d r u g i ( n e i d i o m s k i )

    k o n s t r u k t p r i v l a c i d o d a t n u p a z n j u s t o j e d o b r o , j e r s e b a g o v i c e s c e k r i j u u n j i m a . K a o d o d a t n e p r i m e r e

    i d i o m a , K e r n i g e n i P a j k n a v o d e :

    w h i l e ( ( c = g e t c h a r ( ) ) ! = E O F )

    . . .

    i

    p = m a l l o c ( s t r l e n ( b u f ) + 1 ) ;

    s t r c p y ( p , b u f ) ;

    2 . 6 K o r i s c e n j e m a k r o a

    M a k r o e s a a r g u m e n t i m a o b r a du j e p r e t p r o c e s o r i u f a z i i z v r s a v a n j a , z a r a z l i k u o d f u n k c i j a , n e m a k r e i r a n j a s t e k o k v i r a , p r e n o s a a r g u m e n a t a i s l i c n o . Z b o g u s t e d e m e m o r i j e i r a c u n a r s k o g v r e m e n a , m a k r o i

    s a a r g u m e n t i m a s u n e k a d a s m a t r a n i p o z e l j n o m a l t e r n a t i v o m f u n k c i j a m a . D a n a s , u s v e t u m n o g o b r z i h

    r a c u n a r a n e g o n e k a d a , s m a t r a s e d a l o s e s t r a n e m a k r o a s a a r g u m e n t i m a p r e v a z i l a z e d o b r e s t r a n e i d a

    m a k r o e t r e b a i z b e g a v a t i . U l o s e s t r a n e m a k r o a s a a r g u m e n t i m a s p a d a t o s t o i h o b r a du j e p r e t p r o c e s o r ( a n e k o m p i l a t o r ) , n e m a p r o v e r a t i p o v a a r g u m e n a t a , d e b a g e r n e m o z e d a p r a t i d e n i c i j u m a k r o a i s l i c n o .

    P o s t o j e i d o d a t n e l o s e s t r a n e i l u s t r o v a n e p r i m e r i m a u n a s t a v k u ( o d k o j i h s u n e k i d i s k u t o v a n i i u p r v o m

    d e l u o v e k n j i g e , u p o g l a v l j u ? ? ) .

    U k o l i k o s e u t e k s t u z a m e n e n e k i a r g u m e n t p o j a v l j u j e v i s e p u t a , p o s t o j i m o g u c n o s t d a o n b u d e

    i z r a c u n a t v i s e p u t a . N a p r i m e r , u k o l i k o p o s t o j i m a k r o d e n i c i j a :

    2 0

  • 8/21/2019 F. Mari, P. Janii: Osnove programiranja kroz programski jezik C

    21/176

    # d e f i n e m a x ( A , B ) ( ( A ) > ( B ) ? ( A ) : ( B ) )

    u k o l i k o j e n e g d e u p r o g r a m u n a v e d e n o m a x ( a + + , b + + ) , o v a j t e k s t b i c e ( u f a z i p r e t p r o c e s i r a n j a ) z a m e n j e n

    t e k s t o m ( ( a + + ) > ( b + + ) ? ( a + + ) : ( b + + ) ) , s t o c e d o v e s t i d o t o g a d a s e v e c a o d v r e d n o s t i a i b

    i n k r e m e n t i r a d v a p u t a ( a s t o v e r o v a t n o n i j e b i l o p l a n i r a n o ) . S l i c n o j e i s a m a k r o o m :

    # d e f i n e i s U p p e r C a s e ( c ) ( ( c ) > = A & & ( c ) < = Z )

    N a i m e , a k o u p r o g r a m u p o s t o j i n a r e d b a w h i l e ( i s U p p e r C a s e ( c = g e t c h a r ( ) ) ) . . . , p r e t p r o c e s o r c e

    j e z a m e n i t i s a w h i l e ( ( c = g e t c h a r ( ) ) > = A & & ( c = g e t c h a r ( ) ) < = Z ) . . . , p a c e u s v a k o m

    p r o l a s k u k r o z p e t l j u b i t i s a s t a n d a r d n o g u l a z a u c i t a n o d v a k a r a k t e r a ( i b i c e p r o v e r a v a n i n a n e p o t p u n

    n a c i n ) .

    2

    V a z n o j e v o d i t i r a c u n a i o z a g r a d a m a u t e k s t u z a m e n e , k a k o b i b i o o c u v a n p o r e d a k p r i m e n e o p e r a c i j a .

    N a p r i m e r , u k o l i k o s e d e n i c i j a

    # d e f i n e k v a d r a t ( x ) x * x

    p r i m e n i n a k v a d r a t ( a + 2 ) , t e k s t z a m e n e c e b i t i a + 2 * a + 2 , a n e ( a + 2 ) * ( a + 2 ) , k a o s t o j e v e r o v a t n o z e l j e n o

    i , u t o m s l u c a j u b i t r e b a l o k o r i s t i t i :

    # d e f i n e k v a d r a t ( x ) ( x ) * ( x )

    2 . 7 K o r i s c e n j e k o n s t a n t i

    K o n s t a n t n e v r e d n o s t i , v e l i c i n a n i z o v a , p o z i c i j e k a r a k t e r a u n i s k a m a , f a k t o r i z a k o n v e r z i j e i d r u g e

    s l i c n e v r e d n o s t i k o j e s e p o j a v l j u j u u p r o g r a m i m a c e s t o s e z o v u m a g i c n i b r o j e v i ( j e r o b i c n o n i j e j a s n o

    o d a k l e d o l a z e , n a o s n o v u c e g a s u d o b i j e n i ) . K e r n i g e n i P a j k k a z u d a j e , o s i m 0 i 1 , s v a k i b r o j u p r o g r a m u

    k a n d i d a t d a s e m o z e s m a t r a t i m a g i c n i m , t e d a t r e b a d a i m a i m e k o j e m u j e p r i d r u z e n o . N a t a j n a c i n ,

    u k o l i k o j e p o t r e b n o p r o m e n i t i v r e d n o s t m a g i c n e k o n s t a n t e ( n a p r i m e r , m a k s i m a l n a d u z i n a i m e n a u l i c e )

    t o j e d o v o l j n o u r a d i t i n a j e d n o m m e s t u u k o d u .

    M a g i c n o m b r o j u m o z e b i t i p r i d r u z e n o s i m b o l i c k o i m e p r e t p r o c e s o r s k o m d i r e k t i v o m # d e f i n e . U t o m

    s l u c a j u , p r e t p r o c e s o r z a m e n j u j e s v a p o j a v l j i v a n j a t o g i m e n a k o n k r e t n o m v r e d n o s c u p r e p r o c e s a k o m p i -

    l a c i j e , t e k o m p i l a t o r ( p a i d e b a g e r ) n e m a n i k a k v u i n f o r m a c i j u o s i m b o l i c k o m i m e n u k o j e j e p r i d r u z e n o

    m a g i c n o j k o n s t a n t n i n i t i o n j e n o m t i p u . Z b o g t o g a s e p r e p o r u c u j e d a s e m a g i c n e k o n s t a n t e u v o d e k a o

    k o n s t a n t n e p r o m e n l j i v e i l i k o r i s c e n j e m n a b r o j i v i h t i p o v a ( D e o I , p o g l a v l j e ? ? ) . N a p r i m e r , u n a r e d n o j

    d e k l a r a c i j i

    c h a r i m e U l i c e [ 5 0 ] ;

    p o j a v l j u j e s e m a g i c n a k o n s t a n t a 5 0 , t e s e u n a s t a v k u p r o g r a m a b r o j 5 0 v e r o v a t n o p o j a v l j u j e u s v a k o j

    o b r a d i i m e n a u l i c a . P r o m e n a t o g o g r a n i c e n j a z a h t e v a l a b i m n o g e i z m e n e k o j e n e b i m o g l e d a s e s p r o v e d u

    a u t o m a t s k i ( j e r s e b r o j 5 0 m o z d a p o j a v l j u j e i u n e k o m d r u g o m k o n k t e k s t u ) . Z a t o j e b o l j a , n a p r i m e r ,

    s l e d e c a v a r i j a n t a :

    # d e f i n e M A K S _ I M E _ U L I C E 5 0

    c h a r s t r e e t N a m e [ M A K S _ I M E _ U L I C E ] ;

    i l i , j o s b o l j e :

    c o n s t u n s i g n e d i n t M A K S _ I M E _ U L I C E = 5 0 ;

    c h a r s t r e e t N a m e [ M A K S _ I M E _ U L I C E ] ;

    U v e c i m p r o g r a m i m a , k o n s t a n t e o d z n a c a j a z a c i t a v p r o g r a m ( i l i v e l i k i