Rozsáhlé programy = projekty Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 28. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 1 / 13
Programový projekt definice versus deklarace c/cpp zdrojové texty versus h hlavičkové soubory rozdělení projektu na logické celky, interface do.h a #include možný inkrementální překlad make/ant a překladač gcc versus vývojové nástroje (Visual Studio, Eclipse) (popis závislostí v projektu) Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 2 / 13
Činnost překladače zdrojový text knihovní deklarace překladač objektový kód knihovní definice spojovací program proveditelný kód Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 3 / 13
Projekt schema Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 4 / 13
Příklad projektu přehled 1 Soubor s funkcí main() tvoří rozhraní a volá funkce. 2 Převod celého čísla (den v týdnu) na řetězec. 3 Celočíselný argument funkce pro výpočet faktoriálu a hodnoty členu Fibonacciho posloupnosti. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 5 / 13
Projekt soubory stdio.h funkce.h kalendar.h funkce.c prj-demo.c kalendar.c funkce.obj prj-demo.obj kalendar.obj std-knihovny prj-demo Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 6 / 13
kalendar.c #i n c l u d e k a l e n d a r. h const char e den s d e n ( tden d, tlang l ) / p ř e v e d e v ý č t o v ý den v týdnu na o d p o v í d a j í c í ř e t ě z e c ve zvoleném j a z y c e / { s t a t i c char sdny [ ebe +1][eNE+1] = {{ p o n d e l i, u t e r y, s t r e d a, c t v r t e k, patek, sobota, n e d e l e }, { Monday, Tuesday, Wednesday, Thursday, F r i d a y, Saturday, Sunday } } ; return sdny [ l ] [ d ] ; } / c o n s t char e d e n s d e n ( tden d, tlang l ) / Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 7 / 13
kalendar.h typedef enum {epo, eut, est, ect, epa, eso, ene} tden ; / v y c t o v y typ pro den v tydnu PONDELI.. NEDELE > epo.. ene ( 0.. 6 ) / typedef enum {ecz, ebe} tlang ; / v y c t o v y typ pro j a z y k : CZ c e s t i n a BE B r i t i s h E n g l i s h / const char e den s den ( tden d, tlang l ) ; / p ř e v e d e v ý č t o v ý den v týdnu na o d p o v í d a j í c í ř e t ě z e c ve zvoleném j a z y c e / Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 8 / 13
funkce.c #i n c l u d e f u n k c e. h double f a c t ( i n t n ) { double f = 1. 0 L ; f o r ( ; n > 0 ; n ) f = n ; return f ; } / double f a c t ( i n t n ) / long f i b ( long n ) { i f ( n == 1) return 1 ; e l s e i f ( n == 2) return 2 ; e l s e return f i b ( n 1) + f i b ( n 2 ) ; } / l o n g f i b ( l o n g n ) / Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 9 / 13
funkce.h double f a c t ( i n t n ) ; / v y p o c t e n f a k t o r i á l pro n < 0 v r á t í 1 / long f i b ( long n ) ; / v r á t í hodnotu n tého c l e n u F i b b o n a c i h o p o s l o u p n o s t i / Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 10 / 13
prj-demo.c #i n c l u d e <s t d i o. h> #i n c l u d e f u n k c e. h #i n c l u d e k a l e n d a r. h i n t main ( void ) { i n t i = 1; tden eden ; do { p r i n t f ( \ nzadej c i s l e m den v tydnu <0, 6>: ) ; s c a n f ( %d, &i ) ; } while ( i < 0 i > 6 ) ; eden = ( tden ) i ; p r i n t f ( \ nzadal j s i : %s ( a n g l i c k y : %s )\ n, e d e n s den ( eden, ecz ), e d e n s d e n ( eden, ebe ) ) ; do { p r i n t f ( \ nzadej c e l e c i s l o do 2 0 : ) ; s c a n f ( %d, &i ) ; } while ( i < 0 i > 2 0 ) ; p r i n t f ( \n%d! = %0.0 l f \ t f i b (%d ) = %0.0 l d \n, i, f a c t ( i ), i, f i b ( i ) ) ; return 0 ; Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 11 / 13
Výstup Zadej c i s l e m den v tydnu <0, 6>:3 Zadal j s i : c t v r t e k ( a n g l i c k y : Thursday ) Zadej c e l e c i s l o do 20:12 12! = 479001600 f i b (12) = 233 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 12 / 13
prj-demo make # soubor prj demo. mak CPP=c l. exe ALL : $prj demo. exe CLEAN : f u n k c e. o b j k a l e n d a r. o b j p r j demo. o b j vc60. i d b @erase $prj demo. exe BSC32=bscmake. exe LINK32=l i n k. exe LINK32 OBJS= \ p r j demo. o b j \ k a l e n d a r. o b j \ f u n k c e. o b j $prj demo. exe :. $ ( LINK32 OBJS ) $ ( LINK32 ) @<< $ ( LINK32 FLAGS ) $ ( LINK32 OBJS ) <<. c{$ ( INTDIR ) }. o b j : : $ (CPP) @<< $ (CPP PROJ) $< << SOURCE=..\ f u n k c e. c funkce. obj : $ (SOURCE) $ ( INTDIR ) $ (CPP) $ (CPP PROJ) $ (SOURCE) SOURCE=..\ k a l e n d a r. c kalendar. obj : $ (SOURCE) $ ( INTDIR ) $ (CPP) $ (CPP PROJ) $ (SOURCE) SOURCE=.. \ p r j demo. c prj demo. obj : $ (SOURCE) $ ( INTDIR ) $ (CPP) $ (CPP PROJ) $ (SOURCE) Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Rozsáhlé programy = projekty 28. listopadu 2011 13 / 13