Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Σχετικά έγγραφα
Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

είκτες και Πίνακες (2)

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

Επεξεργασία Αρχείων Κειµένου

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

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

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

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

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

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

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

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

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

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

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

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

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

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

Προγραμματισμός Συστημάτων

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

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

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

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

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

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

Προγραμματισμό για ΗΜΥ

ΗΥ-150. Πίνακες (Arrays)

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Κλάσεις και Αντικείµενα

Δείκτες στην C (επανάληψη)

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

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

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

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

Διάλεξη 9η: Πίνακες (arrays)

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

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

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

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

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

Προγραμματισμό για ΗΜΥ

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

οµές (structures) και Eνώσεις (unions)

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Επανάληψη. Εντολές while, for, do-while

Προγραμματισμό για ΗΜΥ

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

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

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

scanf() scanf() stdin scanf() printf() int float double %lf float

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

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

υναµικές οµές εδοµένων

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

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

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

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

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

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

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

Διάλεξη 11: Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία

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

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

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

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Εισαγωγή στην γλώσσα προγραμματισμού C

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

Transcript:

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Συναρτήσεις Εξωτερικές µεταβλητές Κανόνες εµβέλειας ιάρκεια µεταβλητών Αρχικοποίηση µεταβλητών Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-1

#include <stdio.h> Συναρτήσεις (Επανάληψη) int power(int m, int n); main() { int i; for (i = 0; i < 10; i++) printf( %d %d \n, i, power(2,i)); return 0; int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; i++) p = p * base; return p; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-2

Συναρτήσεις (Επανάληψη) Συναρτήσεις µπορούν να δηλωθούν σε οποιαδήποτε σειρά, σε ένα ή περισσότερα αρχεία. Βασικές Έννοιες Πρωτότυπο συνάρτησης Κλήση/Επιστροφή Παραµέτροι (τυπικές - πραγµατικές) Παραµέτροι - πέρασµα δια τιµής (call by value): διοχέτευση πληροφοριών προς τη συνάρτηση οι τιµές των πραγµατικών παραµέτρων αντιγράφονται σε νέες (προσωρινές) µεταβλητές κατά την εκτέλεση της κληθείσας συνάρτησης. η κληθείσα συνάρτηση δεν µπορεί να επηρεάσει άµεσα τις τιµές µεταβλητών στη συνάρτηση κλήσης. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-3

Συναρτήσεις (Επανάληψη) Πέρασµα δια αναφοράς (call by reference) Η συνάρτηση κλήσης παρέχει στη συνάρτηση κλήσης τη διεύθυνση µεταβλητών. Η κληθείσα συνάρτηση µπορεί να αλλάξει τις τιµές µεταβλητών στη συνάρτηση κλήσης. Πίνακες: Όταν το όνοµα ενός πίνακα δωθεί ως παράµετρος σε µια συνάρτηση, η τιµή που διοχετεύεται στη συνάρτηση είναι η διεύθυνση της αρχής του πίνακα (δεν αντιγράφονται τα στοιχεία του πίνακα). Έτσι η συνάρτηση µπορεί να αλλάξει τις τιµές του πίνακα, και οι αλλαγές γίνονται ορατές στην κληθείσα συνάρτηση. Με χρήση δεικτών µπορούµε να αναφερθούµε στα στοιχεία του πίνακα. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-4

Συναρτήσεις - Πίνακες χαρακτήρων Ζητούµενο: πρόγραµµα που παίρνει ως δεδοµένο εισόδου ένα κείµενο και επιστρέφει την πιο µεγάλη γραµµή του κειµένου. οµή του προγράµµατος: while (there is another line) if (it is longer than the previous longest) save it save its length print longest line ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-5

Παράδειγµα #include <stdio.h> #define MAXLINE 1000 /* maximum input line size */ int getline (char line[], int maxline); void copy (char to[], char from[]); main() { int len, max; char line[maxline], longest[maxline]; max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy (longest, line); if (max > 0) printf( %s, longest); return 0; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-6

