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

Σχετικά έγγραφα
Εισαγωγή στον Προγραμματισμό με C++

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 9: Συναρτήσεις Εμβέλεια

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 8: Συναρτήσεις. Κ.

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 3: Είσοδος και Έξοδος Δεδομένων

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Eισαγωγή στον Προγραμματισμό

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

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

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

{ int a = 5; { int b = 7; a = b + 3;

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 4: Έλεγχος Ροής. Κ.

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

Λογιστικές Εφαρμογές Εργαστήριο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

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

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

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό

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

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

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

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

ΜΑΘΗΜΑΤΙΚΑ ΓΙΑ ΟΙΚΟΝΟΜΟΛΟΓΟΥΣ

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Πληροφορική. Εργαστηριακή Ενότητα 1 η : Εισαγωγή στα Λογιστικά Φύλλα με το MS Excel. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Πληροφορική. Εργαστηριακή Ενότητα 3 η : Επεξεργασία Κελιών Γραμμών & Στηλών. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Στατιστική Επιχειρήσεων Ι

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

Βιομηχανικοί Ελεγκτές

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

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

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

Υδραυλικά & Πνευματικά ΣΑΕ

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

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

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 6: Πίνακες. Κ.

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

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

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

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

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

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Pascal. 15 Νοεμβρίου 2011

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

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

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

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

ΜΑΘΗΜΑΤΙΚΑ ΓΙΑ ΟΙΚΟΝΟΜΟΛΟΓΟΥΣ

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

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

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

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

Αρχιτεκτονική Υπολογιστών

Λογιστικές Εφαρμογές Εργαστήριο

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

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

Υπολογιστικά Συστήματα

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

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 9: Συναρτήσεις Εμβέλεια Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

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

Σκοποί ενότητας Με την ενότητα αυτή επιδιώκονται οι παρακάτω διδακτικοί σκοποί για τον σπουδαστή: 1. Να εξοικειωθεί με τους τρόπους μεταβίβασης τιμών σε συνάρτηση 2. Να αναπτύσσει συναρτήσεις με τις κατάλληλες παραμέτρους 3. Να αναγνωρίζει πότε πρέπει να κάνει χρήση παραμέτρων τιμής και πότε αναφοράς 4. Να μάθει την έννοια της εμβέλειας μεταβλητών 5. Να διαχωρίζει τις καθολικές και τις τοπικές μεταβλητές σε ένα μπλοκ εντολών 6. Να εκτιμήσει τα μειονεκτήματα των καθολικών μεταβλητών

Περιεχόμενα ενότητας Κλήση δια τιμής και κλήση με αναφορά Κλήση δια τιμής (call by value) - Παράδειγμα κλήσης δια τιμής Κλήση με αναφορά (call by reference) - Παράδειγμα κλήση με αναφορά Σύνοψη για παραμέτρους αναφοράς - Παράδειγμα Εμβέλεια μεταβλητών Τοπικές μεταβλητές Παράδειγμα με τοπικές μεταβλητές Ένθετα block εντολών και εμβέλεια Παράδειγμα εμβέλειας σε ένθετα block Παράδειγμα καθολικών μεταβλητών Καθολικές μεταβλητές Καθολικές μεταβλητές (μειονεκτήματα)

Κλήση δια τιμής και κλήση με αναφορά Είναι φανερό ότι με την κλήση μίας συνάρτηση μεταβιβάζονται τιμές στην συνάρτηση. Υπάρχουν δύο τρόποι μεταβίβασης τιμών σε συναρτήσεις Κλήση διά τιμής (call by value). Με τον τρόπο αυτό μεταβιβάζονται μόνο τιμές προς την συνάρτηση τις όποιες χρησιμοποιεί η συνάρτηση, όμως η συνάρτηση δεν μπορεί να αλλάξει τις τιμές των μεταβλητών στο πρόγραμμα από το οποίο γίνεται κλήση της συνάρτησης Κλήση με αναφορά (call by reference). Με τον τρόπο αυτό μεταβιβάζονται διευθύνσεις μνήμης προς την συνάρτηση και έτσι η συνάρτηση μπορεί να επηρεάσει τις τιμές των μεταβλητών στο πρόγραμμα από το οποίο γίνεται κλήση της συνάρτησης γιατί έχει πρόσβαση στις διευθύνσεις των μεταβλητών

Κλήση δια τιμής (call by value) Όταν καλείται μία συνάρτηση οι τιμές των ορισμάτων περνούν στην συνάρτηση με χρήση δύο παραμέτρων κλήσης. Οι τιμές των ορισμάτων αντιγράφονται σαν τιμές στις παραμέτρους της συνάρτησης δηλαδή δημιουργούνται αντίγραφα των μεταβλητών κλήσης. Η χρήση της συνάρτησης με τον τρόπο αυτό λέγεται κλήση δια τιμής (call by value). Τυχόν αλλαγές των παραμέτρων της συνάρτησης δεν επηρεάζουν τις αρχικές μεταβλητές στο κυρίως πρόγραμμα γιατί μόνο οι τιμές των μεταβλητών μεταφέρθηκαν στην συνάρτηση.

Παράδειγμα κλήσης δια τιμής Στο παρακάτω παράδειγμα η τιμή του b στο main δεν αλλάζει H τιμή της μεταβλητής a στο main αλλάζει επειδή η συνάρτηση επιστρέφει μία τιμή που εκχωρείται στην a.

Κλήση με αναφορά (call by reference) Κλήση με αναφορά Ένας δεύτερος τρόπος για το πέρασμα τιμών προς την συνάρτηση είναι με την κλήση διά αναφοράς (call by reference). Με τον τρόπο αυτό η διεύθυνση του ορίσματος αντιγράφεται στην παράμετρο. Μέσα στην συνάρτηση η διεύθυνση χρησιμοποιείται για πρόσβαση στην τιμή που έχει το όρισμα. Τυχόν αλλαγή στην τιμή της παραμέτρου μέσα στην συνάρτηση επηρεάζει και την τιμή του ορίσματος στο main επειδή η παράμετρος αναφέρεται στην διεύθυνση του ορίσματος. Επομένως υπάρχει τρόπος αλλαγής (επιστροφής) περισσοτέρων των μία τιμών με συναρτήσεις, διότι μέχρι τώρα μία συνάρτηση επέστρεφε μία μόνο τιμή Ακόμη και εάν επιστρέφεται μία μόνο τιμή είναι δυνατό με χρήση συνάρτησης που κάνει κλήση με αναφορά να μετατραπεί η συνάρτηση σε void

Παράδειγμα κλήση με αναφορά (1/2) Η κλήση με αναφορά είναι ένας αποτελεσματικός τρόπος επιστροφής περισσοτέρων της μίας τιμής συνάρτηση. Για να γίνει επιστροφή της τιμής κάποιων μεταβλητών χρησιμοποιώ για κάθε μία από τις μεταβλητές κλήση με αναφορά.

Παράδειγμα κλήση με αναφορά (2/2) Αν γίνει εμφάνιση της τιμής της μεταβλητής b θα πρέπει να εμφανιστή σαν 16δικός αριθμός διότι η μεταβλητή b είναι δείκτης και σαν περιεχόμενο έχει μία διεύθυνση.

Σύνοψη για παραμέτρους αναφοράς Όταν γίνεται χρήση παραμέτρων αναφοράς σε μία συνάρτηση τότε είναι δυνατό να αλλάζουν οι τιμές των ορισμάτων που διοχετεύονται. Αντίθετα με την μεταβίβαση ορισμάτων μέσω τιμής διοχετεύονται αντιγράφονται μόνο τιμές και οι τιμές αυτές δεν μπορούν να αλλάξουν. Στην περίπτωση κλήσης με τιμή, οι παράμετροι και τα αντίστοιχα ορίσματα καταλαμβάνουν διαφορετικές διευθύνσεις στην μνήμη, είναι δηλαδή διαφορετικές μεταβλητές Σε προβλήματα που γίνεται χρήση συναρτήσεων οι μεταβλητές που μεταβιβάζονται στην συνάρτηση και δεν πρέπει να αλλάξουν μεταβιβάζονται μέσω τιμής ενώ οι μεταβλητές τις οποίες πρέπει να γίνει αλλαγή ή υπολογισμός κάποιας τιμής η μεταβίβαση γίνεται με αναφορά.

Παράδειγμα συνάρτησης (1/2) Να εμφανίζονται οι προηγούμενη και επόμενη τιμή μίας ακεραίας μεταβλητής Θα αποσταλεί στην συνάρτηση μία τιμή και θα υπολογιστούν άλλες δύο που πρέπει και να επιστρέψουν στην main. Συνολικά η συνάρτηση θα έχει 3 παραμέτρους και θα είναι void // Dio parametroi opou ginetai klisi me anafora void prinmeta(int, int *, int *); int main (){ int a=200, prin, meta; printf("o arithmos einai = %d\n\n",a); prinmeta(a, & meta, & prin);

Παράδειγμα συνάρτησης (2/2) printf("h proigoumeni timi einai %d H epomeni timi einai %d\n",prin,meta); } return 0; void prinmeta(int z, int * x, int * y ){ *x=z+1; *y=z-1; printf("h y= %d H x= %d\n",*y,*x); }

Παρατηρήσεις: Όποιες μεταβλητές χρησιμοποιούνται και στο main και στην συνάρτηση πρέπει να ορίζονται. Στην συνάρτηση ορίζονται είτε σαν παράμετροι είτε μέσα στην συνάρτηση με δηλώσεις ορισμού. Ιδιαίτερη προσοχή χρειάζεται στον ορισμό και στην κλήση της συνάρτησης ώστε να γίνεται κλήση με αναφορά: void prinmeta(int z, int * x, int * y ) prinmeta(a, & meta, & prin); Στο σώμα της συνάρτησης οι μεταβλητές που έχουν οριστεί σαν δείκτες χρησιμοποιούνται με τον τελεστή * ώστε να γίνεται έμμεση αναφορά (απο-αναφοροποίηση) και με τον τρόπο αυτό να αλλάζουν οι τιμές των μεταβλητών στην main: *x=z+1; *y=z-1;

Να εισάγεται ένας πραγματικός αριθμός. Κατόπιν με κλήση μίας συνάρτησης να υπολογίζεται η περίμετρος και το εμβαδό κύκλου που έχει ακτίνα τον αριθμό που εισήχθηκε. Η συνάρτηση να επιστρέφει δυο τιμές την περίμετρο και το εμβαδό στην main. Στην main να εμφανίζονται στην οθόνη οι δύο αυτές τιμές. Άσκηση

Εμβέλεια μεταβλητών (1/2) Εμβέλεια (scope) μίας μεταβλητής είναι ο χώρος σε ένα πρόγραμμα όπου μία μεταβλητή έχει οριστεί και επομένως μπορεί να χρησιμοποιηθεί Η εμβέλεια καθορίζει τον χώρο στον οποίο η μεταβλητή είναι ορατή δηλαδή είναι προσβάσιμη από τις εντολές Μία μεταβλητή έχει εμβέλεια μόνο μέσα στο μπλοκ των εντολών που έχει οριστεί και επομένως εξαρτάται από το σημείο που έχει οριστεί

Εμβέλεια μεταβλητών (2/2) Μπλοκ εντολών θεωρείται ότι είναι μία ομάδα εντολών που περιέχεται σε αγκύλες { }. Μία τέτοια μεταβλητή που έχει οριστεί σε οποιοδήποτε μπλοκ θεωρείται ότι είναι τοπική (local) μεταβλητή στο συγκεκριμένο μπλο. Αντίθετα, μία καθολική (global) μεταβλητή είναι ορατή από οποιοδήποτε μέρος ενός προγράμματος. Μία καθολική μεταβλητή ορίζεται εκτός της συνάρτησης ή του main προγράμματος Δεν μπορεί να υπάρχει επικάλυψη της εμβέλειας δύο μεταβλητών, απλά ο προγραμματιστής πρέπει να γνωρίζει ποια μεταβλητή είναι ορατή σε κάποιο κομμάτι του κώδικα

Τοπικές μεταβλητές (1/2) Οι μεταβλητές που ορίζονται μέσα σε μία συνάρτηση, ακόμη και στη main θεωρούνται τοπικές μεταβλητές Η τοπική μεταβλητή είναι ορατή μόνο μέσα στην συνάρτηση που ορίζεται. Μεταβλητές που ορίζονται σε διαφορετικές συναρτήσεις, ακόμη και εάν έχουν το ίδιο όνομα, έχουν διαφορετική εμβέλεια η κάθε μία και θεωρούνται τοπικές η καθεμία στο μπλοκ που έχουν οριστεί.

Τοπικές μεταβλητές (2/2) Σε ένα μπλοκ εντολών (συνάρτηση ή μπλοκ εντολών) μία τοπική μεταβλητή υπερισχύει μία άλλης που έχει το ίδιο όνομα και έχει οριστεί σε ένα εξωτερικό μπλοκ ακόμη και εάν το μπλοκ της τοπικής μεταβλητής περικλείεται από το εξωτερικό. Επίσης να σημειωθεί ότι μετά το πέρας της κλήσης μίας συνάρτησης τυχόν τοπικές μεταβλητές που έχουν οριστεί μέσα στην συνάρτηση παύουν να υπάρχουν και η μνήμη που έχει δεσμευτεί για αυτές ελευθερώνεται. Σε περίπτωση που μεταβλητές ορίζονται μέσα σε επαναλήψεις ισχύουν μόνο για την διάρκεια εκτέλεσης των επαναλήψεων επειδή η επανάληψη αποτελεί μπλοκ εντολών.

Παράδειγμα συνάρτησης με τοπικές μεταβλητές Η συνάρτηση αποτελεί ξεχωριστό block και οι μεταβλητές a, b έχουν διαφορετικές τιμές από τις μεταβλητές με το ίδιο όνομα στην main.

Ένθετα block εντολών και εμβέλεια (1/2) Δεν είναι αποδεκτό να οριστούν δύο μεταβλητές με το ίδιο όνομα σε ένα μπλοκ εντολών Στο διπλανό παράδειγμα ο compiler επισημαίνει το λάθος Όμως είναι δυνατό να οριστεί μία μεταβλητή με το ίδιο όνομα σε ένθετα block Μέσα στο εσωτερικό block η μεταβλητή θεωρείται τοπική και υπερισχύει της μεταβλητής που είναι στο εξωτερικό block

Ένθετα block εντολών και εμβέλεια Μεταβλητές με το ίδιο όνομα σε ένθετα block θα πρέπει να αποφεύγονται γιατί προκαλούν σύγχυση και επιπλέον δεν υπάρχει λόγος δύο μεταβλητές να έχουν το ίδιο αναγνωριστικό (2/2)

Παράδειγμα εμβέλειας σε ένθετα Οι δύο μεταβλητές με όνομα k έχουν διαφορετική εμβέλεια. block H τοπική μεταβλητή στο εσωτερικό μπλοκ των εντολών υπερισχύει της μεταβλητής που ορίζεται στην αρχή με την εντολή int k=100.

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

Καθολικές μεταβλητές Μεταβλητές που δηλώνονται εκτός μίας συνάρτησης ή ενός block θεωρούνται καθολικές (global) για την συνάρτηση ή το block Η εμβέλεια μίας καθολικής ισχύει για το μπλοκ στο οποίο ορίζεται και για τις συναρτήσεις που ακολουθούν την δήλωση της μεταβλητής και μετά Συνήθως οι καθολικές δηλώνονται στην αρχή του αρχείου μετά τις βιβλιοθήκες Tα αρχεία επικεφαλίδων (header files) ορίζουν καθολικές μεταβλητές και συναρτήσεις Οι καθολικές μεταβλητές είναι χρήσιμες όταν πολλές συναρτήσεις μοιράζονται κάποια δεδομένα. Με τον τρόπο αυτό οι μεταβλητές αυτές είναι ορατές από τις συναρτήσεις και δεν χρειάζεται να μεταβιβάζονται ως ορίσματα

Καθολικές μεταβλητές (μειονεκτήματα) Υπενθυμίζεται ότι η τοπική μεταβλητή υπερισχύει της μίας καθολικής ακόμη και εάν έχουν το ίδιο όνομα: Όμως η κλήση μιας συνάρτησης που επιδρά σε καθολικές μεταβλητές τις αλλάζει και για όλες τις άλλες συναρτήσεις με συνέπεια να υπάρχει δυσκολία στον έλεγχο των αλλαγών που γίνονται. Δύσκολο μερικές φορές να εξασφαλιστεί ότι οι αλλαγές θα γίνουν με σωστή σειρά γιατί δεν είναι καθαρό από που γίνεται η αλλαγή Είναι ιδιαίτερα δύσκολη η επαναχρησιμοποίηση και η τροποποίηση του προγράμματος με καθολικές μεταβλητές Ιδιαίτερα σε μεγάλες εφαρμογές που πιθανόν να αναπτύσσονται από πολλούς προγραμματιστές πρέπει να είναι σαφές και καθαρό η αλλαγές που επιφέρουν συναρτήσεις στο πρόγραμμα Συμπερασματικά: οι καθολικές μεταβλητές αν δεν είναι απαραίτητες καλό είναι να αποφεύγονται!

Παράδειγμα συναρτήσεων (1/3) Να γραφεί πρόγραμμα σε γλώσσα C που να καλεί συνάρτηση μετατροπής που μετατρέπει τα δευτερόλεπτα σε ισοδύναμο χρόνο που εκφράζεται σε λεπτά και δευτερόλεπτα (πχ 65 sec = 1 min & 5 sec). ο αριθμός που αντιπροσωπεύει δευτερόλεπτα να εισάγεται με συνάρτηση που απλά επιστρέφει την τιμή στο main. Κατόπιν να καλείται η συνάρτηση μετατροπής και να επιστρέφει τα λεπτά και δευτερόλεπτα στο main.

Παράδειγμα συναρτήσεων (2/3) int dose1() { //function eisodou int xr; printf("dose ton xrono "); scanf("%d",& xr); return xr; } //============================================= void sectomin(int x, int *a, int* b){ //function metatropis *b=x%60; } *a=x/60;

Παράδειγμα συναρτήσεων (3/3) int main( ){ int xronos, min, sec; xronos=dose1(); sectomin(xronos,&min,&sec); printf("o xronos eine %d lepta %d defterα\n",min, sec); } return 0;

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