5ο σετ σημειώσεων - Δείκτες

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "5ο σετ σημειώσεων - Δείκτες"

Transcript

1 5ο σετ σημειώσεων - Δείκτες 11 Ιουνίου 01 1 Γενικά Σύμφωνα με το γενικό μοντέλο υπολογιστή, ένας υπολογιστής είναι μία μηχανή που διαθέτει μία κεντρική μονάδα επεξεργασίας η οποία μπορεί μεταξύ άλλων να διαβάζει και να γράφει δεδομένα στη μνήμη. Η μνήμη είναι οργανωμένη σε μία σειρά διαδοχικών θέσεων και μπορεί κανείς να αναφερθεί σε κάποια από αυτές με τη διεύθυνσή της. Είδαμε ότι δηλώνοντας μεταβλητές μπορούμε να αποφύγουμε τον άμεσο χειρισμό διευθύνσεων και να αναφερόμαστε σε αυτές με κάποιο όνομα, γεγονός που κάνει την ανάπτυξη προγραμμάτων σαφώς ευκολότερη. Δηλώνοντας μία μεταβλητή, κάπως έτσι int a; η γλώσσα αυτόματα την αντιστοιχίζει σε μία θέση μνήμης την οποία δεν χρειάζεται (και δεν θέλουμε) να ξέρουμε. Γράφοντας το όνομα της μεταβλητής μέσα στα πλαίσια μιας έκφρασης όπως a + ή (printf("%d",a); η γλώσσα βρίσκει σε ποια θέση μνήμης είναι αποθηκευμένη, τη διαβάζει και χρησιμοποιεί τα περιεχόμενά της όπως έχει ορίσει ο προγραμματιστής. Αντίστοιχα, αν θέλουμε να γράψουμε μία τιμή σε μία θέση μνήμης απλώς αναφέρουμε το όνομα της μεταβλητής στο αριστερό μέρος μίας εντολής ανάθεσης. Η γλώσσα και πάλι θα ψάξει να βρει την αντιστοίχιση. Ο παραπάνω χειρισμός της μνήμης είναι σαφώς βολικότερος από την απ ευθείας αναφορά αλλά έχει κάποιους περιορισμούς, καθώς υπάρχουν περιπτώσεις στις οποίες θέλουμε να ξέρουμε τη διεύθυνση μνήμης μιας μεταβλητής ή έστω την χρειαζόμαστε γιατί μας δίνει κάποιες δυνατότητες τις οποίες αλλιώς δεν θα είχαμε. Για παράδειγμα, είδαμε ότι οι συναρτήσεις της C δεν μπορούν να μεταβάλουν τα ορίσματά τους γιατί αυτά δίνονται στις συναρτήσεις κατ αξία, δηλαδή δημιουργείται ένα τοπικό αντίγραφο. Ο κώδικας της συνάρτησης θα μπορούσε όμως να πειράξει τα ορίσματα αν ήταν γνωστές οι διευθύνσεις τους. Μια άλλη περίπτωση στην οποία είναι απαραίτητη η γνώση των διευθύνσεων είναι η δυναμική δέσμευση μνήμης ¹. Τελεστές & και Η C μας δίνει τη δυνατότητα να μάθουμε, αν θέλουμε, τη θέση μνήμης στην οποία είναι αποθηκευμένη μία μεταβλητή με τον τελεστή αναφοράς (reference). Π.χ. το παρακάτω 1 int a; printf("%p", &a); ¹Είναι έξω από τα θέματα της πιστοποίησης. 1

2 θα μπορούσε να τυπώσει στην οθόνη 0xbfb971cc. Αν μετρήσετε τα ψηφία θα δείτε ότι είναι 4 ζευγάρια δεκαεξαδικών ψηφίων δηλαδή 4 bytes, δηλαδή όσα χρειάζονται για να ορίσουμε τη διεύθυνση μίας θέσης μνήμης σε έναν 3-bit υπολογιστή. Στο παραπάνω παράδειγμα δηλώσαμε μία μεταβλητή a τύπου int στη γραμμή 1. Στην επόμενη γραμμή με τον τελεστή & πήραμε τη διεύθυνση της μνήμης που δεσμεύτηκε για αυτήν τη μεταβλητή γράφοντας &a. Για να την τυπώσουμε χρειάστηκε να χρησιμοποιήσουμε τον specifier %p. Δείτε επίσης το παρακάτω: 3 int main() 5 int a; 6 char c, d; 7 float f; 8 printf("&a %p\n", &a); 9 printf("&c %p\n", &c); 10 printf("&d %p\n", &d); 11 printf("&f %p\n", &f); 1 13 return 0; 14 } Αν το τρέξετε θα δείτε κάτι σαν αυτό: &a 0xbff53664 &c 0xbff5366e &d 0xbff5366f &f 0xbff53668 Μπορούμε να βγάλουμε διάφορα συμπεράσματα: Ένα είναι ότι η διεύθυνση μιας ακέραιας μεταβλητής είναι ακριβώς της ίδιας μορφής με τη διεύθυνση μιας κινητής υποδιαστολής ή μιας χαρακτήρα. Αυτό είναι λογικό: Οι διευθύνσεις δηλώνουν τον αύξοντα αριθμό της θέσης μνήμης στην οποία είναι αποθηκευμένη μία μεταβλητή και αυτό είναι ανεξάρτητο από τον τύπο της. Επίσης μπορεί κανείς να παρατηρήσει ότι ο μεταγλωττιστής δεν βάζει τις μεταβλητές στη μνήμη με την ίδια σειρά που τις δηλώνουμε και για αυτό δεν κάνουμε ποτέ υποθέσεις για το που βρίσκονται οι μεταβλητές στη μνήμη. Μια άλλη ενδιαφέρουσα παρατήρηση που μπορεί να κάνει κανείς αν τρέξει το ίδιο πρόγραμμα αρκετές φορές είναι ότι οι θέσεις μνήμης στις οποίες είναι αποθηκευμένες οι μεταβλητές δεν είναι πάντα οι ίδιες. Πράγματι, το σύστημα τοποθετεί τις μεταβλητές όπου υπάρχει ελεύθερη μνήμη τη στιγμή που το τρέχουμε και προφανώς δεν είναι πάντα τα ίδια τμήματα της μνήμης ελεύθερα. Μια τελευταία παρατήρηση είναι ότι οι διευθύνσεις μνήμης είναι όλες τις ίδιας μορφής: 3-μπιτοι αριθμοί² και όπως είπαμε αυτό είναι αναμενόμενο αφού μία διεύθυνση είναι διεύθυνση ανεξάρτητα από το τι περιέχει. Θα μπορούσε κανείς να πει ότι όλες οι διευθύνσεις είναι ίδιες. Θα δούμε στη συνέχεια, ότι παρόλο που αυτό ισχύει, η C απαιτεί να δηλώνουμε τι είναι αυτό το οποίο βρίσκεται μέσα σε κάθε διεύθυνση. ²Σε έναν 3-μπιτο υπολογιστή εννοείται.

