Jazyk C - funkcie: Rozdiel medzi revíziami
(Vytvorená stránka „==Funkcie== '''Funkcia''' je skupina príkazov, ktoré spoločne vykonávajú úlohu. Každý program C má najmenej jednu funkciu, ktorá je hlavná (), a všetky najv…“) |
|||
Riadok 1: | Riadok 1: | ||
+ | [[Kategória:Študijné materiály]] | ||
+ | [[Kategória:Informatika]] | ||
+ | {{Skripta_ZI}} | ||
==Funkcie== | ==Funkcie== | ||
'''Funkcia''' je skupina príkazov, ktoré spoločne vykonávajú úlohu. Každý program C má najmenej jednu funkciu, ktorá je hlavná (), a všetky najvýznamnejšie programy môžu definovať ďalšie funkcie. | '''Funkcia''' je skupina príkazov, ktoré spoločne vykonávajú úlohu. Každý program C má najmenej jednu funkciu, ktorá je hlavná (), a všetky najvýznamnejšie programy môžu definovať ďalšie funkcie. | ||
Riadok 21: | Riadok 24: | ||
'''Telo funkcie''' - telo funkcie obsahuje súbor príkazov, ktoré definujú, čo funkcia robí. | '''Telo funkcie''' - telo funkcie obsahuje súbor príkazov, ktoré definujú, čo funkcia robí. | ||
+ | |||
+ | |||
+ | ====Príkazy vo funkcií==== | ||
+ | ''Dovolené:'' | ||
+ | *Používanie akýchkoľvek príkazov | ||
+ | *Volanie iných funkcií | ||
+ | *Volanie samej seba(rekurzia) | ||
+ | |||
+ | |||
+ | ''Zakázané'' | ||
+ | *Definovanie funckie v tele inej funkcie | ||
+ | *Volanie funckie main | ||
+ | |||
+ | |||
+ | ''Doporučené'' | ||
+ | *Písať krátke, jednoúlohové, ľahko pochopitelné funkcie | ||
+ | *Veľké funkcie rozdeliť na vhodnom mieste | ||
+ | *Ak to nie je nutné funkcia nebude vypisovať na obrazovku | ||
+ | |||
+ | ===Funkcia Void=== | ||
+ | Funkcia Void,tiež nazývaná bezhodnotvé nenávratové funkcie, sa používajú rovnako ako funkcie vracajúce hodnoty, s výnimkou typov neplatných návratov nevracajú hodnotu, keď je funkcia vykonaná. Funkcia void plní svoju úlohu a potom vracia kontrolu volajúcemu. Volanie neplatnej funkcie je samostatný príkaz. | ||
+ | |||
+ | *void : (prázdny) funkcia nevracia žiadnu hodnotu. | ||
+ | *() : funkcia nemá žiadne parametre (žiadne vstupné premenné) | ||
+ | *Ukončenie funkcie (nepovinné): return | ||
+ | |||
+ | <source lang="c" line> | ||
+ | void pozdrav() | ||
+ | { printf("\nAhoj, pozdravujem ta.\n"); | ||
+ | } | ||
+ | void pracuj() | ||
+ | { | ||
+ | int i; | ||
+ | printf(“Napis cele cislo: "); | ||
+ | scanf(“%d“,&i); | ||
+ | printf(“Napisal si: %d\n",i); | ||
+ | } | ||
+ | void koniec() | ||
+ | { printf(“To je vsetko.\n"); | ||
+ | } | ||
+ | void main() | ||
+ | { | ||
+ | pozdrav(); | ||
+ | pracuj(); | ||
+ | koniec(); | ||
+ | printf(“%d“,i); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ===Parametre funkcie=== | ||
+ | Argumety: zoznam premenných uzatvorených v zátvorkách pri mene funkcie | ||
+ | *a=getchar(); | ||
+ | *putchar(a); | ||
+ | *clrscr(); | ||
+ | *abs(b); | ||
+ | *power(x,y); | ||
+ | |||
+ | |||
+ | Parametre: | ||
+ | *Zoznam parametrov/argumentov (vstupných | ||
+ | premenných) funkcie v tvare: (typ1 meno1, typ2 meno 2, ..., typ_n meno_n) | ||
+ | *Typ: typ premennej: int, char, float, double,... | ||
+ | *Meno: názov premennej | ||
+ | *Tieto premenné sú lokálne premenné danej funkcie a nadobudnú hodnoty pri zavolaní funkcie | ||
+ | |||
+ | |||
+ | '''Funkcie s parametrami (bez návratovej hodnoty)''' | ||
+ | |||
+ | Pri zavolaní funkcie sa: | ||
+ | *Odložia všetky lokálne premenné z miesta volania do stacku | ||
+ | *Pri spustení funkcie sa vytvoria nové premenné, ich hodnota sa nastaví podľa hodnoty premennej z miesta, odkiaľ sa funkcia volá | ||
+ | *Parametre sú prenášané hodnotou | ||
+ | *Po skončení funkcie sa všetky lokálne premenné zmažú. | ||
+ | |||
+ | |||
+ | ===Deklaracia funkcie=== | ||
+ | *Prototyp sa zapíše v súbore kde sa funkcia používa. | ||
+ | *Funkcia sa definuje pred jej prvým použitím (volaním). Definícia potom vystupuje aj ako deklarácia. | ||
+ | *Prototyp funkcie a jej definícia sa musia zhodovať v návratovom type, názve funkcie a type parametrov | ||
+ | *Názvy parametrov v deklarácii sú nepovinné a nemusia sa zhodovať s definíciou | ||
+ | |||
+ | |||
+ | ===Definícia funkcie=== | ||
+ | *Hlavička a telo funkcie | ||
+ | *Hlavička sa zhoduje s deklaráciou | ||
+ | *návratový typ, názov funkcie a zoznam parametrov | ||
+ | *nie je za ňou bodkočiarka! | ||
+ | *Telo začína a končí zloženou zátvorkou | ||
+ | *Príkazom return kdekoľvek v tele sa funkcia ukončí, pričom musí vrátiť hodnotu (okrem typu void) | ||
+ | |||
+ | <source lang="c" line> | ||
+ | void Plocha(double dlzka, double sirka) //hlavička | ||
+ | { double plocha = dlzka*sirka; | ||
+ | printf("%f",plocha); //telo funkcie | ||
+ | return; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | ===Volanie funckie=== | ||
+ | *Argumenty sú odovzdávané v rovnakom poradí ako sú parametre uvedené v deklarácii a definícii. | ||
+ | *Na názvoch argumentov nezáleží, odovzdáva sa len ich hodnota, dôležitý je typ. | ||
+ | *Ak funkcia nemá parametre, pri volaní sa uvádzajú len prázdne zátvorky ( ) | ||
+ | |||
+ | <source lang="c" line> | ||
+ | double a, b; | ||
+ | printf("Zadaj dlzku a sirku obdlznika: "); | ||
+ | scanf("%lf %lf", &a, &b); | ||
+ | Plocha(a, b); //volanie funkcie a odovzdanie dvoch argumentov | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ===Parameter funckie=== | ||
+ | Parametre prenášané hodnotou | ||
+ | *Pri ich použití sa vo funkcii vytvoria nové premenné a do nich sa skopírujú hodnoty parametrov | ||
+ | *Parametre prenášané odkazom | ||
+ | *Nevytvára kópia hodnôt premenných, ale vytvorí sa odkaz na premenné (odovzdáva sa adresa premenných). | ||
+ | *V oboch prípadoch tieto lokálne premenné pri ukončení funkcie zaniknú. | ||
+ | |||
+ | |||
+ | ===Návratová hodnota=== | ||
+ | *Funkcie, ktoré vracajú nejakú hodnotu môžem priradiť k nejakej premennej: | ||
+ | int a; a=abs(-5); char c=getchar(); | ||
+ | *Funkcie bez návratovej hodnoty nemôžem priraďovať. | ||
+ | a=clrscr(); | ||
+ | chyba: clrscr() nemá návratovú hodnotu | ||
+ | *Správne použitie: clrscr(); | ||
+ | |||
+ | |||
+ | ===Použitie funkcií=== | ||
+ | <source lang="c" line> | ||
+ | void parne(int a); //Deklarácia funckie | ||
+ | int main() | ||
+ | { | ||
+ | parne(5); // použitie vlastnej funkcie v maine | ||
+ | } | ||
+ | void parne(int a) //Definícia funckie za hlavnou funkciou | ||
+ | { | ||
+ | if(a%2) | ||
+ | printf(“%d je neparne”,a); | ||
+ | else | ||
+ | printf(“%d je parne”,a); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | '''Príklad na minimum''' | ||
+ | <source lang="c" line> | ||
+ | int min(int h1,int h2) | ||
+ | { | ||
+ | if (h1<h2) | ||
+ | return h1; | ||
+ | else | ||
+ | return h2; | ||
+ | } | ||
+ | int main() | ||
+ | { | ||
+ | int k=min(5,2); | ||
+ | printf("%d",k); | ||
+ | printf("%d",min(7,4)); | ||
+ | int k2=min(min (7,8),k)); | ||
+ | int k3=min(min(7,8),min(5,2))); | ||
+ | } | ||
+ | </source> | ||
+ | |||
==Odkazy== | ==Odkazy== |
Verzia zo dňa a času 14:53, 21. marec 2020
Učebné texty
Funkcie
Funkcia je skupina príkazov, ktoré spoločne vykonávajú úlohu. Každý program C má najmenej jednu funkciu, ktorá je hlavná (), a všetky najvýznamnejšie programy môžu definovať ďalšie funkcie.
Kód môžete rozdeliť do samostatných funkcií. Ako rozdelíte svoj kód medzi rôzne funkcie, je len na vás, ale logicky je rozdelenie také, že každá funkcia vykonáva konkrétnu úlohu.
Deklarácia funkcie hovorí kompilátoru o názve funkcie, type návratu a parametroch. Definícia funkcie poskytuje skutočné telo funkcie.
Knižnica v štandardnom jazyku C poskytuje množstvo vstavaných funkcií, ktoré môže váš program zavolať. Napríklad strcat () spája dva reťazce, memcpy () na kopírovanie jedného miesta na iné miesto a mnoho ďalších funkcií.
Funkcia môže byť tiež označovaná ako metóda alebo čiastková rutina alebo postup atď.[1]
Definícia funkcie v programovaní C sa skladá z hlavičky funkcie a tela funkcie. Tu sú všetky časti funkcie -
Return Type - Funkcia môže vrátiť hodnotu. Return_type je typ údajov hodnoty, ktorú funkcia vracia. Niektoré funkcie vykonávajú požadované operácie bez vrátenia hodnoty. V tomto prípade je návratovým typom kľúčové slovo neplatné.
Názov funkcie - Toto je skutočný názov funkcie. Názov funkcie a zoznam parametrov spolu tvoria funkčný podpis.
Parametre - parameter je ako zástupný symbol. Po vyvolaní funkcie odovzdáte hodnotu parametru. Táto hodnota sa označuje ako skutočný parameter alebo argument. Zoznam parametrov sa týka typu, poradia a počtu parametrov funkcie. Parametre sú voliteľné; to znamená, že funkcia nesmie obsahovať žiadne parametre.
Telo funkcie - telo funkcie obsahuje súbor príkazov, ktoré definujú, čo funkcia robí.
Príkazy vo funkcií
Dovolené:
- Používanie akýchkoľvek príkazov
- Volanie iných funkcií
- Volanie samej seba(rekurzia)
Zakázané
- Definovanie funckie v tele inej funkcie
- Volanie funckie main
Doporučené
- Písať krátke, jednoúlohové, ľahko pochopitelné funkcie
- Veľké funkcie rozdeliť na vhodnom mieste
- Ak to nie je nutné funkcia nebude vypisovať na obrazovku
Funkcia Void
Funkcia Void,tiež nazývaná bezhodnotvé nenávratové funkcie, sa používajú rovnako ako funkcie vracajúce hodnoty, s výnimkou typov neplatných návratov nevracajú hodnotu, keď je funkcia vykonaná. Funkcia void plní svoju úlohu a potom vracia kontrolu volajúcemu. Volanie neplatnej funkcie je samostatný príkaz.
- void : (prázdny) funkcia nevracia žiadnu hodnotu.
- () : funkcia nemá žiadne parametre (žiadne vstupné premenné)
- Ukončenie funkcie (nepovinné): return
1 void pozdrav()
2 { printf("\nAhoj, pozdravujem ta.\n");
3 }
4 void pracuj()
5 {
6 int i;
7 printf(“Napis cele cislo: ");
8 scanf(“%d“,&i);
9 printf(“Napisal si: %d\n",i);
10 }
11 void koniec()
12 { printf(“To je vsetko.\n");
13 }
14 void main()
15 {
16 pozdrav();
17 pracuj();
18 koniec();
19 printf(“%d“,i);
20 }
Parametre funkcie
Argumety: zoznam premenných uzatvorených v zátvorkách pri mene funkcie
- a=getchar();
- putchar(a);
- clrscr();
- abs(b);
- power(x,y);
Parametre:
- Zoznam parametrov/argumentov (vstupných
premenných) funkcie v tvare: (typ1 meno1, typ2 meno 2, ..., typ_n meno_n)
- Typ: typ premennej: int, char, float, double,...
- Meno: názov premennej
- Tieto premenné sú lokálne premenné danej funkcie a nadobudnú hodnoty pri zavolaní funkcie
Funkcie s parametrami (bez návratovej hodnoty)
Pri zavolaní funkcie sa:
- Odložia všetky lokálne premenné z miesta volania do stacku
- Pri spustení funkcie sa vytvoria nové premenné, ich hodnota sa nastaví podľa hodnoty premennej z miesta, odkiaľ sa funkcia volá
- Parametre sú prenášané hodnotou
- Po skončení funkcie sa všetky lokálne premenné zmažú.
Deklaracia funkcie
- Prototyp sa zapíše v súbore kde sa funkcia používa.
- Funkcia sa definuje pred jej prvým použitím (volaním). Definícia potom vystupuje aj ako deklarácia.
- Prototyp funkcie a jej definícia sa musia zhodovať v návratovom type, názve funkcie a type parametrov
- Názvy parametrov v deklarácii sú nepovinné a nemusia sa zhodovať s definíciou
Definícia funkcie
- Hlavička a telo funkcie
- Hlavička sa zhoduje s deklaráciou
- návratový typ, názov funkcie a zoznam parametrov
- nie je za ňou bodkočiarka!
- Telo začína a končí zloženou zátvorkou
- Príkazom return kdekoľvek v tele sa funkcia ukončí, pričom musí vrátiť hodnotu (okrem typu void)
1 void Plocha(double dlzka, double sirka) //hlavička
2 { double plocha = dlzka*sirka;
3 printf("%f",plocha); //telo funkcie
4 return;
5 }
Volanie funckie
- Argumenty sú odovzdávané v rovnakom poradí ako sú parametre uvedené v deklarácii a definícii.
- Na názvoch argumentov nezáleží, odovzdáva sa len ich hodnota, dôležitý je typ.
- Ak funkcia nemá parametre, pri volaní sa uvádzajú len prázdne zátvorky ( )
1 double a, b;
2 printf("Zadaj dlzku a sirku obdlznika: ");
3 scanf("%lf %lf", &a, &b);
4 Plocha(a, b); //volanie funkcie a odovzdanie dvoch argumentov
Parameter funckie
Parametre prenášané hodnotou
- Pri ich použití sa vo funkcii vytvoria nové premenné a do nich sa skopírujú hodnoty parametrov
- Parametre prenášané odkazom
- Nevytvára kópia hodnôt premenných, ale vytvorí sa odkaz na premenné (odovzdáva sa adresa premenných).
- V oboch prípadoch tieto lokálne premenné pri ukončení funkcie zaniknú.
Návratová hodnota
- Funkcie, ktoré vracajú nejakú hodnotu môžem priradiť k nejakej premennej:
int a; a=abs(-5); char c=getchar();
- Funkcie bez návratovej hodnoty nemôžem priraďovať.
a=clrscr(); chyba: clrscr() nemá návratovú hodnotu
- Správne použitie: clrscr();
Použitie funkcií
1 void parne(int a); //Deklarácia funckie
2 int main()
3 {
4 parne(5); // použitie vlastnej funkcie v maine
5 }
6 void parne(int a) //Definícia funckie za hlavnou funkciou
7 {
8 if(a%2)
9 printf(“%d je neparne”,a);
10 else
11 printf(“%d je parne”,a);
12 }
Príklad na minimum
1 int min(int h1,int h2)
2 {
3 if (h1<h2)
4 return h1;
5 else
6 return h2;
7 }
8 int main()
9 {
10 int k=min(5,2);
11 printf("%d",k);
12 printf("%d",min(7,4));
13 int k2=min(min (7,8),k));
14 int k3=min(min(7,8),min(5,2)));
15 }