Η γλώσσα C. Δείκτες και Διαχείριση Μνήμης (memory management)

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

Download "Η γλώσσα C. Δείκτες και Διαχείριση Μνήμης (memory management)"

Transcript

1 Η γλώσσα C Δείκτες και Διαχείριση Μνήμης (memory management)

2 1 πείραμα = πολλές μετρήσεις Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται ως είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά τη διάρκεια ενός πειράματος Εν συνεχεία ο χρήστης εισάγει στο πρόγραμμα τις επιμέρους τιμές των μετρήσεων σε ένα πίνακα Τέλος το πρόγραμμα επεξεργάζεται τα δεδομένα μεταξύ άλλων υπολογίζει τον μέσο όρο των μετρήσεων 2

3 Άγνωστο μέγεθος πίνακα #include <stdio.h> main(){ int n; int i; float mo = 0; scanf("%d", &n); float measurements[n]; πώς σας φαίνεται αυτή η υλοποίηση? for(i=0; i<n; i++) scanf("%f", &measurements[i]); for(i=0; i<n; i++) mo += measurements[i]; mo = mo / n; 3

4 Άγνωστο μέγεθος πίνακα #include <stdio.h> main(){ int n; int i; float mo = 0; scanf("%d", &n); float measurements[n]; for(i=0; i<n; i++) scanf("%f", &measurements[i]); for(i=0; i<n; i++) mo += measurements[i]; η υλοποίηση είναι λάθος!! α) οι δηλώσεις πρέπει να γίνονται ΝΟΝΟ στην αρχή του μπλόκ { β) ΔΕΝ επιτρέπεται να είναι μεταβλητό το μέγεθός του πίνακα! Σημείωση: mo = mo / n; Η C99 τα επιτρέπει και τα δύο (δηλώσεις οπουδήποτε και variable length arrays ). 4

5 Δυναμική δέσμευση μνήμης (dynamic memory allocation) #include <stdio.h> #include <stdlib.h> main(){ int n; int i; float mo = 0; float *measurements; scanf("%d", &n); /* Μνήμη για n μετρήσεις */ measurements = (float *) malloc(n * sizeof(float)); if (measurements == NULL) exit(1); for(i=0; i<n; i++) scanf("%f", &measurements[i]); for(i=0; i<n; i++) mo += measurements[i]; mo = mo / n; free (measurements); 5

