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

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

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

Transcript

1 Δυναμική διαχείριση μνήμης

2 Ένας πίνακας ελέγχει ένα συγκεκριμένο μπλοκ μνήμης. Το μέγεθος ενός πίνακα είναι σταθερό: καθορισμένο όταν το πρόγραμμα έχει γραφεί. int array[4]; Οι δείκτες μπορούν να δείξουν σε μπλοκ μνήμης αλλά... πώς μπορούν να ελέγξουν τα δικά τους μπλοκ μνήμης; Τι συμβαίνει όταν πρέπει να μεταβάλλεται το μέγεθος του πίνακα, ή θέλουμε να επιλέγεται το μέγεθος του πίνακα μετά την έναρξη εκτέλεσης του προγράμματος; ( run time )

3 Απάντηση: δυναμική εκχώρηση μνήμης (memory allocation) = εκχώρηση μνήμης κατά τη διάρκεια της εκτέλεσης του προγράμματος. Επιτρέπει: Τον καθορισμό του μεγέθους κατά την εκτέλεση (συνάρτηση: malloc() ()) Αλλαγή του μεγέθους κατά την εκτέλεση (συνάρτηση: realloc() ())

4 void * malloc (int size); malloc() (): επιστρέφει ένα δείκτη στην αρχή του μπλοκ, στο οποίο στο οποίο γίνεται η εκχώρηση. Πρέπει ΠΑΝΤΟΤΕ να γίνεται μετατροπή τύπου έτσι ώστε ο τύπος του δείκτη να είναι ίδιος με τα στοιχεία στα οποία δείχνει. Η malloc() ορίζεται στο stdlib.h ήστο alloc.h O αριθμός των bytes που θα εκχωρηθούν. Χρησιμοποιείστε τη sizeof() για να βρείτε το μέγεθος ενός τύπου.

5 void free (void *); Η free() δεν επιστρέφει τίποτε. Απλώς αποδεσμεύει τη μνήμη που είχε εκχωρηθεί από τη malloc() (). Δηλαδή αποδεσμεύει μνήμη έτσι ώστε η τελευταία να μπορεί να χρησιμοποιηθεί αλλού. Η συνάρτηση free() ορίζεται στο stdlib.h ; ή στο alloc.h. ΠΡΟΣΟΧΗ: Οι malloc() και free() αναγκαιούν η μία την άλλη. Εάν χρησιμοποιηθεί η malloc() για εκχώρηση μνήμης, πρέπει να χρησιμοποιηθεί η free() για την αποδέσμευσή της. Δείκτης στην αρχή του μπλοκ που θέλουμε να αποδεσμευθεί.

6 #include<stdio.h stdio.h> #include<stdlib.h stdlib.h> main ( ) int *start, size; printf("type the size: "); scanf("%d", ", &size); start = (int( *) malloc (size * sizeof(int)); /* other operations here */ free(start); /* more on that later */ Οι malloc και free ορίζονται στο stdlib.h

7 #include<stdio.h stdio.h> #include<stdlib.h stdlib.h> main ( ) int *start, size; printf("type the size: "); scanf("%d", ", &size); Δείκτης σε int start = (int( *) malloc (size * sizeof(int)); /* other operations here */ Ακέραια μεταβλητή free(start); /* more on that later */ 900: 904: 908: 912: 916: 920: 924: start, junk size, junk

8 #include<stdio.h stdio.h> #include<stdlib.h stdlib.h> main ( ) int *start, size; printf("type the size: "); scanf("%d", ", &size); start = (int( *) malloc (size * sizeof(int)); /* other operations here */ Θεωρούμε ότι ο χρήστης ορίζει το μέγεθος ίσο με 3 free(start); /* more on that later */ 900: 904: 908: 912: 916: 920: 924: start, junk size, 3

9 #include<stdio.h> H malloc αναζητά ένα συνεχές μπλοκ 12 #include<stdlib.h> bytes και, όταν το βρει, επιστρέφει ένα main δείκτη( ) στην αρχή του μπλοκ. Δηλαδή, επιστρέφει τη διεύθυνση του πρώτου byte int *start, size; σ αυτό το μπλοκ. Η διεύθυνση αυτή ανατίθεται printf("type στο δείκτη the size: start. "); scanf("%d", &size); start = (int *) malloc (size * sizeof(int)); /* other operations here */ free(start); /* more on that later */ Η sizeof δέχεται ως είσοδο ένα όνομα τύπου και επιστρέφει το μέγεθος του τύπου αυτού, π.χ. ένας ακέραιος έχει μέγεθος 4 bytes. 900: 904: 908: 912: 916: 920: 924: start, 908 size, 3

