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

Σχετικά έγγραφα
Διαδικαστικός Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

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

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

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

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

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

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

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

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

Ηλεκτρονικοί Υπολογιστές

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

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

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

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

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

Ειδικά Θέματα Προγραμματισμού

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

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

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

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

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

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

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

Οικονομικά Μαθηματικά

Θεωρία Πιθανοτήτων & Στατιστική

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

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

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ(Visual Basic)

Προχωρημένες έννοιες προγραμματισμού σε C

Προέλευση της Pazcal ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

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

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

Υπολογιστικά & Διακριτά Μαθηματικά

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Υπολογισμός - Εντολές Επανάληψης

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

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

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

ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΜΕ ΧΡΗΣΗ Η/Υ

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

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

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

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

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

Επεξεργασία κειμένου και συμβολοσειρών σε C

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

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

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

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Transcript:

Διαδικαστικός Προγραμματισμός Ενότητα 6: Πίνακες-Συναρτήσεις Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

Χειρισμός πινάκων μιας διάστασης (1) Όταν θέλουμε να προσπελάσουμε όλες τις θέσεις μνήμης ενός πίνακα μιας διάστασης, ο καλύτερος τρόπος είναι μέσω του βρόχου for, με τη βοήθεια του οποίου θα αλλάζει ο αριθμός αναφοράς της θέσης μνήμης. Οι παρακάτω περιπτώσεις χρήσης ενός μονοδιάσταστου πίνακα εμφανίζονται ως συναρτήσεις στις οποίες μεταβιβάζουμε ως παράμετρο έναν πίνακα 100 θέσεων μνήμης. 5

Χειρισμός πινάκων μιας διάστασης (2) Συμπλήρωση πίνακα με τυχαίες τιμές: void fill_it(int a[]) int i; for (i = 0; i<100; i++) a[i] = rand(); Η πρόταση αυτή εκτελείται 100 φορές με τιμές του i από 0 μέχρι 99. Κάθε φορά που εκτελείται, ένας τυχαίος αριθμός καταχωρίζεται σε μια θέση μνήμης του πίνακα, την πρώτη φορά στην a[0], τη δεύτερη στην a[1] κτλ 6

Χειρισμός πινάκων μιας διάστασης (3) Εμφάνιση περιεχομένων πίνακα : void print_it(int a[]) int i; for (i = 0; i<100; i++) print( %d\n,a[i]); Η πρόταση αυτή εκτελείται 100 φορές με τιμές του i από 0 μέχρι 99. Κάθε φορά που εκτελείται, εμφανίζονται στην οθόνη τα περιεχόμενα μιας θέσης μνήμης του πίνακα, την πρώτη φορά της a[0], τη δεύτερη της a[1] κτλ 7

Χειρισμός πινάκων μιας διάστασης (4) Υπολογισμός αθροίσματος περιεχομένων πίνακα: int athroisma(int a[]) int i,sum; sum=0; for (i=0;i<100;i++) sum=sum+a[i]; return sum; Κάθε φορά που εκτελείται αυτή η πρόταση προστίθεται στη sum το περιεχόμενο μιας θέσης μνήμης του πίνακα. Την πρώτη φορά της a[0], τη δεύτερη της a[1] κτλ Στο τέλος η sum θα περιέχει το άθροισμα των περιεχομένων όλων των θέσεων μνήμης του πίνακα. Η συνάρτηση επιστρέφει ως τιμή το περιεχόμενο της sum. 8

Χειρισμός πινάκων μιας διάστασης (5) Εμφάνιση ελάχιστης και μέγιστης τιμής περιεχομένων πίνακα : void minmax(int a[]) int min,max,i; min=max=a[0]; for (i=0;i<100;i++) if(a[i]<min) min=a[i]; if(a[i]>max) max=a[i]; printf("o mikroteros arithmos einai: %d\n",min); printf("o megaliteros arithmos einai: %d\n",max); Κάθε φορά που εκτελούνται αυτές οι προτάσεις ελέγχεται η τιμή μας θέσης μνήμης του πίνακα αν είναι μεγαλύτερη από τη μέχρι στιγμής μεγαλύτερη ή μικρότερη τιμή που έχει βρεθεί. Αν όντως βρεθεί μικρότερη ή μεγαλύτερη τιμή, τότε αυτή αντικαθιστά την υπάρχουσα τιμή στις μεταβλητές min και max αντίστοιχα. Αυτό γίνεται για κάθε θέση μνήμης και τελικά η min και η max θα περιέχουν τη μικρότερη και μεγαλύτερη τιμή αντίστοιχα από όλα τα αντίστοιχα στοιχεία του πίνακα. 9

