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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

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

Transcript

1 Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου Διαχείριση Μνήμης Η διαχείριση της μνήμης ενός υπολογιστή μπορεί να γίνει με δύο τρόπους: με τον στατικό τρόπο ή με τον δυναμικό τρόπο Σε όλα τα προγράμματα που έχουμε δει μέχρι αυτό το σημείο, η δέσμευση μνήμης γινόταν με τον στατικό τρόπο Ο μεταγλωττιστής χωρίζει τη διαθέσιμη μνήμη του υπολογιστή στα ακόλουθα τέσσερα τμήματα: 1) Στο τμήμα που ονομάζεται στοίβα (stack) και χρησιμοποιείται για τη δέσμευση μνήμης με στατικό τρόπο 2) Στο τμήμα που ονομάζεται σωρός (heap) και χρησιμοποιείται για τη δέσμευση μνήμης με δυναμικό τρόπο 3) Στο τμήμα από το οποίο δεσμεύεται μνήμη για τις καθολικές μεταβλητές του προγράμματος 4) Στο τμήμα από το οποίο δεσμεύεται μνήμη για την αποθήκευση του κώδικα (π.χ. εντολές, συναρτήσεις,...) του προγράμματος 2 1

2 Στατική Δέσμευση Μνήμης (I) Με τον στατικό τρόπο δέσμευσης, ο προγραμματιστής πρέπει να γνωρίζει εκ των προτέρων το ακριβές μέγεθος της μνήμης που χρειάζεται να δεσμεύσει Το μέγεθος της μνήμης που δεσμεύεται με στατικό τρόπο δεν μπορεί να μεταβληθεί κατά τη διάρκεια του προγράμματος Π.χ. όταν δημιουργούμε ένα πρόγραμμα για την αποθήκευση των βαθμών 500 φοιτητών, τότε γνωρίζουμε ότι πρέπει να δεσμεύσουμε μνήμη για 500 φοιτητές και όχι για 300 ή 600 (δηλ. το πρόγραμμα καθορίζει ακριβώς το μέγεθος της απαιτούμενης μνήμης) Άρα, με την εντολή: float grades[500]; δεσμεύουμε με στατικό τρόπο από τη μνήμη του υπολογιστή 500*4 = 2000 bytes Το μέγεθος του πίνακα grades δεν μπορεί να αλλάξει κατά τη διάρκεια του προγράμματος 3 Στατική Δέσμευση Μνήμης (II) Οι δηλώσεις μεταβλητών αποτελούν χαρακτηριστικά παραδείγματα στατικής δέσμευσης μνήμης, π.χ. int a; /* Δέσμευση 4 bytes μνήμης. */ double b; /* Δέσμευση 8 bytes μνήμης. */ int* ptr; /* Δέσμευση 4 bytes μνήμης. */ struct student stud; /* Δέσμευση μνήμης ίση με το μέγεθος της δομής student */ char str[200]; /* Δέσμευση 200 bytes μνήμης. */ Για κάθε τύπο μεταβλητών που δηλώνεται σε ένα πρόγραμμα (π.χ. αριθμητικές μεταβλητές, πίνακες, δομές, συναρτήσεις...) ο μεταγλωττιστής δεσμεύει την αντίστοιχη μνήμη Αυτή η δέσμευση της μνήμης γίνεται σε ένα συγκεκριμένο τμήμα μνήμης που παρέχει το λειτουργικό σύστημα στο πρόγραμμα και ονομάζεται στοίβα (stack) Η αποδέσμευση αυτής της μνήμης γίνεται αυτόματα, όταν τερματιστεί η εκτέλεση της συνάρτησης στην οποία δηλώνονται 4 2