10 #include<stdio.h> #include<stdlib.h> main ( ) int *start, = size; 15; *(start+1) = 28; printf("type the size: "); *(start+2) = *(start+1) + 12; scanf("%d", &size); start = (int *) malloc (size * sizeof(int)); /* other operations here */ free(start); /* more on that later */ 900: 904: 908: 912: 916: 920: 924: start, 908 size,

11 #include<stdio.h stdio.h> #include<stdlib.h stdlib.h> void ( ) int *start, size; printf("type the size: "); scanf("%d", ", &size); start = (int( *) malloc (size * sizeof(int)); /* other operations here */ free(start); 900: 904: 908: 912: 916: 920: 924: start, junk size, 3 Απελευθερώνει το μπλοκ μνήμης, το οποίο που αρχίζει από τη διεύθυνση που καθορίζεται στην αρχή

12 Τι ΔΕΝ πρέπει να κάνετε: malloc int *pscores; pscores = malloc (32); ΛΑΘΟΣ!!! Χαμένη μετατροπή τύπου Αν και μερικοί μεταγλωττιστές μπορεί να «καταλάβουν» τι συμβαίνει, πρέπει πάντοτε να θεωρείται ότι δεν μπορούν Συγκεκριμένος bytes. αριθμός Δεν ξεκαθαρίζει πώς πολλοί ακέραιοι θα ενταχθούν σ αυτό το μπλοκ. Επειδή δεν εκχωρούν όλα τα μηχανήματα 4 bytes για int, μην κάνετε υποθέσεις.

13 Γιατί η malloc δεν μπορεί να βρει τη ζητηθείσα μνήμη; Επιστρέφει NULL. Το NULL είναι η διεύθυνση 0. Είναι έγκυρη διεύθυνση, που εγγυημένα δεν περιέχει ποτέ έγκυρα δεδομένα. Καλή προγραμματιστική πρακτική: Να ελέγχετε πάντοτε κατά πόσον η malloc επιστρέφει NULL: char *pmessage* pmessage; pmessage = (char *) malloc (20 * sizeof(char)); if (pmessage( == NULL) printf( Insufficient memory. Exiting... ); return -1;

14 free Η free() δέχεται ως όρισμα ένα δείκτη, ο οποίος δείχνει στην αρχή του μπλοκ που απελευθερώνεται. Δε χρειάζεται να είναι ο ίδιος δείκτης που χρησιμοποιήθηκε στη malloc. Το ακόλουθο είναι σωστό: char *pmessage* pmessage,, *msg* msg, aletter; pmessage = (char *) malloc (20 * sizeof(char)); /* do stuff with pmessage */ msg = pmessage; /* πλέον και οι δύο δείχνουν στην ίδια θέση */ pmessage = &aletter& aletter; /* πλέον ο pmessage δείχνει στο aletter */ free(msg);

15 ΠΡΟΣΟΧΗ: Μην προσπαθήσετε να απελευθερώσετε την ίδια μνήμη δύο φορές!! Το ακόλουθο είναι ΛΑΘΟΣ: char *pmessage* pmessage,, *msg* msg, aletter; pmessage = (char *) malloc (20 * sizeof(char)); /* do stuff with pmessage */ msg = pmessage; /* πλέον και οι δύο δείχνουν στην ίδια θέση */ free(msg); free(pmessage); /* ΛΑΘΟΣ: Το μπλοκ έχει ήδη απελευθερωθεί!!! */

16 Παρατηρήσεις για malloc(), free() Το free(ptr) είναι επικίνδυνο εάν ο ptr δεν είναι έγκυρος!! Το αποτέλεσμα είναι απρόβλεπτο: μπορεί να μη συμβεί τίποτε είτε να υπάρξει κάποιο σφάλμα είτε ακόμη και να κολλήσει το πρόγραμμα. Όταν σε ένα πρόγραμμα έχουμε επαναλαμβανόμενες εκχωρήσεις μνήμης χωρίς τις αντίστοιχες απελευθερώσεις, συμβαίνουν διαρροές μνήμης Το πρόγραμμα αυξάνει συνεχώς καθώς εκτελείται Τελικά, το πρόγραμμα είτε θα πρέπει να σταματήσει είτε θα κολλήσει. Για την αποφυγή των ανωτέρω θα πρέπει: Βέλτιστη λύση: Κρατείστε τα ζεύγη malloc/free στοίδιοτμήμα κώδικα Καλή λύση: Δημιουργείστε μία κεντρική συνάρτηση, λειτουργούσα ως δοχείο απορριμάτων. Κακή λύση: Διασκορπισμένες malloc() και free()

17 malloc_1 st _example.cpp

18 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: main() char **name;*name; /* pointer-to to-(pointers-to char)*/ int i; name = (char **)malloc(3*sizeof(char *)); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); name[0] = Zero ; name[1] = One ; name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2]);,name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][0],name[2][0]); free(name); Αποτέλεσμα: : Zero,One,Two,Z,O,T! Δήλωση δείκτη για λίστα

