B' ΤΕΛΙΚΗ ΕΞΕΤΑΣΗ - 24 ΙΟΥΝΙΟΥ 2011 ΧΡΟΝΟΣ ΕΞΕΤΑΣΗΣ 10' (Σύνολο μονάδων 120) Επώνυμο ΑΜ Ονομα Τμήμα ΘΕΜΑ 1 (ΜΟΝΑΔΕΣ 3) Σε ποιες από τις πιο κάτω περιπτώσεις ο δείκτης n θα δείχνει σε θέση μνήμης στην οποία είναι αποθηκευμένη η τιμή ; 1 2 3 4 int k,*n; n=&k; k=; int k,*n; k=; n=&k; int k,*n; *n=; k=; int k,*n; n=&k; k=3; *n= Α Β Γ Δ Στις 1, 2, 4 Στην 3 Σε καμία Σε όλες ΘΕΜΑ 2 (ΜΟΝΑΔΕΣ 3) Τι θα εκτυπώσει το πιο κάτω πρόγραμμα για numr=3; switch (numr){ cs 0: printf("too smll, sorry!"); rk; cs : printf( "Goo jo!\n"); cs 4: printf( "Nic Pick!\n"); cs 3: printf( "Excllnt!\n"); cs 2: printf( "Mstrful!\n"); cs 1: printf( "Incril!\n"); rk; fult: printf( "Too lrg!\n"); rk; Too lrg! Excllnt! Excllnt! Mstrful! Incril! Excllnt! Nic Pick! Goo jo! Too smll, sorry! ΘΕΜΑ 3 (ΜΟΝΑΔΕΣ ) Σε ποιες από τις πιο κάτω περιπτώσεις θα εμφανιστεί στην οθόνη "1 2 3 4 "; 1 2 3 4 for (i=1;i<;i++) i=1; printf("% ",i); whil (i<=) printf("% ",++i); i=1; for (;;){ printf("% ",i++); if (i==) rk; i=1; o { printf("% ",++i); whil (i<=); for (i=1;i<=; printf("% ",i++));
Στις 1, 2 Στις 2, 4 Στις 3, Σε όλες Σε καμία ΘΕΜΑ 4 (ΜΟΝΑΔΕΣ ) Τι θα επιστρέψει το πιο κάτω πρόγραμμα για την κλήση: function ( nn ); int function(string wor) { int strln = wor.siz(); if ( wor[0]!= wor[strln - 1] ) rturn 0; ls if ( strln <= 1 ) ls rturn 1; rturn function(wor.sustr(1, strln - 2)); Θεωρείστε ότι οι συναρτήσεις.siz() και.sustr() είναι γνωστές και ότι εφαρμόζονται στη μεταβλητή της οποίας το όνομα προηγείται της τελείας. Π.χ. η κλήση wor.siz() επιστρέφει το μέγεθος της συμβολοσειράς "wor". Η.siz() κάνει το προφανές, και η.sustr() επιστρέφει το τμήμα (υπακολουθία) της συμβολοσειράς (πίνακα χαρακτήρων) επί της οποίας εκτελείται, από τη θέση της πρώτης παραμέτρου, και για τόσες θέσεις όσες καθορίζει η δεύτερη παράμετρος. 1 0 1001 0110 Τίποτα ΘΕΜΑ (ΜΟΝΑΔΕΣ 4) Έστω ότι έχουμε κλειδιά οκτώ ή λιγότερων χαρακτήρων. Γεμίζουμε κάθε κλειδί στα δεξιά με κενά μέχρι το μήκος των χαρακτήρων, και στη συνέχεια συνενώνουμε τους -it κώδικες των χαρακτήρων και ερμηνεύουμε το αποτέλεσμα ως ένας 4-it ακέραιο z. Η συνάρτηση κατακερματισμού που χρησιμοποιούμε είναι το υπόλοιπο της διαίρεσης του z με το 12. Ποια από τις τα παρακάτω επιλογές εκφράζει με τον καλύτερο τρόπο το λόγο για τον οποίο αυτή η συνάρτηση κατακερματισμού είναι μια κακή επιλογή; Α Β Γ Δ E Το αποτέλεσμα της συνάρτησης κατακερματισμού εξαρτάται μόνο από το άθροισμα των - it κωδικών του συμπληρωμένου με κενά κλειδιού Το αποτέλεσμα της συνάρτησης κατακερματισμού εξαρτάται μόνο από τον τελευταίο χαρακτήρα του συμπληρωμένου με κενά κλειδιού Με αυτή τη συνάρτηση κατακερματισμού χρειαζόμαστε έναν πίνακα κατακερματισμού με 212 θέσεις, ακόμη και αν είναι λίγα τα προς εισαγωγή κλειδιά Καμία συνάρτηση κατακερματισμού δεν μπορεί να σχεδιαστεί ώστε να λειτουργεί καλά όταν τα κλειδιά μπορεί να τερματίζονται με κενά Η προτεινόμενη συνάρτηση κατακερματισμού είναι καλή επιλογή
ΘΕΜΑ (ΜΟΝΑΔΕΣ ) Θεωρήστε την ακόλουθη δήλωση ενός κόμβου σε ένα Δυαδικό Δένδρο: typf struct no { int vl; struct no *lft; struct no *right; NODE; Και την ακόλουθη συνάρτηση: int Fun(NODE *no) { int lvl, rvl; if (no == NULL) { rturn -1; ls { lvl = Fun(no->lft); rvl = Fun(no->right); if (lvl > rvl) { rturn (lvl + 1); ls { rturn (rvl + 1); Εστω ότι εφαρμόζουμε τη συνάρτηση στο παρακάτω δέντρο. Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ M Ν Ποια από τις ακόλουθες προτάσεις είναι σωστή; Α Β Γ Δ E Υπολογίζει το πλήθος των στοιχείων του δέντρου και επιστρέφει την τιμή 13 Υπολογίζει τη μεγαλύτερη τιμή που είναι αποθηκευμένη στο δέντρο και επιστρέφει την τιμή "Ν" (ελληνικός χαρακτήρας) Υπολογίζει το ύψος του δεξιού υποδέντρου και επιστρέφει την τιμή 3 Υπολογίζει το ύψος του αριστερού υποδέντρου και επιστρέφει την τιμή 4 Καμία
ΘΕΜΑ (ΜΟΝΑΔΕΣ ) Θεωρήστε μια δομή δεδομένων ΟΥΡΑ με τις εξής πράξεις: ΑΡΧΙΚΟΠΟΙΗΣΗ(), ΠΡΟΣΘΗΚΗ(x:int), και ΑΦΑΙΡΕΣΗ():int. Η ΑΦΑΙΡΕΣΗ() και αφαιρεί το στοιχείο και το επιστρέφει. Θεωρήστε επίσης δομή δεδομένων ΣΤΟΙΒΑ με τις εξής πράξεις: ΑΡΧΙΚΟΠΟΙΗΣΗ(), ΑΠΟΘΕΣΗ(x:int) και ΑΝΑΛΗΨΗ():int. Η ΑΝΑΛΗΨΗ και αφαιρεί την κορυφή της στοίβας και την επιστρέφει ως αποτέλεσμα. Γράψτε την ακολουθία των τιμών που είναι αποθηκευμένες στην ουρά Α αφού εκτελεστεί το πρόγραμμα ΕΚΤΕΛΕΣΗ(Α). Η κεφαλή της ουράς είναι στα αριστερά. ΕΚΤΕΛΕΣΗ (Α: ΟΥΡΑ) 1. Β. ΣΤΟΙΒΑ 2. Β.ΑΡΧΙΚΟΠΟΙΗΣΗ() 3. Α.ΑΡΧΙΚΟΠΟΙΗΣΗ() 4. Α.ΠΡΟΣΘΗΚΗ(2). Α.ΠΡΟΣΘΗΚΗ(3). Α.ΠΡΟΣΘΗΚΗ(1). Α.ΠΡΟΣΘΗΚΗ(4). Β.ΑΠΟΘΕΣΗ(Α.ΑΦΑΙΡΕΣΗ()). Β.ΑΠΟΘΕΣΗ(Α.ΑΦΑΙΡΕΣΗ()) 10. Α.ΠΡΟΣΘΗΚΗ(Β.ΑΝΑΛΗΨΗ()) 11. Α.ΠΡΟΣΘΗΚΗ(Β.ΑΝΑΛΗΨΗ()) 12. Α.ΠΡΟΣΘΗΚΗ(Α.ΑΦΑΙΡΕΣΗ()) Α Β Γ Δ E 1, 2, 3, 4 1, 3, 2, 4 4, 2, 3, 1 3, 1, 4, 2 4, 3, 2, 1 ΘΕΜΑ (ΜΟΝΑΔΕΣ ) Αν έχουμε την προθεματική και την ενθεματική διάσχιση ενός δυαδικού δέντρου, μπορούμε να κατασκευάσουμε ακριβώς ένα δυαδικό δέντρο που να ικανοποιεί αυτές τις διασχίσεις. Αν έχουμε τις πιο κάτω διασχίσεις, επιλέξτε το δέντρο που κατασκευάζεται: Προθεματική:,, f,, g,, c, h Ενθεματική:, f,, g,, c,, h Α Β Γ f g c h f g c h c h f g
Δ Ε Κανένα από τα εικονιζόμενα f g c h ΘΕΜΑ (ΜΟΝΑΔΕΣ ) Θεωρήστε την εξής συστοιχία Α: 1 3 2 4 Πρόκειται για ουρά ελαχίστου, με ένα πρόβλημα: Η τιμή στην κορυφή της (Α[1]=) είναι σε λάθος θέση. Α. Γράψτε τη συστοιχία Α μετά την κλήση της συνάρτησης ΑΠΟΚΑΤΑΣΤΑΣΗ ΣΩΡΟΥ ΕΛΑΧΙΣΤΟΥ(Α,1), που μετακινεί το Α[1] στη σωστή θέση στο σωρό ελαχίστου Α. Η ΑΠΟΚΑΤΑΣΤΑΣΗ ΣΩΡΟΥ ΕΛΑΧΙΣΤΟΥ είναι ανάλογη με την ΑΠΟΚΑΤΑΣΤΑΣΗ ΣΩΡΟΥ ΜΕΓΙΣΤΟΥ του βιβλίου. Β. Αν το κλειδί αυξηθεί σε 10, γράψτε τη συστοιχία Α μετά την κλήση της συνάρτησης ΑΥΞΗΣΗ ΚΛΕΙΔΙΟΥ ΣΩΡΟΥ ΑΠΑΝΤΗΣΕΙΣ (Απαντήστε στον ελεύθερο χώρο στο φύλο απαντήσεων) Α. 1,2,,3,,,,4 Β. *αναμενεται η απάντηση από ΒΒΑΣ* ΘΕΜΑ 10 (ΜΟΝΑΔΕΣ 3) Εστω το ακόλουθο απόσπασμα ενός διαγράμματος ροής δεδομένων (ΔΡΔ). Προσπαθήστε να διατυπώσετε την προδιαγραφή την οποία αποτυπώνει. ΑΞΙΟΛΟΓΗΤΗΣ ΓΡΑΠΤΩΝ ΜΑΘΗΜΑ, ΚΩΔ.ΓΡΑΠΤΟΥ, ΒΑΘΜΟΛΟΓΙΑ ΕΠΑΛΗΘΕΥΣΗ ΕΓΚΥΡΟΤΗΤΑΣ ΕΓΓΡΑΦΗ ΒΑΘΜΟΛΟΓΙΑΣ ΔΗΜΙΟΥΡΓΙΑ ΕΓΓΡΑΦΗΣ ΑΠΟΤΕΛΕΣΜΑ ΑΞΙΟΛΟΓΗΤΗΣ ΓΡΑΠΤΩΝ ΕΓΓΡΑΦΗ ΒΑΘΜΟΛΟΓΙΑΣ ΚΩΔ. ΓΡΑΠΤΟΥ ΒΑΘΜΟΛΟΓΙΑ ΑΠΑΝΤΗΣΕΙΣ (Σημειώστε τη σωστή απάντηση στο φύλο απαντήσεων)
Α Β Γ Δ Ε Εισάγεται ο κωδικός μαθήματος και το σύστημα υπολογίζει το μέσο όρο της βαθμολογίας σε αυτό Ενα εξωτερικό σύστημα λογισμικού μεταφέρει δεδομένα βαθμολογίας προς τον αξιολογητή γραπτών Εισάγεται ο κωδικός ενός μαθητή και το σύστημα επιστρέφει τη βαθμολογία του Εισάγεται και αποθηκεύεται η βαθμολογία γραπτών εξετάσεων Ελέγχεται η εγκυρότητα των στοιχείων "μάθημα, κωδ.γραπτού, βαθμολογία" ΘΕΜΑ 11 (ΜΟΝΑΔΕΣ ) Παρακάτω δίνονται τέσσερα λεπτομερή σχέδια μονάδων λογισμικού σε ψευδοκώδικα. Από ποια Διαγράμματα Ροής Δεδομένων (ΔΡΔ) μπορούν να προκύψουν οι παρακάτω ψευδοκώδικες, αν εφαρμοστούν οι κανόνες της τεχνολογίας λογισμικού; Αναφέρετε σε κάθε Διάγραμμα Ροής Δεδομένων τον ψευδοκώδικα που αντιστοιχεί. 1 2 3 4 Procur EXEC_XXX Procur EXEC_XXX Procur EXEC_XXX Procur EXEC_XXX GET() GET() clcm3(,, f) clcm(,) clcm1(, c, ) cll xcm2(c) cll xcm4(f) END GET() cll xcm1(c) clcm3(,, f) clcm(,) clcm2(c,,h) cll xcm4(f) WHILE (f>0) PUT(h) f := f -1 END WHILE END ΑΠΑΝΤΗΣΕΙΣ (Σημειώστε την αντιστοίχιση στο φύλλο απαντήσεων) GET() cll xcm1(c) clcm2(c, h) clcm3(,, f) clcm(,) clcm4(f,,g) IF (h>0) PUT(h) END IF PUT(g) END GET() cll xcm1(c) clcm2(c, h) clcm3(,, f) clcm(,) clcm4(f,g) PUT(h) PUT(g) PUT() END M1 c M2 h M Α 2 M3 f g M4
M1 c M2 h Β 1 M g M3 f M4 M1 c M2 h M Γ 3 g M3 f M4 M1 c M2 h M Δ 4 g M3 f M4 ΘΕΜΑ 12 (ΜΟΝΑΔΕΣ ) Έστω η παρακάτω συνάρτηση oomthing : struct no { int vl;
; struct no *nxt; int oomthing(struct no *n) { struct no *s = n; if (!(s->nxt) ) rturn(s->vl); int t = oomthing(s->nxt); rturn( s->vl <= t? s->vl : t ); Με ποια από τα παρακάτω ορίσματα θα καλούσατε την συνάρτηση oomthing, προκειμένου αυτή να ελεγχθεί σύμφωνα με τη μέθοδο των συνοριακών τιμών; Arg1 Arg2 Arg3 Arg4 Arg {->3->2->-> {4 {10->4->4->1->1 {10->1->3->4-> {43->->2->31->4 ΑΠΑΝΤΗΣΕΙΣ (Σημειώστε τη σωστή απάντηση στο φύλο απαντήσεων) Arg1, Arg Arg2, Arg3, Arg4 Arg3, Arg4 Arg Κανένα ΘΕΜΑ 13 (ΜΟΝΑΔΕΣ ) Δίνεται η παρακάτω συνάρτηση chop, η οποία διαχωρίζει («σπάει») τη συμβολοσειρά που δίνεται ως είσοδος s σε διαδοχικά τμήματα μήκους ακριβώς ίσα με M και τα εμφανίζει στην οθόνη. Τμήματα με μήκος μικρότερο από Μ δεν εμφανίζονται καθόλου. Πόσες είναι οι ελάχιστες δοκιμές που πρέπει να γίνουν αν πρόκειται η συνάρτηση chop να ελεγχθεί με τη μέθοδο των κλάσεων ισοδύναμων τιμών; int chop(chr *s, int M) { chr *t; t=(chr*)mlloc(sizof(chr)*(m+1)); if(t==null) xit(1); if (M<=0) rturn(-1); int l = strln(s); if (l < M ) rturn(-1); ls if (l == M){ printf("%s\n", s); rturn(0); strncpy(t, s, M); *(t+m) = '\0'; printf("%s\n", t); rturn( chop(s+m, M) );
4 3 2 1 ΘΕΜΑ 14 (ΜΟΝΑΔΕΣ ) Για το ακόλουθο ΔΡΔ κατασκευάστε το αντίστοιχο ΔΔΠ. T2 2 1 c g T1 T3 f T4 Απαντήστε στο χώρο που διατίθεται στο φύλλο απαντήσεων t ΘΕΜΑ 1 (ΜΟΝΑΔΕΣ 3) Ποια είναι η χρονική πολυπλοκότητα του παρακάτω κώδικα: for ( int i = 0; i < n/2; i++) { for ( int j = 0; j < i; j++) sum++; for ( int j = 0; j < i; j++) sum++; O(logn) O(n 2 ) O(n 3 ) O(nlogn) O(2 n ) ΘΕΜΑ 1 (ΜΟΝΑΔΕΣ ) Δίνεται ένας σωρός ελαχίστου (min hp) n ακέραιων αριθμών. Ποια είναι η χρονική πολυπλοκότητα εύρεσης του ου μικρότερου μεταξύ των αριθμών αυτών; O(nlogn) O(n) O(logn) O(1) O(n ) ΘΕΜΑ 1 (ΜΟΝΑΔΕΣ ) Στην ακόλουθη συνάρτηση clcult, η sqrt επιστρέφει την τετραγωνική ρίζα του αριθμού που δίδεται ως όρισμα. Θεωρώντας οτι η χρονική πολυπλοκότητα της ίδιας της συνάρτησης sqrt είναι O(1), ποια είναι η χρονική πολυπλοκότητα της συνάρτησης clcult; voi clcult(int n) { whil ( n > 1)
n = sqrt(n); Απαντήστε στο χώρο που διατίθεται στο φύλλο απαντήσεων Λαμβάνοντας διαδοχικά τις τετραγωνικές ρίζες του αριθμού n, θα υπολογίζονται οι ακόλουθες εκφράσεις 1η φορά : sqrt(n) = n^(1/2) 2η φορά: sqrt( sqrt(n)) = n^(1/4) 3η φορά: sqrt(sqrt( sqrt(n))) = n^(1/) k-φορά: sqrt(...(sqrt( sqrt(n)))...) = n^(1/2k) ---------k-φορές---- Το ζήτημα είναι να βρεθεί το k που υποδεικνύει και τις φορές που θα εκτελεστεί η τετραγωνική ρίζα και θα καθορίσει την πολυπλοκότητα. Η συνάρτηση θα τερματίσει όταν: n^(1/2k) = p, με p <=2 => n = p^(2k) => logn = (2k)logp => log(logn) = klog2 + log(logp) => k ~= log(logn) ΘΕΜΑ 1 (ΜΟΝΑΔΕΣ ) Γράψτε μια τοπολογική διάταξη (topologicl sorting) για τις κορυφές του κατευθυνόμενου γράφου του παρακάτω σχήματος (υπάρχουν περισσότερες από μια τοπολογικές διατάξεις για τον γράφο αυτό) : Απαντήστε στο χώρο που διατίθεται στο φύλλο απαντήσεων mnpoqsryutvwzx pmnqovxwzsruyt ΘΕΜΑ 1 (ΜΟΝΑΔΕΣ ) Μας δίνεται ένα σύνολο από πραγματικούς αριθμούς. Βρείτε το ελάχιστο πλήθος κλειστών μοναδιαίων διαστημάτων
που περιέχει όλους τους δοθέντες πραγματικούς αριθμούς. Για παράδειγμα, εάν μας έχουν δοθεί οι τρεις πραγματικοί αριθμοί 3, π και 3., τότε το κλειστό μοναδιαίο διάστημα [3,4] περιέχει και τους τρεις αριθμούς, όπως το ίδιο συμβαίνει και με το διάστημα [2., 3.] (η τελεία χρησιμοποιείται ως υποδιαστολή). Οι πραγματικοί αριθμοί που σας δίνονται (σε αύξουσα σειρά) είναι οι: 0. 1.2 3.0 3.2.2..3..01.3.2 1. 1.2 1.00 20.14 20. 21.02 22. 23.34 24. 2.31 2. 2.2 2. 2.03 Ποιο είναι το ελάχιστο πλήθος μοναδιαίων διαστημάτων που περιέχουν όλους τους παραπάνω αριθμούς; Υπόδειξη: θα χρειαστεί να εφαρμόσετε κάποιον άπληστο αλγόριθμο. 11 12 13 14 1 ΘΕΜΑ 20 (ΜΟΝΑΔΕΣ ) Στον παρακάτω γράφο υπολογίστε τις αποστάσεις όλων των κορυφών από την κορυφή z χρησιμοποιώντας τον αλγόριθμο Bllmn-For. Δείξτε αναλυτικά τη διαδικασία, δηλαδή τις τρέχουσες αποστάσεις των κορυφών από την z μετά από κάθε πέρασμα του αλγορίθμου από όλες τις ακμές. s t -2 x 2 y z Απαντήστε στο χώρο που διατίθεται στο φύλλο απαντήσεων Αρχικοποίηση: s= t= -2 x= 1ο πέρασμα: 2 y= z=0
s=2 t= -2 x= 2 y= z=0 2 ο πέρασμα: s=2 t= -2 x= 2 y= z=0 3ο πέρασμα: s=2 t= -2 x= 2 y= z=0 4ο πέρασμα: s=2 t=4-2 x= 2 y= z=0
ο πέρασμα: s=2 t=4-2 x= 2 y= z=0 Δεν άλλαξε τίποτα, αλλά η διαδικασία μπορεί να τερματιστεί. Παρατηρούμε ότι υπάρχει ένας κύκλος μηδενικού κόστους, ο zsyxtz. Ωστόσο ο αλγόριθμος Bllmn For τερματίζει κανονικά, μιας και δεν υπάρχει αρνητικός κύκλος