ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Σχετικά έγγραφα
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολή if. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολές for, while, do-while Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Υπολογιστές Ι. Άδειες Χρήσης. Τύποι δεδομένων. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Μονοδιάστατοι πίνακες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

Υπολογιστές Ι. Άδειες Χρήσης. Συναρτήσεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στον Προγραμματισμό με C++

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Υπολογιστές Ι. Άδειες Χρήσης. Μεταβλητές και πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Διαδικαστικός Προγραμματισμός

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Ιστορία της μετάφρασης

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Αντικειμενοστραφής Προγραμματισμός

Γενικά Μαθηματικά Ι. Ενότητα 9: Κίνηση Σε Πολικές Συντεταγμένες. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Μικροβιολογία & Υγιεινή Τροφίμων

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Ηλεκτρονικοί Υπολογιστές

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Οντοκεντρικός Προγραμματισμός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Ηλεκτρονικοί Υπολογιστές I

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι χρειάζεται η εντολή if ; Εντολή if. Παράδειγμα #1. Παράδειγμα #1

Οντοκεντρικός Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Ηλεκτρονικοί Υπολογιστές

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εισαγωγή στον δομημένο προγραμματισμό

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Δομημένος Προγραμματισμός

Εισαγωγή στον Προγραμματισμό με C++

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 3 : Γλώσσες προγραμματισμού. Δρ.

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στον Προγραμματισμό με C++

Υπολογιστές Ι. Άδειες Χρήσης. Εντολή IF. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στον Προγραμματισμό με C++

Ηλεκτρονικοί Υπολογιστές

Οντοκεντρικός Προγραμματισμός

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραµµατιστικές Τεχνικές

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Υπολογιστές Ι. Άδειες Χρήσης. Πολυδιάστατοι πίνακες. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνεχείς τυχαίες μεταβλητές Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Προγραμματισμός Υπολογιστών με C++

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Εκκλησιαστικό Δίκαιο

Οντοκεντρικός Προγραμματισμός

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη

Μαθηματική Ανάλυση ΙI

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Προγραμματισμός Η/Υ. 6 η ενότητα: Συναρτήσεις. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνδυαστική Ανάλυση Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

Υπολογιστές Ι. Άδειες Χρήσης. Υποπρογράμματα. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

3 η ΕΝΟΤΗΤΑ Συναρτήσεις στο MATLAB

Δομημένος Προγραμματισμός

Γενικά Μαθηματικά Ι. Ενότητα 1: Συναρτήσεις και Γραφικές Παραστάσεις. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Γενικά Μαθηματικά Ι. Ενότητα 5: Παράγωγος Πεπλεγμένης Συνάρτησης, Κατασκευή Διαφορικής Εξίσωσης. Λουκάς Βλάχος Τμήμα Φυσικής

Δομημένος Προγραμματισμός

Τεχνικές Προγραμματισμού και Χρήση Λογισμικού Η/Υ στις Κατασκευές

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Ηλεκτρονικοί Υπολογιστές I

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι είναι ; Συναρτήσεις Αυτόνομα τμήματα κώδικα (υποπρογράμματα) που πραγματοποιούν μια καθορισμένη εργασία. Χρήσιμες για περιπτώσεις που ο ίδιος υπολογισμός επαναλαμβάνεται πολλές φορές μέσα στο πρόγραμμα. Βοηθούν στην τμηματική ανάπτυξη και έλεγχο μεγάλων προγραμμάτων. Παράδειγμα: οι ενσωματωμένες συναρτήσεις sin, cos, sqrt, abs, κλπ Κάθε συνάρτηση μπορεί να δέχεται ως είσοδο μία ή περισσότερες μεταβλητές και μπορεί να επιστρέφει ένα αποτέλεσμα (ή παραπάνω). Κάθε πρόγραμμα C++ αποτελείται από μία η περισσότερες συναρτήσεις. 1 2 Παράδειγμα #1 Παράδειγμα #1 Κατασκευάστε συνάρτηση που θα δέχεται εκατοστά και θα τα μετατρέπει σε ίντσες. Υπενθύμιση: 1 in = 2.54 cm double convert ( double cm ) double inch; inch = cm/2.54; return inch; Είσοδος double cm Συνάρτηση convert Έξοδος 3 4