int getline (char s[], int lim) { int c, i; Παράδειγµα (συν.) for (i = 0; i< lim-1 && (c=getchar())!=eof && c!= \n ; i++) s[i] = c; if (c == \n ) { s[i] = c; i++; s[i] = \0 ; return i; void copy (char to[], char from[]) { int i = 0; while ((to[i] = from[i])!= \0 ){ i++ ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-7

Παράδειγµα (συν.) Οι συναρτήσεις getline και copy δηλώνονται στην αρχή του προγράµµατος. Η συνάρτηση getline επικοινωνεί µε τη main µέσω ενός ζεύγους παραµέτρων εισόδου (που προσδιορίζουν το όνοµα και το µέγεθος ενός πίνακα) και της τιµής που επιστρέφει η getline, που αντιστοιχεί µε το µέγεθος της γραµµής κειµένου που έχει διαβαστεί. Προσέξτε: ηγραµµή αυτή κρατείται στον πίνακα που δόθηκε σαν παράµετρος στην getline. Έτσι µπορεί να διαβασθεί από την main, και αν το µέγεθός της είναι µεγαλύτερο από αυτό των γραµµών που έχουν διαβασθεί µέχρι στιγµής, να αντιγραφεί µέσω της συνάρτησης copy σε κάποιο άλλο πίνακα. Η συνάρτηση copy επικοινωνεί µε την main µέσω ενός ζεύγους παραµέτρων εισόδου που προσδιορίζουν τα ονόµατα δύο πινάκων. Στόχος της main είναι να αντιγράψει τα περιεχόµενα του δέυτερου στο πρώτο. Το αποτέλεσµα είναι ορατό από την main. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-8

Εξωτερικές/Εσωτερικές Μεταβλητές Οι εξωτερικές µεταβλητές ορίζονται έξω από το σώµα οποιασδήποτε συνάρτησης και έτσι µπορούν να χρησιµοποιηθούν από πολλές συναρτήσεις. Αντίθετα οι εσωτερικές µεταβλητές ορίζονται στο σώµα κάθε συνάρτησης και είναι γνωστές µόνο στη συνάρτηση στην οποία ορίζονται. #include <stdio.h> int sum; /* external variable */ int main(void) { int i; /* local or internal or automatic variable */ ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-9

Εξωτερικές Μεταβλητές (συν.) Χρήση Εξωτερικών µεταβλητών: Θεωρείτε ένας εναλλακτικός µηχανισµός για πέρασµα παραµέτρων σε συναρτήσεις και επιστροφή τιµών από αυτές. Προσοχή: λανθασµένη χρήση τους καταστρέφει τη δοµή και την αναγνωσιµότητα του κώδικα Συναρτήσεις που έχουν έναν πολύ µεγάλο αριθµό παραµέτρων καλύτερα να κάνουν χρήση των εξωτερικών µεταβλητών Οι εξωτερικές µεταβλητές είναι επίσης χρήσιµες λόγω της µεγαλύτερης εµβέλειας και της µεγαλύτερης διάρκεια ζωής σε σχέση µε τις εσωτερικές µεταβλητές. Αν δύο συναρτήσεις κάνουν χρήση ενός δεδοµένου αλλά δεν καλεί ποτέ η µία την άλλη τότε το δεδοµένο αυτό καλύτερα να φυλάγεται σε εξωτερική µεταβλητή. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-10

Παράδειγµα Πρόγραµµα για εύρεση µέγιστης γραµµής ενός κειµένου που χρησιµοποιεί εξωτερικές µεταβλητές. #include <stdio.h> #define MAXLINE 1000 /* maximum input line size */ int max; char line[maxline], longest[maxline]; int getline (void); void copy (void); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-11

main() { int len; extern int max; extern char longest[]; Παράδειγµα max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy (); if (max > 0) printf( %s, longest); return 0; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-12

int getline (void) { int c, i; extern char line[]; Παράδειγµα (συν.) for (i = 0; i< MAXLINE-1 && (c = getchar())!=eof && c!= \n ; i++) line[i] = c; if (c == \n ) { line[i] = c; i++; line[i] = \0 ; return i; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-13

Παράδειγµα (συν.) void copy (void) { int i = 0; extern char line[], longest[]; while ((longest[i] = line[i])!= \0 ){ i++ ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-14

Κανόνες Εµβέλειας Η εµβέλεια του ονόµατος µιας µεταβλητής ή µιας συνάρτησης είναι το τµήµα του προγράµµατος στο οποίο το όνοµα αυτό µπορεί να χρησιµοποιηθεί. Οι αυτόµατες µεταβλητές (automatic variables) που δηλώνονται στην αρχή κάθε συνάρτησης έχουν εµβέλεια µόνο τη συνάρτηση στην οποία δηλώνονται. Το ίδιο ισχύει και για τα ονόµατα των παραµέτρων µιας συνάρτησης. Οι εξωτερικές µεταβλητές έχουν εµβέλεια από το σηµείο στο οποίο δηλώθηκαν ως στο τέλος του αρχείου αυτού. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-15

int main(void) { Παράδειγµα... int sp = 0; double val[maxval]; void push(double f) { double pop(void) { Οι µεταβλητές sp και val µπορούν να χρησιµοποιηθούν στις συναρτήσεις push() και pop() απλά µέσω του ονόµατός τους χωρίς καµιά επιπλέον δήλωση. Αλλά οι µεταβλητές αυτές δεν είναι γνωστές στο main(), ούτε και τα ονόµατα των συναρτήσεων push() και pop(). ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-16

Κανόνες Εµβέλειας (συν.) Αν µία εξωτερική µεταβλητή πρέπει να χρησιµοποιηθεί πριν τον ορισµό της ή έχει οριστεί σε ένα διαφορετικό αρχείο τότε η δήλωση της µεταβλητής ως extern είναι απαραίτητη. Για παράδειγµα: extern int sp; extern double val[]; int main(void) { int sp=0; double val[maxval]; void push(double f) { ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-17

Κανόνες Εµβέλειας (συν.) Αξίζει να σηµειωθεί ότι όπως στις µεταβλητές έτσι και στις συναρτήσεις, όταν πρέπει να κάνουµε κλήση µιας συνάρτησης η οποία έχει οριστεί παρακάτω ή σε κάποιο άλλο αρχείο τότε απαιτείται η δήλωση του πρωτοτύπου της συνάρτησης. int square(int); /* function prototype */ int main(void) {.. x = square(5); int square(int I) { definition */ /* function ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-18

Κανόνες Εµβέλειας (συν.) Είναι πολύ σηµαντικός ο διαχωρισµός µεταξύ δήλωσης µιας εξωτερικής µεταβλητής και ορισµού µιας εξωτερικής µεταβλητής. Στην πρώτη περίπτωση κάνουµε γνωστές τις ιδιότητες της µεταβλητής (κυρίως τον τύπο της) ενώ στη δεύτερη περίπτωση του ορισµού µιας µεταβλητής επιπλέον δεσµεύουµε χώρο γι αυτή τη µεταβλητή. Πρέπει να υπάρχει µόνο ένας ορισµός µιας εξωτερικής µεταβλητής σε ένα και µόνο αρχείο από τα πολλά τα οποία αποτελούν την οντότητα ενός προγράµµατος. Στα υπόλοιπα αρχεία µπορούν να υπάρχουν δηλώσεις τύπου extern για την προσπέλαση της µεταβλητής αυτής. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-19

Κανόνες Εµβέλειας (συν.) Προσοχή... Η αρχικοποίηση µιας εξωτερικής µεταβλητής γίνεται µόνο κατά τον ορισµό αυτής. extern int x = 0; Λάθος!!!!! Στον ορισµό ενός πίνακα είναι απαραίτητος ο καθορισµός των διαστάσεων. Στη δήλωση όµως του πίνακα ως extern οι διαστάσεις του µπορούν να παραληφθούν. extern int arr[]; int main(void) { int arr[50]; void push(int x) { ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-20

ιάρκεια Μεταβλητών Οι εξωτερικές µεταβλητές έχουν διάρκεια ως το τέλος του προγράµµατος. Οι τοπικές µεταβλητές σε µία συνάρτηση έχουν διάρκεια ως το τέλος της εκτέλεσης της συνάρτησης. Σε περίπτωση που απαιτείται µια τοπική µεταβλητή να έχει διάρκεια ζωής όσο όλο το πρόγραµµα χρησιµοποιείται η λέξη κλειδί static κατά τον ορισµό της. void func(int x) { static int temp; Ορίζοντας µια εξωτερική µεταβλητή ως static τότε η εµβέλεια της µεταβλητής περιορίζεται στο αρχείο όπου αυτή ορίζεται και διαφέρει από οποιεσδήποτε συνώνηµες µεταβλητές σε άλλα αρχεία που αποτελούν το ίδιο πρόγραµµα. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-21

ηλώσεις Μεταβλητών Μπορούµε να δηλώσουµε µεταβλητές σε οποιοδήποτε block* εντολών του προγράµµατός µας και πιο συγκεκριµένα αµέσως µετά την αριστερή αγκύλη. Οι µεταβλητές αυτές κυριαρχούν και κρύβουν οποιεσδήποτε συνώνυµες µεταβλητές έχουν δηλωθεί σε εξωτερικά επίπεδα. Εχουν διάρκεια ζωής µέχρι ο έλεγχος του προγράµµατος φτάσει στην αντίστοιχη δεξιά αγκύλη. if ( n>0 ) { int i; /* declare a new i */ for (i=0;i<n;i++) *το block εντολών στη C κατασκευάζεται µε τις αγκύλες { και. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-22

ηλώσεις Μεταβλητών (συν.) Οι τοπικές (ή αλλοιώς αυτόµατες) µεταβλητές που ορίζονται στο σώµα των συναρτήσεων καθώς και οι τυπικές παράµετροι των συναρτήσεων κρύβουν οποιεσδήποτε εξωτερικές µεταβλητές ή συναρτήσεις µε το ίδιο όνοµα. int x; int y; void f(double x) { double y; Μέσα στη συνάρτηση f, το όνοµα x αναφέρεται στην παράµετρο της συνάρτησης που είναι ένας double και όχι στην εξωτερική µεταβλητή που είναι int. Το ίδιο ισχύει και για τη µεταβλητή y. Προτείνεται να µη χρησιµοποιούνται µεταβλητές στις συναρτήσεις τα ονόµατα των οποίων να συγκρούονται µε µεταβλητές του εξωτερικού επιπέδου. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-23

Αρχικοποίηση Μεταβλητών Γενικοί κανόνες αρχικοποίησης εξωτερικών και στατικών µεταβλητών: Απουσία ρητής αρχικοποίησης, οι εξωτερικές και οι στατικές (static) µεταβλητές αρχικοποιούνται µε την τιµή µηδέν. Σε περίπτωση ρητής αρχικοποίησης, η τιµή που µπορούν να λάβουν πρέπει να είναι µία σταθερή έκφραση (constant expression). int x = 1; char squote = \ ; Η αρχικοποίησή τους γίνεται µόνο µία φορά πριν ακριβώς την εκτέλεση του προγράµµατος. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-24

Αρχικοποίηση Μεταβλητών (συν.) Γενικοί κανόνες αρχικοποίησης αυτόµατων µεταβλητών Απουσία ρητής αρχικοποίησης, οι αυτόµατες (δηλ. τοπικές) µεταβλητές έχουν µη-καθορισµένες (δηλ. άχρηστες) τιµές. Σε περίπτωση ρητής αρχικοποίησης, η τιµή που µπορούν να λάβουν µπορεί να είναι οποιαδήποτε έκφραση που περιέχει µεταβλητές ή ακόµα και κλήσεις συναρτήσεων. int f(int x, int v[], int n) { int low = 0; int high = n-1; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-25

Αρχικοποίηση Μεταβλητών (συν.) Κανόνες Αρχικοποίησης Πινάκων Οι αρχικές τιµές ενός πίνακα δίνονται κατά τον ορισµό του, περιέχονται µεταξύ δεξιάς και αριστερής αγκύλης και διαχωρίζονται µε κόµµα: int a[] = { 1, 5, 18, 23; Αν η διάσταση παραληφθεί τότε υπολογίζεται από τον µεταφραστή βάσει του πλήθους των αρχικών τιµών (στο παράδειγµα η διάσταση του πίνακα a θα είναι τέσσερα). Αν οι αρχικές τιµές που δίνονται είναι λιγότερες της διάστασης τότε οι υπόλοιπες θέσεις τίθονται µηδέν για εξωτερικές, στατικές αλλά και αυτόµατες µεταβλητές τύπου πίνακα. Είναι λάθος να δίνονται περισσότερες αρχικές τιµές από τις θέσεις του πίνακα. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-26

Αρχικοποίηση Μεταβλητών (συν.) Κανόνες Αρχικοποίησης Πινάκων (συν.) εν υπάρχει τρόπος επανάληψης της ίδιας αρχικής τιµής για όλες τις θέσεις ενός πίνακα. εν µπορούµε να αρχικοποιήσουµε ένα ενδιάµεσο στοιχείο ενός πίνακα χωρίς να καθορίσουµε όλες τις προηγούµενες τιµές του. Στους πίνακες χαρακτήρων υπάρχει ένας εναλλακτικός πιο εύκολος τρόπος αρχικοποίησης αντί της χρήσης των {, και,. char text[] = Hello ; είναι συντοµογραφία του char text[] = { H, e, l, l, o, \0 ; Ή διάσταση του πίνακα γίνεται και στις δύο περιπτώσεις έξι (πέντε χαρακτήρες συν ο τερµατικός χαρακτήρας \0 ). ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-27

Εργασία Ο αντίστροφος πολωνικός συµβολισµός (Jan Lukasiewich, 1951) είναι µια µέθοσος αναπαράστασης αριθµητικών παραστάσεων που δεν κάνει χρήση παρενθέσεων. π.χ. αντί α + β γράφουµε α β + (α + β)*γ γράφουµε α β + γ * α + (β*γ) γράφουµε α β γ * + α*β + γ*δ γράφουµε α β * γ δ * + Να εισηγηθείτε µέθοδο που να υπολογίζει τη τιµή µιας αριθµητικής παράστασης γραµµένης σε πολωνικό συµβολισµό. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-28