ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1 Διάλεξη 8: Φροντιστήριο για Δομές, Δυναμική Δέσμευση Μνήμης, Αναδρομή Διδάσκων: Παναγιώτης Ανδρέου
ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2
penny = one nickel = five dime = ten quarter = twenty-five Ποια από τις ακόλουθες δηλώσεις τύπου enumμπορεί να αναπαραστήσει σωστά το παράδειγμα με τα νομίσματα στα αριστερά; enumcoin {(penny,1), (nickel,5), (dime,10), (quarter,25)}; enumcoin ({penny,1}, {nickel,5}, {dime,10}, {quarter,25}); enumcoin {penny=1,nickel=5,dime=10,quarter=25}; enumcoin (penny=1,nickel=5,dime=10,quarter=25); 5. Επιλογή 5: enumcoin {penny, nickel, dime, quarter} (1, 5, 10, 25); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3
ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4 struct Person{ } struct Person{ char name[30], }Person; struct Person{ }; //A //Β //Γ typedef struct Person{ //Δ } Ποια είναι η σωστή επιλογή για να δηλώσουμε τη δομή Person; Α Β Γ Δ
struct Person{ } Person; int main() { struct Person p1; Ποια είναι η σωστή επιλογή για να δώσουμε τιμή στο id του Person p1; *p1.id = 123456; &p1.id = 123456; }????????? p1.id = 123456; p1->id = 123456; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5
typedef struct{ } Person; int main() { Ποια είναι η σωστή επιλογή; Ο κώδικας είναι σωστός. Ο κώδικας δεν κάνει compile. } Person *p1; p1->id = 123456; Ο κώδικας θα δημιουργήσει σφάλμα runtime. Η μεταβλητή p1 έπρεπε να αρχικοποιηθεί με null. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6
typedef struct { } Person; Ποια είναι η σωστή επιλογή για να αρχικοποιήσουμε το p1; *p1 = malloc(sizeof(person)); int main() { p1 = (Person *) malloc(sizeof(person*)); } Person *p1;????????? *p1 = (Person *) malloc(sizeof(person)); p1 = (Person *) malloc(sizeof(person)); 5. Επιλογή 5: &p1 = (Person *) malloc(sizeof(person)); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7
typedef struct { } Person; int main() { } Person * p[5]; Τι κάνει ο κώδικας δίπλα; Αρχικοποιεί ένα πίνακα με 5 στοιχεία τύπου Person Αρχικοποιεί ένα πίνακα με 5 στοιχεία τύπου δείκτης σε δομή τύπου Person Αρχικοποιεί 5 στοιχεία τύπου Person Δεσμεύει μνήμη για 5 στοιχεία τύπου Person ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8
Ποια από τις ακόλουθες δηλώσεις δεσμεύει αρκετό χώρο για ένα πίνακα με 10 ακέραιους; int*ptr= (int*) malloc(10, sizeof(int)); int*ptr= (int*) calloc(10, sizeof(int)); int*ptr = (int*) malloc(10*sizeof(int)); int*ptr= (int*) alloc(10*sizeof(int)); 5. Επιλογή 5: int*ptr= (int*) calloc(10*sizeof(int)); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9
char ptr1[] = "Hello World"; char *ptr2 = malloc( 5 ); ptr2 = ptr1; Τι υπάρχει λάθος με τον κώδικα; (Υποθέτουμε ότι η mallocδεν θα αποτύχει) Θα υπάρχει διαρροή μνήμης. Δεν επιτρέπεται η ανάθεση τύπου πίνακα στον τύπο char *. Θα υπάρξει segmentation fault. Δεν δεσμεύεται αρκετή μνήμη με τη malloc. 5. Επιλογή 5: Δεν κάνει compile ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10
typedef struct {???? } Employee; Πως μπορούμε να ορίσουμε για κάθε υπάλληλο ότι έχει κάποιο συγκεκριμένο manager; Employee manager; struct Employee manager; struct* Employee manager; Employee* manager; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11
typedef struct { union{ char passport[9]; } eid; } Employee[10]; Πως μπορούμε να έχουμε πρόσβαση στην ταυτότητα του υπάλληλου στη θέση 5; *(Employee+5).eid.id (employees+4)->eid.id; Employee[4].id Employee[4].eid.id ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12
int fibonacci (int n) { return (fibonacci(n - 1) + fibonacci(n - 2)); Τι είναι το πρόβλημα του κώδικα στα αριστερά; Δεν κάνει compile } if(n==0) return 0; if(n==1) return 1; Η μέθοδος δεν θα τερματίσει ποτέ! Η μέθοδος δεν υπολογίζει σωστά τον αριθμό fibonacci Δεν επιτρέπεται η κλήση της fibonacci εσωτερικά από την ίδια μέθοδο ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13
typedef struct { } Employee; Employee *e = (Employee*) malloc(sizeof(employee )); strcpy(e->name, "Panic"); Πως μπορούμε να επιστρέψουμε τον πρώτο χαρακτήρα του ονόματος του υπάλληλου e; e->name[0] *(e->name) (*e).name[0] *((*e).name) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14