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

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

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

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

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

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

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

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

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

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

Συναρτήσεις και διαδικασίες

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

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

Εργαστήριο 9 Συναρτήσεις στη PASCAL. Η έννοια του κατακερματισμού. Συναρτήσεις. Σκοπός

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

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

Κλάσεις και αντικείμενα #include <iostream.h<

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Εντολές επανάληψης Εντολές επανάληψης while for do-while ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Παράδειγμα #1 Εντολή while

Δομημένος Προγραμματισμός (ΤΛ1006)

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός ΙI (Θ)

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι είναι μια συνάρτηση; ΣΥΝΑΡΤΗΣΕΙΣ. Δήλωση συνάρτησης sq. Παράδειγμα συνάρτησης: υπολογισμός τετραγώνου

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

Η βασική συνάρτηση προγράμματος main()

Η γλώσσα προγραμματισμού C

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

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κεφάλαιο 10. Ερωτήσεις ανάπτυξης

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Εισαγωγή στην πληροφορική

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι χρειάζεται η εντολή DO ; ΕΠΑΝΑΛΗΨΕΙΣ ΕΝΤΟΛΗ DO. Όταν απαιτείται να εκτελεστεί πολλές φορές το ίδιο τμήμα ενός προγράμματος.

Υπερφόρτωση τελεστών

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

Κεφάλαιο 10 ο Υποπρογράµµατα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

3 Αλληλεπίδραση Αντικειμένων

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

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

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

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

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Δομές Επανάληψης. Εισαγωγή στη C++

Ανάπτυξη και Σχεδίαση Λογισμικού

Τελικό τεστ - απαντήσεις

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

8. ΠΙΝΑΚΕΣ (ARRAYS) (Πρόχειρο σχέδιο - Μαθήµατος 5) //26. Array.cpp #include <iostream> using namespace std;

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Χωρική Βάση δεδοµένων Autocad

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

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

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

Συναρτήσεις και Πίνακες

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Βασικές Αρχές Προγραμματισμού

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Ηβασικήσυνάρτηση προγράμματος main()

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Εισαγωγή στη γλώσσα προγραμματισμού C++

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Β7.1.4 Δομές Επανάληψης. Β Λυκείου Κατεύθυνσης

Γλώσσες Προγραμματισμού

Συναρτήσεις. Υποπρόγραμμα

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Transcript:

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι είναι ; Συναρτήσεις Αυτόνομα τμήματα κώδικα (υποπρογράμματα) που πραγματοποιούν μια καθορισμένη εργασία. Χρήσιμες για περιπτώσεις που ο ίδιος υπολογισμός επαναλαμβάνεται πολλές φορές μέσα στο πρόγραμμα. Βοηθούν στην τμηματική ανάπτυξη και έλεγχο μεγάλων προγραμμάτων. Παράδειγμα: οι ενσωματωμένες συναρτήσεις 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 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 <cmath> 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 <cmath> #include <iomanip> 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 Συναρτήσεις χωρίς παραμέτρους 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 <cmath> 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 <cmath> 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 <cmath> double f ( double ); double deriv ( double ); double phi ( double ); double x; cout << "Ποιό x? "; cin >> x; 39 cout << phi(x) << endl; 40

Τοπικές και καθολικές μεταβλητές Δήλωση καθολικών μεταβλητών Κάθε συνάρτηση έχει τις δικές της μεταβλητές (τοπικές μεταβλητές). Οι τοπικές μεταβλητές ισχύουν μόνο μέσα στη συνάρτηση στην οποία δηλώθηκαν και για όσο λειτουργεί η συνάρτηση. Όταν η συνάρτηση τερματίσει τη λειτουργία της οι τοπικές μεταβλητές καταστρέφονται και χάνουν τα περιεχόμενά τους. Μπορούμε να δηλώσουμε μεταβλητές που δεν ανήκουν σε καμία συνάρτηση (καθολικές μεταβλητές). Οι καθολικές μεταβλητές μπορούν να χρησιμοποιηθούν από όλες τις συναρτήσεις και τα περιεχόμενά τους παραμένουν καθ' όλη τη διάρκεια του προγράμματος. 41 Οι καθολικές μεταβλητές δηλώνονται εκτός οποιασδήποτε συνάρτησης. 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 Το κυρίως πρόγραμμα 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