Παράδειγμα #1 Παράδειγμα #1 (πλήρες) Η επικεφαλίδα της συνάρτησης: double convert ( double cm ) Τύπος αποτελέσματος Όνομα συνάρτησης Τύπος και όνομα μεταβλητών εισόδου (τυπικές παράμετροι) 5 #include <iostream> using namespace std; double convert ( double ); double a, b; cout << "Πόσα εκατοστά? "; cin >> a; // Πρωτότυπο συνάρτησης b = convert(a); // Κλήση συνάρτησης cout << a << " εκατοστά είναι " << b << " ίντσες \n"; double convert ( double cm ) double inch; inch = cm/2.54; return inch; // Κώδικας συνάρτησης 6 Η μορφή μιας συνάρτησης Η δομή ενός προγράμματος με συναρτήσεις τύπος αποτελέσματος όνομα συνάρτησης ( παράμετροι ) δηλώσεις τοπικών μεταβλητών εντολές return τιμή αποτελέσματος δηλώσεις #include πρωτότυπα συναρτήσεων εντολές συνάρτηση1 Το κυρίως πρόγραμμα main είναι μια συνάρτηση που καλείται από το λειτουργικό σύστημα. συνάρτηση2 7 8

Το πρωτότυπο της συνάρτησης Μεταβλητές της συνάρτησης Χρειάζεται έτσι ώστε ο μεταφραστής να γνωρίζει τι τύπου ορίσματα δέχεται η συνάρτηση και τι τύπου αποτέλεσμα επιστρέφει. Είναι ίδιο με την επικεφαλίδα της συνάρτησης χωρίς τα ονόματα των μεταβλητών. Τα πρωτότυπα γράφονται πριν από το main αλλά γενικά πριν χρησιμοποιήσουμε τις συναρτήσεις. Στο τέλος του πρωτότυπου μπαίνει ερωτηματικό. 9 Οι μεταβλητές που ορίζονται εσωτερικά σε μια συνάρτηση αποτελούν τοπικές μεταβλητές της συνάρτησης και δεν έχουν σχέση με μεταβλητές που έχουν το ίδιο όνομα σε άλλες συναρτήσεις. int k; double abc ( double x ) int k; Διαφορετικές μεταβλητές (με διαφορετική τιμή) 10 Τι τύπου αποτέλεσμα επιστρέφει μια συνάρτηση ; Κλήση και επιστροφή της συνάρτησης Μια συνάρτηση μπορεί να επιστρέψει αποτέλεσμα οποιουδήποτε από τους τύπους δεδομένων που χειρίζεται η γλώσσα (double, int, κλπ). Ο τερματισμός λειτουργίας της συνάρτησης και η επιστροφή του αποτελέσματος γίνεται με την εντολή return. Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να την καλέσουμε. Πχ. η συνάρτηση double convert ( double cm ) καλείται ως: a = convert(b) Οι μεταβλητές στην επικεφαλίδα της συνάρτησης (cm) ονομάζονται τυπικές παράμετροι. Οι μεταβλητές που δίνουμε κατά την κλήση (b) ονομάζονται πραγματικές παράμετροι ή ορίσματα της κλήσης. Το πλήθος και οι τύποι των ορισμάτων κατά την κλήση πρέπει να συμβαδίζουν με αυτά που δηλώθηκαν στο πρωτότυπο και την επικεφαλίδα της συνάρτησης. 11 Κάθε συνάρτηση μπορεί να κληθεί πολλές φορές με διαφορετικά ορίσματα. Πχ: x = convert(y) q = convert(3*w-t) 12