3 Είδαμε ότι αν γράψουμε τον τελεστη & μπροστά από το όνομα μιας μεταβλητής μας επιστρέφεται η διεύθυνσή της. Η αντίστροφή πράξη, αν δηλαδή έχουμε τη διεύθυνση μιας μεταβλητής και θέλουμε να διαβάσουμε ή να γράψουμε σε αυτήν πραγματοποιείται με τον τελεστή αποαναφοροποίησης (dereference) *. Γράφοντας δηλαδή το * μπροστά από μία διεύθυνση παίρνουμε τα περιεχόμενά της. Δείτε το παρακάτω 1 int a = ; printf("&a %p\n", &a); 3 printf("a %d\n", *(&a)); που θα τύπωνε κάτι σαν αυτό: &a 0xbf83b4c a Η μεταβλητή a έχει την τιμή και βρίσκεται στη θέση μνήμης 0xbf83b4c. η εντολή λοιπόν της γραμμής τυπώνει τη θέση μνήμης της μεταβλητής a δηλαδή 0xbf83b4c ενώ η εντολή της γραμμής 3 τυπώνει τα περιεχόμενα της θέσης μνήμης αυτής, δηλαδή. Μπορούμε κατά μία έννοια να πούμε ότι οι τελεστές & και * είναι αντίστροφοι, δηλαδή ο ένας κάνει την αντίστροφη δουλειά από τον άλλο. Αν έχουμε μια μεταβλητή, ο τελεστής & μας δίνει τη διεύθυνσή της. Και αν έχουμε μια διεύθυνση, ο τελεστής * μας δίνει πάλι τη μεταβλητή δηλαδή τα περιεχόμενά της³. 3 Δείκτες Η έννοια της διεύθυνσης μιας μεταβλητής έχει μεγάλη σημασία για αυτό και η γλώσσα ορίζει τύπους κατάλληλους για να αποθηκεύσουν διευθύνσεις. Και μάλιστα, παρόλο που όπως είδαμε στην προηγούμενη ενότητα, οι διευθύνσεις είναι ίδιες είτε είναι διευθύνσεις ακέραιων, είτε χαρακτήρων είτε ο,τιδήποτε, η C ορίζει ένα νέο τύπο διεύθυνσης για κάθε τύπο μεταβλητής. Οι μεταβλητές στις οποίες αποθηκεύονται διευθύνσεις άλλων μεταβλητών ονομάζονται δείκτες (pointers). Κάθε δείκτης πρέπει να δηλώνεται και μάλιστα να δηλώνεται και ο τύπος στον οποίο δείχνει. Για κάθε βασικό τύπο⁴ της C υπάρχει και ο αντίστοιχος τύπος δείκτη, αν δηλαδή θέλουμε να αποθηκεύσουμε σε έναν δείκτη τη διεύθυνση ενός ακεραίου τότε αυτός ο δείκτης θα πρέπει να έχει δηλωθεί ώς δείκτηςσε-ακέραιο, αν θέλουμε να αποθηκεύσουμε τη διεύθυνση ενός χαρακτήρα τότε ο δείκτης θα πρέπει να έχει δηλωθεί ως δείκτης-σε-χαρακτήρα κ.ο.κ. Για να δηλώσουμε ένα δείκτη προς κάποιο βασικό τύπο, γράφουμε τον τύπο και το όνομα της μεταβλητής-δείκτη αλλά μπροστά από το όνομα βάζουμε το χαρακτήρα *. Ο χαρακτήρας * όταν βρίσκεται σε μία δήλωση δεν πρέπει να συγχέεται με τον τελεστή αποαναφοροποίησης που αναφέρθηκε στην προηγούμενη ενότητα. Στα παρακάτω παραδείγματα οι μεταβλητές των οποίων το όνομα ξεκινάει από p είναι δείκτες στις αντίστοιχες μεταβλητές βασικών τύπων: ³Κάποιος μπορεί να φανταστεί ότι αν βάλουμε τον έναν μετά τον άλλον είναι σαν να αλληλοακυρώνονται. Πράγματι στο προηγούμενο παράδειγμα το να γράψουμε *(&a) ήταν σαν να γράφαμε a. Όμως το ανάποδο δηλαδή να γράψουμε &(*p) αν ο p είναι διεύθυνση μεταβλητής δεν επιτρέπεται. Καταλαβαίνετε γιατί; ⁴Φυσικά υπάρχουν δείκτες προς σύνθετους τύπους όπως οι structs, απλώς αναφέρονται οι βασικοί για λόγους απλότητας. 3

