Funkcie
Pojem knižnica a štandardné knižné funkcie:
Knižnica v jazyku C
- Knižnica je zbierka funkcií, ktoré uľahčujú programovanie v jazyku C.
- Predstavuje užitočné nástroje, ktoré možno znovu použiť v rôznych programoch.
Štandardné knižné funkcie (Standard Library)
- Štandardná knižnica C obsahuje užitočné funkcie, ktoré sú súčasťou jazyka a môžete ich použiť vo svojich programoch.
- Príklady štandardných funkcií zahŕňajú printf, scanf, strlen, strcpy, rand a ďalšie.
Čo sú funkcie?
- Funkcie sú samostatné bloky kódu, ktoré vykonávajú konkrétnu úlohu.
- Pomáhajú rozdeliť program na menšie časti pre jednoduchšie riadenie a údržbu.
Deklarácia funkcií:
Deklarácia funkcie je predbežný opis funkcie, ktorý obsahuje jej meno, návratový typ a parametre (aké hodnoty funkcia očakáva pri volaní). Toto umožňuje kompilátoru rozpoznať volania funkcie a overiť ich správnosť.
// Deklarácia funkcie s názvom "nasobenie" s dvoma parametrami typu int.
int nasobenie(int faktor1, int faktor2);
Definícia funkcií:
Definícia funkcie obsahuje samotný kód funkcie a určuje, čo funkcia robí. Okrem návratového typu a parametrov obsahuje definícia aj telo funkcie, kde sa vykonáva operácia.
// Definícia funkcie "nasobenie" s dvoma parametrami.
int nasobenie(int faktor1, int faktor2) {
int vysledok = faktor1 * faktor2;
return vysledok;
}
Volanie funkcií
Volanie funkcie je spustenie jej kódu z iného miesta programu.
int vysledok = nasobenie(5, 3); // Volanie funkcie "sucet".
Parametre funkcií
- Parametre sú hodnoty, ktoré funkcia prijíma ako vstupy.
- Pomáhajú funkciám pri vykonávaní ich úloh.
int nasobenie(int x, int y) {
return x * y;
}
Odovzdávanie parametrov:
Odovzdávanie parametrov funkcie je spôsob, ako predávať hodnoty funkcie, aby s nimi mohla pracovať.
Hodnotové odovzdávanie (Pass by Value):
- Funkcia dostane kópiu hodnôt parametrov.
- Zmeny parametrov vo funkcii neovplyvnia hodnoty v hlavnom programe.
void zvysOJedna(int cislo) {
cislo = cislo + 1;
}
int main() {
int x = 5;
zvysOJedna(x); // "x" v hlavnom programe zostane 5.
return 0;
}
Odovzdávanie ukazateľov (Pass by Pointer):
- Funkcia dostane adresy premenných ako parametre.
- Zmeny v parametrách ovplyvnia hodnoty premenných v hlavnom programe.
void zvysOJedna(int *cislo) {
(*cislo) = (*cislo) + 1;
}
int main() {
int x = 5;
zvysOJedna(&x); // "x" v hlavnom programe zostane 5.
return 0;
}
Lokálne a globálne premenne
- Lokálne premenne sú definované v rámci funkcie a existujú iba v nej.
- Globálne premenne sú definované mimo funkcií a sú dostupné v celom programe.
int globalnaPremenna = 10; // Globálna premenná
int main() {
int lokalnaPremenna = 5; // Lokálna premenná v funkcii "main"
return 0;
}
Príklad:
Napíšte program, ktorý načíta dve celé čísla od používateľa, použije funkciu scitaj, ktorú vytvoríte na sčítanie týchto čísel a vypíše výsledok.
#include <stdio.h>
// Deklarácia funkcie na sčítanie dvoch čísel
int scitaj(int a, int b) {
return a + b;
}
int main() {
int cislo1, cislo2;
printf("Zadajte prvé číslo: ");
scanf("%d", &cislo1);
printf("Zadajte druhé číslo: ");
scanf("%d", &cislo2);
int vysledok = scitaj(cislo1, cislo2);
printf("Súčet čísel %d a %d je %d\n", cislo1, cislo2, vysledok);
return 0;
}

Úloha číslo 1: Napíšte program, ktorý načíta celé číslo od používateľa, použije funkciu faktorial na výpočet faktoriálu tohto čísla, ktorú vytvoríte a vypíše výsledok.
#include <stdio.h>
int faktorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * faktorial(n - 1);
}
}
int main() {
int cislo;
printf("Zadajte celé číslo: ");
scanf("%d", &cislo);
int vysledok = faktorial(cislo);
// %llu nám znázorňuje unsigned long long integer (bez znamienkový veľký veľký integer)
printf("Faktoriál čísla %d je %llu\n", cislo, vysledok);
return 0;
}

Úloha číslo 2: Napíšte program, ktorý načíta dve celé čísla od používateľa, použije funkciu nsd na výpočet ich najväčšieho spoločného deliteľa (NSD), ktorú vytvoríte a vypíše výsledok.
#include <stdio.h>
int nsd(int a, int b) {
while (a != b) {
if (a > b) {
a -= b;
} else {
b -= a;
}
}
return a;
}
int main() {
int cislo1, cislo2;
printf("Zadajte prvé celé číslo: ");
scanf("%d", &cislo1);
printf("Zadajte druhé celé číslo: ");
scanf("%d", &cislo2);
int vysledok = nsd(cislo1, cislo2);
printf("NSD čísel %d a %d je %d\n", cislo1, cislo2, vysledok);
return 0;
}

Úloha číslo 3: Napíšte program, ktorý načíta celé čísla do poľa od používateľa, použije funkciu priemer na výpočet priemeru týchto čísel, ktorú vytvoríte a vypíše výsledok.
#include <stdio.h>
double priemer(int pole[], int dlzka) {
double suma = 0.0;
for (int i = 0; i < dlzka; i++) {
suma += pole[i];
}
return suma / dlzka;
}
int main() {
int data[100];
int dlzka;
printf("Zadajte počet čísel v poli: ");
scanf("%d", &dlzka);
printf("Zadajte čísla do poľa:\n");
for (int i = 0; i < dlzka; i++) {
scanf("%d", &data[i]);
}
double vysledok = priemer(data, dlzka);
printf("Priemer čísel v poli je %.2f\n", vysledok);
return 0;
}

Úloha 4: Napíšte program, ktorý načíta celé číslo n od používateľa, použije funkciu fibonacci na výpočet n-tého člena Fibonacciho postupnosti, ktorú vytvoríte a vypíše výsledok.
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int n;
printf("Zadajte n: ");
scanf("%d", &n);
printf("Fibonacciho postupnosť pre %d členov:\n", n);
for (int i = 0; i < n; i++) {
printf("%d ", fibonacci(i));
}
printf("\n");
return 0;
}