Χειρισμός πινάκων μιας διάστασης (6) Εύρεση μιας τιμής μέσα σε πίνακα : int find_it(int a[ ],int ar) int i; bool found=false; for (i=0;i<100;i++) if(a[i]==ar) found = TRUE; return found; Η συνάρτηση ψάχνει να βρει αν ο αριθμός ar υπάρχει στον πίνακα a. Κάθε φορά που εκτελείται αυτή η πρόταση, ελέγχεται η τιμή μιας θέσης μνήμης του πίνακα αν είναι ίση με τον αριθμό ar. Στην περίπτωση που βρεθεί ίση τιμή, τότε καταχωρίζεται στη θέση found η τιμή TRUE. Μετά το τέλος του βρόχου for αν η τιμή της found είναι TRUE αυτό σημαίνει ότι ο ζητούμενος αριθμός βρέθηκε διαφορετικά όχι. ΠΡΟΣΟΧΗ η αρχική τιμή της found πρέπει να είναι FALSE. 10

Χειρισμός πινάκων δυο διαστάσεων (1) Στην έκδοση που ακολουθεί η επίσκεψη του πίνακα γίνεται ανά στήλη: #include <stdlib.h> #include <stdio.h> main() int i,j,a[10][5],timi; for(i=0;i<10;i++) for(j=0;j<5;j++) a[i][j]=rand(); 11

Χειρισμός πινάκων δυο διαστάσεων (2) Άθροισμα των στοιχείων ενός πίνακα 2Δ Η συνάρτηση που ακολουθεί επιστρέφει ως τιμή το άθροισμα των στοιχείων ενός πίνακα ακεραίων 10Χ5 int sum(int p[ ][5]) int i,j,ss=0; for(i=0;i<10;i++) for(j=0;j<5;j++) ss=ss+p[i][j]; return ss; Στη συνάρτηση μεταβιβάζεται ένας πίνακας ακεραίων Στη μεταβλητή ss αθροίζονται όλα τα στοιχεία του πίνακα Το παρακάτω τμήμα κώδικα δείχνει τον τρόπο με τον οποίο μπορεί να χρησιμοποιηθεί η συνάρτηση sum από τη main() για τον υπολογισμό του αθροίσματος των στοιχείων του πίνακα a. int a[10][5], ath;... ath=sum(a); printf( Το άθροισμα των στοιχείων του a είναι%d\n,ath); 12

Χειρισμός πινάκων δυο διαστάσεων (1) Εύρεση Μεγίστου στοιχείου int mymax(int p[][5]) int i,j,mx; mx=p[0][0]; for(i=0;i<10;i++) for(j=0;j<5;j++) if (p[i][j]>mx) mx=p[i][j]; return mx; Στην τοπική μεταβλητή mx καταχωρίζεται η τιμή της πρώτης θέσης μνήμης του πίνακα Στην περίπτωση που βρεθεί τιμή μεγαλύτερη από το περιεχόμενο της mx, τότε αυτή καταχωρίζεται στην mx. Η mx περιέχει πάντα την μέχρι στιγμής μεγαλύτερη τιμή 13

Χειρισμός πινάκων δυο διαστάσεων (2) Εύρεση Ελάχιστου στοιχείου int mymim(int p[][5]) int i,j,mn; mn=p[0][0]; for(i=0;i<10;i++) for(j=0;j<5;j++) if (p[i][j]<mn) mn=p[i][j]; return mn; Στην τοπική μεταβλητή mx καταχωρίζεται η τιμή της πρώτης θέσης μνήμης του πίνακα Στην περίπτωση που βρεθεί τιμή μικρότερη από το περιεχόμενο της mn, τότε αυτή καταχωρίζεται στην mn. Η mn περιέχει πάντα την μέχρι στιγμής μικρότερη τιμή 14

