Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

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

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

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

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

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

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

Διοικητική Λογιστική

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

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

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Πληροφορική ΙΙ Θεματική Ενότητα 12

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Διδακτική Πληροφορικής

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

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

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

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

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

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

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

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

Διοικητική Λογιστική

Κβαντική Επεξεργασία Πληροφορίας

Εισαγωγή στους Η/Υ. Ενότητα 2α: Χάρτης Karnaugh (Βοηθητικό υλικό)

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

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

Ευφυής Προγραμματισμός

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

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Εισαγωγή στους Αλγορίθμους

Βάσεις Περιβαλλοντικών Δεδομένων

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Μηχανολογικό Σχέδιο Ι

Τεχνικό Σχέδιο - CAD

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

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

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

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

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

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

Βέλτιστος Έλεγχος Συστημάτων

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

Διδακτική Πληροφορικής

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

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

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

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

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

Κβαντική Επεξεργασία Πληροφορίας

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Τεχνικό Σχέδιο - CAD

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

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

Εισαγωγή στους Η/Υ. Ενότητα 5α: Λειτουργικά Συστήματα ΙΙ (Παραδείγματα Διαδρομών)

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

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

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

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

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

Διδακτική Πληροφορικής

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

Διαχείριση Πολιτισμικών Δεδομένων

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

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Εννοιες και Παράγοντες της Ψηφιακής Επεξεργασίας Εικόνας

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Media Monitoring. Ενότητα 6: Δημιουργία Βάσης Δεδομένων στο SPSS. Σταμάτης Πουλακιδάκος Σχολή ΟΠΕ Τμήμα ΕΜΜΕ

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

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

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

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Διδακτική των εικαστικών τεχνών Ενότητα 1

Διδακτική Πληροφορικής

Transcript:

Προγραμματισμός Η/Υ Ενότητα 7: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Σκοποί ενότητας Κατανόηση του ορισμού και της κλήση των συναρτήσεων Κατανόηση των εννοιών της εμβέλειας και της αναδρομικότητας Κατανόηση των κανόνων εμβέλειας ενός κώδικα και της διάρκειας των μεταβλητών 2