4 1 int a; char c; 3 float f; 4 5 int * pa = &a; 6 char * pc = &c; 7 float * pf = &f; Οι μεταβλητές τύπου δείκτη είναι μεταβλητές όπως και οι υπόλοιπες, δηλαδή μπορούμε να τις δηλώσουμε είτε ως τοπικές μεταβλητές είτε ως παραμέτρους σε συναρτήσεις, να αποτελούν μέρος μίας struct κτλ. Επίσης όμως διαφέρουν και σε αρκετά σημεία: Οι τελεστές που έχουμε συνηθίσει να χρησιμοποιούμε (αριθμητικοί για παράδειγμα) δεν έχουν όλοι την ίδια σημασία για τους δείκτες και πολλές φορές δεν ορίζονται. Και βέβαια υπάρχει η βασική εννοιολογική διαφορά ότι ορίζουμε μεταβλητές βασικών τύπων για να αποθηκεύσουμε σε αυτές δεδομένα που θέλουμε να χειριστεί το πρόγραμμά μας. Αντίθετα, οι τιμές των δεικτών δεν μας ενδιαφέρουν αυτές καθ αυτές, αλλά τα περιεχόμενα της θέσης μνήμης στην οποία δείχνουν. Δείτε για παράδειγμα το παρακάτω πρόγραμμα: 3 int main() 5 int a = 0; 6 int *p = &a; 7 8 printf("a: %d\n", a); 9 printf("p: %p\n", p); 10 printf("*p: %d\n", *p); 11 1 return 0; 13 } Έχουμε μια μεταβλητή a η οποία κρατάει το αποτέλεσμα ενός υπολογισμού το οποίο είναι ας πούμε 0 και έναν δείκτη προς την a με τιμή ας πούμε 0xbf916cc8. Η έξοδος του προγράμματος είναι: a: 0 p: 0xbf916cc8 *p: 0 Είναι προφανές ότι αυτό που μας ενδιαφέρει είναι το 0, η τιμή της μεταβλητής a η οποία κρατάει το αποτέλεσμα κάποιου φανταστικού υπολογισμού και όχι η τιμή της p η οποία άλλωστε συνήθως δεν θα είναι η ίδια. Απλώς, για τεχνικούς λόγους, είναι πιθανόν να έχουμε στη διάθεσή μας όχι την a αλλά έναν δείκτη προς την a, τον p. Σε τέτοιες περιπτώσεις, χρησιμοποιούμε τον δείκτη, όχι για να δώσουμε στον τελικό χρήστη την τιμή του αλλά την αποαναφοροποίηση του δηλαδή *p, δηλαδή τα περιεχόμενα της θέσης μνήμης στην οποία δείχνει ο p και όχι την τιμή του αυτήν καθ αυτήν. Δείτε το παρακάτω παράδειγμα για δείκτες. Δείχνει αφενός έναν από τους λόγους για τους οποίους χρησιμοποιούμε δείκτες, αφετέρου θα βοηθήσει να γίνει κατανοητό τι εννοούμε όταν λέμε ότι μας ενδιαφέρει όχι η τιμή του δείκτη αλλά η τιμή της θέσης μνήμης στην οποία δείχνει. Το παρακάτω 4

5 παράδειγμα δείχνει μία συνάρτηση false η οποία προσπαθεί να αλλάξει την τιμή ενός ορίσματός της, πράγμα που φυσικά δεν γίνεται και μία συνάρτηση correct που το πετυχαίνει με τη χρήση δεικτών. 3 void false(int a) 5 printf(" == false ==\ n"); 6 a = 5; 7 printf("a : %d\n", a); 8 printf("&a: %p\n", &a); 9 } void correct(int *p) 1 { 13 printf(" == correct ==\ n"); 14 *p = 5; 15 printf("*p: %d\n", *p); 16 printf(" p: %p\n", p); 17 } int main() 0 { 1 int a = ; printf("h a stn main eivai stn 8esn %p\n", &a); 3 false(a); 4 printf("h a stn main meta tnv false: %d\n", a); 5 correct(&a); 6 printf("h a stn main meta tnv correct: %d\n", a); 7 8 return 0; 9 } Αξίζει να τρέξετε το πρόγραμμα για να δείτε τι κάνει. Ακόμα καλύτερα να το τρέξετε μέσα από τον debugger. Η έξοδος του προγράμματος είναι η παρακάτω (αν το τρέξετε θα δείτε διαφορετικές τιμές στους δείκτες προφανώς): H a stn main eivai stn 8esn 0xbfb1c90c == false == a : 5 &a: 0xbfb1c8f0 H a stn main meta tnv false: == correct == *p: 5 p: 0xbfb1c90c H a stn main meta tnv correct: 5 5