Χειρισμός πινάκων δυο διαστάσεων (3) Tο παρακάτω τμήμα κώδικα δείχνει τον τρόπο με τον οποίο μπορεί να χρησιμοποιηθούν από τη main() οι παραπάνω συναρτήσεις για τον υπολογισμό της μεγαλύτερης και μικρότερης τιμής του πίνακα a.... int a[10][5]; printf( Η μεγαλύτερη τιμή του a είναι%d\n,mymax(a)); printf( Η μικρότερη τιμή του a είναι%d\n,mymim(a)); Στην περίπτωση αυτή, οι τιμές που επιστρέφουν οι συναρτήσεις δεν καταχωρίζονται σε καμία μεταβλητή αλλά εμφανίζονται κατευθείαν στην οθόνη 15

Χειρισμός πινάκων δυο διαστάσεων (4) Εύρεση ενός αριθμού σε έναν πίνακα 2Δ Η ακόλουθη συνάρτηση επιστρέφει την τιμή TRUE στην περίπτωση που ο αριθμός ar εντοπιστεί μέσα στον πίνακα. Διαφορετικά επιστρέφει την τιμή FALSE. Τόσο ο πίνακας όσο και ο αριθμός μεταβιβάζονται στη συνάρτηση ως παράμετροι. bool find(int p[ ][5], int ar) int i,j; bool found; found=false; for(i=0;i<10;i++) for(j=0;j<5;j++) if (ar==p[i][j]) found=true; if (found) break; if (found) break; return found; Στην τοπική μεταβλητή found καταχωρίζεται αρχικά η τιμή FALSE Στην περίπτωση που βρεθεί ίση τιμή, τότε καταχωρίζεται στη θέση found η τιμή TRUE. Στην περίπτωση που o αριθμός έχει βρεθεί (found== TRUE) τότε διακόπτονται και οι 2 βρόχοι for. Η συνάρτηση επιστρέφει την τιμή της found. 16

Χειρισμός πινάκων δυο διαστάσεων (5) Μορφοποιημένη εμφάνιση ενός πίνακα 2Δ Η ακόλουθη συνάρτηση εμφανίζει τα περιεχόμενα ενός πίνακα ακεραίων 10Χ5 σε μορφή γραμμών και στηλών. void print_it(int p[ ][5]) int i,j; for(i=0;i<10;i++) for(j=0;j<5;j++) printf("%6d ",p[i][j]); printf("\n"); Κάθε στοιχείο του πίνακα καταλαμβάνει έξη θέσεις στην οθόνη Επιβάλλει αλλαγή γραμμής μετά από την εμφάνιση των στοιχείων κάθε σειράς του πίνακα 17

