ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟ ΟΣ: ΙΟΥΝΙΟΥ 5 Ι ΑΣΚΩΝ: Ε. ΚΟΦΙ ΗΣ Όλα τα ερωτήµατα είναι ισοδύναµα. Καλή επιτυχία! ΘΕΜΑ ο a) Βρείτε την αναπαράσταση του αριθµού 37 στο δυαδικό σύστηµα. Επαληθεύστε το αποτέλεσµα, µετατρέποντας πίσω στο δεκαδικό σύστηµα το δυαδικό αριθµό που βρήκατε. b) Ο παρακάτω ψευδοκώδικας περιγράφει αλγόριθµο για τον υπολογισµό του a N, όπου a είναι ένας πραγµατικός και N ένας φυσικός αριθµός που θα δίνονται από το χρήστη του προγράµµατος. Βήµα : ιάβασε τους a, N Βήµα : r Βήµα : i Βήµα 3: Αν i = N, πήγαινε στο Βήµα 7 Βήµα 4: r r * a Βήµα 5: i i+ Βήµα 6: Πήγαινε στο Βήµα 3 Βήµα 7: Τύπωσε το αποτέλεσµα, r Εκφράστε τον παραπάνω αλγόριθµο µε διάγραµµα ροής. a) Η διαδικασία διαιρέσεων µε το και τα προκύπτοντα υπόλοιπα φαίνονται σχηµατικά παρακάτω: 37 8 9 4 Άρα η δυαδική αναπαράσταση του 37 είναι. Επαλήθευση: =. 5 +. +. = 3 + 4 + = 37.
b) Παρακάτω φαίνεται το διάγραµµα ροής για το δοσµένο αλγόριθµο: Αρχή ιάβασε a, N r i i = N? ΝΑΙ ΟΧΙ r r * a i i + Τύπωσε το r Τέλος ΘΕΜΑ ο a) Γράψτε τι ακριβώς θα εµφανιστεί στην οθόνη για καθεµιά από τις παρακάτω περιπτώσεις. Χρησιµοποιείται ο χαρακτήρας υπογράµµισης ( _ ) για να δηλώσει τον κενό χαρακτήρα. Κάντε το ίδιο στις απαντήσεις σας. i. int x = ; printf( %3d\n%3.f\n, x >? x % : x /, 3. + 8 * / 4 7 % * 3); ii. int x; float y; scanf( %d_%f, &x, &y); /* ίνουµε 34_34.75 */ printf( x=%-4d_και_y=%8.3f\n, x, y); b) Υπάρχουν παραδείγµατα όπου η εντολή if-else είναι προτιµότερη της switch. Γράψτε το παρακάτω απόσπασµα κώδικα χρησιµοποιώντας εντολές if-else αντί της switch, µε τρόπο που να το απλοποιεί. Η n είναι µεταβλητή τύπου int. switch (n) case : case : case : case 3: case 4: printf( Μικρότερο του 5\n );
case 5: case 6: case 7: case 8: case 9: printf( Ίσο µε 5\n ); printf( Μεγαλύτερο του 5\n ); default: printf( εν είναι ψηφίο\n ); a) Ο χαρακτήρας _ θα σηµαίνει κενό διάστηµα. Στο i το πρώτο αποτέλεσµα είναι διότι η διαίρεση x / είναι µεταξύ των ακεραίων, και δίνει το ακέραιο µέρος του πηλίκου. i. 4. ii. x=34 και_y=_34.75 b) if (n >= && n <= 4) printf( Μικρότερο του 5\n ); else if (n == 5) printf( Ίσο µε 5\n ); else if (n >= 6 && n <= 9) printf( Μεγαλύτερο του 5\n ); else printf( εν είναι ψηφίο\n ); ΘΕΜΑ 3 ο a) Εντοπίστε τυχόν λάθη ή/και παραλείψεις στο παρακάτω πρόγραµµα και ξαναγράψτε το διορθωµένο. include stdio.h define EURO 34.75 main() int drachmas float euros printf( ώστε το ποσό σε δραχµές: ); scanf( %d, drachmas); printf( Είναι %d ευρώ.\n, euros(drachmas)); return(); float euros(int d) return(d / EURO); b) typedef struct char streetname[]; /* όνοµα οδού */ unsigned short number; /* αριθµός */ unsigned short zipcode; /* Τ.Κ. */ 3
char cityname[]; /* όνοµα πόλης */ Address; Address addr, addr, *addr_ptr; addr_ptr = &addr; i. Γράψτε εντολές για να κάνετε τη µεταβλητή addr να περιέχει τη διεύθυνση «Καραολή και ηµητρίου 8, 8534 Πειραιάς». ii. Κατόπιν, χρησιµοποιώντας τη µεταβλητή addr_ptr, δώστε στη µεταβλητή addr τον Τ.Κ. και την πόλη της addr. (Υπόδειξη: Θα χρειαστείτε τη συνάρτηση της πρότυπης βιβλιοθήκης που αντιγράφει ένα αλφαριθµητικό σε ένα άλλο. ηλώνεται στο αρχείο-επικεφαλίδα <string.h>) a) Τα λάθη και οι παραλείψεις σηµειώνονται µε κόκκινο. Το όνοµα της συνάρτησης µετατροπής ήταν µη-αποδεκτό, αφού δεν άρχιζε µε γράµµα. Επίσης, έλειπε η δήλωση (πρωτότυπο) της συνάρτησης πριν από την κλήση της. #include <stdio.h> #define EURO 34.75 main() int drachmas; float euros; float drachmaseuros(int); printf( ώστε το ποσό σε δραχµές: ); scanf( %d, &drachmas); printf( Είναι %.f ευρώ.\n, drachmaseuros(drachmas)); return(); float drachmaseuros(int d) return(d / EURO); b) strcpy(addr.streetname, Καραολή και ηµητρίου ); addr.number = 8; addr.zipcode = 8534; strcpy(addr.cityname, Πειραιάς ); addr_ptr->zipcode = addr.zipcode; strcpy(addr_ptr->cityname, addr.cityname); ΘΕΜΑ 4 ο Γράψτε συνάρτηση (µε όνοµα frequencies) που, για δοσµένες απλές συχνότητες, υπολογίζει τις αντίστοιχες σχετικές και κατόπιν τις σχετικές δεξιόστροφες αθροιστικές συχνότητες. Η συνάρτηση θα έχει τέσσερις παραµέτρους: Έναν πίνακα µε τις δοσµένες απλές συχνότητες (f), το πλήθος τους (n), έναν πίνακα που θα περιέχει τις σχετικές συχνότητες (rf), κι έναν πίνακα που θα περιέχει τις σχετικές δεξιόστροφες αθροιστικές συχνότητες (rf). 4
void frequencies(int f[], int n, float rf[], float rf[]) register int i; rf[] = f[] / n; rf[] = rf[]; for (i = ; i < n; i++) rf[i] = f[i] / n; rf[i] = rf[i - ] + rf[i]; 5