Περιεχόμενα ενότητας Περί συναρτήσεων (βλ. ενότητα #3) Η έννοια της εμβέλειας Διάρκεια μεταβλητών Μεταβίβαση παραμέτρων Η έννοια της αναδρομικότητας 3

Μέρος 1 ο Περί συναρτήσεων

Περί συναρτήσεων Δήλωση, ορισμός και κλήση συναρτήσεων

Δήλωση (ή πρωτότυπο) συνάρτησης Προσδιορίζει τον τρόπο αναφοράς σε αυτή (διεπαφή της συνάρτησης) Γενική μορφή <τύπος> <όνομα_συνάρτησης>(<τύπος_1> [<όνομα παραμέτρου_1>],, <τύπος_ν> [<όνομα παραμέτρου_ν>]); το όνομα του τύπου της επιστρεφόμενης τιμής της συνάρτησης το όνομα του τύπου της παραμέτρου Ν τυπικά ορίσματα (formal arguments) Παραδείγματα int max(int a, int b); void draw_circle(double x, double y, double r); 6

Ορισμός συνάρτησης Γενική μορφή τύπος_επιστρεφόμενης_τιμής όνομα_συνάρτησης (λίστα_παραμέτρων) { δηλώσεις τοπικών μεταβλητών προτάσεις } 7

Ορισμός συνάρτησης Παράδειγμα float area(float width, float length) { float result; result = width * length; return(result); } τυπικά ορίσματα (formal arguments) τοπική μεταβλητή (local variable) επιστροφή του ελέγχου (αλλά και της τιμής της result) στη συνάρτηση που κάλεσε την area 8

Κλήση συνάρτησης Κλήση συνάρτησης που δεν επιστρέφει τιμή <όνομα_συνάρτησης>(όρισμα_1, όρισμα_2,, όρισμα_ν); Παράδειγμα πραγματικά ορίσματα (actual arguments) draw_circle(a/2.0, 2.0*b, c/3.0); μπορεί να είναι σταθερές, μεταβλητές ή εκφράσεις, αλλά του ίδιου τύπου με τα αντίστοιχα τυπικά ορίσματα (ο compiler χρησιμοποιεί τη δήλωση της draw_circle για έλεγχο τύπων σε κάθε κλήση της) 9

Κλήση συνάρτησης Κλήση συνάρτησης που επιστρέφει τιμή Παραδείγματα max_num = max(num_1, num_2); result = num_1 + max(num_2, num_3); printf( ο μεγαλύτερος αριθμός είναι ο %d\n, max(num_1, num_2)); 10

Περί ορισμάτων Τυπικά ορίσματα (formal arguments) Αναφέρονται μια φορά, στον ορισμό της συνάρτησης Καλούνται συχνά απλώς παράμετροι Πραγματικά ορίσματα (formal arguments) Αναφέρονται σε κάθε ξεχωριστή κλήση της συνάρτησης Καλούνται συχνά απλώς ορίσματα 11

Περί ορισμάτων Παριστάνουν: Τιμές (values), οι οποίες μπορεί να διατυπωθούν με οποιαδήποτε έκφραση (απ ευθείας τιμή, μεταβλητή, κλήση συνάρτησης κλπ.) Η τιμή αποτιμάται σε τιμή συμβατή με τον τύπο του αντίστοιχου τυπικού ορίσματος (παραμέτρου) Διευθύνσεις (addresses, references) χώρων μνήμης, οι οποίες μπορεί να διατυπωθούν ως διευθύνσεις μεταβλητών, τιμές δεικτών κλπ. Ο τύπος της διεύθυνσης του ορίσματος πρέπει να είναι συμβατός με τον τύπο της διεύθυνσης του αντίστοιχου τυπικού ορίσματος (παραμέτρου) 12

Περί ορισμάτων Αντιστοιχία ορισμάτων με παραμέτρους Ο αριθμός των ορισμάτων σε κάθε κλήση μιας συνάρτησης θα πρέπει να είναι ο ίδιος με τον αριθμό των παραμέτρων στον ορισμό της συνάρτησης Η αντιστοιχία αποφασίζεται από τη σειρά των ορισμάτων. Το πρώτο όρισμα αντιστοιχεί στην πρώτη παράμετρο, το δεύτερο όρισμα στη δεύτερη παράμετρο κ.ο.κ. 13

Περί ορισμάτων Ο τύπος κάθε ορίσματος θα πρέπει να είναι συμβατός με τον τύπο της αντίστοιχης παραμέτρου Το όρισμα θα πρέπει να μπορεί να «καταχωρηθεί» στην αντίστοιχη παράμετρο χωρίς (απροσδόκητη) απώλεια πληροφορίας Π.χ., int μπορεί να ανατεθεί σε double χωρίς καθόλου απώλεια πληροφορίας. Επίσης, double μπορεί να ανατεθεί σε int, με αναμενόμενη όμως την απώλεια των δεκαδικών ψηφίων 14

Περί συναρτήσεων Σημασία κλήσης Κατανομή μνήμης για παραμέτρους και τοπικές μεταβλητές της συνάρτησης (εάν υπάρχουν) Αντιγραφή των τιμών των ορισμάτων στις παραμέτρους (εάν υπάρχουν) Ξεκίνημα εκτέλεσης της συνάρτησης (από την πρώτη εντολή της) Σημασία επιστροφής Αποτίμηση της έκφρασης που ακολουθεί το return και αντιγραφή της τιμής στο σημείο κλήσης (εάν επιστρέφεται τιμή) Συνέχιση εκτέλεσης του προγράμματος με την εντολή που ακολουθεί την κλήση της συνάρτησης 15

Παράδειγμα (1) #include <stdio.h> int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } void main() { int number_a, number_b; int sum; printf( Enter two numbers: ); scanf( %d%d,&number_a, &number_b); sum = compute_sum(number_a, number_b); printf( The sum of %d and %d is %d\n, number_a, number_b, sum); } 16

Παράδειγμα (2)... #define PI 3.14159 /* Συνάρτηση για τον υπολογισμό του εμβαδού ενός κύκλου */ double area(double radius){ } return PI * radius * radius; 17

Παράδειγμα (2)... /* Συνάρτηση για τον υπολογισμό του όγκου ενός κυλίνδρου */ double cyl_volume(double radius, double height){ double vol = PI * radius * radius * height; return vol; } area(radius) 18

Παράδειγμα (2) double cyl_volume(double radius, double height) double z = cyl_volume(3.0, 5.0); radius 3.0 height 5.0 cyl_volume 141.37 z 141.37 «κλήση κατ αξία» (call by value) ή «πέρασμα δια τιμής» 19

Παράδειγμα (2) double r=3.0, h=5.0; double y = cyl_volume(r, h); Η διεργασία της κλήσης της συνάρτησης cyl_volume επηρεάζει τις μεταβλητές h και r; r 3.0 h 5.0 radius 3.0 height 5.0 cyl_volume 141.37 z 141.37 20

Παράδειγμα (3) #include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() { int sum=0; sum = compute_sum(5, 4); sum 0 } printf( The sum of %d and %d is %d\n,4, 5, sum); return(0); 21

Παράδειγμα (3) #include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() { int sum=0; sum = compute_sum(5, 4); sum 9 a b sum 5 4 9 } printf( The sum of %d and %d is %d\n,4, 5, sum); return(0); 22

Παράδειγμα (3) #include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() { int sum=0; sum = compute_sum(5, 4); sum 9 } printf( The sum of %d and %d is %d\n,4, 5, sum); return(0); 23

Μέρος 2 ο Η έννοια της εμβέλειας

Η έννοια της εμβέλειας Εμβέλεια προγράμματος, αρχείου, συνάρτησης και μπλοκ

Η έννοια της εμβέλειας Εμβέλεια ονομάτων Δηλώσεις σταθερών, μεταβλητών και συναρτήσεων Μπορώ να χρησιμοποιήσω το ίδιο όνομα για αναφορά σε δύο ή περισσότερες κατασκευές; Αν ναι, ποιοι κανόνες διέπουν την αντιστοίχιση ενός ονόματος σε περισσότερες κατασκευές; 26

Η έννοια της εμβέλειας Κανόνες εμβέλειας (scope rules): οι κανόνες που προσδιορίζουν το τμήμα του πηγαίου κώδικα στο οποίο ένα όνομα είναι «ενεργό» ή «ορατό» Λεκτικοί (lexical) Η αντιστοίχιση γίνεται κατά τη διάρκεια της μεταγλώττισης Χρησιμοποιούνται από τις περισσότερες γλώσσες προγραμματισμού Δυναμικοί (dynamic) Η αντιστοίχιση γίνεται κατά τη διάρκεια της εκτέλεσης 27

Η έννοια της εμβέλειας Τύποι εμβέλειας Εμβέλεια προγράμματος Μεταβλητές με τέτοια εμβέλεια λέγονται γενικές ή καθολικές (global) Είναι ορατές από όλες τις συναρτήσεις που απαρτίζουν το πρόγραμμα (έστω κι αν βρίσκονται σε διαφορετικά αρχεία πηγαίου κώδικα) Μεταβλητή που δηλώνεται έξω από μπλοκ και χωρίς τη λέξη κλειδί static έχει εμβέλεια προγράμματος Εμβέλεια αρχείου Τέτοιες μεταβλητές είναι ορατές μόνο στο αρχείο που δηλώνονται (από το σημείο δήλωσής τους και κάτω) Μεταβλητή που δηλώνεται έξω από μπλοκ, με τη λέξη κλειδί static (πριν από τον τύπο της) έχει εμβέλεια αρχείου 28

Η έννοια της εμβέλειας Εμβέλεια συνάρτησης Προσδιορίζει την ορατότητα ενός ονόματος σε όλο το σώμα της συνάρτησης Τέτοια εμβέλεια έχουν μόνο οι goto ετικέτες Εμβέλεια μπλοκ Προσδιορίζει την ορατότητα ενός ονόματος από το σημείο δήλωσής του μέχρι το τέλος του μπλοκ στο οποίο δηλώνεται Τέτοια εμβέλεια έχουν και τα τυπικά ορίσματα των συναρτήσεων (θυμηθείτε: μπλοκ είναι η σύνθετη πρόταση αλλά και το σώμα μιας συνάρτησης) 29

Παράδειγμα (εμβέλεια ονομάτων) #include <stdio.h> int max(int a, int b); static void func(int a); int a; /* εμβέλεια προγράμματος (γενική μεταβλητή) */ static int b; /* εμβέλεια αρχείου */ main(){ a=12; b=a--; printf( a:%d\t b:%d\t max(b+5,a):%d\n, a, b, max(b+5,a)); func(a+b); } int c=13; /* εμβέλεια προγράμματος */ 30

Παράδειγμα (εμβέλεια ονομάτων) int max(int a, int b){ /* εμβέλεια μπλοκ (αποκρύπτουν τις γενικές a και b για το σώμα της max) */ return(a>b?a:b); } static void func(int x){ /* εμβέλεια μπλοκ */ int b=20; /* εμβέλεια μπλοκ (τοπική μεταβλητή) */ printf( a:%d\t b:%d\t c:%d\t x:%d\t max(x,b):%d\n, a,b,c,x,max(x,b)); output προγράμματος a:11 b:12 max(b+5,a):17 a:11 b:20 c:13 x:23 max(x,b):23 31

Μέρος 3 ο Διάρκεια μεταβλητών

Διάρκεια μεταβλητών

Διάρκεια μεταβλητών Ορίζει το χρόνο κατά τον οποίο το όνομα μιας μεταβλητής είναι συνδεδεμένο με τη θέση μνήμης που περιέχει την τιμή της μεταβλητής Χρόνος δέσμευσης και αποδέσμευσης Καθολικές μεταβλητές Δεσμεύεται χώρος με την έναρξη της εκτέλεσης του προγράμματος Η μεταβλητή συσχετίζεται με την ίδια θέση μνήμης μέχρι το τέλος του προγράμματος (πλήρους διάρκειας) 34

Διάρκεια μεταβλητών Τοπικές μεταβλητές Δεσμεύεται χώρος με την είσοδο στο μπλοκ όπου είναι δηλωμένη η μεταβλητή (αποδεσμεύεται κατά την έξοδο από το μπλοκ) Μια τοπική μεταβλητή δεν διατηρεί την τιμή της από τη μία κλήση της συνάρτησης στην επόμενη (περιορισμένης διάρκειας) Η διάρκεια μιας τοπικής μεταβλητής μπορεί να μετατραπεί από περιορισμένη σε πλήρη χρησιμοποιώντας τη λέξη κλειδί static στη δήλωση της μεταβλητής 35

Διάρκεια μεταβλητών... static int num; void func(int x){ static int count=0; int num=100;... } 36

Διάρκεια μεταβλητών Η static στη δήλωση της καθολικής μεταβλητής num περιορίζει την ορατότητά της μόνο στο αρχείο που δηλώνεται Αντίθετα, η static στη δήλωση της τοπικής μεταβλητής count ορίζει γι αυτήν διάρκεια προγράμματος Η count ως τοπική μεταβλητή πλήρους διάρκειας αρχικοποιείται μια φορά με την είσοδο στο πρόγραμμα Αντίθετα, η num ως τοπική μεταβλητή περιορισμένης διάρκειας αρχικοποιείται σε κάθε ενεργοποίηση της func 37

Διάρκεια μεταβλητών... main(){ increment(); increment(); increment(); } output προγράμματος void increment(void){ int j=2; static int k=2; } printf( j:%d\t k:%d\n, j++, k++); j:2 k:2 j:2 k:3 j:2 k:4 38

Μέρος 4 ο Μεταβίβαση παραμέτρων

Μεταβίβαση παραμέτρων Κλήση κατ αξία και κατ αναφορά

Μεταβίβαση παραμέτρων «Κλήση κατ αξία» ή «πέρασμα δια τιμής» (call by value) Η συνάρτηση δουλεύει πάνω σε αντίγραφα των πραγματικών ορισμάτων «Κλήση κατ αναφορά» ή «πέρασμα δια αναφοράς» (call by reference) Η συνάρτηση δουλεύει πάνω στα πραγματικά ορίσματα Παράδειγμα: Να γραφεί πρόγραμμα που να ανταλλάσσει τις τιμές δύο μεταβλητών a και b (βλέπε επόμενες 6 διαφάνειες) 41

Μεταβίβαση παραμέτρων 42

Μεταβίβαση παραμέτρων 43

Μεταβίβαση παραμέτρων 44

Μεταβίβαση παραμέτρων 45

Μεταβίβαση παραμέτρων 46

Μεταβίβαση παραμέτρων 47

Μέρος 5 ο Η έννοια της αναδρομικότητας

Η έννοια της αναδρομικότητας

Η έννοια της αναδρομικότητας Μια συνάρτηση είναι αναδρομική εάν ο ορισμός της περιέχει κλήση στον εαυτό της Κάθε αναδρομική συνάρτηση μπορεί να υλοποιηθεί με επανάληψη 50

Η έννοια της αναδρομικότητας Αναδρομική λύση ενός προβλήματος είναι συχνά ο «φυσικός» τρόπος επίλυσής του Διαμόρφωση προβλήματος για αναδρομική λύση Παράδειγμα (1): Ακολουθία Fibonacci Fib(n) = Fib(n 2) + Fib(n 1) και Fib(0) = 0, Fib(1) = 1 Πρέπει να υπάρχει τουλάχιστον μια περίπτωση που τερματίζει την αναδρομή Αλλιώς, αναδρομή επ άπειρο ή δέσμευση ολόκληρης μνήμης Η αναδρομική κλήση πρέπει να είναι ένα βήμα πιο κοντά στην περίπτωση τερματισμού από την κλήση που οδήγησε σε αυτήν 51

Η έννοια της αναδρομικότητας Παράδειγμα: Υπολογισμός n! n! = n * n-1 * n-2 * * 1 και 1!=1, 0!=1 n! = n * n-1! float factorial(int n) { int i ; int fact = 1; for(i=n;i>0;--i) fact = fact *i; float factorial(int n) { if (n<2) return 1; return n*factorial(n-1); } } return fact; 52

Τέλος Ενότητας

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

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Πατρών, Πολυτεχνική Σχολή, Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών, Νίκος Καρακαπιλίδης, Δημήτρης Σαραβάνος. Νίκος Καρακαπιλίδης, Δημήτρης Σαραβάνος. «Προγραμματισμός Η/Υ.». Έκδοση: 1.0. Πάτρα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: https://eclass.upatras.gr/courses/mech1207/ 55

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 56

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους. 57

Σημείωμα Χρήσης Έργων Τρίτων Οποιοδήποτε έργο στην παρούσα ενότητα, έχει δημιουργηθεί από τους διδάσκοντες του μαθήματος ή/και την Τμηματική Ομάδα Εργασίας και παρέχεται με την ίδια άδεια CC BY-NC-SA 4.0 58