Προγραμματισμός II. Δυναμική διαχείριση μνήμης
|
|
- Πολύμνια Κουταλιανός
- 6 χρόνια πριν
- Προβολές:
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 ) Δρ. Μηχ. Νικόλαος Πετράκης (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 Δυναμική διαχείριση μνήμης Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης.
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Αναφορά
Διαβάστε περισσότεραΔυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15
Διαβάστε περισσότεραΔιάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 10 η Αλφαριθμητικά Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα. Η συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας τον τελεστή
Διαβάστε περισσότεραΠρογραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά
Θεματική ενότητα 6: Πίνακες αλφαριθμητικά Πίνακες Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται για την αποθήκευση και διαχείριση
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Διαβάστε περισσότεραΔιάλεξη 8η: Αλφαριθμητικά (strings)
Διάλεξη 8η: Αλφαριθμητικά (strings) Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) strings CS100, 2016-2017
Διαβάστε περισσότεραΑ' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 4η σειρά ασκήσεων. Κοζάνη, 1 Νοεμβρίου 2007. Πρόγραμμα p4-1 (μεταγλώττιση και εκτέλεση) Πολύ απλό το πρώτο, για προθέρμανση! Πριν πατήσετε enter
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
Διαβάστε περισσότεραΔομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος
ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι
Διαβάστε περισσότεραΠίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"
Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό
Διαβάστε περισσότεραΔιαδικαστικός Προγραμματισμός
ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Διαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 7 ο : Δείκτες Στόχοι μαθήματος Να κατανοήσετε τη δυνατότητα χρήσης διευθύνσεων ως τιμών δεδομένων. Να μπορείτε να χρησιμοποιείτε
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
Θέμα 1ο (25%) Για το τμήμα κώδικα που ακολουθεί να περιγραφεί αναλυτικά η λειτουργία του, να αιτιολογηθεί η ενσωμάτωση των συγκεκριμένων αρχείων κεφαλίδας και ι να απεικονισθεί το περιεχόμενο των θέσεων
Διαβάστε περισσότεραΕπανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Διαχείριση
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Διαβάστε περισσότεραΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ
Τμήμα Πληροφορικής & Επικοινωνιών Εξεταζόμενο μάθημα: Προγραμματισμός ΙI Ονοματεπώνυμο σπουδαστή/άστριας:... Εξάμηνο σπουδών:... Α.Ε.Μ.:... 25/1/2006 ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ Οι εξεταζόμενοι επιτρέπεται
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Παρατηρήσεις
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings
Διαβάστε περισσότεραΠρογραμματισμός II. Τυχαίοι αριθμοί Διεπαφές
Τυχαίοι αριθμοί Διεπαφές Τυχαίοι αριθμοί (random numbers) Τυχαίος αριθμός δεν καθορίζεται εκ των προτέρων η τιμή που θα λάβει. Δίνεται από ένα σύνολο ισοπίθανων τιμών. Οι τυχαίοι αριθμοί που παράγονται
Διαβάστε περισσότεραΔιάλεξη 11η: Δείκτες, μέρος 1
Διάλεξη 11η: Δείκτες, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Pointers I CS100, 2016-2017
Διαβάστε περισσότεραΑναφορές, είκτες και Αλφαριθμητικά
Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών
Διαβάστε περισσότεραΔιαδικαστικός Προγραμματισμός
Διαδικαστικός Προγραμματισμός Ενότητα 7: Δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Διαβάστε περισσότεραΣτόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες
Στόχοι και αντικείμενο ενότητας Ο τύπος του Πίνακα (βλ. ενότητα #2α) Ορισμός και αρχικοποίηση Αποθήκευση πινάκων στη μνήμη Πολυδιάστατοι πίνακες #6. Πίνακες και Δείκτες Ο τύπος του Δείκτη Η έννοια του
Διαβάστε περισσότεραΟι δείκτες στη γλώσσα C
Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15
Διαβάστε περισσότεραΚεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (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 Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο
Διαβάστε περισσότεραΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων
Διαβάστε περισσότεραΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 7ο Τμήμα Διοίκησης Επιχειρήσεων Παλαιό ΕΠΔΟ α εξάμηνο Β. Φερεντίνος Δείκτες (Pointers) (1) 142 Κάθε μεταβλητή, εκτός από την τιμή της, έχει και μία συγκεκριμένη διεύθυνση
Διαβάστε περισσότεραΔιάλεξη 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: Από τη Θεωρία στην Εφαρμογή (Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας) Ενδεικτικές Ασκήσεις του Βιβλίου Ε.Α.1
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Αλφαριθμητικά θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δείκτες Τι είναι ένας δείκτης (pointer); Όταν δηλώνoυμε μια μεταβλητή σε ένα πρόγραμμα
Διαβάστε περισσότεραΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες
Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη
Διαβάστε περισσότεραΑλφαριθμητικά, πίνακες και δείκτες
Αλφαριθμητικά, πίνακες και δείκτες Τα αλφαριθμητικά ως πίνακες Ένα αλφαριθμητικό (string) αναπαρίσταται εσωτερικά ως ένας πίνακας χαρακτήρων που τερματίζεται από τον ειδικό χαρακτήρα NULL ('\0') 1000 1001
Διαβάστε περισσότεραΕνδεικτική περιγραφή μαθήματος
ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό (με. τη C)
Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr
Διαβάστε περισσότεραΑ' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές
Διαβάστε περισσότεραΔιάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Εισαγωγικές Έννοιες σε Strings - Πίνακες από Strings - Συναρτήσεις
Διαβάστε περισσότερα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.1 Η Έννοια του Πίνακα Συχνά είναι προτιμότερο να αντιμετωπίζουμε ένα σύνολο μεταβλητών σαν ενότητα για να απλοποιούμε το χειρισμό τους. Έτσι οργανώνουμε σύνθετα δεδομένα σε
Διαβάστε περισσότεραΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 10 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών
Διαβάστε περισσότεραΔιάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,
Διαβάστε περισσότεραΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός
Διαβάστε περισσότεραΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Διαβάστε περισσότεραΤεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C
Τεχνολογία και Προγραμματισμός Υπολογιστών Η γλώσσα προγραμματισμού C Με μια ματιά Τύπος Πίνακα Μεταβλητές με ενδείκτη Αλφαριθμητικά - Πίνακες Δισδιάστατος Πολυδιάστατος Πίνακας 2 2 Τύπος Πίνακα Σύνθετος
Διαβάστε περισσότεραΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ
ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τον ορισμό, τη δήλωση και τη χρήση των χαρακτήρων, συνεπώς και των αλφαριθμητικών, της Γλώσσας
Διαβάστε περισσότεραΕισαγωγή στον Προγραµµατισµό «C»
Εισαγωγή Στον Προγραµµατισµό «C» Δείκτες Πανεπιστήµιο Πελοποννήσου Τµήµα Επιστήµης & Τεχνολογίας Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Μνήµη Υπολογιστή Η µνήµη RAM (Random Access Memory) ενός υπολογιστή
Διαβάστε περισσότεραΠρογραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ.
Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι 1 Αλφαριθµητικά - Εισαγωγή Ένα αλφαριθµητικό (string) είναι µία
Διαβάστε περισσότεραint array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι
Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 8: Πίνακες, Αλφαριθμητικά Πίνακες Ο πίνακας είναι μια ειδική δομή για την αποθήκευση μιας σειράς από δεδομένα του ίδιου τύπου. Η δήλωση ενός πίνακα γίνεται όπως για μια
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα: είδαμε ότι συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών & Υπολογιστική Φυσική
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 6: Πίνακες και Δείκτες Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην
Διαβάστε περισσότερα2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων
2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει
Διαβάστε περισσότεραΔείκτες (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 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 14: Δυναμική Μνήμη Δυναμική μνήμη προγράμματος Πολλές φορές, δεν γνωρίζουμε εκ των προτέρων πόση μνήμη θα χρειαστεί το πρόγραμμα μας. Αν δεσμεύσουμε περισσότερη μνήμη
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure
Διαβάστε περισσότεραΗ γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Οι πίνακες στη C (μονοδιάστατοι -συμβολοσειρές) Γενικά για τους πίνακες Ο πίνακας είναι μια αρκετά διαδεδομένη δομή που προσφέρεται από σχεδόν κάθε γλώσσα προγραμματισμού. Πρόκειται
Διαβάστε περισσότερα#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................
Διαβάστε περισσότεραΚεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)
Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.
Διαβάστε περισσότεραΓλώσσα Προγραμματισμού C
Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 4: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: Πίνακες Δεικτών, Παραδείγματα, Πολυδιάστατοι πίνακες Πέρασμα παραμέτρων σε προγράμματα C Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες:
Διαβάστε περισσότεραΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 8 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών
Διαβάστε περισσότερα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: ΠΙΝΑΚΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση µε τη χρήση πινάκων σαν διατάξεις αποθήκευσης δεδοµένων της Γλώσσας Προγραµµατισµού C. H συγκεκριµένη άσκηση
Διαβάστε περισσότεραΑρχές Προγραμματισμού
Αρχές Προγραμματισμού https://eclass.upatras.gr/courses/ee806/index.php Βασίλης Παλιουράς paliuras@ece.upatras.gr Άσκηση Να γραφεί πρόγραμμα που να αθροίζει δύο διανύσματα Ν στοιχείων σε ISO C90 χρησιμοποιώντας
Διαβάστε περισσότεραΣυµβολοσειρές - 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
Ευρετήριο Η γλώσσα 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 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση της C είκτες Πίνακες
Διαβάστε περισσότεραΠρογραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη
Διαβάστε περισσότεραΗ γλώσσα C. Δείκτες και Διαχείριση Μνήμης (memory management)
Η γλώσσα C Δείκτες και Διαχείριση Μνήμης (memory management) 1 πείραμα = πολλές μετρήσεις Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται ως είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά
Διαβάστε περισσότεραΥπολογισμός - Συλλογή Δεδομένων - Πίνακες
Προγραμματισμός Η/Υ Ι Υπολογισμός - - Πίνακες ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συζητήσουμε τη χρήση του πίνακα (array) για τη συλλογή
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Διαβάστε περισσότερα