Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.

Podobné prezentace


Prezentace na téma: "Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření."— Transkript prezentace:

1 Funkce Přednáška č. 5

2 Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření událostí  funkci lze předávat údaje tzv. parametry a vracet výsledek tzv. návratovou hodnotu

3 Syntaxe funkce (1)  Funkce bez parametrů a bez návratové hodnoty  Funkce musí být před prvním voláním definována nebo alespoň deklarována  void func_name( void ) { } void ShowText(void) // definice funkce – vcetne tela funkce { printf("Funkce ShowText\r\n"); getchar(); } void ShowNum(void); // deklarce funkce – bez tela, nezapomenout strednik int main(int argc, char* argv[]) { ShowText();// volani funkce ShowText ShowNum();// volani funkce ShowNum return 0; } void ShowNum(void) // definice funkce – vcetne tela funkce { printf("Funkce ShowNum\r\n"); getchar(); }

4 Syntaxe funkce (2)  Funkce s jedním parametrem a návratovou hodnotou  func_name( jmeno_parametru) { } double Kvadrat(double param) // definice funkce – vcetne tela funkce { double vysl = param * param; return vysl;// okamzite ukonceni funkce, predani navratove hodnoty printf("Toto nikdy nenastane neboť je to za return."); } int main(int argc, char* argv[]) { double x = 2.5; printf("Kvadrat %f = %f\r\n", x, Kvadrat(x)); // volani funkce Kvadrat getchar(); return 0; }

5 Syntaxe funkce (3)  Funkce s více parametry a návratovou hodnotou  func_name( jmeno_P1, jmeno_P2 … ) { } double CelocisMocnina(double zaklad, unsigned int exponent ) // definice funkce { double vysl = zaklad; if (!exponent) return 1; // okamzite ukonceni funkce, predani navratove // hodnoty 1, je-li exponent 0 while (--exponent) vysl*=zaklad; return vysl;// ukonceni funkce, predani navratove hodnoty } int main(int argc, char* argv[]) { double x = 2.5; unsigned int y = 3; printf("%f ^ %d = %f\r\n", x, y, CelocisMocnina(x,y)); getchar(); return 0; }

6 Syntaxe funkce (4)  Parametr předaný hodnotou – výchozí stav  func_name( jmeno_param ) { }  Parametr předaný odkazem POZOR jen v C++  func_name( &jmeno_param ) { } int Hodnotou(int param ) // definice funkce { return ++param;// ukonceni funkce, predani navratove hodnoty } int Odkazem(int &param ) // definice funkce { return ++param;// ukonceni funkce, predani navratove hodnoty } int main(int argc, char* argv[]) { int x = 3, y; y = Hodnotou (x); printf("Po volani Hodnotou x = %d y = %d\r\n", x, y); y = Odkazem (x); printf("Po volani Odkazem x = %d y = %d\r\n", x, y); getchar(); return 0; }

7 Parametr předaný odkazem v C  Řeší se tak, že se nepředává proměnná (parametr), ale adresa proměnné  Pozn. Řetězce jsou ukazatele na první písmeno, jsou tedy vlastně předávány odkazem int Hodnotou(int param ) // definice funkce { return ++param;// ukonceni funkce, predani navratove hodnoty } int Odkazem(int *param ) // definice funkce, parametrem je ukazatel na int { return ++(*param);// pouzivame dereferenci pro praci s parametrem } int main(int argc, char* argv[]) { int x = 3, y; y = Hodnotou (x); printf("Po volani Hodnotou x = %d y = %d\r\n", x, y); y = Odkazem (&x); // parametrem je adresa proměnné x printf("Po volani Odkazem x = %d y = %d\r\n", x, y); getchar(); return 0; }

8 Složitější parametry  Pomocí typedef lze předdefinovat složitější typ jako např. matice a ten použít jako typ parametru funkce typedef int t_mtx[3][3] ; void add_mtx( t_mtx A, t_mtx B ) { int m, n; for( m=0; m<3; m++) for( n=0; n<3; n++) A[m][n] = A[m][n] + B[m][n]; } void print_mtx( t_mtx X ) { int m, n; for( m=0; m<3; m++) { for( n=0; n<3; n++) printf( " %d", X[m][n]); printf("\r\n"); } printf("\n\n"); getchar(); } void main( void ) { t_mtx A = { 1, 2, 3, 4, 5, 6, 7, 8, 9}; t_mtx B = {10,20,30,40,50,60,70,80,90}; print_mtx( A); print_mtx( B); add_mtx( A, B); print_mtx ( A); }

9 Rekurze  Volání sebe sama  Náročné na zásobník  Používat pouze v odůvodněných případech unsigned long factorial( unsigned int n) { if( n ) // n je nenulove return n*factorial( n-1 ); // rekurze else // n je nula return 1; } int main(int argc, char* argv[]) { int x = 5; printf("%d! = %d\r\n", x, factorial(x)); getchar(); return 0; }

10 Ukazatel na funkci double fce1( double x) { return x*x; } double fce2( double x) { return x+x; } void tisk_fce(double start, double inc, int steps, double func(double)) { // posledni parametr je ukazatel na funkci int i; double x=start; for (i=0;i<steps;i++) { printf("func(%.1lf) = %.2lf\r\n",x,func(x)); x+=inc; } int main(int argc, char* argv[]) { tisk_fce(0.5,0.2,5,fce1); // predani ukazatele na funkci fce1 printf("----------------\r\n"); tisk_fce(0.5,0.2,5,fce2); // predani ukazatele na funkci fce2 getchar(); return 0; }

11 Hlavičkový soubor  my_lib.cpp: soubor obsahující zdrojové kódy našich funkcí (implementaci – definici funkcí)  my_lib.h: soubor obsahující hlavičky našich funkcí ze stejnojmenného souboru (deklarace funkcí)  Include “my_lib.h“: vložení souboru s deklaracemi funkcí zpřístupňujícího funkce z my_lib.c ( v mém programu pak mohu volat funkce ze souboru my_lib.cpp )

12 Příklad – knihovna geom. objektů  Vytvořte funkce, které budou počítat plochu obdélníka, elipsy a trojúhelníka.  Funkce soustřeďte do nezávislé knihovny.


Stáhnout ppt "Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření."

Podobné prezentace


Reklamy Google