Θέμα 1ο (25%) Για το τμήμα κώδικα που ακολουθεί να περιγραφεί αναλυτικά η λειτουργία του, να αιτιολογηθεί η ενσωμάτωση των συγκεκριμένων αρχείων κεφαλίδας και ι να απεικονισθεί το περιεχόμενο των θέσεων μνήμης που καταλαμβάνουν οι μεταβλητές σε κάθε γραμμή κώδικα. Χάριν απλότητας να θεωρηθεί ότι οι μεταβλητές καταλαμβάνουν διαδοχικές θέσεις μνήμης. #include <stdio.h< stdio.h> #include <stdlib.h< stdlib.h> #include <assert.h< assert.h> float **allocate_2(int size1, int size2) { int i; float **deikt deikt; deikt=(float **)malloc(size1*sizeof(float sizeof(float *)); assert(deikt!=null); printf("addr(deikt)=%d deikt=% =%d\n",&deikt,deikt); for (i=0;i<size1;i++) { deikt[i]=(float *)malloc(size2*sizeof(float sizeof(float)); assert(deikt[i]!=null); printf("addr(deikt[%d])=%d deikt[%d]=%d\n",i,&deikt[i],i,deikt[i]); return(deikt); main() { float **s; s=allocate_2(4,2000);...........
// 2005_3_1 _1 Δομημένος Προγραμματισμός
Θέμα 2ο (55%) Για τη διαχείριση των στοιχείων των συνδρομητών μίας εταιρείας που π παρέχει υπηρεσίες τηλεφωνίας ορίζεται στη main() ο πίνακας customer_list list[size] με στοιχεία τύπου δομής CustomerT,, η οποία θα περιλαμβάνει το ονοματεπώνυμο του συνδρομητή, τη διεύθυνσή του (σε μεταβλητή τύπου δομής), το επάγγελμά του και τον τηλεφωνικό αριθμό του. Για τη διαχείριση μεμονωμένων συνδρομητών, μέσα στη main() ορίζεται η μεταβλητή svar, επίσης τύπου δομής CustomerT.. Ο αριθμός των συνδρομητών SIZE καθορίζεται με εντολή προεπεξεργαστή #define. Ζητείται: α) Nα α ορισθεί ο τύπος δομής CustomerT. β) Να γραφούν συναρτήσεις που να επιτελούν τα ακόλουθα: void save_data data( FILE *fp, CustomerT *list ): Aποθήκευση των δεδομένων του πίνακα customer_list στο δυαδικό αρχείο customers.dat dat. void read_data data( FILE *fp, CustomerT *list ): Aνάγνωση των δεδομένων από το αρχείο και αποθήκευσή τους στον πίνακα customer_list list. void read_customer customer( FILE *fp, CustomerT *s, int k ): Προσπέλαση ενός συνδρομητή που βρίσκεται στην k θέση του αρχείου και αποθήκευση των στοιχείων του σε μία μεταβλητή s τύπου CustomerT,, η οποία αντιστοιχίζεται σε μεταβλητή svar της main() (). void save_customer( ( FILE *fp* fp, CustomerT *s, int k ):) Aποθήκευση στο αρχείο των στοιχείων ενός συνδρομητή που βρίσκεται στην k θέση του πίνακα customer_list.
H συνάρτηση read_customer customer() χρησιμοποιείται για να φέρουμε τα στοιχεία του k-στού συνδρομητή από το αρχείο και πιθανώς να τα αλλάξουμε αργότερα. H συνάρτηση save_customer customer() χρησιμοποιείται όταν έχουμε κάνει αλλαγές στα στοιχεία ενός συνδρομητή και θέλουμε να ενημερώσουμε την εγγραφή του στο αρχείο. γ) Να γραφεί τμήμα της main() που θα περιλαμβάνει μόνο δήλωση των κατάλληλων μεταβλητών και από μία κλήση στις ανωτέρω συναρτήσεις. Παρατήρηση: : Απαιτείται η χρήση εργαλείων για τυχαία προσπέλαση δυαδικού αρχείου. //MONO μεταγλώττιση, δεν έχουν φορτωθεί στοιχεία για τους συνδρομητές #include <conio.h< conio.h> #include <stdio.h< stdio.h> #define SIZE 300 struct addresst { char street_name[30]; int street_number; char city[30]; int zip_code; ;
struct CustomerT { char name[20]; char surname[40]; addresst address; char tele[15]; char job[50]; ; void save_data(file *fp,customert *list); void read_data(file *fp,customert *list); void read_customer(file *fp,customert k); void save_customer(file *fp,customert k); main() { CustomerT customer_list[size]; // Έστω ότι φορτώθηκαν όλα τα στοιχεία των συνδρομητών στον πίνακα FILE *f1; f1=fopen("customers.dat","wb fopen("customers.dat","wb+"); save_data(f1,customer_list); read_data(f1,customer_list); read_customer(f1,&customer_list[15],15); //16oς συνδρομητής // Μεταβολή των στοιχείων του 16ου συνδρομητή save_customer(f1,&customer_list[15],15);
void save_data(file *fp,customert *list) { int i; rewind(fp); for (i=0;i<size;i SIZE;i++) fwrite(&list[i],sizeof(customert),1,fp); // Ισοδύναμα: fwrite(list,sizeof(customert),size,fp); void read_data(file *fp,customert *list) { rewind(fp); fread(list,sizeof(customert),size,fp); ); void read_customer(file *fp,customert k ) { fseek(fp,k*sizeof(customert),seek_set sizeof(customert),seek_set); ); fread(s,sizeof(customert),1,fp); void save_customer(file *fp,customert k) { fseek(fp,k*sizeof(customert),seek_set sizeof(customert),seek_set); ); fwrite(s,sizeof(customert),1,fp);