3 Παρατηρήσεις Η μνήμη που απαιτείται για τις τοπικές μεταβλητές μίας συνάρτησης δεσμεύεται στατικά σε κάθε κλήση της συνάρτησης αυτής και αποδεσμεύεται όταν τερματίζεται η εκτέλεσή της Π.χ. η μνήμη που απαιτείται για τις τοπικές μεταβλητές της συνάρτησης test() είναι 812 bytes void test() { int i,j,k,arr[200];... } Παρομοίως, η μνήμη που έχει δεσμευτεί για τις τοπικές μεταβλητές της συνάρτησης main() αποδεσμεύεται όταν τερματίζεται η εκτέλεση του προγράμματος Η μνήμη που δεσμεύεται με στατικό τρόπο για τις τοπικές μεταβλητές μίας συνάρτησης αποδεσμεύεται μετά τον τερματισμό της συνάρτησης και οι τιμές των τοπικών μεταβλητών χάνονται Άρα, να μην χρησιμοποιείτε στο πρόγραμμά σας διευθύνσεις μεταβλητών που δηλώνονται τοπικά μέσα σε συναρτήσεις 5 Δυναμική Δέσμευση Μνήμης (I) Η δυναμική δέσμευση μνήμης χρησιμοποιείται όταν ο προγραμματιστής δεν γνωρίζει εκ των προτέρων το μέγεθος της μνήμης που χρειάζεται να δεσμεύσει, αφού το μέγεθος της μνήμης που δεσμεύεται με δυναμικό τρόπο μπορεί να μεταβληθεί κατά τη διάρκεια του προγράμματος Π.χ. όταν θέλουμε να δημιουργήσουμε ένα πρόγραμμα, το οποίο πρέπει να αποθηκεύει τους βαθμούς φοιτητών, αλλά δεν γνωρίζουμε τον αριθμό των φοιτητών τότε δεν πρέπει να δεσμεύσουμε μνήμη με στατικό τρόπο Αν δηλαδή, δηλώσουμε: float grades[500]; τότε δεσμεύουμε με στατικό τρόπο μνήμη για 500 βαθμούς φοιτητών Όμως, αν οι φοιτητές είναι περισσότεροι από 500, τότε δεν δεσμεύεται μνήμη για τους βαθμούς όλων των φοιτητών αλλά μόνο για τους 500 πρώτους Επίσης, αν οι φοιτητές είναι τελικά λιγότεροι από 500, τότε έχουμε σπατάλη μνήμης, αφού δεσμεύεται περισσότερη από την απαιτούμενη μνήμη 6 3

4 Δυναμική Δέσμευση Μνήμης (IΙ) Με τη δυναμική δέσμευση μνήμης ο προγραμματιστής μπορεί να δεσμεύσει τη μνήμη που χρειάζεται από το τμήμα μνήμης του υπολογιστή που ονομάζεται σωρός (heap) Τα όρια της μνήμης για τον σωρό και τη στοίβα είναι πεπερασμένα, αλλά το μέγεθος του σωρού είναι σαφέστατα μεγαλύτερο από το προκαθορισμένο μέγεθος της στοίβας Π.χ. με την παρακάτω δήλωση πίνακα: int arr[ ]; το πρόγραμμα μπορεί να μην βρει την απαιτούμενη μνήμη στη στοίβα και να μην εκτελεστεί, ενώ με τις εντολές: int* arr; arr = (int*)malloc( * sizeof(int)); το πρόγραμμα θα βρει την απαιτούμενη μνήμη στον σωρό και θα εκτελεστεί χωρίς πρόβλημα Η μνήμη που δεσμεύεται με δυναμικό τρόπο πρέπει να αποδεσμεύεται, όταν πλέον δεν χρειάζεται 7 Η συνάρτηση malloc() Η συνάρτηση malloc() χρησιμοποιείται για τη δυναμική δέσμευση ενός συγκεκριμένου μεγέθους μνήμης Το πρωτότυπό της δηλώνεται στο αρχείο stdlib.h και είναι το ακόλουθο: void* malloc(unsigned int size); Η παράμετρος size δηλώνει πόσα bytes μνήμης θα δεσμευτούν Αν η δέσμευση της μνήμης είναι επιτυχημένη, τότε η συνάρτηση επιστρέφει έναν δείκτη προς το πρώτο byte που δεσμεύτηκε, δηλαδή στην αρχή της δεσμευμένης μνήμης Αν η δέσμευση της μνήμης αποτύχει, τότε η συνάρτηση επιστρέφει την τιμή NULL Η συνάρτηση malloc() επιστρέφει έναν δείκτη σε τύπο void, που σημαίνει ότι στη δεσμευμένη μνήμη μπορεί να αποθηκευτεί οποιοσδήποτε τύπος δεδομένων Παρόλα αυτά, προτείνεται να δηλώνεται ο τύπος των δεδομένων που θα αποθηκευτεί στη μνήμη (με χρήση typecast, όπως θα δείτε και στα επόμενα παραδείγματα) 8 4

