Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί Ενότητας Εξοικείωση με την έννοια της συνάρτησης Ικανότητα στην δημιουργία και χρήση συναρτήσεων σε προγράμματα 4
Περιεχόμενα Βιβλιοθήκες έτοιμων συναρτήσεων. Δήλωση και ορισμός συνάρτησης. Το πρωτότυπο της συνάρτησης. Επιστρεφόμενος τύπος, ο τύπος void. Η εντολή return. Ορίσματα και παράμετροι. Κλήση συνάρτησης by value και by reference. 5
Συναρτήσεις Μια συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα. Συνήθως εκτελεί μια συγκεκριμένη λειτουργία ή υπολογισμό. Μπορεί να επιστρέφει κάποια τιμή, μπορεί όμως και όχι. Αποτελούν τη βάση του δομημένου προγραμματισμού. 6
Δήλωση και ορισμός συνάρτησης Το πρωτότυπο της συνάρτησης. Η δήλωση μιας συνάρτησης μπορεί να γίνει μέσω του πρωτοτύπου της. Σε μεγάλα προγράμματα, τα πρωτότυπα των συναρτήσεων δηλώνονται σε χωριστό αρχείο (ή αρχεία), με επέκταση ονόματος.h (αρχεία επικεφαλίδας ή header files). Η συμπερίληψη αρχείων επικεφαλίδας σε ένα πρόγραμμα γίνεται με την οδηγία: #include. 7
Επιστρεφόμενος τύπος, ο τύπος void Η εντολή return. Μια συνάρτηση μπορεί να επιστρέψει μία, το πολύ, τιμή. Επομένως, επιστρέφει μία ή καμία τιμή. Αν δεν επιστρέφει τιμή, δηλώνεται σαν τύπου void. 8
Ορίσματα και παράμετροι Μέσα στις παρενθέσεις μιας συνάρτησης δηλώνουμε τις παραμέτρους της. Οι παράμετροι είναι μεταβλητές. Οι παράμετροι πρέπει να χωρίζονται μεταξύ τους με κόμματα. Κάθε παράμετρος πρέπει να συνοδεύεται από τον τύπο της, χωριστά. Καλούμε μια συνάρτηση με το όνομά της. Μέσα στις παρενθέσεις γράφουμε τόσες τιμές/μεταβλητές, όσοι και οι παράμετροι. Αυτά ονομάζονται ορίσματα. Οι τιμές των μεταβλητών αντιγράφονται στις αντίστοιχες παραμέτρους. 9
Κλήση συνάρτησης by value Στην κλήση κατ αξία στέλνονται στη συνάρτηση οι τιμές των ορισμάτων. Δηλαδή έχουμε αντιγραφή τιμών από τα ορίσματα στις παραμέτρους. Επομένως, τυχόν αλλαγές στις τιμές των παραμέτρων όσο εκτελείται η συνάρτηση, ΔΕΝ επηρεάζουν τα ορίσματα 10
Κλήση συνάρτησης by reference Στην κλήση κατ αναφορά στέλνονται στη συνάρτηση οι διευθύνσεις των ορισμάτων. Η συνάρτηση έχει πρόσβαση στα ορίσματα και τις τιμές τους. Επομένως, τυχόν αλλαγές στις τιμές των παραμέτρων όσο εκτελείται η συνάρτηση, ΕΠΗΡΕΑΖΟΥΝ τα ορίσματα). Για να επιτρέπει μια συνάρτηση «κλήση κατ αναφορά», πρέπει οι παράμετροί της να είναι δηλωμένοι σαν δείκτες, ώστε να δέχονται διευθύνσεις. 11
Μεταβλητές Οι μεταβλητές χωρίζονται σε 2 κατηγορίες, ανάλογα με την εμβέλειά τους: στις τοπικές μεταβλητές (local variables) στις καθολικές μεταβλητές (global variables). Οι μεταβλητές που δηλώνονται μέσα σε μια συνάρτηση είναι τοπικές. Μια τέτοια μεταβλητή χρησιμοποιείται μόνο μέσα στη συνάρτηση όπου δηλώθηκε. Οι μεταβλητές που δηλώνονται έξω από τις συναρτήσεις είναι καθολικές. Μια τέτοια μεταβλητή χρησιμοποιείται μέσα σε κάθε συνάρτηση του προγράμματος, μετά από το σημείο που δηλώθηκε. 12
Πίνακες Υπάρχει περίπτωση να θέλουμε να «περάσουμε» τα περιεχόμενα ενός πίνακα σε μια συνάρτηση για να τα επεξεργαστεί. Ουσιαστικά εκείνο που περνάμε είναι η διεύθυνση του πίνακα, μόνο. Δηλώνουμε τον πίνακα σαν παράμετρο, παραλείποντας το μέγεθός του. Επειδή στη συνάρτηση μεταβιβάζεται η διεύθυνση του πίνακα: έχουμε κλήση κατ αναφορά. 13
Παράμετροι στην main() Υπάρχουν προγράμματα στα οποία μπορούμε να δώσουμε δεδομένα μαζί με την εντολή εκκίνησής τους. Η μεταβλητή argc περιέχει το πλήθος των ορισμάτων που πληκτρολογήσαμε στη γραμμή εντολών. Η παράμετρος argv είναι ένας πίνακας δεικτών, που δείχνουν προς τα ορίσματα της γραμμής εντολών. 14
Αναδρομική (recursive) συνάρτηση Μέσα σε μια συνάρτηση μπορούμε να καλέσουμε μια άλλη συνάρτηση. Μπορούμε μέσα σε συνάρτηση να καλέσουμε τον εαυτό της. Τότε η συνάρτηση αποκαλείται αναδρομική (recursive). 15
Βιβλιογραφία Συνδουκάς Δημήτρης 2007, Εισαγωγή στη γλώσσα προγραμματισμού C, Εσωτερική έκδοση του ΤΕΙ Χατζηγιαννάκης Ν. Μ., Η Γλώσσα C σε βάθος (4η έκδοση), Εκδόσεις Κλειδάριθμος, 2012, ISBN: 978-960-461-498-1. Τσελίκης Γ. Σ., Τσελίκας Ν. Δ., C: Aπό τη Θεωρία στην Εφαρμογή, Εκδότης: Νικόλαος Τσελίκας, 2012, ISBN: 978-960-93-1961-4. Schildt H., Οδηγός της C (3η έκδοση), Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2000, ISBN: 978-960-512-228-7. Zhang T., Μάθετε τη C σε 24 Ώρες, Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2000, ISBN: 960-512-233-2. Aitken Jones, Πλήρες Εγχειρίδιο της C, Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2006, ISBN: 978-960-512-491-5. 16
Τέλος Ενότητας
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 18
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 19