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

Σχετικά έγγραφα
ιαφάνειες παρουσίασης #6 (β)

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

Διάλεξη 18η: Διαχείρηση Αρχείων

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

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

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

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

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

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

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

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

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

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

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

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

Η γλώσσα προγραμματισμού C Χειρισμός αρχείων

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

Εργαστήριο 9: Αρχεία

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

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

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

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

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

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

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

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

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

Περιεχόµενα. Πρόλογος... 15

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

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

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

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

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

4ο σετ σημειώσεων - Χειρισμός αρχείων και structs

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

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Βιβλιοθήκη stdio. Προγραμματισμός II 1

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

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

Προγραµµατισµός. Αρχεία

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

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Προγραμματισμός II Τα κανάλια stdin, stdout, stderr κανάλι καθιερωμένης εισόδου stdin κανάλι καθιερωμένης εξόδου stdout κανάλι σφαλμάτων stderr

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

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

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

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

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

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

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

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

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

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

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

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

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

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

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

Ασκήσεις - Μελέτες περίπτωσης για το μάθημα Προγραμματισμός II

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

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

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

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

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

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

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

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

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

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

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

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

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

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

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

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

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

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

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

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

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

αρχεία Εξωτερικά αρχεία Ηµερολόγιο υπολογισµών (log-file) εδοµένα από αρχεία m Επιστροφή στο λειτουργικό σύστηµα Επιπρόσθετες εντολές εισόδου/εξόσου

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

Transcript:

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

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Διαχείριση Αρχείων Υπάρχουν πέντε στοιχειώδεις συναρτήσεις fopen( ) fputc( ) fgetc( ) fclose( ) fseek() ανοίγει το αρχείο για να χρησιμοποιηθεί γράφει ένα χαρακτήρα στο αρχείο διαβάζει ένα χαρακτήρα από το αρχείο κλείνει ένα αρχείο εκτελεί τυχαία προσπέλασης σε αρχείο.

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 3 Άνοιγμα Αρχείων fopen() Τύπος αρχείου FILE * fp; Άνοιγμα αρχείων FILE * fopen (const char * filename, const char * mode); Παράμετρος mode "r" ανάγνωση (read) "w" εγγραφή (write) "a" προσθήκη (append) "b" δυαδικά δεδομένα (binary)

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 4 Άνοιγμα Αρχείων fopen() H συνάρτηση fopen( ) λειτουργεί σαν δύο συναρτήσεις ανοίγει ένα αρχείο ώστε να μπορεί να χρησιμοποιηθεί, και επιστρέφει ένα δείκτη αρχείου. Ο γενικός τύπος της fopen( ) είναι FILE *fp; fp = fopen("όνομα αρχείου", "τύπος") ; fp είναι ο δείκτης (index) του αρχείου ο οποίος στην αρχή δείχνει την πρώτη θέση του αρχείου

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 5 Παράδειγμα fopen() Η συνάρτηση fopen συνήθως γράφεται ως εξής: FILE *fp; fp = fopen("test.dat", "r"); if ( fp == ΝULL) { puts("unable to open file \n"); exit( ) ; } Η ταυτόχρονη ανάγνωση/εγγραφή προσδιορίζεται με το rw Π.χ. fp = fopen("test.dat", "rw");

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 6 Παράδειγμα fopen() Η τιμή NULL που ισούται με το 0, χρησιμοποιείται επειδή δεν υπάρχει δείκτης αρχείου που θα μπορούσε να έχει την τιμή 0. Αν χρησιμοποιήσουμε την fopen( ) για να ανοίξουμε ένα αρχείο για γραφή, θα διαγραφεί κάθε αρχείο με το όνομα αυτό και θα δημιουργηθεί ένα καινούργιο. Προσοχή, γιατί τα δεδομένα του προηγούμενου αρχείου θα χαθούν οριστικά!!

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 7 Διαχείριση Αρχείων Είσοδος-έξοδος χαρακτήρων int fputc (int c, FILE * fp); int fgetc (FILE * fp);