19 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: main() char **name; /* pointer-to to-(pointers-to char)*/ int i; name = (char **)malloc(3*sizeof(char *)); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); name[0] = Zero ; name[1] = One ; name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2]);,name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][0],name[2][0]); free(name); Αποτέλεσμα: : Zero,One,Two,Z,O,T! Δήλωση δείκτη για λίστα

20 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: main() Χώρος για 3 (pointers-to to-char) char **name; /* pointer-to to-(pointers-to char)*/ int i; name = (char **)malloc(3* 3*sizeof(char *)); ); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); name[0] = Zero ; name[1] = One ; name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2]);,name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][0],name[2][0]); free(name); Αποτέλεσμα: : Zero,One,Two,Z,O,T!

21 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: main() Χώρος για 40 χαρακτήρες char **name; /* pointer-to to-(pointers-to char)*/ int i; name = (char **)malloc(3* 3*sizeof(char *)); ); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); ); name[0] = Zero ; name[1] = One ; Δεν απαιτείται strcpy name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2]);,name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][0],name[2][0]); free(name); Αποτέλεσμα: : Zero,One,Two,Z,O,T!

22 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: Χρησιμοποιεί το δείκτη του πίνακα για να main() επιλέξει αλφαριθμητικό char **name; /* pointer-to to-(pointers-toto char)*/ int i; name = (char **)malloc(3*sizeof(char *)); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); name[0] = Zero ; name[1] = One ; name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2] name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][0],name[2][0]); free(name); Αποτέλεσμα: Zero,One,Two,Z,O,T!,Z,O,T!

23 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: Ο δεύτερος δείκτης επιλέγει χαρακτήρες στο main() αλφαριθμητικό char **name; /* pointer-to to-(pointers-toto char)*/ int i; name = (char **)malloc(3*sizeof(char *)); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); name[0] = Zero ; name[1] = One ; name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2]);,name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][ ],name[1][0],name[2][0]);],name[2][0]); free(name); Αποτέλεσμα: : Zero,One,Two,Z,O,T Z,O,T!

24 Δείκτες σε δείκτες Τα μεγέθη των πινάκων ρυθμίζονται με δυναμική διαχείριση μνήμης: (το name δείχνει σε δεσμευμένη μνήμη κι όχι main() όχι το **name!!) char **name; /* pointer-to to-(pointers-toto char)*/ int i; name = (char **)malloc(3*sizeof(char *)); for (i=0;i<3;i++) ;i++) name[i]=(char *)malloc malloc(40*sizeof(char)); name[0] = Zero ; name[1] = One ; name[2] = Two ; printf( %s,%s,%s, %s,%s,%s,,name[0],name[1],name[2]);,name[0],name[1],name[2]); printf( %c,%c,%c! %c,%c,%c!\n, name[0][0],name[1][ ],name[1][0],name[2][0]);],name[2][0]); free(name); Αποτέλεσμα: Zero,One,Two,Z,O,T! Απελευθερώνει στο τέλος τη μνήμη

25 Τι συμβαίνει: Προγραμματισμός II Δείκτες σε δείκτες name = (char **)malloc(3*sizeof(char *)); (δείκτης σε λίστα δεικτών χαρακτήρα) name «Δέσμευσε ένα μπλοκ μνήμης, επαρκές για 3 δείκτες χαρακτήρα. Στη συνέχεια να επιστρέψεις ένα δείκτη σ αυτό».... name[0] name[1] name[2]... (Κάθε στοιχείο είναι ένας δείκτης χαρακτήρα. Ο μηδενικός δείκτης είναι το name[0], ο πρώτος δείκτης είναι το name[1], κ.λ.π.)

