Δομθμζνοσ Προγραμματιςμόσ Βαγγζλθσ Οικονόμου Εργαςτιριο 9
Συναρτιςεισ Αφαιρετικότθτα ςτισ διεργαςίεσ Συνάρτθςεισ Διλωςθ, Κλιςθ και Οριςμόσ Εμβζλεια Μεταβλθτών Μεταβίβαςθ παραμζτρων ςε ςυναρτιςεισ
Συναρτιςεισ Το όνομα μιασ ςυνάρτθςθσ το ςυναντάμε ςε ζνα πρόγραμμα ςε προτάςεισ τριών διαφορετικών μορφών: 1. πρόταςθ διλωςθσ τθσ ςυνάρτθςθσ 2. πρόταςθ κλιςθσ τθσ ςυνάρτθςθσ και 3. πρόταςθ οριςμοφ τθσ ςυνάρτθςθσ
Διλωςθ Συνάρτθςθσ Η πρόταςθ διλωςθσ προςδιορίηει τον τρόπο αναφοράσ ςτθ ςυνάρτθςθ. Γενικι μορφι: <τφποσ> <όνομα ςυνάρτηςησ>(<τφποσ1> [<όνομα παραμέτρου1>],,<τφποσn> [<όνομα παραμέτρουn>]); προςδιορίηει τον τφπο τθσ επιςτρεφόμενθσ τιμισ, το όνομα τθσ ςυνάρτθςθσ, τον αρικμό και τον τφπο των παραμζτρων και, προαιρετικά, τα ονόματα με τα οποία το ςώμα τθσ ςυνάρτθςθσ αναφζρεται ςτισ ειςόδουσ που δζχεται. Παράδειγμα: int max(int a,int b); void draw_circle(double x, double y, double r); Δομ. Προγραμ. - Συναρτιςεισ - Διάλεξθ 6 4
Κλιςθ Συνάρτθςθσ Για να ενεργοποιιςουμε μια ςυνάρτθςθ τθν καλοφμε. Ζχετε ιδθ καλζςει τισ ςυναρτιςεισ printf και scanf τθσ βαςικισ βιβλιοκικθσ. H κλιςθ μιασ ςυνάρτθςθσ που δεν επιςτρζφει τιμι αποτελείται από το όνομα τθσ ςυνάρτθςθσ ακολουκοφμενο από τθ λίςτα των παραμζτρων, τα οποία καλοφνται ορίςματα Γενικι μορφι: <όνομα ςυνάρτηςησ>(όριςμα1, όριςμα2,, όριςμα Ν); Οι παρενκζςεισ είναι απαραίτθτεσ ακόμθ και όταν δεν υπάρχουν ορίςματα, για να γνωρίηει ο μεταγλωττιςτισ ότι το όνομα είναι ςυνάρτθςθ και όχι μεταβλθτι. Δομ. Προγραμ. - Συναρτιςεισ - Διάλεξθ 6 5
Κλιςθ Συνάρτθςθσ Παράδειγμα: draw_circle(a/2.0, 2.0*b, c/3.0); Κλιςθ ςυνάρτθςθσ που επιςτρζφει τιμι: <όνομα μεταβλητήσ> = <όνομα ςυνάρτηςησ>(όριςμα1, όριςμα2,, όριςμα Ν); Οι ςυναρτιςεισ οι οποίεσ επιςτρζφουν τιμζσ αποτελοφν τελεςτζουσ ςε ςφνκετεσ εκφράςεισ Παράδειγμα: max_num = max(num1,num2); result = num1 + max(num2,num3); printf( Ο μεγαλφτεροσ αρικμόσ είναι: %d\n, max(num1,num2) ); Δομ. Προγραμ. - Συναρτιςεισ - Διάλεξθ 6 6
Οριςμόσ Συνάρτθςθσ Το ςώμα των ςυναρτιςεων printf και scanf τθσ βαςικισ βιβλιοκικθσ βρίςκεται ςε ζνα από τα αρχεία.lib που τθν αποτελοφν. Αντίκετα, για κάκε δικι μασ ςυνάρτθςθ, κα πρζπει να ορίςουμε το ςώμα τθσ. Ο οριςμόσ μιασ ςυνάρτθςθσ αποτελείται από το πρωτότυπο τθσ ςυνάρτθςθσ ακολουκοφμενο από το ςφνολο των προτάςεων που επιτελοφν το ζργο τθσ ςυνάρτθςθσ Δομ. Προγραμ. - Συναρτιςεισ - Διάλεξθ 6 7
Οριςμόσ Συνάρτθςθσ Παράδειγμα: Ο οριςμόσ τθσ ςυνάρτθςθσ area που υπολογίηει τθν επιφάνεια ορκογωνίου. float area(float width, float height) { float result; result = width * height; } return(result); Δομ. Προγραμ. - Συναρτιςεισ - Διάλεξθ 6 8
Εμβζλεια Παραμζτρων Οι κανόνεσ εμβζλειασ τουσ προςδιορίηουν το τμιμα του πθγαίου κώδικα ςτο οποίο ζνα όνομα είναι ενεργό ι ορατό. Εμβέλεια προγράμματοσ: Μεταβλθτζσ με εμβζλεια προγράμματοσ είναι γνωςτζσ και ςαν γενικζσ ι κακολικζσ (global) μεταβλθτζσ. Εμβέλεια αρχείου: Μεταβλθτι με εμβζλεια αρχείου, είναι ορατι μόνο ςτο αρχείο που δθλώνεται και μάλιςτα από το ςθμείο τθσ διλωςισ τθσ και κάτω Εμβέλεια ςυνάρτηςησ: Προςδιορίηει τθν ορατότθτα του ονόματοσ από τθν αρχι τθσ ςυνάρτθςθσ μζχρι το τζλοσ τθσ Εμβέλεια μπλοκ (block): Προςδιορίηει τθν ορατότθτα από το ςθμείο διλωςθσ μζχρι το τζλοσ του μπλοκ ςτο οποίο δθλώνεται. Το μπλοκ είναι ζνα ςφνολο από προτάςεισ που περικλείονται ςε αγκφλεσ. Δομ. Προγραμ. - Συναρτιςεισ - Διάλεξθ 6 9
Άςκθςθ 1 Να δθμιουργθκεί ζνα πρόγραμμα όπου κα δίνονται δφο ακζραιοι από το πλθκτρολόγιο και κα τυπώνει ςτθν οκόνθ τθν μεγαλφτερθ τιμι. Η εφρεςθ του μεγαλφτερου ακεραίου να γίνεται με τθν κλιςθ τθσ ςυνάρτθςθσ max τθν οποία κα υλοποιιςετε. Η ςυνάρτθςθ max κα δζχεται ωσ ορίςματα δφο ακεραίουσ και κα επιςτρζφει τθν μεγαλφτερθ τιμι.
Άςκθςθ 2 Να γραφεί ςυνάρτθςθ όπου κα δζχεται ώσ όριςμα ζνα ακζραιο και κα τυπώνει ζνα μινυμα εάν ο ακζραιοσ είναι κετικόσ ι αρνθτικόσ. Πχ. αν περάςουμε ςτθν ςυνάρτθςθ ωσ όριςμα το -3 κα τυπώνει το μινυμα arnitikos akeraios ςτθν οκόνθ. Ζπειτα να γίνει κλιςθ τθσ ςυνάρτθςθσ ςτθν main ςυνάρτθςθ με ορίςματα τθσ επιλογισ ςασ.
Άςκθςθ 3 Να δθμιουργθκεί ζνα πρόγραμμα όπου κα υπολογίηει το άκροιςμα όλων των ακεραίων από το 1 εώσ το Ν και κα το τυπώνει ςτθν οκόνθ. Ο ακζραιοσ Ν κα δίνεται από το πλθκτρολόγιο. Το άκροιςμα κα υπολογίηεται με τθν χριςθ τθσ ςυνάρτθςθσ sum. Η ςυνάρτθςθ sum κα δζχεται ωσ όριςμα ζνα ακζραιο (πχ. Κ) και κα επιςτρζφει το άκροιςμα 1+2+3+...+ Κ (δθλ. από το 1 εώσ το Κ).