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

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

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

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

Διάλεξη 6: Δείκτες και Πίνακες

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στις Συναρτήσεις

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

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

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

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

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

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

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

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

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

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

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

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

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

Δείκτες & Πίνακες Δείκτες, Πίνακες

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

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

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

Γλώσσες Προγραμματισμού

12. Συναρτήσεις (Μέρος ΙI)

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εργαστηριακή Άσκηση 1

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Τμήμα Εφαρμοσμένης Πληροφορικής

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Συναρτήσεις (Functions) Εισαγωγή στη C++

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

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

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

Περιεχόμενα. Πρόλογος... 17

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

Γλώσσα Προγραμματισμού C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Προγραμματισμός I (Θ)

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Γλώσσα Προγραμματισμού C

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

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

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

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

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Transcript:

ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Διαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 6 ο : Πίνακες - Συναρτήσεις

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

Χειρισμός πινάκων μιας διάστασης Όταν θέλουμε να προσπελάσουμε όλες τις θέσεις μνήμης ενός πίνακα μιας διάστασης, ο καλύτερος τρόπος είναι μέσω του βρόχου for, με τη βοήθεια του οποίου θα αλλάζει ο αριθμός αναφοράς της θέσης μνήμης. Όμως: ΘΑ ΠΡΕΠΕΙ να είναι γνωστό το μέγεθος του πίνακα. H γλώσσα C, δεν κάνει κανένα απολύτως έλεγχο. Άρα - το μέγεθος θα είναι αποθηκευμένο σε μια "σταθερά" προεπεξεργαστή - το μέγεθος να είναι παράμετρος της αντίστοιχης συνάρτησης. 3

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

Κλήση της συνάρτησης (α) Δημιουργία πίνακα 100 στοιχείων (β) Συμπλήρωση πίνακα με τυχαίους αριθμούς. int main() int pin[100],timi; fill_it(100, pin);... 5

Συμπλήρωση πίνακα με τυχαίες τιμές Εναλλακτικά: Συνάρτηση fill_it που συμπληρώνει ένα πίνακα με τυχαίες τιμές από 0 έως 9: #define SIZE 100... void fill_it(int a[]) int i; for (i = 0; i<size; i++) a[i] = rand() % 10; 6

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

Κλήση της συνάρτησης (α) Δημιουργία πίνακα 100 στοιχείων (β) Συμπλήρωση πίνακα με τυχαίους αριθμούς. (γ) Εκτύπωση πίνακα int main() int pin[100],timi; fill_it(100, pin); print_it(100, pin);... 8

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

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

Εύρεση μιας τιμής σε ένα πίνακα Συνάρτηση find_it bool 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. 11

Εύρεση μιας τιμής σε ένα πίνακα Εναλλακτικά: Συνάρτηση find_it bool find_it1(int size, int a[],int ar) int i; for (i=0;i<size;i++) if(a[i]==ar) return TRUE; return FALSE; 12

Χειρισμός πινάκων δυο διαστάσεων Ο εξωτερικός βρόχος for αλλάζει τον αριθμό αναφοράς για τη γραμμή (i), ενώ ο εσωτερικός βρόχος για τη στήλη (j). Επομένως η «επίσκεψη» του πίνακα γίνεται ανά γραμμή. Δηλαδή πρώτα γεμίζουν οι θέσεις της πρώτης γραμμής μετά της δεύτερης κοκ. #include <stdlib.h> #include <stdio.h> #define ROW 10 #define COL 5 main() int i,j,a[row][col],timi; for(i=0;i<row;i++) for(j=0;j<col;j++) a[i][j]=rand() % 100; 13

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

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

Άθροισμα των στοιχείων ενός πίνακα 2Δ (2/3) Η συνάρτηση sum που ακολουθεί επιστρέφει ως τιμή το άθροισμα των στοιχείων ενός πίνακα ακεραίων 10Χ5. Εναλλακτική δήλωση πίνακα 2Δ σαν παράμετρο συνάρτησης. #define ROW 10 #define COL 5 int sum2(int p[row][col]) int i,j,ss=0; for(i=0;i<row;i++) for(j=0;j<col;j++) ss=ss+p[i][j]; return ss; 16

Άθροισμα των στοιχείων ενός πίνακα 2Δ (3/3) Η συνάρτηση sum χρησιμοποιώντας την τρίτη εναλλακτική δήλωση πίνακα 2Δ σαν παράμετρο συνάρτησης. Η υλοποίηση αυτή απαιτεί συμμόρφωση του compiler στο πρότυπο C99 (gcc που χρησιμοποιούμε). Πλεονεκτήμα: Συγγραφή γενικών συναρτήσεων. int sum3(int p_row, int p_col, int p[p_row][p_col]) int i,j,ss=0; for(i=0;i<p_row;i++) for(j=0;j<p_col;j++) ss=ss+p[i][j]; return ss; 17

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

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

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

Εύρεση ενός αριθμού σε έναν πίνακα 2Δ Η ακόλουθη συνάρτηση find επιστρέφει την τιμή TRUE στην περίπτωση που ο αριθμός ar εντοπιστεί μέσα στον πίνακα. Διαφορετικά επιστρέφει την τιμή FALSE. Τόσο ο πίνακας όσο και ο αριθμός μεταβιβάζονται στη συνάρτηση ως παράμετροι. bool find(int p[][col], int ar) int i,j; bool found; found=false; for(i=0;i<row;i++) for(j=0;j<col;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. 21

Εύρεση ενός αριθμού σε έναν πίνακα 2Δ Η ακόλουθη συνάρτηση find2 επιστρέφει την τιμή TRUE στην περίπτωση που ο αριθμός ar εντοπιστεί μέσα στον πίνακα. Διαφορετικά επιστρέφει την τιμή FALSE. Τόσο ο πίνακας όσο και ο αριθμός μεταβιβάζονται στη συνάρτηση ως παράμετροι. bool find2(int r, int c, int p[r][c], int ar) int i,j; for(i=0;i<r;i++) for(j=0;j<c;j++) if (ar==p[i][j]) return TRUE; return FALSE; 22

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

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

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

Εμβέλεια Μεταβλητών 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,y και της τοπικής μεταβλητής ss 3 Χώρος εμβέλειας των τυπικών παραμέτρων x,y και των τοπικών μεταβλητών 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 26

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

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

Εμβέλεια Μεταβλητών Μεταβλητή 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) και σε καμία άλλη. 29

Εμβέλεια Μεταβλητών Στο παρακάτω παράδειγμα ο πίνακας 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] 44 Μέσα από τη main() υπάρχει πρόσβαση στον πίνακα μέσω του ονόματος a, ενώ μέσα από τη συνάρτηση fillit() η πρόσβαση στον ίδιο πίνακα a γίνεται μέσω του ονόματος p. 30