5 Παράδειγμα χρήσης της malloc() (1) int* ptr; ptr = (int*) malloc(100); Το (int*) πριν από την κλήση της malloc() δηλώνει ρητά ότι η μνήμη που θα δεσμευτεί θα χρησιμοποιηθεί για την αποθήκευση ακεραίων αριθμών Αν η δέσμευση της μνήμης είναι επιτυχημένη, τότε θα δεσμευτούν 100 bytes μνήμης και ο δείκτης ptr θα δείχνει στην αρχή αυτής της μνήμης Άρα, αφού κάθε ακέραιος απαιτεί 4 bytes, θα μπορούν να αποθηκευτούν συνολικά 25 ακέραιοι σε αυτή τη μνήμη Αντί για 100, θα μπορούσαμε (και μάλιστα συνηθίζεται) να γράψουμε 25*sizeof(int) Αν η δέσμευση αποτύχει, τότε η τιμή του ptr θα είναι ίση με NULL 9 Παράδειγμα χρήσης της malloc() (2) char* ptr; ptr = (char*) malloc(n+1); Με την παραπάνω δήλωση δεσμεύουμε δυναμικά μνήμη για την αποθήκευση n χαρακτήρων Η επιπλέον θέση (παρατηρείστε το n+1) δεσμεύεται για την αποθήκευση του τερματικού χαρακτήρα ('\0') 10 5

6 Παράδειγμα χρήσης της malloc() (3) struct student* ptr; ptr = (struct student*) malloc(100 * sizeof(student)); Το (struct student*) πριν από την κλήση της malloc() δηλώνει ότι η μνήμη που θα δεσμευτεί θα χρησιμοποιηθεί για την αποθήκευση 100 δομών τύπου student Τα bytes μνήμης που θα δεσμευτούν θα είναι ίσα με το γινόμενο του 100 επί το μέγεθος της μνήμης που καταλαμβάνει μία τέτοια δομή (τύπου student) Ο δείκτης ptr θα δείχνει στην αρχή αυτής της μνήμης 11 Παρατηρήσεις (Ι) Τον δείκτη που επιστρέφει η συνάρτηση malloc() μπορούμε να τον χειριστούμε είτε σαν δείκτη είτε σαν πίνακα Δεδομένου ότι το όνομα ενός πίνακα είναι δείκτης στο πρώτο του στοιχείο, μπορούμε να θεωρήσουμε ότι η malloc() δημιουργεί έναν μονοδιάστατο πίνακα που έχει ως όνομα το όνομα του δείκτη Π.χ. αν δεσμεύσουμε μνήμη για 1000 ακέραιους int* ptr; ptr = (int*) malloc(1000*sizeof(int)); και θέλουμε να αποθηκεύσουμε στον πρώτο ακέραιο αυτής της μνήμης την τιμή 13, θα μπορούσαμε να γράψουμε: είτε *ptr = 13; είτε ptr[0] = 13; 12 6

7 Παρατηρήσεις (ΙΙ) Να ελέγχετε πάντα αν η τιμή επιστροφής της malloc() είναι διαφορετική από NULL Για τον καθορισμό του μεγέθους της μνήμης να χρησιμοποιείτε τον τελεστή sizeof(), ώστε το πρόγραμμα να μπορεί να εκτελείται σε διαφορετικούς υπολογιστές Π.χ. ο τύπος short int σε έναν υπολογιστή μπορεί να δεσμεύει 2 bytes και σε κάποιον άλλο 4 bytes Όταν δεν χρειάζεστε άλλο τη δεσμευμένη μνήμη, πρέπει να την απελευθερώνετε, ώστε να μπορεί το λειτουργικό σύστημα να τη διαθέσει σε άλλα προγράμματα Η αποδέσμευση της μνήμης γίνεται με τη συνάρτηση free() Ο γενικός κανόνας είναι ότι η μνήμη που δεσμεύεται με κάθε κλήση της συνάρτησης malloc() πρέπει να αποδεσμεύεται με αντίστοιχη κλήση της συνάρτησης free() 13 Παρατηρήσεις (ΙIΙ) Η προσαρμογή (typecast) του τύπου επιστροφής της malloc() δεν είναι υποχρεωτική Δηλαδή, π.χ αντί για : int* ptr; ptr = (int*) malloc(100); θα μπορούσαμε να γράψουμε: int* ptr; ptr = malloc(100); Αν και η πρώτη σύνταξη είναι πιο δυσνόητη, προτείνεται γιατί: α) φαίνεται ξεκάθαρα ο τύπος των δεδομένων που θα περιέχει η μνήμη και δεν χρειάζεται ο αναγνώστης του κώδικα να ανατρέξει στη δήλωση της μεταβλητής ptr για να το θυμηθεί β) θα μπορεί το πρόγραμμά σας να μεταγλωττιστεί σε κάποιον άλλο μεταγλωττιστή που μπορεί να απαιτεί typecast (π.χ. σε C++ μεταγλωττιστή) 14 7