26 Τι συμβαίνει: name[0] = Zero ; name[1] = One ; name[2] = Two ; (δείκτης σε λίστα δεικτών χαρακτήρα) name Προγραμματισμός II Δείκτες σε δείκτες «Kάθε δείκτης της λίστας πρέπει να δείχνει σε αλφαριθμητική σταθερά που είναι αποθηκευμένη στη μνήμη» (char pointers)... name[0] name[1] name[2]... (chars)... + $ 3 Z e r o \0 8 2 O n e \ T w o \0 -..

27 Τι συμβαίνει: name[0] = Zero ; name[1] = One ; name[2] = Two ; (δείκτης σε λίστα δεικτών χαρακτήρα) name Προγραμματισμός II (char pointers)... name[0] name[1] name[2]... (chars)... + $ 3 Z e r o \0 8 2 O n e \ T w o \0 -.. name[0][0] name[0][2] name[0][1] Δείκτες σε δείκτες «Kάθε δείκτης της λίστας πρέπει να δείχνει σε αλφαριθμητική σταθερά που είναι αποθηκευμένη στη μνήμη»

28 Τι συμβαίνει: free(name); Προγραμματισμός II Δείκτες σε δείκτες «Απελευθέρωσε το μπλοκ μνήμης που είχε δεσμευτεί με το δείκτη name» (δείκτης σε λίστα δεικτών χαρακτήρα) name (char pointers)... name[0] name[1] name[2]... (chars)... + $ 3 Z e r o \0 8 2 O n e \ T w o \0 -..

29 Παράδειγμα: #include <stdio.h< stdio.h> #include <conio.h< conio.h> #include <stdlib.h< stdlib.h> main() char **name; Προγραμματισμός II Δείκτες σε δείκτες int no_strings,string_size,size,i,j; printf("\ngive ngive the number of strings: "); scanf("%d",&no_strings); printf("\ngive ngive the string size: "); scanf("%d",&string_size); // '\0'' included name=(char **)malloc(no_strings malloc(no_strings*sizeof(charsizeof(char *)); for (i=0;i<no_strings;i no_strings;i++) name[i]=(char *)malloc(string_size malloc(string_size*sizeof(char)); printf("\naddr(name naddr(name)=%d name=%d\n",&name,name n",&name,name);

30 for (i=0;i<no_strings;i no_strings;i++) printf("\nadrr(name[%d nadrr(name[%d])=% ])=%d,",i,&name[i]); printf("\n\tadrr tadrr of first element of name[%d][0]=%d\n",i,&name[i][0]); n",i,&name[i][0]); printf("\n\tadrr tadrr of last element of name[%d][%d]=% ]=%d\n", i,string_size-1,&name[i][string_size 1,&name[i][string_size-1]); 1]); for (i=0;i<no_strings;i no_strings;i++) printf("\ngive ngive the %d string: ",i+1); scanf("%s",name[i]); for (i=0;i<no_strings;i no_strings;i++) printf("\nname[%d][0])=%c nname[%d][0])=%c name[%d]=",i,name[i][0],i,name[i]); puts(name[i]); free(name); system("pause"); ");

31 Διαφορετικές θέσεις μνήμης. Το name στη στοίβα και τα υπόλοιπα στο σωρό. Εάν δηλωθεί πίνακας με τον κλασσικό τρόπο θα αποθηκευθεί στην στοίβα. Παράδειγμα με μεγάλο πίνακα και stack overflow (1 τραγούδι 3 με ποιότητα cd 44.1 KHz).