Κλήση και επιστροφή της συνάρτησης Παράδειγμα #2 Η κλήση και η επιστροφή της συνάρτησης γίνεται ως εξής: Οι πραγματικές παράμετροι αντιγράφονται στις τυπικές παραμέτρους. Πχ αν η συνάρτηση double convert ( double cm ) κληθεί ως: a = convert(b) τότε η τιμή της b αντιγράφεται στην cm. Ο τρόπος αυτός μεταβίβασης τιμών ονομάζεται μεταβίβαση κατ' αξία. Ο υπολογιστής εγκαταλείπει το σημείο που βρισκόταν και πηγαίνει στον κώδικα της συνάρτησης. Κατασκευάστε συνάρτηση που θα δέχεται ως είσοδο μια γωνία σε ακτίνια και θα την μετατρέπει σε μοίρες. Υπενθύμιση: Μοίρες = Ακτίνια*180/π Εκτελούνται οι εντολές της συνάρτησης και μόλις βρεθεί η εντολή return, ο υπολογιστής επιστρέφει στο σημείο από όπου κλήθηκε η συνάρτηση. 13 14 Παράδειγμα #2 Παράδειγμα #3 #include <iostream> #include <cmath> using namespace std; double moires ( double ); double a; cout << "Πόσα ακτίνια? "; cin >> a; // Πρωτότυπο cout << a << " ακτίνια είναι " << moires(a) << " μοίρες \n"; Υλοποιήστε σε C++ τη συνάρτηση: double moires ( double rad ) return rad*180/acos(-1.0); 15 16

Παράδειγμα #3 Παράδειγμα #4 double f ( double x ) return (7*x*x-3*x+6)/sqrt(1+x*x); Εμφανίστε στην οθόνη πίνακα τιμών της προηγούμενης συνάρτησης, από x=0 έως 10 ανά 0.1 17 18 Παράδειγμα #4 Παράδειγμα #4 #include <iostream> #include <cmath> #include <iomanip> using namespace std; double f ( double ); double x; cout << fixed; for (x=0; x<=10; x+=0.1) cout << setw(5) << setprecision(1) << x << " " << setw(10) << setprecision(7) << f(x) << endl; 19 Αποτέλεσμα στην οθόνη: 0.0 6.0000000 0.1 5.7413646 0.2 5.5696982 0.3 5.4883446 0.4 5.4965820 0.5 5.5901699 0.6 5.7623525 0.7 6.0049700 0.8 6.3094200 0.9 6.6673485 1.0 7.0710678 1.1 7.5137551 1.2 7.9895013 1.3 8.4932709 1.4 9.0208168 1.5 9.5685784 20

Συναρτήσεις που δεν επιστρέφουν αποτέλεσμα Παράδειγμα #5 Μια συνάρτηση μπορεί να μην επιστρέφει αποτέλεσμα. Λέμε ότι είναι συνάρτηση τύπου void. Μια συνάρτηση που δεν επιστρέφει αποτέλεσμα δεν καλείται με τον ίδιο τρόπο όπως οι άλλες συναρτήσεις, αλλά η κλήση της μοιάζει με εντολή. Κατασκευάστε συνάρτηση που θα δέχεται ως είσοδο έναν ακέραιο n και θα εμφανίζει στην οθόνη n φορές τη φράση: Κατανοώ τη γλώσσα C++ 21 22 Παράδειγμα #5 Συναρτήσεις χωρίς παραμέτρους #include <iostream> using namespace std; void katanoo ( int ); int k; cout << "Πόσες φορές? "; cin >> k; katanoo(k); void katanoo ( int n ) int i; for (i=1; i<=n; ++i) cout << "Κατανοώ τη γλώσσα C++ \n" // Πρωτότυπο συνάρτησης // Κλήση συνάρτησης // Κώδικας συνάρτησης 23 Υπάρχουν συναρτήσεις που εκτελούν μια συγκεκριμένη εργασία χωρίς να δέχονται παραμέτρους. 24

