IB001 – Seminární skupiny 6, 7 a 24
Týden 8
Funkce
Funkce umožňují zapsat mimo hlavní tělo programu opakující se logické celky kódu nebo např. často užívané jednoduché operace. Ústřední funkcí v programu v jazyce C je main a ostatní funkce se zapíší obdobně:
- zapíšeme návratový typ funkce
- poté její identifikátor (jméno)
- poté do kulatých závorek typy a jména parametrů
- a nakonec zapíšeme do složených závorek tělo funkce
- funkce běžně vrací hodnotu příkazem return, není-li typu void
Zápis i užití můžeme vidět např. na funkci pro výpočet maxima ze dvou celých čísel:
// definice funkce pro vypocet maxima ze dvou cisel int maximum(int a, int b) { int max = a; if (b > a) { max = b; } return max; }
Místo kam můžeme zapsat funkci a jak ji zavolat je vidět z následujícího kódu:
#include <stdio.h> // Definice funkce add pred main, aby jeji jmeno bylo v main videt // Argumenty a, b jsou jmena lokalnich promennych (v add), pri volani jsou do nich ulozeny hodnoty opravdovych argumentu int add(int a, int b) { return a + b; } int main(void) { // Promenne a, b jsou viditelne pouze v tele funkce main // Jsou to tedy jine opravdove promenne nez stejnojmenne a, b z definice funkce add! int a, b; printf("Zadejte 2 cela cisla: "); scanf("%d %d", &a, &b); // Funkci zavolame zapisem jmena, za kterym nasleduji skutecne argumenty v kulatych zavorkach oddelene carkou int sum = add(a, b); printf("Soucet cisel a + b = %d", sum); // Funkce main vraci 0, pokud program neskoncil s chybou return 0; }
Rekurze
Rekurze je volání funkce sebe samou. Pomocí rekurze je, podobně jako pomocí cyklů, provádět výpočty, které vyžadují více stejných kroků.
Rekurzivní volání umožňuje snadno zapisovat některé matematické definice, např. definici faktoriálu:
0! = 1 n! = n * (n - 1)!
Rekurzivní funkce pro faktoriál by mohla vypadat takto:
int fact(int n) { if (n == 0) { return 1; } else { return n * fact(n - 1); } }