32 Δείκτες σε δείκτες Πολυδιάστατοι πίνακες float: main() float **grid; /* pointer-to to-pointer-to-float */ int i,rmax,cmax; Δήλωσε δείκτη σε λίστα δεικτών grid = (float **)malloc(rmax malloc(rmax*sizeof(float *)); for(i=0; i<rmax rmax; ; i++) grid[i]=(float *)malloc(cmax malloc(cmax*sizeof(float));... COMPUTE!... use grid[r][c]... for(i=0; i<rmax rmax; ; i++) free(grid[i]); free(grid);

33 Δείκτες σε δείκτες main() float **grid; /* pointer-to to-pointer-to-float */ int i,rmax,cmax; grid = (float **)malloc(rmax malloc(rmax*sizeof(float *)); for(i=0; i<rmax rmax; ; i++) grid[i]=(float *)malloc(cmax malloc(cmax*sizeof(float));... COMPUTE!... use grid[r][c]... for(i=0; i<rmax rmax; ; i++) free(grid[i]); Δημιουργεί ένα rmax pointers-to free(grid); μπλοκ to-float

34 Δείκτες σε δείκτες main() float **grid; /* pointer-to to-pointer-to-float */ int i,rmax,cmax; grid = (float **)malloc(rmax malloc(rmax*sizeof(float *)); for(i=0; i<rmax rmax; ; i++) grid[i]=(float *)malloc(cmax malloc(cmax*sizeof(float));... COMPUTE!... use grid[r][c]... for(i=0; i<rmax rmax; ; i++) free(grid[i]); Δημιουργεί ένα από cmax floats free(grid); ένα μπλοκ floats για κάθε pointer-to to-float

35 Δείκτες σε δείκτες main() float **grid; /* pointer-to to-pointer-to-float */ int i,rmax,cmax; grid = (float **)malloc(rmax malloc(rmax*sizeof(float *)); for(i=0; i<rmax rmax; ; i++) grid[i]=(float *)malloc(cmax malloc(cmax*sizeof(float));... COMPUTE!... use grid[r][c]... for(i=(rmax-1); i>=0; i--i --) Τέλος; Να free(grid[i]); διαδικασία: free(grid); απελευθερωθεί κάθε αντιστραφεί η αρχικά να κάθε μπλοκ από floats και στη συνέχεια κάθε μπλοκ από pointers-to to-float

36 Δείκτες σε δείκτες grid = (float **)malloc malloc(rmax*sizeof(float *)); ); «Δέσμευσε μπλοκ μνήμης για rmax pointers-to to-float» (δείκτης σε λίστα δεικτών float) grid (rmax float pointers)... grid[0] grid[1] grid[2]...

37 grid Προγραμματισμός II grid = (float **)malloc(rmax malloc(rmax*sizeof(float *)); for(i=0; i<rmax rmax; ; i++) grid[i]=(float *)malloc(cmax malloc(cmax*sizeof(float)); (δείκτης σε λίστα δεικτών float) Δείκτες σε δείκτες Για κάθε δείκτη δέσμευσε ένα μπλοκ μνήμης για cmax... grid[0] grid[1] grid[2]... cmax floats (rmax float pointers ==> ) (μπλοκ από cmax floats==>)

38 Δείκτες σε δείκτες grid[1][2] = radius*(sin(x) + cos(y) ); ); (δείκτης σε λίστα δεικτών float) grid Προσπέλασε τον x-στό δείκτη και πάρε την y-στή float τιμή του r... grid[0] grid[1] grid[r][c] c (xmax float pointers ==> ) grid[1] grid[2]... (μπλοκ από cmax floats==>)

39 Καθώς η επιστρεφόμενη τιμή του x είναι NULL σε περίπτωση σφάλματος, μπορούμε να χρησιμοποιήσουμε την εντολή assert για να πιστοποιήσουμε ότι υπάρχει διαθέσιμη μνήμη. Η συνάρτηση assert απαιτεί να συμπεριληφθεί το <assert.h>. Σε περίπτωση που δεν υπάρχει διαθέσιμη μνήμη, το πρόγραμμα σταματά και εμφανίζεται το μήνυμα Assertion failed, καθώς και γραμμή κώδικα στην οποία εμφανίσθηκε η έλλειψη μνήμης. Προγραμματισμός II x=(float **)malloc(size1*sizeof(float sizeof(float *)); assert(x!=null); for (i=0; i<size; i++) Έλεγχος επάρκειας μνήμης κατά την εκχώρηση μνήμης x[i]=(float *)malloc(size malloc(size*sizeof(float)); assert(x[i]!=null);

40 Συναρτήσεις οριζόμενες από τον χρήστη για τη δέσμευση/αποδέσμευση μνήμης Στην περίπτωση που στο πρόγραμμα γίνεται επανειλημμένα δέσμευση και αποδέσμευση μνήμης, μπορούν να ορισθούν συναρτήσεις που θα δεσμεύουν και θα αποδεσμεύουν μνήμη για πίνακες float, int κ.λ.π. Οι συναρτήσεις δέσμευσης μνήμης θα έχουν παραμέτρους τα μεγέθη της μνήμης που ζητείται να δεσμευθεί και θα επιστρέφουν το δείκτη που θα διαχειρίζεται τη μνήμη. Οι συναρτήσεις αποδέσμευσης μνήμης θα έχουν παραμέτρους τον δείκτη που διαχειρίσθηκε τη μνήμη και το μέγεθος αυτής. Δε θα έχουν επιστρεφόμενη τιμή.

41 Συναρτήσεις οριζόμενες από το χρήστη για τη δέσμευση/αποδέσμευση μνήμης Οι ακόλουθες συναρτήσεις δεσμεύουν/αποδεσμεύουν μνήμη για ένα δισδιάστατο πίνακα αριθμών κινητής υποδιαστολής: float **allocate_2(int size1, int size2) int i; float **deikt; deikt=(float **)malloc(size1*sizeof(float *)); assert(deikt!=null); for (i=0;i<size1;i++) deikt[i]=(float *)malloc(size2*sizeof(float)); assert(deikt[i]!=null); return(deikt);

42 Συναρτήσεις οριζόμενες από το χρήστη για τη δέσμευση/αποδέσμευση μνήμης void free_2(float **deikt, int size1) int i; for (i=(size1-1);i>=0;i 1);i>=0;i--) ) free(deikt[i]); free(deikt); Καλούνται ως εξής: float **s; απαιτείται s=allocate_2(3,2,250);//δέσμευση μνήμης για πίνακα s[3][250] free_2(s,3);//αποδέσμευση μνήμης του πίνακα s[3][250] δεν απαιτείται

43 Πίνακας 3 θέσεων με στοιχεία pointers Αυτόματη τοποθέτηση τιμής. Ουσιαστικά η μνήμη έχει καθαρισθεί. Example_of_allocation_functions.cpp

44 (υπενθύμιση) string.h Εύρεση μήκους length Αντιγραφή ενός string Συνένωση 2 strings Σύγκριση 2 strings Εύρεση χαρακτήρα σε string Εύρεση string σε string Όλοι οι chars strlen() strcpy() strcat() strcmp() strchr() strstr() Οι πρώτοι n chars strncpy() strncat() strncmp() strrchr()

45 Χρήση δεικτών σε αλφαριθμητικά Μπορούν να εκτελεσθούν πράξεις ακεραίων Μπορούν να χρησιμοποιηθούν ως κινητά ονόματα πινάκων. Ο δείκτης πίνακα (array index) [ ] λειτουργεί! *(arr+n arr+n) ) = arr[n] arr+n = &arr[n& arr[n] Οι δείκτες μπορούν να ορίσουν ένα string όπως ακριβώς το ορίζει ένας πίνακας.

46 Παράδειγμα: Να δοθεί το πρωτότυπο της συνάρτησης strlen() (μήκος string). Λύση: Θεωρούμε ότι το όρισμα που δέχεται η συνάρτηση είναι δείκτης σε χαρακτήρα και η δήλωση διαμορφώνεται ως εξής: int strlen(char *s); Το σώμα της συνάρτησης με δείκτες και με πίνακες δίνεται παρακάτω: int strlen(char *s) char *p=s; while (*s!= \0 ) s++; return(s-p); int strlen(char str[]) int i=0; while (str[i( str[i++]); return(i-1); δυσνόητο Η εντολή s-p εκτελεί αφαίρεση δεικτών και δίνει τον αριθμό των στοιχείων μεταξύ των δύο δεικτών. Example_of_strlen.cpp

47 Παράδειγμα: Να δοθεί το πρωτότυπο της συνάρτησης strcpy() (αντιγραφή ενός string σε ένα άλλο). // Έκδοση με πίνακες void strcpy(char s[], char t[]) int i=0; while ((s[i]=t[i])!= \0 ) ) i++; // 1η1 έκδοση με δείκτες void strcpy(char *s, char *t) while ((*s=*t)!= \0 ) ) s++; t++; // 2η2 έκδοση με δείκτες void strcpy(char *s, char *t) while ((*s++=*t++)!= \0 ); ); // 3η3 έκδοση με δείκτες void strcpy(char *s, char *t) while (*s++=*t++); Oι εκδόσεις είναι ισοδύναμες; Δοκιμάστε σε δικά σας παραδείγματα!!

48 Εύρεση χαρακτήρα: : strchr(str1,ch) #include <stdio.h< stdio.h> /* για την printf() */ #include <string.h> /* για την strcpy() */ main() char msg1[81]= Hell Hello you! ; char *fnd* fnd; /* pointer to char */ fnd = strchr(msg1, msg1, o ); printf( %s %s\n, fnd); Εύρεση του char ch, στο string str1. Επιστροφή δείκτη char στην πρώτη εύρεση. Aποτέλεσμα: > o you! > msg1 fnd H e l l o y o u! \0

49 example_strchr.cpp

50 #include <stdio.h< stdio.h> /* για την printf() */ #include <string.h> /* για την strcpy() */ main() char msg1[81]= Hello you! u! ; char *fnd* fnd; /* pointer to char */ Εύρεση string: strstr(str1,str2) fnd = strstr(msg1, msg1, yo ); printf( %s %s\n, fnd); Εύρεση του string str2 μέσα στο str1; Επιστροφή δείκτη char στην πρώτη εύρεση. Αποτέλεσμα: > you! > msg1 fnd H e l l o y o u! \0

51 Παρατήρηση: Σε μία έκφραση δήλωσης, ο τελεστής πίνακα έχει μεγαλύτερη προτεραιότητα από τον τελεστή *. Οι δύο παρακάτω δηλώσεις βασίζονται στο γεγονός αυτό: int *ar[2]; int (*ptr)[2]; Η πρώτη δήλωση ορίζει έναν πίνακα δύο δεικτών σε ακεραίους και στο χρόνο εκτέλεσηςέχειωςαποτέλεσμα, όπως φαίνεται στο ακόλουθο σχήμα, τη δέσμευση δύο θέσεων μνήμης για μελλοντική αποθήκευση δεικτών σε ακεραίους. Αντίθετα, η δεύτερη δήλωση ορίζει ένα δείκτη σε πίνακα δύο ακεραίων, τον οποίο όμως δε δηλώνει και κατά συνέπεια δε δεσμεύει τον απαιτούμενο χώρο.

52 Διαχείριση μνήμης: οι τελεστές new-delete H C++ παρέχει τον τελεστή new για διαχείριση μνήμης. Ο συγκεκριμένος τελεστής αποκτά μνήμη από το λειτουργικό σύστημα και επιστρέφει ένα δείκτη για το σημείο αρχής του τμήματος: include <stdio.h< stdio.h> include <string.h> main() char *str* str= Hello world ; int len=strlen(str strlen(str); char *ptr* ptr; ptr=new char[len+1]; //δέσμευση μνήμης για str + \0 strcpy(ptr,str); //αντιγραφή του str στη νέα περιοχή μνήμης ptr printf( ptr=% =%s,ptr ); delete ptr; //αποδέσμευση της μνήμης του ptr Αποτέλεσμα: > ptr=hello world

53 Διαχείριση μνήμης: οι τελεστές new-delete H παράσταση ptr=new char[len+1]; επιστρέφει ένα δείκτη που δείχνει προς ένα τμήμα μνήμης αρκετό για να χωρέσει το str, με ένα επιπλέον byte για το μηδενικό χαρακτήρα. Για το μέγεθος (len+1) θα πρέπει να χρησιμοποηθούν αγκύλες. Η έλλειψη αγκυλών δε θα ανιχνευθεί από το μεταγλωττιστή αλλά θα οδηγήσει σε λάθη κατά την εκτέλεση του προγράμματος. Ο τελεστής new παίζει παρόμοιο ρόλο με την οικογένεια συναρτήσεων βιβλιοθήκης malloc. Όμως, η νέα προσέγγιση είναι καλύτερη καθώς επιστρέφει ένα δείκτη για τον κατάλληλο τύπο δεδομένων, ενώ ο δείκτης της malloc πρέπει να προσαρμοσθεί στον κατάλληλο τύπο. Ο τελεστής delete απελευθερώνει τη δεσμευμένη μνήμη. Η διαγραφή της μνήμης δε διαγράφει το δείκτη που τη δείχνει (τον str στο προηγούμενο παράδειγμα) κι ούτε αλλάζει την τιμή της διεύθυνσης στο δείκτη. Ωστόσο, αυτή η διεύθυνση παύει να ισχύει. Η μνήμη στην οποία δείχνει μπορεί να συμπληρωθεί από κάτι άλλο εντελώς διαφορετικό. Θα πρέπει να προσεχθεί ώστε να μη χρησιμοποιούνται δείκτες που έχουν διαγραφεί με τον τελεστή delete.

54 Σύνταξη του τελεστή new char *ptr* ptr; ίδιοι τύποι δεδομένων αγκύλες ptr=new char[len+1]; δείκτης δεσμευμένη λέξη τύπος δεδομένων των μεταβλητών aριθμός των μεταβλητών τύπου char

55 Μνήμη που δεσμεύθηκε με τον τελεστή new ptr=new char[len+1]; ptr f700 len+1 bytes f700 address

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Μονοδιάστατοι Πίνακες (tables) Μια συλλογή μεταβλητών ίδιου τύπου οι οποίες είναι αποθηκευμένες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά

Προγραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά Θεματική ενότητα 6: Πίνακες αλφαριθμητικά Πίνακες Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται για την αποθήκευση και διαχείριση

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

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

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

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

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

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

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

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

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

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

Διάλεξη 8η: Αλφαριθμητικά (strings)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός Θέμα 1ο (25%) Για το τμήμα κώδικα που ακολουθεί να περιγραφεί αναλυτικά η λειτουργία του, να αιτιολογηθεί η ενσωμάτωση των συγκεκριμένων αρχείων κεφαλίδας και ι να απεικονισθεί το περιεχόμενο των θέσεων

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

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

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

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

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

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

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

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

ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ Τμήμα Πληροφορικής & Επικοινωνιών Εξεταζόμενο μάθημα: Προγραμματισμός ΙI Ονοματεπώνυμο σπουδαστή/άστριας:... Εξάμηνο σπουδών:... Α.Ε.Μ.:... 25/1/2006 ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ Οι εξεταζόμενοι επιτρέπεται

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός II. Τυχαίοι αριθμοί Διεπαφές

Προγραμματισμός II. Τυχαίοι αριθμοί Διεπαφές Τυχαίοι αριθμοί Διεπαφές Τυχαίοι αριθμοί (random numbers) Τυχαίος αριθμός δεν καθορίζεται εκ των προτέρων η τιμή που θα λάβει. Δίνεται από ένα σύνολο ισοπίθανων τιμών. Οι τυχαίοι αριθμοί που παράγονται

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

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

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

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

Αναφορές, είκτες και Αλφαριθμητικά

Αναφορές, είκτες και Αλφαριθμητικά Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών

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

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

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

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες Στόχοι και αντικείμενο ενότητας Ο τύπος του Πίνακα (βλ. ενότητα #2α) Ορισμός και αρχικοποίηση Αποθήκευση πινάκων στη μνήμη Πολυδιάστατοι πίνακες #6. Πίνακες και Δείκτες Ο τύπος του Δείκτη Η έννοια του

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (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*%

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

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

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλφαριθμητικά, πίνακες και δείκτες

Αλφαριθμητικά, πίνακες και δείκτες Αλφαριθμητικά, πίνακες και δείκτες Τα αλφαριθμητικά ως πίνακες Ένα αλφαριθμητικό (string) αναπαρίσταται εσωτερικά ως ένας πίνακας χαρακτήρων που τερματίζεται από τον ειδικό χαρακτήρα NULL ('\0') 1000 1001

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

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

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

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

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

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

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

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

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

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

HY150a Φροντιστήριο 3 24/11/2017

HY150a Φροντιστήριο 3 24/11/2017 HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

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

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

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

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

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.

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

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

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

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

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

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

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

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

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

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

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h Α.Μ. 1375 FAIL 1413 1417 1420 1421 FAIL 1422 FAIL 1424 1425 FAIL 1426 FAIL - Πρώτα να ελέγχετε αν η malloc επέστρεψε NULL και µετά να προσπαθείτε να προσπελάσετε τη δεσµευµένη µνήµη - Όταν διαβάζετε string

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

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων Σκοπός της Άσκησης ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση µε τη χρήση πινάκων σαν διατάξεις αποθήκευσης δεδοµένων της Γλώσσας Προγραµµατισµού C. H συγκεκριµένη άσκηση

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

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

Αρχές Προγραμματισμού Αρχές Προγραμματισμού https://eclass.upatras.gr/courses/ee806/index.php Βασίλης Παλιουράς paliuras@ece.upatras.gr Άσκηση Να γραφεί πρόγραμμα που να αθροίζει δύο διανύσματα Ν στοιχείων σε ISO C90 χρησιμοποιώντας

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

Συµβολοσειρές - Strings

Συµβολοσειρές - Strings Συµβολοσειρές - Strings 1 Συµβολοσειρέςστην C/C++ 2 Χαρακτήρες 'a', 'z', '0', Χαρακτήρες σαν int 'z' επίσης αναπαριστά την ακεραία τιµή του χαρακτήρα z Strings-Συµβολοσειρές Σειρές από χαρακτήρες σαν µια

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

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

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

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579 Ευρετήριο Η γλώσσα C σε βάθος # #define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579 A abs(), 625 AND, 64 ASCII πίνακας

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

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

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

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

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

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

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

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

Η γλώσσα C. Δείκτες και Διαχείριση Μνήμης (memory management) Η γλώσσα C Δείκτες και Διαχείριση Μνήμης (memory management) 1 πείραμα = πολλές μετρήσεις Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται ως είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά

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

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

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

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

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

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

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