Παράδειγμα #6 Παράδειγμα #6 Κατασκευάστε συνάρτηση που θα υπολογίζει και θα επιστρέφει το λόγο της χρυσής τομής double golden ( ) return (sqrt(5.0)-1)/2; Το αντίστοιχο πρωτότυπο θα δηλωθεί ως: double golden ( void ); Η κλήση της συνάρτησης: a = golden(); 25 26 Παράδειγμα #7 Παράδειγμα #7 Κατασκευάστε συνάρτηση που θα δέχεται ως είσοδο τις τρεις καρτεσιανές συντεταγμένες ενός διανύσματος και θα υπολογίζει το μέτρο του. #include <iostream> #include <cmath> using namespace std; double metro ( double, double, double ); double x, y, z; cout << "Εισάγετε συντεταγμένες "; cin >> x >> y >> z; cout << "Το μέτρο είναι " << metro(x,y,z) << endl; 27 double metro ( double x, double y, double z) return sqrt(x*x+y*y+z*z); 28

Ποιος μπορεί να καλέσει μια συνάρτηση ; Παράδειγμα #8 Μια συνάρτηση μπορεί να κληθεί είτε από το κυρίως πρόγραμμα main ή από οποιαδήποτε άλλη συνάρτηση. Κατασκευάστε τη τη συνάρτηση double gonia ( double x1, double y1, double z1, double x2, double y2, double z2 z2 ) που θα υπολογίζει τη τη γωνία (σε μοίρες) μεταξύ δύο διανυσμάτων r 1, r 2 με με συντεταγμένες (x (x 1,y,y 1,z,z 1 ) και (x (x 2,y,y 2,z,z 2 ). ). Υπενθύμιση: 29 Κατασκευάστε πρώτα μια συνάρτηση για το εσωτερικό γινόμενο και χρησιμοποιείστε τις συναρτήσεις metro και moires που φτιάξαμε πριν. 30 Παράδειγμα #8 Παράδειγμα #8 double ginomeno ( double x1, double y1, double z1, double x2, double y2, double z2 ) return x1*x2 + y1*y2 + z1*z2; 31 double gonia ( double x1, double y1, double z1, double x2, double y2, double z2 ) double m1, m2; double g, t, phi, mphi; m1 = metro(x1,y1,z1); m2 = metro(x2,y2,z2); if ( m1*m2 == 0 ) mphi = 0; else g = ginomeno(x1,y1,z1,x2,y2,z2); t = g/(m1*m2); if ( t > 1 ) t = 1; if ( t < -1 ) t = -1; phi = acos(t); mphi = moires(phi); return mphi; 32

Παράδειγμα #8 Παράδειγμα #8 Τι χρειάζονται οι εντολές: if ( t > 1 ) t = 1; if ( t < -1 ) t = -1; Κάποιες φορές λόγω σφαλμάτων στρογγύλευσης μπορεί το t (δηλαδή το cosφ) να υπολογιστεί ως: 1.0000000000000001 Σε αυτή την περίπτωση η κλήση της συνάρτησης acos που ακολουθεί θα δώσει λάθος. #include <iostream> #include <cmath> using namespace std; double metro ( double,double,double ); double ginomeno ( double,double,double,double,double,double ); double gonia ( double,double,double,double,double,double ); double moires ( double ); double x1, y1, z1, x2, y2, z2; cout << "Εισάγετε συντεταγμένες "; cin >> x1 >> y1 >> z1 >> x2 >> y2 >> z2; 33 cout << "Η γωνία είναι " << gonia(x1,y1,z1,x2,y2,z2) << endl; 34 Παράδειγμα #8 Παράδειγμα #9# Πως καλούνται οι συναρτήσεις στο παράδειγμα. main gonia metro ginomeno moires Δίνεται η συνάρτηση Υπολογίστε μια προσέγγιση της πρώτης παραγώγου, χρησιμοποιώντας τον ορισμό χρησιμοποιώντας ένα μικρό h. h. Κατόπιν υπολογίστε την παράσταση 35 για οποιοδήποτε x ζητηθεί. 36