fputc() Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 8 H συνάρτηση fputc( ) χρησιμοποιείται για να γράψουμε ένα χαρακτήρα σ' ένα αρχείο το οποίο έχει ανοίξει χρησιμοποιώντας τη συνάρτηση fopen( ) με τον τύπο w Ο γενικός τύπος της συνάρτησης είναι: int fputc (int ch, FILE * fp); char ch='a'; fputc (ch, fp); όπου fp είναι ο δείκτης του αρχείου που επιστρέφει η fopen( ) και ch είναι ο χαρακτήρας που παράγεται δηλαδή γράφεται στο αρχείο. Ο δείκτης του αρχείου λέει στην fputc( ) σε ποιό αρχείο και σε ποιο σημείο να γράψει. Έτσι, γράφει στην αμέσως επόμενη θέση από την τελευταία εγγραφή.

fgetc() Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 9 H συνάρτηση fgetc( ) χρησιμοποιείται για να διαβάζει χαρακτήρες από ένα αρχείο που άνοιξε με χρήση της συνάρτησης fopen ( ) και τύπο r. O γενικός τύπος της συνάρτησης είναι: int fgetc (FILE * fp); char ch; ch = fgetc(fp); όπου fp είναι ένας δείκτης (index) αρχείου τύπου FILE που έχει επιστραφεί από την fopen( )

fclose() Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 10 H συνάρτηση fclose( ) χρησιμοποιείται για να κλείνει ένα αρχείο που έχει ανοίξει μετά από κλήση στην fopen( ) Πρέπει να κλείνουμε όλα τα αρχεία πριν τελειώσει το πρόγραμμα H fclose( ) κάνει κάτι περισσότερο από το να ελευθερώνει απλώς το δείκτη του αρχείου. Γράφει οποιαδήποτε δεδομένα δεν έχουν γραφεί στο δίσκο και κάνει ένα τυπικό κλείσιμο του αρχείου στο επίπεδο του λειτουργικού συστήματος Ο γενικός τύπος της συνάρτησης fclose( ) είναι fclose(fp);

Άσκηση Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 11 Δημιουργήστε ένα νέο project με όνομα files Γράψτε ένα πρόγραμμα που θα ανοίγει για εγγραφή ένα αρχείο με το όνομα data.txt θα διαβάζει συνεχώς χαρακτήρες από το πληκτρολόγιο με την συνάρτηση getchar() θα αποθηκεύει κάθε χαρακτήρα στο αρχείο με τη συνάρτηση fputc() Οι χαρακτήρες θα εισάγονται στο αρχείο μέχρι ο χρήστης να εισάγει τον χαρακτήρα #

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 12 Άσκηση - Files #include "stdio.h" void main() { FILE *fp; char ch; fp = fopen("test.txt", "w" ); if( fp == NULL) { printf("unable to open file \n"); exit(0); } do { ch=getchar( ); fputc(ch,fp); } while ( ch!= '#' ); } fclose( fp );

Άσκηση Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 13 Επεκτείνετε το πρόγραμμα σας, ώστε να διαβάσετε όλους τους χαρακτήρες από το αρχείο με την fgetc() και να τους τυπώσετε στην οθόνη με την putchar()

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 14 Τυχαία προσπέλαση - fseek() H fseek( ) χρησιμοποιείται για να προσδιορίσει την τρέχουσα θέση (συγκεκριμένο byte) σ' ένα αρχείο Ο γενικός τύπος της συνάρτησης fseek( ) είναι: fseek (fp, μήκος, αφετηρία) ; όπου fp είναι ένας δείκτης αρχείου που επιστρέφει με την κλήση στην fopen( ) μήκος είναι ο αριθμός των byte από την αφετηρία, τα οποία προσδιορίζουν την τρέχουσα θέση αφετηρία μπορεί να είναι το 0 για την έναρξη του αρχείου το 1 για την τρέχουσα θέση το 2 για το τέλος του αρχείου

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

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 16 Τυχαία προσπέλαση - fseek() fseek(fp,10,0); int count=1; while(count<=5) { ch = fgetc(fp); putchar(ch); count++; }

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 17 Διαχείριση Αρχείων Είσοδος-έξοδος συμβολοσειρών int fputs (const char * s, FILE * fp); char * fgets (char * s, int n, FILE * fp); Βασικές συναρτήσεις εισόδου-εξόδου int fprintf (FILE * fp, const char * format,...); int fscanf (FILE * fp, const char * format,...); Έλεγχος τέλους αρχείου int feof (FILE * fp);