8 Η συνάρτηση free() Η συνάρτηση free() χρησιμοποιείται για την απελευθέρωση μνήμης που δεσμεύτηκε δυναμικά Το πρωτότυπό της δηλώνεται στο αρχείο stdlib.h και είναι το ακόλουθο: void free(void* ptr); Η παράμετρος ptr είναι δείκτης στην αρχή της δεσμευμένης μνήμης, την οποία θα αποδεσμεύσει η free() ΠΡΟΣΟΧΗ: Αν ο δείκτης-παράμετρος της free() δεν δείχνει σε μία δεσμευμένη μνήμη, τότε το πρόγραμμα δεν θα λειτουργήσει Π.χ. το διπλανό πρόγραμμα δεν θα λειτουργήσει, γιατί ο δείκτης ptr έχει απλώς οριστεί και δεν δείχνει σε κάποια δεσμευμένη μνήμη Οι συναρτήσεις memcpy() και memmove() Η συνάρτηση memcpy() χρησιμοποιείται για την αντιγραφή οποιουδήποτε τύπου δεδομένων από μία περιοχή μνήμης σε μία άλλη Το πρωτότυπό της δηλώνεται στο αρχείο string.h και είναι το ακόλουθο: void* memcpy(void* dest,void* src,unsigned int size); Η συνάρτηση memcpy() αντιγράφει size bytes από την περιοχή μνήμης στην οποία δείχνει ο δείκτης src στην περιοχή μνήμης στην οποία δείχνει ο δείκτης dest Το πρωτότυπο της συνάρτησης memmove() είναι ίδιο με αυτό της memcpy() Η κύρια διαφορά μεταξύ των δύο συναρτήσεων είναι ότι η memmove() εξασφαλίζει τη σωστή αντιγραφή των δεδομένων, ακόμα και αν οι δύο περιοχές μνήμης επικαλύπτονται, ενώ η memcpy() δεν εξασφαλίζει κάτι τέτοιο και, επειδή δεν ελέγχει αν οι δύο περιοχές μνήμης επικαλύπτονται, εκτελείται πιο γρήγορα από τη memmove() 16 8

9 Παρατηρήσεις Για τη μνήμη προορισμού πρέπει να έχουν δεσμευτεί τουλάχιστον size bytes, σε διαφορετική περίπτωση, τα πλεονάζοντα bytes θα εγγραφούν σε μη δεσμευμένη μνήμη, η οποία μπορεί να χρησιμοποιείται για άλλους σκοπούς Π.χ. η επόμενη αντιγραφή δεν είναι σωστή, γιατί το μέγεθος της μνήμης προορισμού είναι 3 bytes, ενώ τα bytes που θα αντιγραφούν είναι 6 char str1[3]; char str2[] = "abcde"; memcpy(str1,str2,sizeof(str2)); Οι συναρτήσεις memcpy() και memmove() είναι πολύ χρήσιμες γιατί μπορούμε να αντιγράψουμε άμεσα μεγάλο όγκο δεδομένων από μία περιοχή μνήμης σε μία άλλη Για παράδειγμα, αν θέλετε να αντιγράψετε τα περιεχόμενα ενός πίνακα ακεραίων σε έναν άλλον πίνακα, τότε να χρησιμοποιήσετε τη memcpy() και όχι for βρόχο, γιατί η αντιγραφή θα γίνει πιο γρήγορα 17 Παράδειγμα Γράψτε ένα πρόγραμμα το οποίο να ορίζει δύο πίνακες ακεραίων, να θέτει τις τιμές από 1 έως στα στοιχεία του πρώτου πίνακα και να αντιγράφει τις τιμές των στοιχείων του στον δεύτερο πίνακα με χρήση της συνάρτησης memcpy(). Το πρόγραμμα να εμφανίζει τα περιεχόμενα του δεύτερου πίνακα και να τερματίζει. Εναλλακτικά: for(i = 0; i < ; i++) arr2[i] = arr1[i]; 18 9