Παράδειγμα #9# Παράδειγμα #9# Θα κατασκευάσουμε τρεις συναρτήσεις: Για τη συνάρτηση f(x) double f ( double x ) Για την παράγωγο f'(x) double deriv ( double x ) Για την παράσταση Φ double phi ( double x ) double f ( double x ) return (x*x+2*x+6)/sqrt(1+x*x); double deriv ( double x ) double h; if ( x == 0 ) h = 1.0e-5; else h = 1.0e-5*x; return (f(x+h)-f(x-h))/(2*h); 37 38 Παράδειγμα #9# Παράδειγμα #9# double phi ( double x ) double fx, dx; fx = f(x); dx = deriv(x); return (2*fx+dx)/(3*fx-dx); Γιατί δεν γράψαμε το παρακάτω ; return (2*f(x)+deriv(x))/(3*f(x)-deriv(x)); #include <iostream> #include <cmath> using namespace std; double f ( double ); double deriv ( double ); double phi ( double ); double x; cout << "Ποιό x? "; cin >> x; 39 cout << phi(x) << endl; 40

Τοπικές και καθολικές μεταβλητές Δήλωση καθολικών μεταβλητών Κάθε συνάρτηση έχει τις δικές της μεταβλητές (τοπικές μεταβλητές). Οι τοπικές μεταβλητές ισχύουν μόνο μέσα στη συνάρτηση στην οποία δηλώθηκαν και για όσο λειτουργεί η συνάρτηση. Όταν η συνάρτηση τερματίσει τη λειτουργία της οι τοπικές μεταβλητές καταστρέφονται και χάνουν τα περιεχόμενά τους. Μπορούμε να δηλώσουμε μεταβλητές που δεν ανήκουν σε καμία συνάρτηση (καθολικές μεταβλητές). Οι καθολικές μεταβλητές μπορούν να χρησιμοποιηθούν από όλες τις συναρτήσεις και τα περιεχόμενά τους παραμένουν καθ' όλη τη διάρκεια του προγράμματος. 41 Οι καθολικές μεταβλητές δηλώνονται εκτός οποιασδήποτε συνάρτησης. #include <iostream> using namespace std; double x, y, z; εντολές double add ( double a, double b ) εντολές // Καθολικές μεταβλητές 42 Καθολικές μεταβλητές Αναδρομικότητα Εάν υπάρχει σε μια συνάρτηση δηλωμένη τοπική μεταβλητή με το ίδιο όνομα με κάποια καθολική μεταβλητή, τότε στη συνάρτηση αυτή χρησιμοποιείται η τοπική και όχι η καθολική μεταβλητή. Κατά συνέπεια η συνάρτηση αυτή δεν μπορεί να έχει πρόσβαση στην αντίστοιχη καθολική μεταβλητή. Με τη χρήση καθολικών μεταβλητών μπορούμε να δώσουμε μεταβιβάσουμε τιμές στις συναρτήσεις, κάτι όμως που αν γίνεται συστηματικά οδηγεί σε δυσνόητα προγράμματα με δυσκολία στην εκσφαλμάτωση. Μια συνάρτηση μπορεί να καλέσει το εαυτό της. Όταν συμβαίνει αυτό έχουμε μια αναδρομική κλήση της συνάρτησης. Αναδρομική κλήση μπορούμε να έχουμε όταν μια συνάρτηση καλέσει τον εαυτό της μέσω κάποιας άλλης συνάρτησης. Πχ Η συνάρτηση a καλεί την b Η συνάρτηση b καλεί την c Η συνάρτηση c καλεί την a Στην πραγματικότητα δεν καλείται πάλι η ίδια συνάρτηση, αλλά ένα δεύτερο (ή τρίτο ) αντίγραφό της, το οποίο δημιουργείται αυτόματα όταν χρειαστεί. 43 44