Άσκηση Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 18 Δημιουργήστε ένα νέο project με όνομα files2 Γράψτε ένα πρόγραμμα που θα ανοίγει για εγγραφή ένα αρχείο με το όνομα data2.txt με χρήση της συνάρτησης fprintf() θα γράψετε 3 γραμμές στο αρχείο με το όνομα σας, επώνυμο και το ΑΜ σας. Χρησιμοποιήστε τις μεταβλητές firstname, lastname, AM αρχικοποιώντας τις με τα στοιχεία σας μηδενίστε τα περιεχόμενα των μεταβλητών π.χ. strcpy(firstname,"") στη συνέχεια, με χρήση της συνάρτησης fscanf() διαβάστε τα δεδομένα του αρχείου στις ίδιες μεταβλητές και τυπώστε τα στην οθόνη

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 19 Διαχείριση Αρχείων Είσοδος-έξοδος πολλών δεδομένων fwrite (const void * p,size_t size, size_t num,file * fp); fread (void * p,size_t size, size_t num, FILE * fp); Ο (απρόσημος) ακέραιος τύπος size_t χρησιμοποιείται για τη μέτρηση χώρου μνήμης σε bytes.

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 20 Άσκηση Δημιουργήστε ένα νέο project με όνομα files3 size_t fwrite (const void * p, size_t size, size_t num, FILE * fp size_t fread (void * p, size_t size, size_t num, FILE * fp); Γράψτε ένα πρόγραμμα που γράφει σε ένα δυαδικό αρχείο (data3.bin) 100 εγγραφές μίας δομής δεδομένων, με την fwrite() Στη συνέχεια, ανοίξτε το αρχείο, και διαβάστε με την fread() και τις 100 εγγραφές προβάλοντας τις στην οθόνη

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 21 Άσκηση Δημιουργήστε ένα νέο project με όνομα files4 size_t fwrite (const void * p, size_t size, size_t num, FILE * fp size_t fread (void * p, size_t size, size_t num, FILE * fp); Γράψτε ένα πρόγραμμα που να αντιγράφει το δυαδικό αρχείο binary.bin στο δυαδικό αρχείο data4.bin με χρήση των fwrite() και fread()

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 22 Παράδειγμα - Αντιγραφή δυαδικών αρχείων int main () { FILE * fin, * fout; unsigned char buffer[1000]; size_t count; fin = fopen("binary.bin", "rb"); if (fin == NULL) return -1; fout = fopen("data4.bin", "wb"); if (fout == NULL) return -1; while (!feof(fin) ) { count = fread(buffer, 1, 1000, fin); fwrite(buffer, 1, count, fout); } fclose(fin); fclose(fout); return 0; }

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 23 Συναρτήσεις βιβλιοθήκης Είσοδος και έξοδος <stdio.h> Περιέχει όλες τις συναρτήσεις εισόδου-εξόδου Προκαθορισμένα αρχεία FILE * stdin; τυπική είσοδος FILE * stdout; τυπική έξοδος FILE * stderr; τυπική έξοδος σφαλμάτων Ισοδυναμίες printf(...) fprintf(stdout,...) scanf(...) fscanf(stdin,...) κ.λπ.

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

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 25 Δείκτες Πίνακες Έστω int a[5] = { 12, 8, 5, 11, 9}; int *ptr; ptr = a; ή ptr = &a[0]; a 0 1 2 3 4 12 8 5 11 9 ptr ptr+1 ptr+2... ptr++

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 26 Δείκτες Πίνακες Ισοδύναμες εκφράσεις *(a+i) a+i a[i] &a[i] Δείκτης σε δείκτη Προτεραιότητα [ ] μεγαλύτερη από * π.χ. int *a[2] πίνακας (δύο) δεικτών int int int (*ptr)[2] δείκτης σε πίνακα (δύο) ακεραίων a int int ptr

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 27 Δείκτες - Αλφαριθμητικά Δήλωση δείκτη αλφαριθμητικού char * <όνομα δείκτη>; π.χ. char * pmsg; Ανάθεση σε δείκτη αλφαριθμητικού char *<όνομα-δείκτη> = < αλφαριθμητικό >; π.χ. char *pmsg = Today is Thursday ;

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 28 Δείκτες - Αλφαριθμητικά Προσοχή στις διαφορές char msg[ ] = Today is Thursday ; (πίνακας χαρακτήρων) char *msg_ptr = Today is Thursday ; (δείκτης σε πίνακα) char *msg[18]; (πίνακας δεικτών χαρακτήρα) msg[1] 2ος δείκτης * (msg[1]) o 1ος χαρακτήρας του δεύτερου δείκτη

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 29 Παράδειγμα Υπολογισμός μήκους αλφαριθμητικού όταν μας δίνεται ο δείκτης str στο πρώτο στοιχείο του. int i=0; while (str[i++]); printf( %d, i); int i=0; while (str[i]) i++; printf( %d, i); int i=0; while (str[i]!= \0 ) i++; printf( %d, i); char *p = str; while (* str!= \0 ) str++; printf( %d, str p );

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 30 Παράδειγμα void strcpy(char *s, char *t) { } int i=0; while ((s[i]=t[i])!= \0 ) i++; void strcpy(char *s, char *t) { while ((*s=*t)!= \0 ) { s++; t++} } void strcpy(char *s, char *t) { while ((* s++=*t++)!= \0 ) ; }

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 31 Παράδειγμα void strcmp(char *s, char *t) { int i=0; for (ι=0; s[i]==t[i]; i++) if (s[i]== \0 ) return 0; return s[i]-t[i]; } int strcmp(char *s, char *t) { for (; *s==*t; s++, t++) If (*s== \0 ) return 0; return *s-*t; }

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 32 Δυναμική Διαχείριση Μνήμης Calloc, Malloc, για δέσμευση μνήμης Realloc για αλλαγή μεγέθους δεσμευμένης μνήμης Free για απελευθέρωση μνήμης

Malloc() Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 33 #include <stdlib.h> void *malloc(size_t size); H συνάρτηση malloc δεσμεύει χώρο μεγέθους τουλάχιστον size bytes. Επιστρέφει ένα δείκτη στη δεσμευθείσα μνήμη ή NULL, αν δεν υπάρχει διαθέσιμη μνήμη. Tα bytes του χώρου μνήμης δεν παίρνουν αρχική τιμή. float *fp; fp = (float *)malloc(sizeof(float));

Calloc() Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 34 #include <stdlib.h> void *calloc(size_t n,size_t size); H συνάρτηση calloc δεσμεύει χώρο για ένα πίνακα n στοιχείων, μεγέθους size το καθένα. Διασφαλίζει την αρχικοποίηση της με 0. Επιστρέφει ένα δείκτη στη δεσμευθείσα μνήμη ή NULL, αν δεν υπάρχει διαθέσιμη μνήμη. float *fp1, *fp2; fp1 = (float *)calloc(3, sizeof(float) ) fp2 = (float *)malloc( 3*sizeof(float) );

Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 35 Realloc() #include <stdlib.h> void *realloc(vod *buffer, size_t size); H συνάρτηση realloc μεταβάλλει το μέγεθος ενός τμήματος μνήμης που είχε προηγούμενα δεσμευτεί. Το νέο μέγεθος ορίζεται από τη size. Διασφαλίζει τα υπάρχοντα περιεχόμενα στη μνήμη. Επιστρέφει ένα δείκτη στο νέο τμήμα μνήμης που μπορεί να είναι ίδιος με τον buffer ή διαφορετικός αν το τμήμα μετακινηθεί. Αν ο buffer είναι NULL, η realloc λειτουργεί σαν τη malloc. int *ptr; ptr = calloc(5, sizeof(int)); ptr = realloc(ptr, 7*sizeof(int));

Free() Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 36 #include <stdlib.h> void free(void * buffer); H συνάρτηση free αποδεσμεύει τη μνήμη η οποία σηματοδοτείται από το όρισμα buffer και η οποία είχε προηγούμενα δεσμευτεί με κλήση μίας εκ των calloc, malloc, realloc. float *fp; fp = (float *)malloc(sizeof(float));. free(fp);