ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟ ΟΣ: ΣΕΠΤΕΜΒΡΙΟΥ 6 Ι ΑΣΚΩΝ: Ε. ΚΟΦΙ ΗΣ Όλα τα ερωτήµατα είναι ισοδύναµα. Καλή επιτυχία! ΘΕΜΑ ο a) Βρείτε την αναπαράσταση του αριθµού 4.5 στο δυαδικό σύστηµα. Επαληθεύστε το αποτέλεσµα, µετατρέποντας πίσω στο δεκαδικό σύστηµα το δυαδικό αριθµό που βρήκατε. b) Ο παρακάτω ψευδοκώδικας περιγράφει αλγόριθµο για τον υπολογισµό του αθροίσµατος αριθµών που δίνονται από το χρήστη του προγράµµατος. Ο υπολογισµός σταµατάει όταν δοθεί ο αριθµός µηδέν. Βήµα : s Βήµα : ιάβασε έναν αριθµό a Βήµα : Αν a =, πήγαινε στο Βήµα 5 Βήµα 3: s s + a Βήµα 4: Πήγαινε στο Βήµα Βήµα 5: Τύπωσε το αποτέλεσµα, s Εκφράστε τον παραπάνω αλγόριθµο µε διάγραµµα ροής. a) Πρώτα µετατρέπουµε το ακέραιο µέρος του αριθµού: 4 5 Προφανώς, επειδή.5 = ½= -, το κλασµατικό µέρος έχει τη δυαδική αναπαράσταση.. Τελικά: (4.5) =(.). Επαλήθευση: (.) = 5 + 3 + - =(4.5). /5
b) Αρχή s ιάβασε έναν αριθµό a a=? ΝΑΙ ΟΧΙ s s+a Τύπωσε το αποτέλεσµα, s Τέλος ΘΕΜΑ ο a) Γράψτε τι ακριβώς θα εµφανιστεί στην οθόνη για καθεµιά από τις παρακάτω περιπτώσεις. Χρησιµοποιείται ο χαρακτήρας υπογράµµισης ( _ ) για να δηλώσει τον κενό χαρακτήρα. Κάντε το ίδιο στις απαντήσεις σας. i. int x =, y = 3, z = 5; if (!((y * z < z / x) && (x * y > z))) printf( %d\n, z % y + x); else printf( %d\n, z % y x); ii. float x =.549; float y = 3.459, z = 5.7; printf( Τιµές_µεταβλητών:_x=%3.f_y=%3.f_z=%3.f\n, x, y, z); b) Ξαναγράψτε το παρακάτω πρόγραµµα χρησιµοποιώντας την εντολή if-else αντί της switch. Ποια λειτουργία επιτελεί αυτό το πρόγραµµα; Ποιο είναι το νόηµα του περιεχοµένου των µεταβλητών num και num; /5
int a, num, num, num; num = num = ; for (a = ; a <= ; a++) scanf( %d, &num); switch (num % ) case : ++num; case : ++num; printf( num=%d\nnum=%d\n, num, num); return(); a) i. _4 ii. Τιµές µεταβλητών:_x=.5_y=3._z=5.7 b) Με χρήση της εντολής if-else αντί της switch το πρόγραµµα γράφεται ως εξής: int a, num, num, num; num = num = ; for (a = ; a <= ; a++) scanf( %d, &num); if (num % ) ++num; else ++num; printf( num=%d\nnum=%d\n, num, num); return(); Το πρόγραµµα διαβάζει ακέραιους αριθµούς και µετράει πόσοι απ αυτούς είναι άρτιοι και πόσοι περιττοί. Το πλήθος των άρτιων υπολογίζεται στη µεταβλητή num και των περιττών στη num. Φυσικά, θα µπορούσαµε να µετρούµε για παράδειγµα µόνο τους περιττούς και να βρούµε το πλήθος των άρτιων απλά αφαιρώντας από το σύνολο, δηλ. num=-num. 3/5
ΘΕΜΑ 3 ο a) Εντοπίστε τυχόν λάθη ή/και παραλείψεις στο παρακάτω πρόγραµµα και ξαναγράψτε το διορθωµένο. float x, y scanf( %f %f, x, y); printf( %f\n, average(x, y)); float average(int a, int b) float avg; avg = (a + b) / ; return(avg); b) οσµένου ενός διδιάστατου πίνακα ακεραίων a[][], να γραφεί κώδικας που να υπολογίζει το άθροισµα όλων των θετικών στοιχείων του. a) Τα λάθη και οι παραλείψεις σηµειώνονται παρακάτω µε κόκκινο χρώµα: float x, y; float average(float, float); scanf( %f %f, &x, &y); printf( %f\n, average(x, y)); return(); float average(float a, float b) float avg; avg = (a + b) / ; return(avg); b) int a[][]; int sum = ; register int i, j; for (i = ; i < ; i++) for (j = ; j < ; j++) if (a[i][j] > ) sum += a[i][j]; 4/5
ΘΕΜΑ 4 ο Γράψτε συνάρτηση (όχι πρόγραµµα!) µε όνοµα opers και τρεις παραµέτρους: op (ακέραια), και x, y (πραγµατικές). Αν η τιµή της op είναι, η συνάρτηση να επιστρέφει το άθροισµα των x, y. Αν η τιµή της op είναι, να επιστρέφεται το γινόµενο των x, y. Αν η τιµή της op είναι 3, να επιστρέφεται ο αριθµητικός µέσος όρος των x, y. Αν η op έχει οποιαδήποτε άλλη τιµή, να εµφανίζεται στην οθόνη το µήνυµα Αντικανονική κλήση συνάρτησης και να επιστρέφεται η τιµή -. float opers(int op, float x, float y) switch (op) case : return(x + y); case : return(x * y); case 3: return((x + y) / ); default: fprintf(stderr, Αντικανονική κλήση συνάρτησης\n ); return(-); (Παρατήρηση: Εδώ οι εντολές break δεν χρειάζονται (αφού δεν θα εκτελεστούν ποτέ) αλλά µπορούν να µπουν για λόγους οµοιοµορφίας και στυλ.) 5/5