6 malloc Η συνάρτηση malloc: int *p; p = (int *) malloc(ν*sizeof(int)); Η malloc δεσμεύει μνήμη δοσμένου μεγέθους και επιστρέφει μια διεύθυνση Όρισμα = το μέγεθος της αιτούμενης μνήμης (# bytes) π.χ., στην πράξη θα χρειαστούμε μνήμη για αποθήκευση int, μνήμη για αποθήκευση float, μνήμη για αποθήκευση double, Το μέγεθος της μνήμης δίνεται ως πολλαπλάσιο των sizeof(int), sizeof(float), sizeof(double), 6

7 Δυναμική δέσμευση μνήμης H malloc δεν μπορεί να επιστρέφει διαφορετικούς τύπους από pointers Επιστρέφει έναν «γενικό» τύπο pointer: void *malloc(int size); Επομένως, είναι πάντα απαραίτητο να χρησιμοποιούμε το κατάλληλο casting, π.χ. (int *), για αυτό που επιστρέφει η malloc. Άρα αν για ένα μονοδιάστατο πίνακα τύπου <T> (όπου <T> είναι int, float, double, char ) δεν ξέρω τη διάσταση του πριν την εκτέλεση του προγράμματος, τότε ορίζω δείκτη <T*> p και χρησιμοποιώ την malloc p = (<T*>) malloc(n*sizeof(<t>)); Π.χ. float *p; p = (float *) malloc(n*sizeof(float)); 7

8 Παρένθεση - υπενθύμιση Το α και β παρακάτω είναι ίδια; Αν όχι υπάρχει κάποιο πρόβλημα; (a) int x, *y = &x; Θυμηθείτε ότι άλλο σημαίνουν οι τελεστές της C μέσα σε μία ΔΗΛΩΣΗ και άλλο μέσα σε μία πράξη. Το (b) λοιπόν είναι διαφορετικό (και λάθος). Το (a) θα ήταν ισοδύναμο με το (c): (b) int x, *y; *y = &x; (a) int x, *y = &x; (c) int x, *y; y = &x; Επομένως, η σωστή αρχικοποίηση ενός δείκτη με malloc() είναι μία από τις δύο παρακάτω: (a) int *y; y = (int *) malloc(40); (b) int *y = (int *) malloc(40); 8

9 malloc & free Η μνήμη που δεσμεύουμε μέσω της malloc(): Δεν είναι αρχικοποιημένη (περιέχει τυχαίες τιμές) Αποδεσμεύεται αυτόματα στο τέλος του προγράμματος και επιστρέφεται στο λειτουργικό σύστημα Επομένως, όσο ζητάμε νέους χώρους μνήμης, τόσο μειώνεται η ελεύθερη μνήμη του συστήματος (θέλει προσοχή ώστε να μην φτάσουμε σε out of memory ) Μπορούμε να αποδεσμεύσουμε / απελευθερώσουμε μνήμη με τη συνάρτηση free: void free(void *ptr); όπου ο ptr δείχνει στην αρχή του χώρου που πριν τον είχαμε δεσμέυσει με malloc(). 9

10 5 πειράματα με n μετρήσεις Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται ως είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά τη διάρκεια 5 πειραμάτων εν συνεχεία ο χρήστης εισάγει στο πρόγραμμα τις επιμέρους τιμές των μετρήσεων για κάθε πείραμα τέλος το πρόγραμμα επεξεργάζεται τα δεδομένα μεταξύ άλλων υπολογίζει το μέσο όρο των μετρήσεων 10

11 Σχέδιο μνήμης 5 δείκτες (π.χ. ένας πίνακας με 5 στοιχεία, καθένα θα είναι δείκτης) n μετρήσεις n μετρήσεις n μετρήσεις n μετρήσεις n μετρήσεις 11

12 Δυναμική δέσμευση μνήμης & δείκτες #include <stdio.h> #include <stdlib.h> #define M 5 main(){ int n, i,j; float mo = 0; float *measurements[m]; /* Πίνακας από Μ δείκτες / ίδιο με float *(measurements[m]); */ scanf("%d", &n); for(i=0; i<m; i++){ /* Για κάθε πείραμα, μνήμη για n μετρήσεις */ measurements[i] = (float *) malloc(n*sizeof(float)); /* Δείχνει σε χώρο n αριθμών */ if (measurements[i] == NULL) return; for(i=0; i<m; i++) for(j=0; j<n; j++) scanf("%f", &measurements[i][j]); /* Χειρισμός σαν να είναι διδιάστατος πίνακας */ for(i=0; i<m; i++) { for(j=0; j<n; j++) mo += measurements[i][j]; mo = mo / n; printf("%f\n", mo); for(i=0; i<m; i++) free (measurements[i]); /* Απελευθέρωση μνήμης */ 12

13 Ερωτήσεις κρίσεως στην προηγούμενη διαφάνεια Πώς μπορώ να γράψω την παρακάτω έκφραση κάνοντας χρήση μόνο δεικτών και πράξεων (όχι αγκυλών) Έτσι: if (measurements[i] == NULL) return; if (*(measurements+i) == NULL) return; Το παρακάτω; Έτσι: mo = measurements[i][j]; mo = *( *(measurements+i) + j ); Διότι είναι ισοδύναμο με: mo = *( measurements[i] + j ); το οποίο είναι ισοδύναμο με: mo = ( measurements[i] )[j]; 13

14 Πολλά πειράματα, καθένα πολλές μετρήσεις (Άγνωστος ο αριθμός των πειραμάτων εκ των προτέρων) Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται ως είσοδο από το χρήστη τον συνολικό αριθμό πειραμάτων που έγιναν από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά τη διάρκεια ενός πειράματος εν συνεχεία ο χρήστης εισάγει στο πρόγραμμα τις επιμέρους τιμές των μετρήσεων για κάθε πείραμα τέλος το πρόγραμμα επεξεργάζεται τα δεδομένα μεταξύ άλλων υπολογίζει το μέσο όρο των μετρήσεων 14

15 Δυναμική δέσμευση μνήμης & δείκτες Στο προηγούμενο πρόβλημα γνωρίζαμε των αριθμό των πειραμάτων (#define M 5) και με βάση τον αριθμό των μετρήσεων (int n) κατασκευάσαμε έναν πίνακα από δείκτες, καθένας εκ των οποίων έδειχνε σε μια «γραμμή» από n μετρήσεις Το χειριζόμαστε σαν να ήταν διδιάστατος πίνακας measurements[5][n] Στο πρόβλημα αυτό πρέπει να κατασκευάσουμε δυναμικά και τον πίνακα από τους δείκτες, μιας και τόσο το πλήθος των μετρήσεων ανά πείραμα (n) όσο και το πλήθος των πειραμάτων (m) είναι μεταβλητές του προγράμματος. 15

16 Παράδειγμα #include <stdio.h> #include <stdlib.h> main(){ int n,m; int i,j; float mo = 0; float **measurements; scanf("%d", &m); /* Μαθαίνουμε τις διαστάσεις */ scanf("%d", &n); /* Μνήμη για m δείκτες σε πειράματα */ measurements = (float **) malloc( m*sizeof(float *) ); if(measurements == NULL) abort(); for(i=0; i<m; i++) { /* Για κάθε πείραμα, μνήμη για n μετρήσεις */ measurements[i] = (float *) malloc(n*sizeof(float)); if (measurements[i] == NULL) abort(); 16

17 Παράδειγμα for(i=0; i<m; i++) for(j=0; j<n; j++) { scanf("%f", &measurements[i][j]); for(i=0; i<m; i++) { for(j=0; j<n; j++) mo += measurements[i][j]; mo = mo / n; printf("%f\n", mo); for(i=0; i<m; i++) free (measurements[i]); /* Απελευθέρωση γραμμής i */ free(measurements); /* Απελευθέρωση του πίνακα δεικτών */ 17

18 Σχεδιάγραμμα Δείκτης σε δυναμικό πίνακα n μετρήσεις n μετρήσεις n μετρήσεις πίνακας με m=4 στοιχεία, καθένα θα είναι δείκτης n μετρήσεις measurements 18

19 Δυναμική δέσμευση και πίνακες δεικτών int **p = (int **) malloc(m*sizeof(int *)); int * int ** p ? p[0]? p[1]? p[2]? p[m-1] 19

20 Δυναμική δέσμευση και πίνακες δεικτών Αν στη συνέχεια καλέσω p[i] = (int *) malloc(n*sizeof(int)); Έτσι έχω δημιουργήσει κάτι σαν «διδιάστατο» πίνακα (mxn), όπως τους φτιάχνει και η Java int ** p int * p[0] p[1] p[2] int n p[m-1] 20

21 Προηγούμενο παράδειγμα κλήση σε συνάρτηση for(i=0; i<m; i++) for(j=0; j<n; j++) { scanf("%f", &measurements[i][j]); show_array(m, n, measurements); /* Πώς ορίζεται; */ for(i=0; i<m; i++) { for(j=0; j<n; j++) mo += measurements[i][j]; mo = mo / n; printf("%f\n", mo); for(i=0; i<m; i++) free (measurements[i]); /* Απελευθέρωση γραμμής i */ free(measurements); /* Απελευθέρωση του πίνακα δεικτών */ 21

22 Παράμετροι σε συνάρτηση void show_array(int r, int c,?????) int i, j; for (i = 0; i < r; i++) { for (j = 0; j < c; j++) printf( %f\n, arr[i][j]); printf( \n ); void show_array(int r, int c, float arr[r][c]) Στη C δεν επιτρέπονται πίνακες μεταβλητού μεγέθους void show_array(int r, int c, float arr[][]) Και δεν επιτρέπεται αλλά και δεν γνωρίζει το μέγεθος των γραμμών void show_array(int r, int c, float *arr[]) Μια χαρά! Πίνακας από pointers! void show_array(int r, int c, float **arr) Μια χαρά! Pointer που δείχνει σε pointers (δηλ. στον πρώτο pointer ενός πίνακα από pointers). void show_array(int r, int c, float (*arr)[]) Λάθος! Pointer σε πίνακα από floats. 22

23 Παραδείγματα Α) Δημιουργία τριγωνικού πίνακα με 10 γραμμές. Δηλαδή η γραμμή 0 θα έχει 10 στοιχεία, η γραμμή 1 θα έχει 9 στοιχεία, κλπ, και η γραμμή 9 θα έχει 1 στοιχείο. Β) Δημιουργία τριγωνικού πίνακα με το χρήστη να καθορίζει κατά το χρόνο εκτέλεσης τον αριθμό των γραμμών 23

24 Τριγωνικός πίνακας 10x10 (I) #include <stdio.h> #include <stdlib.h> main() { int i, j, *a[10]; /* Πίνακας με 10 δείκτες, σε 10 γραμμές */ for (i = 0; i < 10; i++) a[i] = (int *)malloc((10-i)*sizeof(int)); /* Γραμμή i */ for (i = 0; i < 10; i++) { for (j = 0; j < 10-i; j++) { a[i][j] = i + j; printf("a(%d,%d)=%d", i, j, a[i][j]); printf("\n"); 24

25 Τριγωνικός πίνακας 10xN (II) #include <stdio.h> #include <stdlib.h> main() { int i, j, int *a[10], N; scanf("%d", &N); for (i = 0; i < 10; i++) a[i] = (int *)malloc((n-i)*sizeof(int)); for (i = 0; i < 10; i++) { for (j = 0; j < N-i; j++) { a[i][j] = i + j; printf("a(%d,%d)=%d", i, j, a[i][j]); printf("\n"); 25

26 Τριγωνικός πίνακας NxN #include <stdio.h> #include <stdlib.h> main() { int i, j, **a, N; scanf("%d", &N); a = (int **) malloc(n*sizeof(int *)); for (i = 0; i < N; i++) a[i] = (int *)malloc((n-i)*sizeof(int)); for (i = 0; i < N; i++) { for (j = 0; j < N-i; j++) { a[i][j] = i + j; printf("a(%d,%d)=%d", i, j, a[i][j]); printf("\n"); 26

27 Πώς δεσμεύω καθαρά διδιάστατους πίνακες; Δηλαδή όχι απλά πίνακα από pointers που δείχνουν σε Μ σκόρπιες γραμμές (τον οποίο τον χειρίζομαι μεν σαν να είναι διδιάστατος, όμως δεν καταλαμβάνει συνεχόμενο χώρο στη μνήμη) αλλά ένα πίνακα που όντως καταλαμβάνει συνεχόμενο χώρο Μ*N στοιχείων στην μνήμη; Απάντηση: Δεν γίνεται η malloc() επιστρέφει πάντα ένα συνεχόμενο γραμμικό χώρο. Μπορώ όμως να τον χειριστώ εγώ «με το χέρι». Αν δεσμεύσω a = (int *) malloc(μ*ν*sizeof(int)); ποιο είναι το στοιχείο στην i γραμμή και j στήλη; Το a[i*ν + j]. 27

28 Χειρισμός διδιάστατου πίνακα με malloc() { int i, j, Μ, Ν; int *a; scanf("%d", &Μ); /* Γραμμές */ scanf("%d", &Ν); /* Στήλες */ a = (int *) malloc(μ*ν*sizeof(int)); for (i = 0; i < Μ; i++) for (j = 0; j < Ν; j++) a[i*ν+j] = 1; free(a); /* 1 free για όλο το χώρο */ 28

29 Χειρισμός διδιάστατου πίνακα με malloc() - ευκολότερα { int i, j, Μ, Ν; int *a; #define mat(r,c) a[r*ν+c] /* Preprocessor macro */ scanf("%d", &Μ); /* Γραμμές */ scanf("%d", &Ν); /* Στήλες */ a = (int *) malloc(m*ν*sizeof(int)); for (i = 0; i < Μ; i++) for (j = 0; j < Ν; j++) mat(i,j) = 1; /* Replaced by a[i*ν+j] */ free(a); /* 1 free για όλο το χώρο */ /* Το macro δεν είναι τέλειο θα τα δούμε αργότερα */ 29

30 Επιλογή τύπου πίνακα 2D Όταν δεν μου ζητείται ρητά ο ένας τύπος ή ο άλλος (δηλαδή καθαρά διδιάστατος ή «γιαλαντζί» διδιάστατος πίνακας από δείκτες σε σκόρπιες γραμμές), τι κάνω; Εξαρτάται από την εφαρμογή. Π.χ. αν καλείται κάποια συνάρτηση που περιμένει ως παράμετρο έναν (πραγματικό) διδιάστατο τότε είμαι αναγκασμένος να δεσμεύσω χώρο για έναν τέτοιον πίνακα και να τον χειριστώ όπως δείξαμε. Π.χ. αν οι γραμμές δεν έχουν ίδιο μέγεθος, αναγκαστικά θα πρέπει να έχω τον δεύτερο τύπο. Αν δεν υπάρχει περιορισμός, είναι συνήθως πιο καλό / εύκολο / ευέλικτο να έχω έναν πίνακα από pointers σε σκόρπιες γραμμές, παρά το γεγονός ότι ένας τέτοιος πίνακας έχει λίγο παραπάνω κόπο στο να δημιουργηθεί (πρέπει να κάνω malloc κάθε γραμμή ξεχωριστά) και να ελευθερωθεί (πρέπει να κάνω free κάθε γραμμή ξεχωριστά). 30

31 Ταξινόμηση strings (το πλήθος δίνεται ως όρισμα στη main) Ι #include <stdio.h> #include <string.h> #include <stdlib.h> void strbubblesort(char *strings[], int num); /* Πρωτότυπο */ #define SIZE 30 /* Μέγιστο μήκος για κάθε string */ void main(int argc, char *argv[]) { int i, NumOfStrings; char **array; /* Για αποθήκευση των strings */ if (argc < 2) return; /* ή exit(1) ή abort() */ NumOfStrings = atoi(argv[1]); if (NumOfStrings < 1) return; /* Μνήμη για τον πίνακα */ array = (char **) malloc(numofstrings*sizeof(char*)); if (array == NULL) { printf("no memory!\n"); return; /* Διάβασμα των string */ for (i = 0; i < NumOfStrings; i++) { /* mallocs & αντιγραφή strings */ array[i] = (char *) malloc(size*sizeof(char)); if (array[i] == NULL) { printf("no memory!\n"); return; fgets(array[i], 29, stdin); (Συνέχεια στην επόμενη διαφάνεια) 31

32 Ταξινόμηση strings (το πλήθος δίνεται ως όρισμα στη main) ΙΙ (Συνέχεια της main()) strbubblesort(array, NumOfStrings); /* Ταξινόμηση */ puts("\n\nthe sorted list in ascending order is:"); for (i = 0; i < NumOfStrings; i++) puts(array[i]); /* Προσέξτε ότι δεν μετακινούνται τα strings μόνο οι pointers */ void strbubblesort(char *strings[], int num) { char *temp; int top, seek; for (top = 0; top < num-1; top++) { for (seek = top+1; seek < num; seek++) { if (strcmp(strings[top], strings[seek]) > 0) { temp = strings[seek]; /* Εναλλαγή pointers */ strings[seek]= strings[top]; strings[top] = temp; 32

33 Άλλες κλήσεις διαχείρισης μνήμης void *calloc(size_t n, size_t size); Δεσμεύει χώρο στον οποίο αρχικοποιεί όλα τα bytes σε μηδέν Παίρνει 2 παραμέτρους: το πλήθος των στοιχείων και το μέγεθος του κάθε στοιχείου (σε bytes): int *p = (int *) calloc(n, sizeof(int)); void *realloc(void *p, size_t size); Δεσμεύει νέο χώρο και ότι υπήρχε στον παλιό (όπου δείχνει ο p) αντιγράφεται στον νέο. Αν το νέο size είναι μικρότερο τότε χάνονται κάποια δεδομένα που υπήρχαν στον παλιό (p) 33

34 Παράδειγμα #include <stdio.h> #include <stdlib.h> main() { int *p, *q; p = (int *) malloc(10*sizeof(int)); q = (int *) realloc(p, 20*sizeof(int)); printf("%p, %p\n", p, q); /* μπορεί να διαφέρουν */ 34

35 Αποδέσμευση μνήμης void *free(void *p); Π.χ. p = (int *) malloc(10*sizeof(int)); /* Δέσμευση */... free(p); /* Αποδέσμευση */ Αποδεσμεύει τον χώρο στον οποίον δείχνει ο p. Ο χώρος αυτός πρέπει να έχει προέλθει από malloc/calloc/realloc. Προσοχή: O χώρος αποδεσμεύεται (επιστρέφεται στο σύστημα και δεν μπορούμε να τον ξαναχρησιμοποιήσουμε), ΑΛΛΑ ο pointer p ΣΥΝΕΧΙΖΕΙ ΝΑ ΔΕΙΧΝΕΙ ΕΚΕΙ (δεν άλλαξε η τιμή του)!! 35

36 Σύνοψη #include <stdlib.h> void *malloc(size_t size); Δέσμευση μνήμης void *calloc(size_t count, size_t size); Δέσμευση μνήμης αρχικοποιημένης σε 0 void *realloc(void *ptr, size_t size); Επαναδέσμευση μνήμης void free(void *ptr); Αποδέσμευση μνήμης 36

37 Σύνοψη int *p; p = (int *) malloc(sizeof(int)); int *p; p = (int *) malloc(μ*sizeof(int)); int *p[10]; for (i = 0; i < 10; i++) p[i] = (int *) malloc(μ*sizeof(int)); int **p; p = (int **) malloc(10*sizeof(int *)); for (i = 0; i < 10; i++) p[i] = (int *) malloc(μ*sizeof(int)); 37

38 Pointer (malloc) από συνάρτηση Ι #include <stdio.h> void makearray(int * ip, int size){ int i; ip = (int *) malloc(size*sizeof(int)); for (i=0; i<size; i++){ ip[i] = 3*i+45; printf("print from ma: %d\n",ip[i]); main(){ int * array = NULL; int i, N=12; ΔΟΥΛΕΥΕΙ???? makearray(array, N); for (i=0;i<n;i++) printf("print from main: %d\n",array[i]); 38

39 Pointer (malloc) από συνάρτηση ΙΙ #include <stdio.h> void makearray(int **ip, int size){ int i; *ip = (int *) malloc(size*sizeof(int)); for (i=0; i<size; i++){ (*ip)[i] = 3*i+45; //try without () printf("print from ma: %d\n",*((*ip)+i)); //aka (*ip)[i] main(){ int * array = NULL; ΔΟΥΛΕΥΕΙ!!!!! int i, N=12; makearray(&array, N); for (i=0;i<n;i++) printf("print from main: %d\n",array[i]); 39

40 Προβλήματα pointers / διαχ. μνήμης Dangling pointers int *p; printf( %d, *p); Ο p δεν δείχνει σε καμία θέση (σκουπίδια) - dangling int *p; if (condition) { int temp = 1; p = &temp; printf( %d, *p); printf( %d, *p); Μετά το μπλοκ του if {, το temp ΔΕΝ ΥΦΙΣΤΑΤΑΙ. Επομένως p δείχνει σε άκυρη / μη νόμιμη θέση - dangling int *p; p = malloc(10*sizeof(int)); p[5] = 100;... free(p);... p[5]--; Μετά το free(), η δεσμευμένη μνήμη από το malloc() ΔΕΝ ΥΠΑΡΧΕΙ. Όμως, το p ΔΕΝ ΕΧΕΙ ΑΛΛΑΞΕΙ! Επομένως δείχνει σε άκυρη θέση - dangling 40

41 Κίνδυνοι από dangling pointers & προφυλάξεις Οι dangling pointers μπορεί να οδηγήσουν σε προσπέλαση άκυρων / παράνομων διευθύνσεων. Ένα πρόβλημα που μπορούν να προκαλέσουν είναι το κρασάρισμα ή χωρίς αιτιολογία δυσλειτουργία του προγράμματος (εξαιρετικά δύσκολο debugging) Ακόμα πιο σοβαρό είναι η πρόκληση ζημιάς / κρασάρισμα ΟΛΟΥ του συστήματος. Προφυλάξεις: 1. Πάντα αρχικοποιούμε τους pointers κατά τη δήλωσή τους (τουλάχιστον τους θέτουμε ίσους με NULL). 2. Μετά από το free(p), θέτουμε τον p = NULL. Έτσι τουλάχιστον αποφεύγουμε ζημιά στο σύστημα αλλά και διευκολύνουμε το debugging μιας και η προσπέλαση σε NULL «χτυπάει» αμέσως. 41

42 Προβλήματα pointers / διαχ. μνήμης Memory leaks char *p; p = malloc(10*sizeof(char)); scanf( %s, p); for ( ; p!= \0 ; p++ ) printf( %c, *p);... int *p, *q; p = malloc(10*sizeof(int)); q = malloc(20*sizeof(int));... if (condition) { p = q; printf( %d, p[5]); Κανένα πρόβλημα ορθότητας. Απλά πλέον ο χώρος των 10 θέσεων που δεσμεύσαμε μέσω του p ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΠΡΟΣΠΕΛΑΣΤΕΙ ΜΕ ΤΙΠΟΤΕ. Ενώ συνεχίζει να υπάρχει στη μνήμη (δεν έχει αποδεσμευθεί), έχει χαθεί ο μοναδικός pointer που γνώριζε τη διεύθυνσή του memory leak (διαρροή μνήμης) ΜΗΝ ΞΕΧΝΑΤΕ ΤΑ free()!!! 42

43 Αναλογία με αποθήκη προϊόντων Γνωστό κατάστημα διαθέτει αποθήκη με πολλά ράφια όπου σε κάθε ράφι υπάρχει ένα προϊόν (έπιπλο). Τα προϊόντα είναι συσκευασμένα έτσι ώστε ΔΕΝ ΜΠΟΡΕΙΣ να καταλάβεις τι είναι αν πας στα ράφια της αποθήκης. Για να πάρεις το έπιπλο πρέπει να επισκεφτείς την έκθεση του καταστήματος και να σημειώσεις σε ειδικά χαρτάκια το ΡΑΦΙ της αποθήκης που έχει το προϊόν που σε ενδιαφέρει. Με το συμπληρωμένο χαρτάκι πας στο σωστό ράφι και το παίρνεις αλλιώς δεν μπορείς να βρεις το προϊόν. Αναλογία: Μνήμη = αποθήκη Μεταβλητή (κελί στη μνήμη) = ράφι Τιμή μεταβλητής = προϊόν στο ράφι Δείκτης = το χαρτάκι 43

44 Έννοιες & αναλογίες Λειτουργία / έννοια Αναλογία p = &x; Γράφω σε χαρτάκι το ράφι. *p Το προϊόν που υπάρχει στο ράφι (πάω εκεί και το βρίσκω). q = &y; p = q; p++; temp = *a; *a = *b; *b = *a; t = malloc(10*sizeof(int)); Άλλο χαρτάκι που γράφει άλλο ράφι. Στο πρώτο χαρτάκι αλλάζω τι έγραψα και γράφω το ίδιο ράφι που γράφει το δεύτερο χαρτάκι. Αλλάζω το χαρτάκι και σημειώνω το αμέσως επόμενο ράφι. Πάω στα ράφια που γράφουν τα χαρτάκια a και b και εναλλάσσω τα προϊόντα. Δεσμεύω 10 συνεχόμενα άδεια ράφια στην αποθήκη. Στο χαρτάκι σημειώνω το ΠΡΩΤΟ από αυτά. Διαρροή μνήμης free(t); v = malloc(10*sizeof(int)); w = v; free(v); v = NULL; Dangling pointer. Σβήνω το μοναδικό χαρτάκι που έγραφε τα νέα ράφια. Δεν ξέρω πλέον που είναι τα νέα ράφια στην αποθήκη Αποδεσμεύω τα ράφια που δέσμευσα. Δεσμεύω 10 συνεχόμενα άδεια ράφια στην αποθήκη. Στο χαρτάκι σημειώνω το ΠΡΩΤΟ από αυτά και φτιάχνω και δεύτερο χαρτάκι με το ίδιο ράφι. Αποδεσμεύω τα ράφια που δέσμευσα. Σβήνω το πρώτο χαρτάκι. Το δεύτερο χαρτάκι (w) συνεχίζει να γράφει το πρώτο ράφι από τα αποδεμευμένα. 44

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

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

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1 Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής

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

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

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

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

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

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

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

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

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

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

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

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

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

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

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

Γλώσσα Προγραμματισμού C Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 4η σειρά ασκήσεων. Κοζάνη, 1 Νοεμβρίου 2007. Πρόγραμμα p4-1 (μεταγλώττιση και εκτέλεση) Πολύ απλό το πρώτο, για προθέρμανση! Πριν πατήσετε enter

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 5ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Πίνακες 77 Στατική δομή αποθήκευσης δεδομένων (το μέγεθος ορίζεται εξαρχής και δεν αλλάζει) Αποθήκευση πολλών μεταβλητών

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

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

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

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

ΗΥ-150. Προγραµµατισµός. υναµική ιαχείριση Μνήµης (1/2)

ΗΥ-150. Προγραµµατισµός. υναµική ιαχείριση Μνήµης (1/2) ΗΥ-150 Προγραµµατισµός υναµική ιαχείριση Μνήµης (1/2) Προγραµµατισµός υναµική ιαχείριση Μνήµης Μέχρι τώρα στατική ανάθεση και δέσµευση µνήµης Ζητούσαµε στο πρόγραµµά µας τη µέγιστη µνήµη που µπορεί να

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

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

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης Στο εργαστήριο αυτό θα μελετήσουμε τον τρόπο με τον οποίο ορίζουμε στην C πολυδιάστατους πίνακες και θα δούμε πώς μπορούμε να δεσμεύουμε

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

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

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

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

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

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

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

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δείκτες Τι είναι ένας δείκτης (pointer); Όταν δηλώνoυμε μια μεταβλητή σε ένα πρόγραμμα

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πίνακες Πίνακες (arrays) Πολύ συχνά είναι απαραίτητο το πρόγραμμα μας να χειριστεί

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

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

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

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

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

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

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

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 12 Πολυδιάστατοι Πίνακες Πολυδιάστατοι πίνακες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δείκτες (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 Δήλωση Δήλωση Τύπος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 13 Πίνακες & Συναρτήσεις Εισαγωγή Στις προηγούμενες

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays) ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008 Πίνακες (Arrays) 1-D 0 1 2 2-D 3-D 0 0 1 1 2 2 3 3 array[3][2] array[0][1] Γενική δήλωση πίνακα: τύπος_στοιχείων [ ] όνομα = new τύπος_στοιχείων [μήκος]; // 1-D και φυσικά

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

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

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

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

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

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

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

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

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

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης Προγραμματισμός Δυναμική Διαχείριση Μνήμης Μέχρι τώρα στατική ανάθεση και δέσμευση μνήμης Ζητούσαμε στο πρόγραμμά μας τη μέγιστη μνήμη που μπορεί να χρειαζόμασταν

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

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

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

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Πολυδιάστατοι πίνακες Μέχρι τώρα µιλούσαµε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες,

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

4-23: Προγραμματισμός σε C. Εισαγωγή. Εισαγωγικά. Εισαγωγικά

4-23: Προγραμματισμός σε C. Εισαγωγή. Εισαγωγικά. Εισαγωγικά Εισαγωγή 1 Εισαγωγικά Πρόγραμμα = {δεδομένα + {συναρτήσεις Συναρτήσεις = {main, Δεδομένα = {μεταβλητές, σταθερές Σταθερές = ποσότητες που δεν μεταβάλλονται κατά την εκτέλεση του προγράμματος Π.χ. Pi =

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

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C Τεχνολογία και Προγραμματισμός Υπολογιστών Η γλώσσα προγραμματισμού C Με μια ματιά Τύπος Πίνακα Μεταβλητές με ενδείκτη Αλφαριθμητικά - Πίνακες Δισδιάστατος Πολυδιάστατος Πίνακας 2 2 Τύπος Πίνακα Σύνθετος

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

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

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

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

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

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες Προγραμματισμός Η/Υ Ι Υπολογισμός - - Πίνακες ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συζητήσουμε τη χρήση του πίνακα (array) για τη συλλογή

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

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

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

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

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

12. Συναρτήσεις (Μέρος ΙI) Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 12. Συναρτήσεις (Μέρος ΙI) Ιωάννης Κατάκης Σήμερα o Συναρτήσεις χωρίς παραμέτρους o Συναρτήσεις με παραμέτρους Χωρίς επιστροφή τιμής Με επιστροφή τιμής o Εμβέλεια

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings

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

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

Προγραμματισμό για ΗΜΥ ΕΠΛ 34: Εισαγωγή στον Προγραμματισμό για ΗΜΥ Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 12 Πίνακες εικτών (Pointers Arrays) Θέματα ιάλεξης Στην ενότητα

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

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

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

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

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

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

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

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct) Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct) Αρχεία Το γενικό πλαίσιο: data stream (ρεύμα δεδομένων). stdin, stdout, stderr data stream ως προς τα δεδομένα βάσει προσπέλασης

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

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

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

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

Η γλώσσα C. Δείκτες (pointers)

Η γλώσσα C. Δείκτες (pointers) Η γλώσσα C Δείκτες (pointers) Δείκτες - Pointers Δείκτης: τι είναι; Μια μεταβλητή που περιέχει τη διεύθυνση μιας άλλης μεταβλητής 1000 1028 Μεταβλητή p int c = 10; int *p; p = &c; 1028 10 Μεταβλητή c *p

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

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

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

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

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16) Κεφάλαιο 8.1-8.3 Πίνακες Ι (Διάλεξη 16) 15-1 Πίνακες (Arrays) Σε αυτή την ενότητα θα μιλήσουμε για την δομή δεδομένων Πίνακας: 1. Εισαγωγή & Σύνταξη 2. Δήλωση Πίνακα 3. Αρχικοποίηση Πίνακα 4. Πρόσβαση

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ασκήσεις Επανάληψης Άσκηση 1 Το παρακάτω πρόγραμμα περιέχει μια δομή επανάληψης τύπου for. Να ξαναγραφεί ώστε να έχει ακριβώς την ίδια λειτουργία, χρησιμοποιώντας

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2011 Θέµα 1 (α') 1 - i 2 - ii 3 - iii 4 - iv 5 - v 6 - vi 7 - vii 8 - viii 9 - ix 10 - x Το αποτέλεσµα είναι η αντιστοιχία των

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

Προγραμματισμός II. Δυναμική διαχείριση μνήμης

Προγραμματισμός II. Δυναμική διαχείριση μνήμης Δυναμική διαχείριση μνήμης Ένας πίνακας ελέγχει ένα συγκεκριμένο μπλοκ μνήμης. Το μέγεθος ενός πίνακα είναι σταθερό: καθορισμένο όταν το πρόγραμμα έχει γραφεί. int array[4]; Οι δείκτες μπορούν να δείξουν

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

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

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 11: Δείκτες & Πίνακες Δείκτες και πίνακες Μια μεταβλητή «μονοδιάστατος πίνακας από αντικείμενα τύπου Τ» μπορεί να θεωρηθεί ως (είναι συντακτικά συμβατή με) μια μεταβλητή

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 7: Πίνακες (Arrays)

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 7: Πίνακες (Arrays) ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 7: Πίνακες (Arrays) Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 7 Πίνακες (Arrays) 1-D 0 1 2 2-D 3-D 0 0 1 1 2 2 3 3 array[3][2]

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

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

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

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

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

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

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