10 Η συνάρτηση memcmp() Η συνάρτηση memcmp() χρησιμοποιείται για τη σύγκριση οποιουδήποτε τύπου δεδομένων που περιέχονται σε μία περιοχή μνήμης με τα δεδομένα που περιέχονται σε μία άλλη περιοχή μνήμης Το πρωτότυπό της δηλώνεται στο αρχείο string.h και είναι το ακόλουθο: int memcmp(void* ptr1,void* ptr2,unsigned int size); Η συνάρτηση memcmp() συγκρίνει size bytes από την περιοχή μνήμης στην οποία δείχνει ο δείκτης ptr1 με τα αντίστοιχα bytes που περιέχονται στην περιοχή μνήμης στην οποία δείχνει ο δείκτης ptr2 Αν οι δύο περιοχές μνήμης περιέχουν τα ίδια δεδομένα, τότε η συνάρτηση memcmp() επιστρέφει 0 19 Παρατηρήσεις Η συνάρτηση memcmp() είναι πολύ χρήσιμη γιατί μπορούμε να συγκρίνουμε άμεσα μεγάλο όγκο δεδομένων που περιέχονται σε δύο περιοχές μνήμης Για παράδειγμα, αν θέλετε να συγκρίνετε τα περιεχόμενα ενός πίνακα ακεραίων με τα περιεχόμενα ενός άλλου πίνακα, τότε να μην χρησιμοποιήσετε for βρόχο, αλλά να χρησιμοποιήσετε τη memcmp(), γιατί η σύγκριση θα γίνει πολύ πιο γρήγορα 20 10

11 Παράδειγμα Γράψτε ένα πρόγραμμα το οποίο να ορίζει δύο πίνακες ακεραίων, να θέτει τις τιμές από 1 έως στα στοιχεία τους και να συγκρίνει τις τιμές των στοιχείων τους με χρήση της συνάρτησης memcmp(). Το πρόγραμμα να εμφανίζει ένα διαγνωστικό μήνυμα για το αποτέλεσμα της σύγκρισης. Εναλλακτικά: for(i = 0; i < ; i++) if(arr2[i]!= arr1[i]) { printf("different content\n"); break; } 21 Στατικές Δομές Δεδομένων Οι δομές δεδομένων χρησιμοποιούνται για την αποθήκευση και επεξεργασία πληθώρας δεδομένων με εύκολο και γρήγορο τρόπο Π.χ. ο πίνακας είναι μία δομή δεδομένων, ο οποίος χρησιμοποιείται για την αποθήκευση δεδομένων ίδιου τύπου Παρομοίως, οι δομές (structs) και οι ενώσεις (unions) είναι δομές δεδομένων, οι οποίες χρησιμοποιούνται για την αποθήκευση δεδομένων οποιουδήποτε τύπου Αυτές οι δομές δεδομένων ονομάζονται στατικές, γιατί το μέγεθος της μνήμης που έχει δεσμευτεί για αυτές δεν μπορεί να αλλάξει κατά την εκτέλεση του προγράμματος Π.χ. όταν δηλώνεται έναν πίνακας με μία συγκεκριμένη διάσταση (π.χ. int arr[100]), η διάστασή του, δηλαδή το 100, δεν μπορεί να αλλάξει κατά την εκτέλεση του προγράμματος 22 11

12 Δυναμικές Δομές Δεδομένων Υπάρχουν όμως περιπτώσεις που αντί να χρησιμοποιήσουμε μία στατική δομή δεδομένων, όπως είναι ο πίνακας, να είναι πιο αποδοτικό να χρησιμοποιήσουμε μία δυναμική δομή δεδομένων Αντίθετα με τη στατική δομή, το μέγεθος μίας δυναμικής δομής δεδομένων μπορεί να αυξομειώνεται κατά την εκτέλεση του προγράμματος με τη δέσμευση και την αποδέσμευση αντίστοιχης μνήμης Τα παραδείγματα των δυναμικών δομών δεδομένων που θα περιγράψουμε είναι η απλά συνδεδεμένη λίστα, η ουρά και η στοίβα Μία δυναμική δομή δεδομένων αποτελείται από ένα ή περισσότερα συνδεδεμένα στοιχεία, τα οποία ονομάζονται κόμβοι Κάθε κόμβος είναι μία δομή, η οποία περιέχει τα δεδομένα για το συγκεκριμένο στιγμιότυπο της δομής και δείκτες που χρησιμοποιούνται για τη σύνδεση με τον επόμενο ή τον προηγούμενο κόμβο 23 Απλά συνδεδεμένη λίστα Η πιο συνηθισμένη δυναμική δομή δεδομένων είναι μία απλά συνδεδεμένη λίστα Στο σχήμα φαίνεται ότι κάθε κόμβος μίας τέτοιας λίστας περιέχει τα δεδομένα του κόμβου (π.χ. το πεδίο ) και έναν δείκτη (π.χ. το πεδίο ) που «δείχνει» στον επόμενο κόμβο node_a node_b node_n... NULL Ο πρώτος κόμβος της λίστας ονομάζεται κεφαλή (head) της λίστας και ο τελευταίος κόμβος ονομάζεται ουρά (tail) Το πεδίο-δείκτης του τελευταίου κόμβου πρέπει να έχει την τιμή NULL, ώστε να προσδιορίζεται το τέλος της λίστας Ο χειρισμός μίας απλά συνδεδεμένης λίστας γίνεται συνήθως με τη χρήση δύο δεικτών, με τον πρώτο να δείχνει στη διεύθυνση μνήμης της κεφαλής της λίστας και τον δεύτερο στη διεύθυνση μνήμης της ουράς της λίστας 24 12