6 Ας δούμε πρώτα για ποιο λόγο η συνάρτηση false δεν μπορεί να αλλάξει την τιμή της μεταβλητής a της συνάρτησης main: Βλέπουμε στην παραπάνω έξοδο, στη γραμμή 3 ότι η τιμή της a έγινε 5. Αλλά (όπως θα περιμέναμε και από τη θεωρία) δεν είναι η a της main που αλλάζει τιμή αλλά η παράμετρος a της συνάρτησης η οποία απλώς αρχικοποιήθηκε με την τιμή της a της main. Η a της συνάρτησης false βρίσκεται στη θέση μνήμης 0xbfb1c8f0 ενώ η a της main βρίσκεται στην 0xbfb1c90c, άρα πρόκειται για διαφορετικές μεταβλητές που απλώς έτυχε να έχουν το ίδιο όνομα. Το ότι η συνάρτηση false δεν μπόρεσε να αλλάξει την τιμή της a της main φαίνεται και από την γραμμή 5 στην έξοδο του προγράμματος όπου βλέπουμε ότι η a παραμένει. Αντίθετα η συνάρτηση correct χρησιμοποιεί ένα δείκτη προς την a, και στη γραμμή 14 αλλάζει τα περιεχόμενα της θέσης μνήμης 0xbfb1c90c στην οποία είναι αποθηκευμένη η μεταβλητή a της main. Το παρακάτω παράδειγμα είναι επίσης χαρακτηριστικό. Η συνάρτηση swap αλλάζει τις τιμές των δύο ορισμάτων της. Αυτό, προφανώς, δεν μπορεί να γίνει με απλές μεταβλητές και πρέπει να χρησιμοποιηθούν δείκτες. 3 void swap( int *pa, int * pb) 5 int t; 6 printf(" pa: %p, pb: %p\n", pa, pb); 7 t = *pa; 8 *pa = *pb; 9 *pb = t; 10 } 11 1 int main() 13 { 14 int a = ; 15 int b = 5; printf("h a stn main eivai stn 8esn %p\n", &a); 18 printf("h b stn main eivai stn 8esn %p\n", &b); 19 0 swap(&a, &b); 1 printf("a: %d, b: %d\n", a, b); 3 return 0; 4 } Θα ήταν καλό να τρέξετε το πρόγραμμα και αν είναι δυνατόν μέσα από τον debugger. Στην οθόνη θα τυπώσει κάτι σαν το παρακάτω. Βλέπουμε ότι οι μεταβλητές a και b είναι αποθηκευμένες στις θέσεις 0xbf8f5598 και 0xbf8f559c αντίστοιχα. Αυτές οι θέσεις μνήμης (και όχι οι τιμές των a και b) δίνονται ως παράμετροι στη συνάρτηση swap όπως φαίνεται και από την τρίτη γραμμή στην παρακάτω έξοδο. Στις γραμμές 7 έως 9 της συνάρτησης γίνεται η ανταλλαγή. Αν δεν χρησιμοποιούσαμε δείκτες θα κάναμε κάτι σαν αυτό: t = a;, a = b; και b = t;. Στη συνάρτησή μας κάνουμε το ίδιο αλλά με 6

7 τους αντίστοιχους δείκτες. Εδώ χρειάζεται προσοχή στο να χρησιμοποιηθούν οι αποαναφοροποιήσεις των δεικτών (*pa, *pb) και όχι οι δείκτες αυτοί καθ αυτοί (pa και pb). Για αυτό και στη γραμμή 7 αποθηκεύεται στην προσωρινή μεταβλητή t όχι η τιμή του δείκτη pa που είναι 0xbf8f5598 αλλά η τιμή που βρίσκεται στη θέση μνήμης 0xbf8f5598, που είναι η θέση μνήμης που αντιστοιχεί στη μεταβλητή a της main, δηλαδή. H a stn main eivai stn 8esn 0xbf8f5598 H b stn main eivai stn 8esn 0xbf8f559c pa: 0xbf8f5598, pb: 0xbf8f559c a: 5, b: Είναι εύκολο κανείς να μπερδευτεί και να χρησιμοποιήσει έναν δείκτη εκεί που θα έπρεπε να χρησιμοποιήσει την αποαναφοροποίησή του, δηλαδή να γράψει t = pa; εκεί που θα έπρεπε να γράψει t = *pa;. Ελπίζω ότι οι παρακάτω υποδείξεις θα βοηθήσουν: Να θυμάστε πάντα ότι ένας δείκτης έχει τιμή σαν αυτήν: 0xbf8f5598. Οπότε αν διστάζετε ανάμεσα στο να γράψετε t = pa; ή t = *pa; σκεφτείτε το εξής: έχει νόημα να δώσετε στην t ή σε οποιαδήποτε άλλη μεταβλητή του προγράμματός σας την τιμή 0xbf8f5598 (ή κάποια άλλη σαν κι αυτήν); Ένας άλλος κανόνας είναι να ελέγχετε τους τύπους των μεταβλητών. Η t είναι ακέραια. Ο p είναι δείκτης σε ακέραιο άρα οι τύποι τους δεν είναι συμβατοί. Αφού ο p είναι δείκτης σε ακέραιο τότε η αποαναφοροποίησή του *p είναι επίσης ακέραιος οπότε μία εντολή σαν την t = *pa; έχει συμβατούς αριστερά και δεξιά τύπους ενώ η t = pa; δεν έχει. 4 Δείκτες και πίνακες - αριθμητική δεικτών Σε αυτήν την ενότητα θα δούμε την σχέση ανάμεσα στους δείκτες και τους πίνακες. Θεωρήστε το παρακάτω πρόγραμμα το οποίο δηλώνει έναν πίνακα ακεραίων με 5 στοιχεία. Επίσης στη γραμμή 6 δηλώνει ένα δείκτη σε ακέραιο και του αναθέτει τη διεύθυνση του πρώτου στοιχείου του πίνακα. 3 int main() 5 int pin[5] = { 0, 11,, 33, 44 }; 6 int* p = &pin[0]; 7 int i; 8 9 printf(" To pin ws deiktns: %p\n", pin); 10 printf("h dieu8uvsn tou prwtou stoixeiou: %p\n", p); 11 1 for (i = 0; i < 5; ++i) 13 printf("&pin[%d]: %p, p+%d: %d\n", &pin[i], p+i); for (i = 0; i < 5; ++i) 16 printf("#%d: %d ", i, pin[i]); 17 printf("\n"); 7

