1 / 35

Funkce a struktura programu

Verze 2009.01. Funkce a struktura programu. 8. A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz. Agenda. Funkce Syntaxe Parametry a návratová hodnota Definice a deklarace funkce Funkce main() Rekurzivní funkce. Funkce.

brant
Download Presentation

Funkce a struktura programu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Verze 2009.01 Funkce a struktura programu 8 A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz

  2. Agenda • Funkce • Syntaxe • Parametry a návratová hodnota • Definice a deklarace funkce • Funkce main() • Rekurzivní funkce

  3. Funkce • Umožňují rozkládat větší výpočetní úlohy na menší. • Základní prostředek strukturování programu. • Každý program se skládá z jedné nebo více funkcí. • Každá funkce musí mít návratovou hodnotu a může mít i více vstupních parametrů.

  4. Knihovní funkce • Jazyk C obsahuje řadu již vytvořených funkcí. • Definice těchto funkcí umístěna v hlavičkových souborech a v knihovnách. • Funkce pro práci s terminálem a se soubory, matematické funkce, …. • Např. scanf(), printf(), sqrt(), …

  5. Vytvoření vlastní funkce • Definice funkce: návratový_typ název_funkce(seznam_parametrů) { tělo (příkazy) funkce }

  6. Parametry funkce • Parametry uvádíme do závorky za identifikátor funkce ve tvaru datový typ, mezera a identifikátor parametru • Počet parametrů funkce není omezen • V těle funkce k nim přistupujeme jako k proměnným s tím rozdílem, že hodnoty z nich můžeme pouze číst

  7. Návratová hodnota • Hodnota, kterou vrací funkce. • Datový typ této hodnoty uvádíme v hlavičce funkce před identifikátorem funkce. • Př.: unsigned long faktorial(int n); nebo float obvod_kruhu(float r);

  8. Návratová hodnota • Pro návrat z funkce slouží příkaz return, za kterým následuje návratová hodnota. • Př.: return vysledek; nebo return 0;

  9. Příklad • Definice funkce - příklad: int soucet(int a, int b) { int x; x = a + b; return x; }

  10. Příklad • Použití v programu: #include <stdio.h> int soucet(int a, int b) { int x; x = a + b; return x; } int main() { printf(″4 + 3 = %d″,soucet(4,3)); return 0; }

  11. Funkce bez parametrů • Pokud funkce nemá žádné parametry, je možné ji zapsat dvěma způsoby: • Za identifikátorem funkce ponecháme prázdné závorky int zobraz_napovedu() { … příkazy … } • Do závorky uvedeme klíčové slovo void int zobraz_napovedu(void) { … příkazy … }

  12. Funkce bez návratové hodnoty • V jazyce C funkce musí mít návratovou hodnotu. • Pokud chceme, aby funkce nevracela žádnou návratovou hodnotu, uvedeme místo datového typu návratové hodnoty typ void, potom již příkaz return neuvádíme!

  13. Funkce bez návratové hodnoty • Správně void vypis_napovedu() { printf(″Napoveda″); } • Špatně vypis_napovedu() { printf(″Napoveda″); }

  14. Výchozí návratová hodnota • Při definici funkce je možné neuvádět datový typ návratové hodnoty. • Pokud není uveden datový typ návratové hodnoty, použije se výchozí návratová hodnota – int

  15. Definice funkce • Obsahuje hlavičku i tělo funkce • Hlavička funkce není ukončena středníkem

  16. Deklarace funkce • Funkci deklarujeme pomocí funkčního prototypu. • Funkční prototyp obsahuje hlavičku funkce a je ukončen středníkem. • Deklarace dává překladači informaci o návratové hodnotě a parametrech funkce. • Bez použití deklarace by musela být definice funkce umístěna v kódu před voláním této funkce.

  17. Deklarace funkce • Funkční prototyp: • Neúplný • Uvádíme pouze datové typy parametrů • Př.: double obsah_obdelniku (double, double);

  18. Deklarace funkce • Funkční prototyp: • Úplný • Uvádíme datové typy i jména parametrů • Pro přehlednost programu vhodnější uvádět úplný funkční prototyp • Př.: double obsah_obdelniku (double a, double b);

  19. Deklarace funkce #include <stdio.h> int main() { double s1 = 5.3; double s2 = 2.1; printf(″Obsah obdelniku je %f″, obsah_obdelniku(s1,s2)); return 0; } double obsah_obdelniku (double a, double b) { return a*b; }

  20. Deklarace funkce #include <stdio.h> double obsah_obdelniku (double a, double b) { return a*b; } int main() { double s1 = 5.3; double s2 = 2.1; printf(″Obsah obdelniku je %f″, obsah_obdelniku(s1,s2)); return 0; }

  21. Deklarace funkce #include <stdio.h> double obsah_obdelniku (double a, double b); int main() { double s1 = 5.3; double s2 = 2.1; printf(″Obsah obdelniku je %f″, obsah_obdelniku(s1,s2)); return 0; } double obsah_obdelniku (double a, double b) { return a*b; }

  22. Deklarace funkce #include <stdio.h> double obsah_obdelniku (double, double); int main() { double s1 = 5.3; double s2 = 2.1; printf(″Obsah obdelniku je %f″, obsah_obdelniku(s1,s2)); return 0; } double obsah_obdelniku (double a, double b) { return a*b; }

  23. Funkce main() • Hlavní funkce programu – volá se po spuštění programu • Návratová hodnota: • Datový typ int • Umožňuje identifikovat chyby v programu • Výchozí návratová hodnota 0 značí bezchybné ukončení programu

  24. Funkce main() • Parametry funkce: • Slouží pro načítání parametrů příkazového řádku • Pokud nechceme načítat parametry, ponecháme závorku prázdnou nebo s klíčovým slovem void int main() { … return 0; }

  25. Funkce main() • Načítání parametrů příkazového řádku: • Funkce main(): int main(int argc, char* argv[]) { … return 0; }

  26. Funkce main() • int argc • Udává počet parametrů příkazového řádku • char* argv[] • Pole ukazatelů na tyto parametry (řetězce) • Hodnota argc je vždy větší nebo rovna 1 (1. parametrem, argv[0] ,je název spouštěného programu) • Př.: program.exe 2.87 34 text

  27. Funkce main() #include <stdio.h> int main(int argc, char* argv[]) { if (argc == 1) { printf(″Program byl zavolan bez parametru\n″); } else { for(i = 0; i < argc; i++) { printf(″%s\n″,argv[i]); } } }

  28. Funkce main() • Spuštění aplikace vypis.exe 2 text 1.3 soubor.txt argc … 5 argv[0] … obsah.exe argv[1] … 2 argv[2] … text argv[3] … 1.3 argv[4] … soubor.txt

  29. Funkce main() #include <stdio.h> #include <stdlib.h> double obsah_obdelniku (double, double); int main(int argc, char* argv[]) { double s1 = atof(argv[1]); double s2 = atof(argv[2]); printf(″Obsah obdelniku je %f″, obsah_obdelniku(s1,s2)); return 0; } double obsah_obdelniku (double a, double b) { return a*b; }

  30. Funkce main() • Spuštění aplikace obsah.exe 1.3 2.4 argc … 3 argv[0] … obsah.exe argv[1] … 1.3 argv[2] … 2.4

  31. Rekurzivní funkce • Funkce, která volá sama sebe • Využití např. u funkce pro výpočet faktoriálu unsigned long faktorial(int n) { if (n == 0) return 1; else return (n*faktorial(n-1)); }

  32. Rekurzivní funkce • Funkce pro výpočet faktoriálu opakovaně volá sama sebe a pokaždé sníží číslo, pro které se faktoriál počítá.

  33. Rekurzivní funkce • Další možnost použití rekurzivní funkce • Výpočet mocniny int mocnina (int x, int n) { if(n == 0) return 1; else return x * mocnina(x, n - 1); }

  34. Rekurzivní funkce • Další možnost použití rekurzivní funkce • Výpis souborů ve složce a podsložkách • Zavolá se funkce pro výpis souborů a složek. • Následně se tato funkce zavolá i pro všechny podsložky v dané složce

  35. A1PRG-s 08. Funkce Děkuji za pozornost Ing. Michal Heczko heczko@fai.utb.cz 218/U3 Prezentace k dispozici na http://vyuka.fai.utb.cz

More Related