13 Εισαγωγή κόμβου σε απλά συνδεδεμένη λίστα (Ι) Για να εισάγουμε έναν νέο κόμβο στη λίστα, εξετάζουμε τις ακόλουθες περιπτώσεις: 1) Αν η λίστα είναι κενή (δηλ. δεν περιέχει κανέναν κόμβο) τότε ο κόμβος εισάγεται στη λίστα και αποτελεί ταυτόχρονα την κεφαλή και την ουρά της λίστας, ενώ η τιμή του δείκτη του γίνεται NULL 2) Αν η λίστα δεν είναι κενή τότε εξετάζουμε τις ακόλουθες υποπεριπτώσεις: 2α) Αν επιθυμούμε ο νέος κόμβος να τοποθετηθεί στην αρχή της λίστας, τότε ο νέος κόμβος γίνεται η νέα κεφαλή της λίστας και ο δείκτης του δείχνει στην παλιά κεφαλή, που τώρα γίνεται ο δεύτερος κόμβος της λίστας 25 Εισαγωγή κόμβου σε απλά συνδεδεμένη λίστα (ΙΙ) 2β) Αν επιθυμούμε ο νέος κόμβος να τοποθετηθεί στο τέλος της λίστας, τότε ο νέος κόμβος γίνεται η νέα ουρά της λίστας και η τιμή του δείκτη του γίνεται NULL, ενώ ο κόμβος που ήταν προηγουμένως η ουρά της λίστας γίνεται ο προτελευταίος κόμβος της λίστας με την τιμή του δείκτη του να αλλάζει από NULL και να δείχνει στον νέο κόμβο 2γ) Για να εισάγουμε έναν νέο κόμβο μετά από κάποιον τυχαίο κόμβο μίας λίστας, τότε κάνουμε τον δείκτη αυτού του τυχαίου κόμβου να δείχνει στον νέο κόμβο και τον δείκτη του νέου κόμβου να δείχνει στον κόμβο που έδειχνε ο τυχαίος κόμβος (όπως φαίνεται στο σχήμα, με τον κόμβο C να εισάγεται μεταξύ των κόμβων Β και D) node_a node_b node_d node_n... NULL node_c 26 13

14 Διαγραφή κόμβου από απλά συνδεδεμένη λίστα (Ι) Για να διαγράψουμε έναν κόμβο από μία λίστα, εξετάζουμε τις ακόλουθες περιπτώσεις: 1) Αν επιθυμούμε να διαγράψουμε τον κόμβο που είναι η αρχή της λίστας, τότε εξετάζουμε τις ακόλουθες υπο-περιπτώσεις: 1α) Αν υπάρχει επόμενος κόμβος, τότε αυτός ο κόμβος γίνεται η νέα κεφαλή της λίστας 1β) Αν δεν υπάρχει επόμενος κόμβος, τότε η λίστα γίνεται κενή 2) Αν επιθυμούμε να διαγράψουμε τον τελευταίο κόμβο της λίστας, τότε αποδεσμεύουμε τη μνήμη που καταλαμβάνει, ενώ ο προτελευταίος κόμβος γίνεται η νέα ουρά της λίστας και η τιμή του δείκτη του γίνεται NULL 27 Διαγραφή κόμβου από απλά συνδεδεμένη λίστα (ΙΙ) 3) Για να διαγράψουμε ένα κόμβο που βρίσκεται ανάμεσα σε δύο κόμβους μίας λίστας, τότε κάνουμε τον δείκτη του προηγούμενου κόμβου από αυτόν που θέλουμε να διαγράψουμε να δείχνει στον επόμενο κόμβο από αυτόν που θέλουμε να διαγράψουμε και αποδεσμεύουμε τη μνήμη που καταλαμβάνει (όπως φαίνεται στο σχήμα, όπου διαγράφεται ο κόμβος C) node_a node_b node_d node_n... NULL node_c 28 14