8 18 for (i = 0; i < 5; ++i) 19 printf("#%d: %d ", i, *(p+i)); 0 1 return 0; } Η έξοδος του οποίου είναι η παρακάτω: To pin ws deiktns: 0xbfa36754 H dieu8uvsn tou prwtou stoixeiou: 0xbfa36754 &pin[0]: 0xbfa36754, p+0: 0xbfa36754 &pin[1]: 0xbfa36758, p+1: 0xbfa36758 &pin[]: 0xbfa3675c, p+: 0xbfa3675c &pin[3]: 0xbfa36760, p+3: 0xbfa36760 &pin[4]: 0xbfa36764, p+4: 0xbfa36764 #0: 0 #1: 11 #: #3: 33 #4: 44 #0: 0 #1: 11 #: #3: 33 #4: 44 Παρατηρείστε ότι η C δεν θεωρεί συντακτικό λάθος να τυπώσουμε την τιμή pin ως δείκτη και μάλιστα η τιμή αυτή είναι ίδια με τη διεύθυνση μνήμης του πρώτου στοιχείου του πίνακα. Το for των γραμμών 1-13 του πίνακα τυπώνει την διεύθυνση των στοιχείων pin[i] του πίνακα για τιμές του i από 0 έως 4 και παράλληλα την τιμή του δείκτη p+i. Βλέπουμε ότι ανά δύο οι τιμές είναι ίδιες. Δηλαδή αν p είναι η διεύθυνση του πρώτου στοιχείου ενός πίνακα, τότε p+1 είναι η διεύθυνση του δεύτερου, p+ είναι η διεύθυνση του τρίτου κ.ο.κ. Χρησιμοποιούμε αυτό το δεδομένο στους βρόχους των γραμμών και για να τυπώσουμε τα στοιχεία του πίνακα στη μία περίπτωση με το συντακτικό με τις αγκύλες που ήδη γνωρίζουμε αλλά και χρησιμοποιώντας δείκτες στα αντίστοιχα στοιχεία και αποαναφοροποίηση. Εδώ χρειάζεται λίγη προσοχή: είπαμε ότι ο δείκτης p+i είναι δείκτης προς το i-1 στοιχείο του πίνακα. Άρα βάζοντας μποροστά του τον τελεστή αποαναφοροποίησης * θα πάρουμε τα περιεχόμενά του. Λόγω της προτεραιότητας όμως των τελεστών και συγκεκριμένα επειδή ο * έχει υψηλότερη προτεραιότητα από τον + αν γράψουμε *p+i δεν θα πάρουμε τα περιεχόμενα του i-1 στοιχείου του πίνακα αλλά τα περιεχόμενα του πρώτου στοιχείου του πίνακα συν τον αριθμό i, δηλαδή η σειρά υπολογισμού είναι αυτή: (*p)+i. Για να το αποφύγουμε αυτό βάζουμε παρενθέσεις ώστε πρώτα να προστεθεί το i στο p για να πάρουμε ένα δείκτη στο i-1 στοιχείο και μετά να γίνει η αποαναφοροποίηση: *(p+i); Επίσης παρατηρούμε το εξής: Ενώ ο δείκτης p έχει τιμή 0xbfa36754, ο δείκτης p+1 έχει τιμή 0xbfa36758, ο δείκτης p+ 0xbfa3675c κοκ. Μέ άλλα λόγια, προσθέτοντας τον αριθμό 1 σε κάποιον δείκτη, δεν παίρνουμε αυτό που θα μας έδινε η συνηθισμένη πρόσθεση ακεραίων αλλά ένα δείκτη που δείχνει στον επόμενο ακέραιο. Παρατηρήστε ότι οι τιμές των δεικτών διαφέρουν κατά 4 μονάδες, όσα bytes δηλαδή καταλαμβάνει ένας ακέραιος. Αυτή η ιδιαίτερη αριθμητική ονομάζεται αριθμητική δεικτών. 8

