Τύποι λειτουργιών καθορισμένων από τον χρήστη στον προγραμματισμό C

Σε αυτό το σεμινάριο, θα μάθετε για διαφορετικές προσεγγίσεις που μπορείτε να ακολουθήσετε για την επίλυση του ίδιου προβλήματος χρησιμοποιώντας συναρτήσεις.

Αυτά τα 4 προγράμματα παρακάτω ελέγχουν αν ο ακέραιος αριθμός που εισάγεται από τον χρήστη είναι πρωταρχικός αριθμός ή όχι.

Το αποτέλεσμα όλων αυτών των προγραμμάτων παρακάτω είναι το ίδιο και έχουμε δημιουργήσει μια συνάρτηση που καθορίζεται από το χρήστη σε κάθε παράδειγμα. Ωστόσο, η προσέγγιση που ακολουθήσαμε σε κάθε παράδειγμα είναι διαφορετική.

Παράδειγμα 1: Δεν διαβιβάστηκαν ορίσματα και καμία τιμή επιστροφής

 #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()συνάρτηση λαμβάνει είσοδο από τον χρήστη, ελέγχει αν είναι ένας πρωταρχικός αριθμός ή όχι και την εμφανίζει στην οθόνη.

Οι κενές παρενθέσεις στη checkPrimeNumber();δήλωση μέσα στη main()συνάρτηση υποδεικνύουν ότι δεν περνά κανένα όρισμα στη συνάρτηση.

Ο τύπος επιστροφής της συνάρτησης είναι void. Ως εκ τούτου, δεν επιστρέφεται καμία τιμή από τη συνάρτηση.

Παράδειγμα 2: Δεν πέρασαν ορίσματα αλλά τιμή επιστροφής

 #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; ) 

Οι κενές παρενθέσεις στη n = getInteger();δήλωση υποδεικνύουν ότι δεν περνά κανένα όρισμα στη συνάρτηση. Και, η τιμή που επιστρέφεται από τη συνάρτηση αντιστοιχεί στο n.

Εδώ, η getInteger()συνάρτηση λαμβάνει είσοδο από τον χρήστη και την επιστρέφει. Ο κωδικός για να ελέγξετε αν ένας αριθμός είναι πρωταρχικός ή όχι βρίσκεται μέσα στη main()συνάρτηση.

Παράδειγμα 3: Το επιχείρημα πέρασε αλλά καμία τιμή επιστροφής

 #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); ) 

Η ακέραια τιμή που εισάγει ο χρήστης μεταφέρεται στη checkPrimeAndDisplay()συνάρτηση.

Εδώ, η checkPrimeAndDisplay()συνάρτηση ελέγχει εάν το όρισμα που πέρασε είναι ένας πρώτος αριθμός ή όχι και εμφανίζει το κατάλληλο μήνυμα.

Παράδειγμα 4: Το επιχείρημα πέρασε και μια τιμή επιστροφής

 #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; ) 

Η είσοδος από το χρήστη μεταφέρεται στη checkPrimeNumber()συνάρτηση.

Η checkPrimeNumber()συνάρτηση ελέγχει εάν το διαβιβαζόμενο όρισμα είναι πρωταρχικό ή όχι.

Εάν το όρισμα που πέρασε είναι ένας πρωταρχικός αριθμός, η συνάρτηση επιστρέφει 0. Εάν το όρισμα που πέρασε είναι ένας μη πρωταρχικός αριθμός, η συνάρτηση επιστρέφει 1. Η τιμή επιστροφής εκχωρείται στη μεταβλητή flag

Ανάλογα με το αν η σημαία είναι 0 ή 1, εκτυπώνεται ένα κατάλληλο μήνυμα από τη main()λειτουργία.

Ποια προσέγγιση είναι καλύτερη;

Λοιπόν, εξαρτάται από το πρόβλημα που προσπαθείτε να λύσετε. Σε αυτήν την περίπτωση, είναι καλύτερο να περάσετε το όρισμα και να επιστρέψετε μια τιμή από τη συνάρτηση (παράδειγμα 4).

Μια συνάρτηση πρέπει να εκτελεί μια συγκεκριμένη εργασία. Η checkPrimeNumber()συνάρτηση δεν λαμβάνει είσοδο από τον χρήστη ούτε εμφανίζει το κατάλληλο μήνυμα. Ελέγχει μόνο εάν ένας αριθμός είναι πρωταρχικός ή όχι.

ενδιαφέροντα άρθρα...