Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό 2013-14 Διδάσκων: Γεώργιος Παπαϊωάννου Μονογραφή επιτηρητή: Στοιχεία Φοιτητή (συμπληρώνεται από το φοιτητή) Όνομα: Αίθουσα/αμφιθέατρο: Επίθετο: Όνομα πατέρα: Έτος παράδοσης τελευταίων εργασιών: Αριθμός εργασιών: Αριθμός Μητρώου: Έτος σπουδών: Βαθμολογία (συμπληρώνεται από τον διδάσκοντα) Όλα τα πεδία συμπληρώνονται με κεφαλαία γράμματα Γραπτό Ενότητα 1 Ενότητα 2 Ενότητα3 Σύνολο Εργασίες Εργασία 1 Εργασία 2 Εργασία 3 Εργασία 4 * Σύνολο Αναγωγή στις 30 μονάδες (*) αφορά μόνο παλαιότερους φοιτητές. Οι εργασίες προσμετρώνται μόνο αν παραδόθηκαν στο ακαδ. Έτος 2011-12 και μετά. Παρατηρήσεις Επόπτη Συνολικός Βαθμός: Γενικές Οδηγίες Συμπληρώστε τα στοιχεία που σας ζητούνται στην πρώτη σελίδα πριν ξεκινήσετε να απαντάτε στα ερωτήματα. Όλα τα ερωτήματα πρέπει να απαντηθούν στο χώρο που δίνεται στο ερώτημα και μόνο εκεί. Καμία παραπομπή σε άλλο σημείο δε θα γίνει δεκτή. Πρόχειρες σημειώσεις μπορείτε να κρατήσετε μόνο στο χώρο που σας δίνεται στην τελευταία σελίδα του φύλλου εξέτασης το οποίο αποτελεί μέρος του γραπτού και παραδίδεται μαζί με τις απαντήσεις. Οποιαδήποτε σημείωση σε άλλο σημείο του φύλλου εξέτασης επιφέρει μείωση βαθμού. Η διάρκεια του διαγωνίσματος είναι 3 ώρες και η συνολική βαθμολογία του γραπτού είναι 70 μονάδες ( βαθμός 7). Η εργασία προσμετράται μόνο για γραπτά με βαθμό 3,5. Δεν επιτρέπεται η χρήση σημειώσεων, βιβλίων ή άλλων βοηθημάτων. Σύμφωνα με τον κανονισμό του πανεπιστημίου απαγορεύεται ρητά η χρήση κινητών τηλεφώνων και άλλων ηλεκτρονικών συσκευών κατά τη διάρκεια του διαγωνίσματος. Σε περίπτωση που ο επόπτης διαπιστώσει οποιαδήποτε απόπειρα αντιγραφής, συνεννόησης ή επικοινωνίας των θεμάτων, αφαιρεί επί τόπου το φύλλο εξέτασης, σημειώνει την αιτία και ο φοιτητής αποβάλλεται από την αίθουσα.
Ενότητα 1 (15 μονάδες) Απαντήστε στις ακόλουθες ερωτήσεις, συμπληρώνοντας την απάντησή σας στα κενά που παρέχονται. Όπου απαιτείται δικαιολόγηση, συμπληρώστε τη σύντομα στον αντίστοιχο χώρο. Πώς θα δεσμεύσω 100 στοιχεία τύπου string* και θα αναθέσω το αποτέλεσμα σε μια αντίστοιχη μεταβλητή με όνομα mydata; mydata = char * d = good day ; while (*(++d)!=0) cout << * ; Τι θα τυπωθεί; class A1 }; class A2 : protected : A1 }; Ποια είναι η επίδραση της λέξης protected στο συγκεκριμένο σημείο; Ενότητα 2 (15 μονάδες) Απαντήστε με σαφήνεια στις παρακάτω ερωτήσεις: Εξηγήστε τι κάνει η παρακάτω δήλωση: MyClass * ptr = dynamic_cast<myclass*>(object_ptr);
unsigned char * number_array = 1,1,1}; ofstream fs = ofstream("a.out", ios_base::out ); if (!fs.bad()) unsigned short * s_p = (unsigned short*) number_array; *(++s_p)=2; fs.write(s_p, sizeof(number_array)); } fs.close(); Τι θα γραφτεί στο αρχείο; O παραπάνω κώδικας εγκυμονεί κινδύνους και ποιους; Ενότητα 3 (40 μονάδες) Συμπληρώστε στο χώρο που σας παρέχεται τον κώδικα για τα παρακάτω ερωτήματα. Δίνεται η κλάση: (40 μονάδες) template <typename T> class Container protected: T * storage; size_t num_items; size_t storage_size;
public: virtual void operator += (const T item) } virtual ~Container() } Container() : storage(nullptr), num_items(0), storage_size(0) } T operator [] (size_t index) if (num_items==0) return T(0); return storage[index<num_items?index:num_items]; } inline size_t size() return num_items; } }; Επεκτείνετε κατάλληλα την Container, ώστε ο παρακάτω κώδικας να δουλεύει χωρίς σφάλματα και να παράγει το αποτέλεσμα που φαίνεται: void main(int argc, char* argv[]) Container<long> * store = new ; // Συμπληρώστε την αρχικοποίηση // αντικειμένου της δικής σας κλάσης size_t num_data; cin >> num_data; for (size_t i=0; i<num_data; i++) long item; cin >> item; *store+=item; } for (size_t i=0; i<store->size(); i++) std::cout << (*store)[i] << " "; std::cout << std::endl; } delete store; Γράψτε εδώ τη δήλωση και υλοποίηση της δικής σας κλάσης. Δεν επιτρέπεται να αλλοιώσετε την Container, ούτε να χρησιμοποιήσετε κλάσεις της STL.
Πρόχειρο Χρησιμοποιήστε τον ακόλουθο περιγεγραμμένο χώρο ως πρόχειρο και μόνο αυτόν.
(Πρόχειρο - συνέχεια)