9 5 Παραδείγματα χρήσης δεικτών Ας δούμε ορισμένα παραδείγματα που συχνά εμφανίζονται στην πράξη. Είδαμε στην προηγούμενη ενότητα πώς μπορούμε να σαρώσουμε τα στοιχεία ενός πίνακα αν έχουμε ένα δείκτη στο πρώτο στοιχείο του πίνακα γράφοντας *p, *(p+1), *(p+) κοκ. Στην πράξη αυτό το ιδίωμα χρησιμοποιείται σπάνια. Αντί για αυτό, ξεκινάμε με ένα δείκτη στο πρώτο στοιχείο του πίνακα τον οποίο αυξάνουμε κατά μία μονάδα με τον τελεστή ++ σε κάθε επανάληψη. Για να τυπώσουμε τα στοιχεία του προηγούμενου πίνακα, για παράδειγμα, θα χρησιμοποιούσαμε ένα for σαν κι αυτό: 1 for (i = 0; i < 5; ++i) { printf("%d ", *p); 3 p++; 4 } Το προηγούμενο παράδειγμα είναι απλό και κατανοητό αλλά ακόμα κι αυτό χρησιμοποιείται σπάνια στην πράξη. Οι προγραμματιστές συνήθως γράφουν το πιο σύντομο: 1 for (i = 0; i < 5; ++i) printf("%d ", *p++); Ας δούμε λίγο πιο αναλυτικά τι σημαίνει αυτό το *p++. Ο τελεστής ++ έχει υψηλότερη προτεραιότητα από τον τελεστή * αλλά επειδή χρησιμοποιείται η μεταθεματική μορφή του σημαίνει ότι θα αυξήσει τον δείκτη p κατά μία μονάδα αλλά αφού τελειώσει η εκτέλεση της τρέχουσας εντολής. Οπότε ο τελεστής * εφαρμόζεται στην τρέχουσα τιμή του δείκτη p και έτσι παίρνουμε την τιμή του στοιχείου στο οποίο δείχνει ο p. Αφού γίνει αυτό εκτελείται ο μεταθεματικός τελεστής και ο p αυξάνεται κατά μία μονάδα, έχοντας την τιμή που θα χρειαστεί στην επόμενη επανάληψη. Μια άλλη χαρακτηριστική χρήση των δεικτών είναι στο πέρασμα στοιχείων συμβολοσειρών. Θυμηθείτε ότι συμβολοσειρά είναι μια σειρά χαρακτήρων αποθηκευμένων σε έναν πίνακα της οποίας το τέλος σηματοδοτείται από τον ειδικό χαρακτήρα '\0'. Έχοντας λοιπόν στη διάθεσή μας ένα δείκτη προς τον πρώτο χαρακτήρα μιας συμβολοσειράς μπορούμε να σαρώσουμε όλα τα στοιχεία της. Δεν χρειάζεται να γνωρίζουμε το μήκος της: θα σταματήσουμε όταν ο χαρακτήρας στον οποίο δείχνει ο δείκτης μας είναι ο χαρακτήρας τερματισμού. Δείτε την παρακάτω συνάρτηση στην οποία δίνεται ο δείκτης στην αρχή μιας συμβολοσειράς και τυπώνει έναν προς έναν τους χαρακτήρες της. 3 void printstring(char* p) 5 while (*p) 6 printf("%c", *p++); 7 } 8 9 int main() 10 { 11 char s[100]; 1 printf(" Grapse kati: "); gets(s); 13 printstring(s); 9

10 14 return 0; 15 } Αρχικά ζητείται από τον χρήστη μια συμβολοσειρά η οποία αποθηκεύεται στον πίνακα s. Αυτός δίνεται ως παράμετρος στη συνάρτηση printstring (οι τύποι είναι συμβατοί, ένας πίνακας χαρακτήρων είναι δείκτης σε χαρακτήρα). Στη γραμμή 5 ξεκινάει ένας βρόχος while ο οποίος εκτελείται όσο το *p δηλαδή ο χαρακτήρας στον οποίο δείχνει ο p δεν είναι μηδέν δηλαδή δεν είναι ο χαρακτήρας τερματισμού συμβολοσειράς. Αν αυτό συμβαίνει τότε τυπώνεται ο χαρακτήρας και ο δείκτης p αυξάνεται κατά μία μονάδα ώστε να δείχνει στον επόμενο χαρακτήρα κοκ. Δείτε επίσης μία συνάρτηση η οποία μετράει το μήκος μιας συμβολοσειράς. Το σκεπτικό είναι ότι αν έχουμε ένα δείκτη στην αρχή της συμβολοσειράς και ένα δείκτη στο τέλος της, τότε το μήκος είναι η διαφορά των δύο δεικτών. Οπότε χρειαζόμαστε δύο δείκτες, έναν για να τον προχωρήσουμε μέχρι το τέλος της συμβολοσειράς και έναν που να δείχνει στην αρχή της. Το while της γραμμής 4 προχωράει το δείκτη s1 που αρχικά δείχνει στην αρχή της συμβολοσειράς, μέχρι το τέλος της. Το σώμα του βρόχου είναι κενό γιατί δεν χρειάζεται να κάνουμε κάποια πράξη. Παρατηρήστε ότι ο δείκτης s1 θα προχωρήσει λίγο περισσότερο από όσο θα θέλαμε, μία θέση για την ακρίβεια. Ο λόγος είναι ότι όταν ο δείκτης δείξει το τέλος της συμβολοσειράς τότε η συνθήκη θα είναι ψευδής *s1++ αλλά ο τελεστής ++ θα αυξήσει την τιμή του κατά μία μονάδα οπότε θα δείχνει εκεί που θέλαμε, συν ένα. Για αυτό τελικά δεν επιστρέφουμε στη γραμμή 5 s1 - s αλλά s1 - s int mystrlen(char* s) { 3 char * s1 = s; 4 while (*s1++); 5 return s1 - s - 1; 6 } Το παρακάτω παράδειγμα δείχνει μία συνάρτηση η οποία αντιγράφει μία συμβολοσειρά που είναι αποθηκευμένη στον πίνακα s1 στον πίνακα s. 1 void mystrcpy( char* s1, char* s) { 3 while (*s++ = *s1++); 4 } Και ένα παράδειγμα το οποίο μετατρέπει τους πεζούς χαρακτήρες σε κεφαλαίους σε μία συμβολοσειρά s. 1 void mycap(char* s) { 3 while (*s) { 4 if (*s >= 'a' && *s <= 'z') 5 *s += 'A' - 'a'; 6 } 7 } Ασκήσεις: Μπορείτε να θεωρήσετε όλα τα παραπάνω παραδείγματα ως ασκήσεις τις οποίες θα πρέπει να υλοποιήσετε. Κοιτάξτε τα θέματα πιστοποίησης 11, 134, 135, 136, 138, 140, 141, 10

11 14, 143 και 154. Επίσης μπορείτε να δείτε τα 114, 18, 130, 13 που υλοποιούνται μεν με πίνακες αλλά μπορείτε να τα υλοποιήσετε με συναρτήσεις οπότε να χρησιμοποιήσετε δείκτες. 11

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

Διαβάστε περισσότερα

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014 Πίνακες 0 Μαρτίου 014 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα του συγκεκριμένου τύπου. Στην περίπτωση που θέλουμε

Διαβάστε περισσότερα

Μεταβλητές τύπου χαρακτήρα

Μεταβλητές τύπου χαρακτήρα Μεταβλητές τύπου χαρακτήρα 31 Μαρτίου 014 1 Μεταβλητές τύπου char Για χειρισμό χαρακτήρων η C διαθέτει τον τύπο char. Ο τύπος είναι βαθμωτός δηλαδή ακέραιης αναπαράστασης. Τυπικά έχει μέγεθος ενός byte

Διαβάστε περισσότερα

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

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012 ο σετ σημειώσεων 19 Μαρτίου 01 1 Εντολές εκτέλεσης υπό συνθήκη Μπορούμε να εκτελέσουμε εντολές της γλώσσας σε περίπτωση που κάποια συνθήκη ισχύει χρησιμοποιώντας την εντολή if. Συντάσσεται ως εξής: 1 if

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