15 Παρατηρήσεις Το βασικό μειονέκτημα μίας λίστας, σε σχέση με τους πίνακες, είναι ότι για να βρούμε κάποιο στοιχείο της λίστας πρέπει να διατρέξουμε όλη τη λίστα ξεκινώντας από την αρχή της, ενώ με τους πίνακες μπορούμε να έχουμε άμεση πρόσβαση στο επιθυμητό στοιχείο Η διαχείριση μίας λίστας μέσα σε ένα πρόγραμμα γίνεται με τη χρήση μίας μεταβλητής-δείκτη Ο δείκτης αυτός δείχνει πάντα στον πρώτο κόμβο της λίστας Επίσης, μπορεί να χρησιμοποιηθεί και μία δεύτερη μεταβλητήδείκτης που να δείχνει πάντα στο τέλος της λίστας 29 Στοίβα (stack) Η στοίβα (stack) είναι μία ειδική περίπτωση λίστας, γιατί ισχύουν οι ακόλουθοι περιορισμοί: 1) Η εισαγωγή ενός νέου κόμβου γίνεται μόνο στην αρχή της στοίβας, δηλαδή, ο νέος αυτός κόμβος γίνεται η νέα κεφαλή της στοίβας 2) Ο μόνος κόμβος που επιτρέπεται να διαγράψουμε από τη στοίβα είναι η κεφαλή της στοίβας Μία τέτοια στοίβα ονομάζεται LIFO (Last In First Out), με την έννοια ότι ο κόμβος που εισάγεται τελευταίος εξάγεται πρώτος 30 15

16 Ουρά (queue) Η ουρά (queue) είναι μία ειδική περίπτωση λίστας, γιατί ισχύουν οι ακόλουθοι περιορισμοί: 1) Η εισαγωγή ενός νέου κόμβου γίνεται μόνο στο τέλος της ουράς, δηλαδή, ο νέος αυτός κόμβος γίνεται ο τελευταίος κόμβος της ουράς 2) Ο μόνος κόμβος που επιτρέπεται να διαγράψουμε από την ουρά είναι η κεφαλή της ουράς Μία τέτοια ουρά ονομάζεται FIFO (First In First Out), με την έννοια ότι ο κόμβος που εισάγεται πρώτος εξάγεται και πρώτος 31 16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

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

Εισαγωγή στον Προγραµµατισµό «C»

Εισαγωγή στον Προγραµµατισµό «C» Εισαγωγή Στον Προγραµµατισµό «C» Δείκτες Πανεπιστήµιο Πελοποννήσου Τµήµα Επιστήµης & Τεχνολογίας Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Μνήµη Υπολογιστή Η µνήµη RAM (Random Access Memory) ενός υπολογιστή

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διαδικαστικός Προγραμματισμός Διαδικαστικός Προγραμματισμός Ενότητα 7: Δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Διαχείριση Μνήμης,Δυναμικές Δομές Δεδομένων, Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Δυναμικές Δομές Δεδομένων Γενικά - Δυναμική Δέσμευση/Αποδέσμευση

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

Μεταβλητές. Έστω η μεταβλητή

Μεταβλητές. Έστω η μεταβλητή Δείκτες Μεταβλητές Έστω η μεταβλητή char ch ='A'; Η παραπάνω δήλωση δεσμεύει χώρο στη μνήμη για τη μεταβλητή ch. Η τιμή της ch αντιστοιχεί στο περιεχόμενο μιας θέσης μνήμης, π.χ. της 1001. 0 1 2 3... 1000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές δεδομένων (2) Αλγόριθμοι

Δομές δεδομένων (2) Αλγόριθμοι Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student

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

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

Εισαγωγή στον δομημένο προγραμματισμό Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 12 η : Δυναμική Ανάθεση Θέσης Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής

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

C: Από τη Θεωρία στην Εφαρμογή

C: Από τη Θεωρία στην Εφαρμογή Δρ. Γ. Σ. Τσελίκης Δρ. Ν. Δ. Τσελίκας C: Από τη Θεωρία στην Εφαρμογή Ενδεικτικές Ασκήσεις από το Βιβλίο C: Από τη Θεωρία στην Εφαρμογή (Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας) Ενδεικτικές Ασκήσεις του Βιβλίου Ε.Α.1

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

ιαφάνειες παρουσίασης #5 (β)

ιαφάνειες παρουσίασης #5 (β) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

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

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

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

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

Προγραμματισμός Δομές Δεδομένων

Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

Στοίβες με Δυναμική Δέσμευση Μνήμης ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές

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

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

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

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

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

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

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

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

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

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

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

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

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

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