Παράδειγμα #10# Παράδειγμα #10# Κατασκευάστε τη συνάρτηση int parag ( int n ) που θα υπολογίζει το n παραγοντικό Με τον παραδοσιακό (όχι αναδρομικό τρόπο) int parag ( int n ) int p, k; p = 1; for (k=2; k<=n; ++k) p*=k; return p; 45 46 Παράδειγμα #10# Υπερφόρτωση συναρτήσεων Χρησιμοποιώντας αναδρομικότητα: Παρατηρούμε ότι n! = n (n-1)! int parag ( int n ) if ( n > 1 ) return n*parag(n-1); else return 1; 47 H C++ επιτρέπει τον ορισμό συναρτήσεων με το ίδιο όνομα, αλλά διαφορετικές παραμέτρους και λειτουργία, στο ίδιο πρόγραμμα. Η τεχνική αυτή ονομάζεται υπερφόρτωση συναρτήσεων. Οι γνωστές μαθηματικές συναρτήσεις είναι ήδη υπερφορτωμένες αφού μπορούν να κληθούν με ορίσματα τύπου float ή double. Τα αντίστοιχα πρωτότυπα για την sqrt θα ήταν: float sqrt ( float ) double sqrt ( double ) Κατά την κλήση της συνάρτησης, ανάλογα με τον τύπο των ορισμάτων ο μεταφραστής αποφασίζει ποια από τις διαφορετικές εκδοχές της συνάρτησης θα καλέσει στην πραγματικότητα. 48

Παράδειγμα #11 Παράδειγμα #11 Κατασκευάστε συνάρτηση η οποία θα υπολογίζει το υπόλοιπο της διαίρεσης του a από τον b. Η συνάρτηση θα πρέπει να καλείται είτε με ακέραια ορίσματα ή με πραγματικούς διπλής ακρίβειας. Θα κατασκευάσουμε δύο διαφορετικές συναρτήσεις με το ίδιο όνομα οι οποίες όμως θα δέχονται διαφορετικούς τύπους παραμέτρων. Για την περίπτωση ακέραιων int mod ( int a, int b ) return a % b; 49 50 Παράδειγμα #11 Τελεστής αλλαγής τύπου Για την περίπτωση πραγματικών διπλής ακρίβειας double mod ( double a, double b ) int p; double y; p = (int) (a/b); // Ακέραιο πηλίκο a/b y = a - p*b; // Το υπόλοιπο return y; Mε τον τελεστή (τύπος) μπροστά από μια παράσταση αλλάζουμε την παράσταση στον δεδομένο τύπο. Ο τύπος μπορεί να είναι int, float, double, char κλπ. Έτσι με τον τελεστή (int) αλλάζουμε μια παράσταση σε ακέραια. Τα δεκαδικά ψηφία αποκόπτονται. Η αλλαγή τύπου έχει υψηλότερη προτεραιότητα από τις πράξεις. Πχ. (int)x+0.5 είναι διαφορετικό από το (int)(x+0.5) Όταν αλλάζουμε μια παράσταση σε κατώτερο τύπο (πχ. από double σε float) χάνουμε σε ακρίβεια. 51 52

Παράδειγμα #11 Το κυρίως πρόγραμμα #include <iostream> using namespace std; int mod ( int, int ); double mod ( double, double ); int k; double d; k = mod(25,7); cout << k << endl; // Πρωτότυπα // Κλήση με ακέραιους d = mod(7.4,2.2); cout << d << endl; // Κλήση με double 53

Χρηματοδότηση Τέλος Ενότητας Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημείωμα Ιστορικού Εκδόσεων Έργου Σημειώματα Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1227.

Σημείωμα Αναφοράς Σημείωμα Αδειοδότησης Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης. «ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Συναρτήσεις I». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1227. Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.