Εντολές ελέγχου ροής if, for, while, do-while

Εντολές ελέγχου ροής if, for, while, do-while Εντολές ελέγχου ροής if, for, while, do-while 1 Μαρτίου 014 1 Εντολές εκτέλεσης υπό συνθήκη Μπορούμε να εκτελέσουμε εντολές της γλώσσας σε περίπτωση που κάποια συνθήκη ισχύει χρησιμοποιώντας την εντολή

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα. Η συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας τον τελεστή

Διαβάστε περισσότερα

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

Pascal. 15 Νοεμβρίου 2011 Pascal 15 Νοεμβρίου 011 1 Procedures σε Pascal Στην Pascal μπορούμε να ορίσουμε διαδικασίες (procedures). Αυτές είναι ομάδες εντολών οι οποίες έχουν ένα όνομα. Γράφοντας το όνομα μιας διαδικασίας μπορούμε

Διαβάστε περισσότερα

Ψευδοκώδικας. November 7, 2011

Ψευδοκώδικας. November 7, 2011 Ψευδοκώδικας November 7, 2011 Οι γλώσσες τύπου ψευδοκώδικα είναι ένας τρόπος περιγραφής αλγορίθμων. Δεν υπάρχει κανένας τυπικός ορισμός της έννοιας του ψευδοκώδικα όμως είναι κοινός τόπος ότι οποιαδήποτε

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Μεταβλητές-Σταθερές-Παράμετροι Τα στοιχεία

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα: είδαμε ότι συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 7ο Τμήμα Διοίκησης Επιχειρήσεων Παλαιό ΕΠΔΟ α εξάμηνο Β. Φερεντίνος Δείκτες (Pointers) (1) 142 Κάθε μεταβλητή, εκτός από την τιμή της, έχει και μία συγκεκριμένη διεύθυνση

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

Λύσεις για τις ασκήσεις του lab5

Λύσεις για τις ασκήσεις του lab5 Εισαγωγή Λύσεις για τις ασκήσεις του lab5 Επειδή φάνηκε να υπάρχουν αρκετά προβλήματα σχετικά με τον τρόπο σκέψης για την επίλυση των προβλημάτων του lab5, θα συνοδεύσουμε τις λύσεις με αρκετές επεξηγήσεις,

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 4 η Τελεστές Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β 1. (10 μον.) Απαντήστε σωστό ή λάθος στις παρακάτω ερωτήσεις (αʹ) _2togo είναι έγκυρο όνομα μεταβλητής (βʹ) Αν p είναι δείκτης στο πρώτο στοιχείο

Διαβάστε περισσότερα

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Η C, όπως έχουμε αναφέρει, είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε για πρώτη φορά το 1972 από τον Dennis Ritchie στα AT&T Bell

Διαβάστε περισσότερα

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 3: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αριθμητική Δεικτών Δείκτες και Πίνακες Παραδείγματα Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης

Διαβάστε περισσότερα

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 3ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΕΚΤΥΠΩΣΗ ΚΕΙΜΕΝΟΥ Ένα κείμενο μπορεί να εκχωρηθεί ως τιμή μιας μεταβλητής

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Αριθμητική Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Δεύτερο Πρόγραμμα 1 / * Second Simple Program : add 2 numbers * / 2

Διαβάστε περισσότερα

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

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

Διαβάστε περισσότερα

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

scanf() scanf() stdin scanf() printf() int float double %lf float Εισαγωγή Στον Προγραµµατισµό «C» Είσοδος Δεδοµένων Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Η συνάρτηση scanf() Η συνάρτηση

Διαβάστε περισσότερα

Βασικές Αρχές Προγραμματισμού

Βασικές Αρχές Προγραμματισμού Βασικές Αρχές Προγραμματισμού Κεφάλαιο 2 ΗγλώσσαC Ιστορική Αναδρομή ΗανάπτυξητηςC ξεκίνησε το 1972 στα εργαστήρια Bell από τον Dennis Ritchie με σκοπό την ανάπτυξη ενός λειτουργικού συστήματος για τον

Διαβάστε περισσότερα

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19) Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα: είδαμε ότι συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας

Διαβάστε περισσότερα

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι

Διαβάστε περισσότερα

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6.1 Η Έννοια του Πίνακα Συχνά είναι προτιμότερο να αντιμετωπίζουμε ένα σύνολο μεταβλητών σαν ενότητα για να απλοποιούμε το χειρισμό τους. Έτσι οργανώνουμε σύνθετα δεδομένα σε

Διαβάστε περισσότερα

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1 Γλώσσα Προγραμματισμού C++ ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1 Τα δεδομένα Οι σταθερές Τα δεδομένα (πληροφορίες-data) είναι απαραίτητα στοιχεία ενός προγράμματος, καθώς οι βασικές λειτουργίες ενός προγράμματος είναι

Διαβάστε περισσότερα

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

Διαβάστε περισσότερα

Τύποι δεδομένων, τελεστές, μεταβλητές

Τύποι δεδομένων, τελεστές, μεταβλητές Τύποι δεδομένων, τελεστές, μεταβλητές Βασικά στοιχεία της γλώσσας Η Java χαρακτηρίζεται από ένα αρκετά καλά οργανωμένο σύνολο εντολών κι ένα μέρος της επιτυχίας της οφείλεται στα διάφορα APIs (βιβλιοθήκες)

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Διάλεξη 5: Δείκτες και Συναρτήσεις

Διάλεξη 5: Δείκτες και Συναρτήσεις Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο

Διαβάστε περισσότερα

Διάλεξη 11η: Δείκτες, μέρος 1

Διάλεξη 11η: Δείκτες, μέρος 1 Διάλεξη 11η: Δείκτες, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Pointers I CS100, 2016-2017

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε

Διαβάστε περισσότερα

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C Η C, όπως όλες οι γλώσσες προγραμμστισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές λειτουργίες.

Διαβάστε περισσότερα

Υπερφόρτωση τελεστών

Υπερφόρτωση τελεστών Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for) 4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for) 4.1 Μετρητές Ένας μετρητής (counter) είναι μία μεταβλητή η οποία ξεκινά με μία αρχική τιμή και αυξάνεται κατά ένα κάθε φορά που εκτελείται. Ο αλγόριθμος για έναν μετρητή

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις (Functions) Οι βασικές λειτουργικές ενότητες ενός προγράμματος C Καλούνται με ορίσματα που αντιστοιχούνται σε

Διαβάστε περισσότερα

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

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 9 η Χαρακτήρες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while) 5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while) 5.1 Ο βρόχος while Η εντολή while παρέχει έναν μηχανισμό επανάληψης των δηλώσεων όσο μια συνθήκη είναι αληθινή. Χρησιμοποιείται όταν ο αριθμός των επαναλήψεων

Διαβάστε περισσότερα

Οι δείκτες στη γλώσσα C

Οι δείκτες στη γλώσσα C Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 10: Δείκτες Δείκτες Υπάρχουν περιπτώσεις που δεν ενδιαφέρει το περιεχόμενο αλλά η μιας μεταβλητής. Χρειάζεται κατάλληλος μηχανισμός αναφοράς και επεξεργασίας τιμών που

Διαβάστε περισσότερα

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8 Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 1000 1001 1002 1003 1004 1005 12 9.8 9976 3 1010 26 1006 1007 1008 1009 1010 1011 16 125 1299 a 13 1298 Δήλωση Δήλωση Τύπος

Διαβάστε περισσότερα

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2 Εισαγωγή στον προγραμματισμό Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2 Δομή Προγράμματος Όλα τα προγράμματα που γράψαμε έχουν λίγο πολύ την ακόλουθη μορφή: Κάποιος κώδικας εδώ main( ) {

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 4: Τελεστές Τελεστές: Τελεστής Ανάθεσης 2 Το σύμβολο της ανάθεσης είναι το = Προσοχή: το σύμβολο ελέγχου ισότητας είναι το ==. Η μορφή των προτάσεων ανάθεσης είναι:

Διαβάστε περισσότερα

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα Αλφαριθμητικά Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό

Διαβάστε περισσότερα

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

Διαβάστε περισσότερα

Ενδεικτικές λύσεις και στατιστικά

Ενδεικτικές λύσεις και στατιστικά Προγραμματισμός 1 Σύντομο Quiz 25/9/9 Ενδεικτικές λύσεις και στατιστικά Ερώτηση 1: Γράψτε παρακάτω συνάρτηση η οποία δέχεται ως παραμέτρους ένα string και ένα χαρακτήρα και επιστρέφει τον αριθμό των εμφανίσεων

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Τιμή Τιμή. σκορ. ζωές

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

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τον ορισμό, τη δήλωση και τη χρήση των χαρακτήρων, συνεπώς και των αλφαριθμητικών, της Γλώσσας

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 23 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 2ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος I/O 24 Βασική βιβλιοθήκη συναρτήσεων εισόδου/εξόδου #include Η συνάρτηση εξόδου printf printf("συμβολοσειρά

Διαβάστε περισσότερα

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C) Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C) ΚΑΤΑΛΟΓΟΣ ΕΡΩΤΗΣΕΩΝ ΕΡΩΤΗΣΕΙΣ ΕΙ ΙΚΩΝ ΓΝΩΣΕΩΝ (γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση Ορισμός μεταβλητών δεικτών και αρχικοποίηση Η έννοια του δείκτη Κάθε μεταβλητή σχετίζεται με μια θέση στην κύρια μνήμη του Η/Υ η οποία έχει τη δική της ξεχωριστή διεύθυνση Ο δείκτης είναι μια μεταβλητή

Διαβάστε περισσότερα

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Χαρακτήρες Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Χαρακτήρες - Εισαγωγή Έως τώρα έχουμε κατά κύριο λόγο χρησιμοποιήσει τους αριθμητικούς τύπους

Διαβάστε περισσότερα

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

Διαβάστε περισσότερα

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

Διαβάστε περισσότερα

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

Διαβάστε περισσότερα

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

Διαβάστε περισσότερα

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ Λογικός τύπος ( ) Ο τύπος είναι κατάλληλoς για την αναπαράσταση ποσοτήτων που μπορούν να πάρουν δύο μόνο τιμές (π.χ. ναι/όχι, αληθές/ψευδές, ). Τιμές ή Δήλωση Εκχώρηση Ισοδυναμία με ακέραιους

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Δείκτες (pointers) και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Αριθμητική Δεικτών - Δείκτες και Πίνακες - Παραδείγματα Διδάσκων: Παναγιώτης

Διαβάστε περισσότερα

Σημειώσεις για πρόοδο στο εργαστήριο

Σημειώσεις για πρόοδο στο εργαστήριο Σημειώσεις για πρόοδο στο εργαστήριο 5 Απριλίου 2012 1. Γράψτε πρόγραμμα το οποίο τυπώνει τους αριθμούς από 1 έως 10 σε μία γραμμή τον καθένα. 3 int i; 4 for (i = 0; i < 10; ++i) 5 printf("%d\n", i); 6

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ Πρώτα να δούμε τι ακριβώς συμπεριλαμβάνει μια μεταβλητή τύπος Καθορίζει το μέγεθος στην μνήμη σε Bytes τιμή Η αριθμητική τιμή που αποθηκεύεται στην

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #2 2 Γενικά Στο Εργαστήριο αυτό θα αναλύσουμε τη χρήση της βασικής εντολής ελέγχου ροής

Διαβάστε περισσότερα