V tomto kurzu se dozvíte o různých přístupech, které můžete použít k řešení jednoho problému pomocí funkcí.
Pro lepší pochopení argumentů a návrat ve funkcích lze uživatelem definované funkce kategorizovat jako:
- Funkce bez argumentu a bez návratové hodnoty
- Funkce bez argumentu, ale s návratovou hodnotou
- Funkce s argumentem, ale bez návratové hodnoty
- Funkce s argumentem a návratovou hodnotou
Zvažte situaci, ve které musíte zkontrolovat prvočíslo. Tento problém je níže vyřešen vytvořením uživatelem definované funkce 4 různými způsoby, jak je uvedeno výše.
Příklad 1: Žádné předané argumenty a žádná návratová hodnota
# include using namespace std; void prime(); int main() ( // No argument is passed to prime() prime(); return 0; ) // Return type of function is void because value is not returned. void prime() ( int num, i, flag = 0; cout <> num; for(i = 2; i <= num/2; ++i) ( if(num % i == 0) ( flag = 1; break; ) ) if (flag == 1) ( cout << num << " is not a prime number."; ) else ( cout << num << " is a prime number."; ) )
Ve výše uvedeném programu prime()
je volán z main () bez argumentů.
prime()
vezme od uživatele kladné číslo a zkontroluje, zda je číslo prvočíslo nebo ne.
Protože návratový typ prime()
je void
, z funkce se nevrátí žádná hodnota.
Příklad 2: Nebyly předány žádné argumenty, ale návratová hodnota
#include using namespace std; int prime(); int main() ( int num, i, flag = 0; // No argument is passed to prime() num = prime(); for (i = 2; i <= num/2; ++i) ( if (num%i == 0) ( flag = 1; break; ) ) if (flag == 1) ( cout< n; return n; )
Ve výše uvedeném programu je prime()
funkce volána z main()
bez argumentů.
prime()
vezme od uživatele kladné celé číslo. Protože návratový typ funkce je int
, vrátí zadané číslo od uživatele zpět do volající main()
funkce.
Poté, zda je číslo prvočíslo nebo ne, je zaškrtnuto v samotném main () a vytištěno na obrazovku.
Příklad 3: Argumenty prošly, ale žádná návratová hodnota
#include using namespace std; void prime(int n); int main() ( int num; cout <> num; // Argument num is passed to the function prime() prime(num); return 0; ) // There is no return value to calling function. Hence, return type of function is void. */ void prime(int n) ( int i, flag = 0; for (i = 2; i <= n/2; ++i) ( if (n%i == 0) ( flag = 1; break; ) ) if (flag == 1) ( cout << n << " is not a prime number."; ) else ( cout << n << " is a prime number."; ) )
Ve výše uvedeném programu je kladné číslo nejprve vyžádáno od uživatele, které je uloženo v proměnné num.
Potom se num předá prime()
funkci, kde se zkontroluje a vytiskne, zda je číslo prvočíslo nebo ne.
Protože návratový typ prime()
je a void
, z funkce se nevrátí žádná hodnota.
Příklad 4: Předané argumenty a návratová hodnota.
#include using namespace std; int prime(int n); int main() ( int num, flag = 0; cout <> num; // Argument num is passed to check() function flag = prime(num); if(flag == 1) cout << num << " is not a prime number."; else cout<< num << " is a prime number."; return 0; ) /* This function returns integer value. */ int prime(int n) ( int i; for(i = 2; i <= n/2; ++i) ( if(n % i == 0) return 1; ) return 0; )
Ve výše uvedeném programu je kladné celé číslo požadováno od uživatele a uloženo v proměnné num
.
Poté num
je předán funkci, prime()
kde je zaškrtnuto, zda je číslo prvočíslo nebo ne.
Protože návratový typ prime()
je int
, je 1 nebo 0 vrácena main()
volající funkci. Pokud je číslo prvočíslo, vrátí se 1. Pokud ne, vrátí se 0.
Zpět ve main()
funkci se vrácená 1 nebo 0 uloží do příznaku proměnné a odpovídající text se vytiskne na obrazovku.
Která metoda je lepší?
Všechny čtyři výše uvedené programy poskytují stejný výstup a všechny jsou technicky správný program.
Neexistuje žádné tvrdé a rychlé pravidlo, která metoda by měla být zvolena.
Konkrétní metoda je vybrána v závislosti na situaci a způsobu, jakým chcete problém vyřešit.