Χειρισμός πινάκων δυο διαστάσεων (6) Εμφάνιση του αθροίσματος κάθε γραμμής ενός πίνακα 2Δ Η ακόλουθη συνάρτηση εμφανίζει το άθροισμα των στοιχείων κάθε γραμμής ενός πίνακα ακεραίων 10Χ5. Δεδομένου ότι υπολογίζονται συγκεντρωτικά στοιχεία για κάθε γραμμή, η επίσκεψη του πίνακα πρέπει να γίνει ανά γραμμή. void sum_line(int p[][5]) int i,j,ath; for(i=0;i<10;i++) ath=0; for(j=0;j<5;j++) ath=ath+p[i][j]; printf( Γραμμή %d = %d\n",i,ath); Η μεταβλητή ath μηδενίζεται πριν από το «πέρασμα» κάθε γραμμής Στη μεταβλητή ath αθροίζονται όλα τα στοιχεία της i γραμμής 18

Χειρισμός πινάκων δυο διαστάσεων (7) Εμφάνιση του αθροίσματος κάθε γραμμής ενός πίνακα 2Δ Η ακόλουθη συνάρτηση εμφανίζει τη μέγιστη τιμή κάθε στήλης ενός πίνακα ακεραίων 10Χ5. Δεδομένου ότι υπολογίζονται συγκεντρωτικά στοιχεία για κάθε στήλη χωριστά, η επίσκεψη του πίνακα πρέπει να γίνει ανά στήλη. void max_col(int p[ ][5]) int i,j,mx; for(j=0;j<5;j++) mx=p[0][j]; for(i=0;i<10;i++) if (p[i][j]>mx) mx=p[i][j]; printf( Μέγιστος στήλης %d = %d\n",j,mx); Στη μεταβλητή mx καταχωρίζεται ως αρχική τιμή το περιεχόμενο της πρώτης θέσης (i == 0) κάθε στήλης Στην περίπτωση που βρεθεί τιμή μεγαλύτερη από την mx τότε καταχωρίζεται στην mx. H mx περιέχει πάντα την μέχρι στιγμής μεγαλύτερη τιμή της στήλης. Εμφάνιση της μέγιστης τιμής κάθε στήλης 19

Εμβέλεια Μεταβλητών (1) int a, b; main() int a, b; a= GetInteger(); b=getinteger(); printf("αθροισμα=%d\n",add(a,b); printf("γινόμενο=%d\n",gin(a,b); add(int x, int y) int ss; ss=x+y; retrun(ss); gin(int x, int y) int gg, a; gg=x*y; return(gg); Χώρος εμβέλειας των καθολικών μεταβλητών a και b Χώρος εμβέλειας των τοπικών μεταβλητών a και b Χώρος εμβέλειας των τυπικών παραμέτρων x και της τοπικής μεταβλητής ss 3 Χώρος εμβέλειας των τυπικών παραμέτρων x και των τοπικών μεταβλητών gg και a 4 2 1 a b a b x y ss x y gg a 5000 5002 5004 5006 5008 5010 5012 5014 5016 5018 5020 20

Εμβέλεια Μεταβλητών (2) Η μέθοδος μεταβίβασης τιμών σε μια συνάρτηση μέσω καθολικών μεταβλητών πρέπει γενικά να αποφεύγεται και να χρησιμοποιείται μόνο όταν πραγματικά υπάρχει ανάγκη. Σε μια καθολική μεταβλητή έχουν πρόσβαση όλες οι συναρτήσεις που βρίσκονται μετά από το σημείο του προγράμματος όπου δηλώθηκε. Όταν θέλουμε όλες ανεξαρτήτως οι συναρτήσεις να έχουν πρόσβαση σε μια καθολική μεταβλητή, πρέπει να δηλώσουμε τη μεταβλητή αυτή στην αρχή του προγράμματος (πριν από τη main()). Στην περίπτωση που μια τοπική μεταβλητή δηλωθεί με όνομα ίδιο με μια καθολική μεταβλητή, τότε στο χώρο εμβέλειας της τοπικής μεταβλητής μεταφερόμαστε στην τοπική μεταβλητή ενώ οπουδήποτε αλλού στην καθολική μεταβλητή. 21

Εμβέλεια Μεταβλητών (3) Οι μεταβλητές a και b της συνάρτησης main() του παραδείγματος χρησιμοποιούν εντελώς διαφορετικές θέσεις μνήμης από τις καθολικές μεταβλητές a και b. Όταν γίνεται αναφορά σε μια μεταβλητή χρησιμοποιείται η μεταβλητή που έχει τον πλησιέστερο χώρο εμβέλειας. 22

Εμβέλεια Μεταβλητών (4) Μεταβλητή a b a b x y ss x y gg a Διεύθυνση 5000 5002 5004 5006 5008 5010 5012 5014 5016 5018 5020 1 2 3 4 Έτσι, σε ένα σημείο του προγράμματος που βρίσκεται μόνο στο χώρο 1 υπάρχει δυνατότητα πρόσβασης μόνο στις μεταβλητές a (5000) και b (5002). Ένα σημείο του προγράμματος που βρίσκεται στο χώρο 4 έχει πρόσβαση στις μεταβλητές b (5002), x (5014), y (5016), gg (5018), a (5020) και σε καμία άλλη. 23

Εμβέλεια Μεταβλητών (5) Στο παρακάτω παράδειγμα ο πίνακας a δηλώνεται στη συνάρτηση main() και μεταβιβάζεται στη συνάρτηση fillit() μέσω της τυπικής παραμέτρου p. main() int a[100]; a[2]=20; fillit(a); a 5000 a[2]=20 a[0] a[1] a[2] 20 5000 5004 5008 void fillit(int p[]) p[30]=44; p 5000 p[30]=44 a[30] a[99] Μέσα από τη main() υπάρχει πρόσβαση στον πίνακα μέσω του ονόματος a, ενώ μέσα από τη συνάρτηση fillit() η πρόσβαση στον ίδιο πίνακα a γίνεται μέσω του ονόματος p. 44 24

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