22
Γ7.4 Συναρτήσεις (Functions) Γ’ Λυκείου Κατεύθυνσης

Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Γ7.4 Συναρτήσεις (Functions)Γ’ Λυκείου Κατεύθυνσης

Page 2: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Εισαγωγή

● Τμηματικός προγραμματισμός (Modular programming) είναι μία τεχνική ανάπτυξης προγραμμάτων, της οποίας κύριο χαρακτηριστικό είναι η διάσπαση ενός προβλήματος σε πιο απλά τμήματα προγραμμάτων, έτσι ώστε να διευκολυνθεί η αποσφαλμάτωση και να μειωθεί η έκταση του κώδικά.

● Αυτά τα τμήματα κώδικά καλούνται υποπρογράμματα. Υποπρόγραμμα θεωρείται ένα αυτόνομο κομμάτι κώδικα, το οποίο εκτελεί ένα συγκεκριμένο έργο και ορίζεται ξεχωριστά από το κυρίως πρόγραμμα.

Page 3: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Ορισμός και κλήση συναρτήσεων

Η συνάρτηση (function) είναι ένας τύπος υποπρογράμματος που υπολογίζει και επιστρέφει μόνο μία τιμή στο κυρίως πρόγραμμα.

Page 4: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Ορισμός και κλήση συναρτήσεων

Για κάθε συνάρτηση πρέπει να ορίζουμε τα εξής:(α) Τύπος επιστρεφόμενης τιμής: Η συνάρτηση μπορεί να επιστρέψει όλους τους βασικούς τύπους που γνωρίζουμε (int, double, char, boolean), ακόμα και συμβολοσειρές (string). Αν η συνάρτηση δεν θα επιστρέφει κάποια τιμή, ορίζεται με τύπο void. Αν επιστρέφει κάποια τιμή, αυτή θα εμφανίζεται μετά τη λέξη return.(β) Όνομα συνάρτησης: Ισχύουν οι ίδιοι κανόνες ονοματολογίας με τις μεταβλητές.(γ) Παράμετροι: Μεταβλητές που επιτρέπουν το πέρασμα της τιμής τους από ένα τμήμα προγράμματος σε άλλο. Μία συνάρτηση μπορεί να έχει μηδέν ή περισσότερες παραμέτρους.

Page 5: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Ορισμός και κλήση συναρτήσεων

Στο πιο πάνω παράδειγμα η επικεφαλίδα (πρότυπο) της συνάρτησης είναι η εξής:

