U ovom vodiču naučit ćete o različitim pristupima koje možete poduzeti za rješavanje istog problema pomoću funkcija.
Ova 4 programa u nastavku provjeravaju je li cijeli broj koji je korisnik unijeo prost broj ili nije.
Izlaz svih ovih programa u nastavku je isti, a mi smo u svakom primjeru stvorili korisnički definiranu funkciju. Međutim, pristup koji smo zauzeli u svakom primjeru je različit.
Primjer 1: Nema proslijeđenih argumenata i nema povratne vrijednosti
#include void checkPrimeNumber(); int main() ( checkPrimeNumber(); // argument is not passed return 0; ) // return type is void meaning doesn't return any value void checkPrimeNumber() ( int n, i, flag = 0; printf("Enter a positive integer: "); scanf("%d",&n); for(i=2; i <= n/2; ++i) ( if(n%i == 0) ( flag = 1; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); )
checkPrimeNumber()
Funkcija uzima ulaz od korisnika, provjerava da li je prost broj ili ne i prikazuje ga na zaslonu.
Prazne zagrade u checkPrimeNumber();
izrazu unutar main()
funkcije ukazuju da se funkciji ne prosljeđuje nijedan argument.
Povratni tip funkcije je void
. Stoga se funkcija ne vraća vrijednosti.
Primjer 2: Nisu proslijeđeni argumenti, već povratna vrijednost
#include int getInteger(); int main() ( int n, i, flag = 0; // no argument is passed n = getInteger(); for(i=2; i<=n/2; ++i) ( if(n%i==0)( flag = 1; break; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); return 0; ) // returns integer entered by the user int getInteger() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); return n; )
Prazne zagrade u n = getInteger();
izrazu ukazuju da se funkciji ne prosljeđuje nijedan argument. I, vrijednost vraćena iz funkcije dodjeljuje se n.
Ovdje getInteger()
funkcija uzima ulaz od korisnika i vraća ga. Kôd za provjeru je li broj prost ili ne nalazi se unutar main()
funkcije.
Primjer 3: Argument je proslijeđen, ali nema povratne vrijednosti
#include void checkPrimeAndDisplay(int n); int main() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the function checkPrimeAndDisplay(n); return 0; ) // return type is void meaning doesn't return any value void checkPrimeAndDisplay(int n) ( int i, flag = 0; for(i=2; i <= n/2; ++i) ( if(n%i == 0)( flag = 1; break; ) ) if(flag == 1) printf("%d is not a prime number.",n); else printf("%d is a prime number.", n); )
Cjelobrojna vrijednost koju je korisnik unio prenosi se u checkPrimeAndDisplay()
funkciju.
Ovdje checkPrimeAndDisplay()
funkcija provjerava je li prosljeđeni argument prost broj ili ne i prikazuje odgovarajuću poruku.
Primjer 4: Argument proslijeđen i povratna vrijednost
#include int checkPrimeNumber(int n); int main() ( int n, flag; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the checkPrimeNumber() function // the returned value is assigned to the flag variable flag = checkPrimeNumber(n); if(flag == 1) printf("%d is not a prime number",n); else printf("%d is a prime number",n); return 0; ) // int is returned from the function int checkPrimeNumber(int n) ( int i; for(i=2; i <= n/2; ++i) ( if(n%i == 0) return 1; ) return 0; )
Ulaz od korisnika prenosi se u checkPrimeNumber()
funkciju.
Na checkPrimeNumber()
funkcija provjerava je li prošao argument premijera ili ne.
Ako je proslijeđeni argument prost broj, funkcija vraća 0. Ako je prosljeđeni argument ne-prost broj, funkcija vraća 1. Vrijednost povrata dodjeljuje se varijabli zastave.
Ovisno o tome je li zastavica 0 ili 1, iz main()
funkcije se ispisuje odgovarajuća poruka .
Koji je pristup bolji?
Pa, to ovisi o problemu koji pokušavate riješiti. U ovom je slučaju bolje prosljeđivanje argumenta i vraćanje vrijednosti iz funkcije (primjer 4).
Funkcija treba izvoditi određeni zadatak. checkPrimeNumber()
Funkcija nije se ulaz od korisnika niti prikazuje odgovarajuću poruku. Provjerava samo je li broj prost ili nije.