υναµικές οµές εδοµένων υναµικές οµές εδοµένων Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων Γενικά υναµική έσµευση Μνήµης οµή τύπου structure αυτοαναφορικές δοµές Η δήλωση typedef στη C Αναπαράσταση

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

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

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

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

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

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

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

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType; Δείκτες και Δομές Ένας βασικός «δομικός λίθος». Όλη μαζί η δομή (struct) ονομάζεται κόμβος ή Node και αποτελείται από - Το μέλος Info οποιουδήποτε τύπου: int, άλλο struct (InfoField) - To μέλος ink τύπου

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

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

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

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

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

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

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C) Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

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

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

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

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

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

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Συναρτήσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Συναρτήσεις - Εισαγωγή Μία συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα, που εκτελεί μία

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( ) Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική

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

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

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

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

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

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

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

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

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

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

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

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

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

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

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

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

- Το πρόγραµµα σας δίνει τα αναµενόµενα αποτελέσµατα.

- Το πρόγραµµα σας δίνει τα αναµενόµενα αποτελέσµατα. Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ 1349 FAIL Δεν ελήφθη άσκηση 1482 1556 1559 1562 1563 1565 1566 FAIL - Στην initialize πρέπει να κάνετε έλεγχο αν η malloc αποτυγχάνει για κάθε κλήση της, άρα και για δέσµευση χώρου για

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Ακαδηµαϊκό έτος 2010 2011, Χειµερινό εξάµηνο Ασκήσεις Επανάληψης Ενδιάµεσης

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

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

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

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

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 14: Δυναμική Μνήμη Δυναμική μνήμη προγράμματος Πολλές φορές, δεν γνωρίζουμε εκ των προτέρων πόση μνήμη θα χρειαστεί το πρόγραμμα μας. Αν δεσμεύσουμε περισσότερη μνήμη

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

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΘΕΩΡΙΑ Στο project αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int

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

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Εισαγωγή στους δείκτες Το μοντέλο της μνήμης, σωρός και στοίβα Αναφορές Δείκτες και πίνακες Δέσμευση και αποδέσμευση μνήμης

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

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

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

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

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

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

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

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

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

Συλλογές, Στοίβες και Ουρές

Συλλογές, Στοίβες και Ουρές Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει

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

H ΓΛΩΣΣΑ C. Μάθηµα 12: υναµική έσµευση Μνήµης. ηµήτρης Ψούνης

H ΓΛΩΣΣΑ C. Μάθηµα 12: υναµική έσµευση Μνήµης. ηµήτρης Ψούνης H ΓΛΩΣΣΑ C Μάθηµα 12: υναµική έσµευση Μνήµης ηµήτρης Ψούνης 2 Περιεχόµενα Μαθήµατος 1. Στατική έσµευση Μνήµης 1. Η συνάρτηση malloc 2. Η συνάρτηση free 3. έσµευση Μεταβλητής 4. έσµευση Μονοδιάστατου Πίνακα

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

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

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

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

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

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

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

Κεφάλαιο 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;

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

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

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

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

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

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

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

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

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

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00 ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 Προθεσμία: 17/1/14, 22:00 Περιεχόμενα Διαδικαστικά Οδηγίες Αποστολής Εκφώνηση άσκησης (Στάδιο 0, Στάδιο 1, Στάδιο 2, Στάδιο 3, Στάδιο

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

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές

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

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

ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Οικονοµικό Πανεπιστήµιο Αθηνών Τµήµα ιοικητικής Επιστήµης & Τεχνολογίας ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Κεφάλαιο 9 οµές εδοµένων σε C Γιώργος Γιαγλής Περίληψη Κεφαλαίου 9 οµές εδοµένων υναµικές

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

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

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 3 1. Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή 2. Δυναμικές είναι οι δομές που αποθηκεύονται σε συνεχόμενες θέσεις μνήμης 3. Ένας πίνακας

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

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.

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

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Τι είναι οι συνδεδεμένες λίστες (linked lists) Μια Συνδεδεμένη Λίστα (Σ.Λ.) είναι μια διάταξη από κόμβους που μπορούμε να τους διαχειριστούμε δυναμικά. Κάθε

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

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

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

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

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

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

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

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

Προγραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ.

Προγραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ. Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι 1 Αλφαριθµητικά - Εισαγωγή Ένα αλφαριθµητικό (string) είναι µία

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

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

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

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

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 26: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας -Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι

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

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια. Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 Εργαστήριο 4 Εαρινό Εξάμηνο 2012-2013 Στόχοι του εργαστηρίου Χρήση στοίβας Συναρτήσεις ΠΡΟΣΟΧΗ: Αρχίστε νωρίς

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

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

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

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

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Απαριθμητές (enums) Δομές (structures)και Ενώσεις (unions) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Απαριθμητές - Δομές, φωλιασμένες δομές, τρόποι δήλωσης

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