int add_2_nums(int a, int b){Από την επικεφαλίδα συμπεραίνουμε τα εξής:● Η συνάρτηση θα επιστρέφει έναν ακέραιο αριθμό γιατί είναι τύπου integer● Το όνομα της συνάρτησης είναι add_2_nums● Η συνάρτηση δέχεται δύο παραμέτρους (a, b) ως ακέραιες τιμές●

Η κλήση της συνάρτησης γίνεται στο κυρίως πρόγραμμα ως εξής:cout << add_2_nums(65,97); // Αποτέλεσμα: 162

Page 6: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.1

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

Λύση: https://ideone.com/4YVdCE

Page 7: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Εναλλακτικός ορισμός συναρτήσεων

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

Page 8: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Τοπικές (local) και καθολικές (global) μεταβλητές

● Μέσα σε μία συνάρτηση μπορούμε να δηλώσουμε τοπικές μεταβλητές. Οι τοπικές μεταβλητές μπορούν να χρησιμοποιηθούν μέσα σε μία δηλωμένη συνάρτηση, όμως δεν είναι προσβάσιμες από την κύρια συνάρτηση (main).

● Αντίθετα, μία καθολική μεταβλητή η οποία δηλώνεται εκτός της κύριας συνάρτησης, μπορεί να είναι προσβάσιμη από το κυρίως πρόγραμμα αλλά και από όσες συναρτήσεις ορίζονται σε αυτό.

Page 9: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Τοπικές (local) και καθολικές (global) μεταβλητές

#include <iostream>using namespace std;

int glob = 0; // Kαθολική (public)

int F(int x){ // Συνάρτηση

int num = 0; // Τοπική (local) glob += 10; // ΟΚ num = glob + x; // ΟΚ glob = val; // ΣΦΑΛΜΑreturn num;}

int main(){ // Κυρίως πρόγραμμα

int val = 0; // Τοπική (local)

cin >> val;

cout << num << endl; // ΣΦΑΛΜΑ

cout << x << endl; // ΣΦΑΛΜΑ

cout << glob << endl; // OK

cout << F(val) << endl;

return 0;}

ideone: https://ideone.com/CR76JK

Page 10: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα: Το πρόγραμμα αυτό βρίσκει το συνολικό άθροισμα των ψηφίων των μονάδων για άγνωστο πλήθος ακεραίων, καθώς και το πλήθος των ακεραίων. Κάνει χρήση συνάρτησης η οποία υπολογίζει το ψηφίο των μονάδων ενός ακεραίου. Η είσοδος τερματίζει όταν δοθεί ο αριθμός 0.

#include <iostream>using namespace std;

int cnt = 0; // Kαθολική (public)

int monades(int x) {

int num = x%10;// Τοπική (local) cnt++;return num;}

int main(){

int a, sum = 0;

cin >> a;

while(a!=0){

sum += monades(a);

cin >> a;

}

cout << sum << endl << cnt;

return 0;}

ideone: https://ideone.com/nqVWno

Page 11: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράμετροι τιμών (by value) και παράμετροι αναφοράς (by reference)

● Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν μόνο μία τιμή.

● Σε περίπτωση που θέλουμε η συνάρτησή μας να «επηρεάσει» περισσότερες από μία μεταβλητές, χρησιμοποιούμε την κλήση παραμέτρων με αναφορά.

● Με αυτό τον τρόπο περνάμε στη συνάρτηση τη διεύθυνση της μεταβλητής, με τη χρήση του τελεστή & και όχι την τιμή της.

Page 12: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράμετροι τιμών (by value) και παράμετροι αναφοράς (by reference)

int x = 5; // Δηλώνουμε μία μεταβλητή με όνομα x

int &y = x; // Δηλώνουμε το y σαν μεταβλητή αναφοράς της x

cout << y << endl; // 5 – Η τιμή της y είναι η ίδια με της x

cout << &y << endl; // 0x69fee8 (διεύθυνση μνήμης ίδια με την &x)

y = 10; // Αλλαγή της τιμής του y θα αλλάξει και την x

cout << x << endl; // 10 – Η τιμή της x έχει αλλάξει

Η θέση του τελεστή δεν παίζει κανέναν ρόλο. Όλες οι πιο κάτω εντολές είναι έγκυρες:

int &y1 = x; int& y2 = x; int & y3 = x;

Page 13: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράμετροι τιμών (by value) και παράμετροι αναφοράς (by reference)

void byvalue(int x){ // Τιμής

x = x + 1;

cout << x << endl;

}

void byreference(int &y){ // Αναφοράς

y = y + 1;

cout << y << endl;

}

int main() {

int num = 5;

byvalue(num); // 6

cout << num << endl; // 5

byreference(num); // 6

cout << num << endl; // 6

return 0;

}

Page 14: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.4

Να δημιουργήσετε πρόγραμμα το οποίο να καλεί μία συνάρτηση με το όνομα swap, η οποία να δέχεται δύο παραμέτρους αναφοράς και να αντιμεταθέτει τις τιμές τους. Το πρόγραμμα αρχικά θα διαβάζει δύο ακέραιους αριθμούς και θα τους αποθηκεύει στις μεταβλητές x και y. Στη συνέχεια, θα καλεί τη συνάρτηση swap η οποία θα δίνει στη μεταβλητή x την τιμή της μεταβλητής y και στην μεταβλητή y την τιμή της μεταβλητής x. Τέλος, να εμφανίζει τις τιμές των μεταβλητών στην οθόνη.

Παράδειγμα εισόδου

13 19

Παράδειγμα εξόδου

x=19 y=13 Λύση: https://ideone.com/3i3G4L

Page 15: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.5

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

Παράδειγμα εισόδου

10 5

Παράδειγμα εξόδου

Emvadon=50

Perimetros=30 Λύση: https://ideone.com/968lRc

Page 16: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.6

Με τη χρήση προκαταρκτικής εκτέλεσης, να παρουσιάσετε τα αποτελέσματα του προγράμματος.

Πρόγραμμα: https://ideone.com/2qfjpK

Page 17: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.6

Page 18: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

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

● Ένας πίνακας αποτελείται από περισσότερες από μία τιμές, οπότε για να περάσουμε έναν πίνακα σε μία συνάρτηση ως παράμετρο, πρέπει να γίνει κλήση της συνάρτησης με παράμετρο αναφοράς (δηλαδή να περάσουμε τη διεύθυνση του πίνακα).

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

Page 19: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.7

Να δημιουργήσετε πρόγραμμα το οποίο να χρησιμοποιεί τις συναρτήσεις fill για να γεμίζει και τη συνάρτηση print για να εμφανίζει έναν μονοδιάστατο πίνακα ακεραίων μεγέθους 20 θέσεων.

Λύση: https://ideone.com/qx2Y0x

Page 20: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.8

Να δημιουργήσετε πρόγραμμα το οποίο να υλοποιεί και να καλεί:(α) τη συνάρτηση read για να διαβάσει και να καταχωρίσει τους βαθμούς και τα ονόματα 25 μαθητών σε πίνακες τους οποίους θα δέχεται παραμετρικά(β) τη συνάρτηση average για να υπολογίσει και να εμφανίσει τον μέσο όρο των βαθμών. Η συνάρτηση θα δέχεται παραμετρικά τον πίνακα των βαθμών και θα επιστρέφει τον μέσο όρο στο κυρίως πρόγραμμα, όπου και θα εμφανίζεται με ένα δεκαδικό ψηφίο(γ) τη συνάρτηση max_grade για να βρει το όνομα του μαθητή με τον ψηλότερο βαθμό. Η συνάρτηση θα δέχεται παραμετρικά τους πίνακες των βαθμών και των ονομάτων και θα επιστρέφει στο κυρίως πρόγραμμα το όνομα του μαθητή με τον υψηλότερο βαθμό. Να θεωρήσετε ότι δεν θα υπάρχει ισοβαθμία βαθμών.

Λύση: https://ideone.com/xV0bZP

Page 21: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Αρχεία και συναρτήσεις

● Αν θέλουμε να χρησιμοποιήσουμε αρχεία σε συνδυασμό με συναρτήσεις, τότε οι εντολές που χρησιμοποιούμε για δημιουργία ροής ανάγνωσης (ifstream) και ροής εγγραφής (ofstream) θα πρέπει να δηλωθούν εκτός της κύριας συνάρτησης.

● Με αυτό τον τρόπο, οι εντολές αυτές θα είναι προσβάσιμες από όσες συναρτήσεις χρησιμοποιήσουμε στο πρόγραμμα.

Page 22: Γ7.4 Συναρτήσεις (Functions) · 2020-07-23 · Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν

Παράδειγμα 4.9

Να δημιουργήσετε πρόγραμμα το οποίο να:(α) χρησιμοποιεί τη συνάρτηση fill η οποία να δέχεται ως παράμετρο έναν πίνακα ακεραίων και να τον γεμίζει με τα περιεχόμενα του αρχείου numbers.txt. Το αρχείο numbers.txt θα αποτελείται από Ν (1<=Ν<=100), ακέραιους αριθμούς στο διάστημα [1…10000](β) χρησιμοποιεί τη συνάρτηση square η οποία να δέχεται παραμετρικά έναν ακέραιο αριθμό και να επιστρέφει true, αν ο αριθμός είναι τέλειο τετράγωνο ενός ακεραίου (π.χ. 16, 49), αλλιώς να επιστρέφει false(γ) χρησιμοποιεί τη συνάρτηση print η οποία να καταχωρίζει στο αρχείο squares.txt τα στοιχεία του πίνακα, τα οποία είναι τέλεια τετράγωνα ακέραιων αριθμών.

Λύση: https://ideone.com/hv25uE