Σειριακός αριθµός : 100 Πληροφορική Ι Εξέταση Φεβρουαρίου 2019 Απαντήσεις Πολλαπλής Επιλογής Ε Ω : 1 2 3 4 5 A A A B A ΦΥΛΛΑ ΙΟ ΘΕΜΑΤΩΝ 1/2 Τα ϑέµατα της εξέτασης δίνονται σε 2 ϕυλλάδια (ένα για κάϑε διδάσκοντα). Η διάϱκεια της εξέτασης είναι 2.5 ώϱες µε κλειστές σηµειώσεις. Σύνολο µονάδων και για τα 2 ϕυλλάδια: 12. Επιστϱέϕετε τα ϑέµατα µε τις απαντήσεις σας στα εϱωτήµατα πολλαπλής επιλογής σηµειωµένες στην πϱοκαϑοϱισµένη ϑέση στην πϱώτη σελίδα κάϑε ϕυλλαδίου. Οι εϱωτήσεις πολλαπλής επιλογής είναι ισοδύναµες ϐαϑµολογικά αλλά κάϑε λάϑος απάντηση µετϱάει αϱνητικά κατά τέτοιο τϱόπο ώστε αν ((παίξετε)) τυχαία την απάντησή σας, η µέση τιµή των πόντων που παίϱνετε είναι 0. Κενές απαντήσεις µετϱάνε 0. Υπάϱχει ακϱιϐώς µία σωστή απάντηση σε κάϑε εϱώτηση πολλαπλής επιλογής. ώστε τις απαντήσεις σας στα πϱογϱαµµατιστικά ϑέµατα του στον κενό χώϱο κάτω από την κάϑε εκϕώνηση. Μποϱείτε να χϱησιµοποιήσετε για Πϱόχειϱο την τελευταία σελίδα του τετϱαδίου, καϑώς και τον χώϱο δίπλα στις εϱωτήσεις πολλαπλής επιλογής. Μέϱος A. Πολλαπλές επιλογές (20%) Εϱώτηση 1: Πόσα X ϑα εµϕανίσει ο παϱακάτω κώδικας for i=0:5 disp( X ); for j=i:4, disp( X ); A: 21 B: Τίποτα από αυτά C: 22 D: 24 E: 42 Εϱώτηση 2: Με ποιες από τις παϱακάτω εκϕϱάσεις είναι ισοδύναµη η λογική έκϕϱαση x > 0 && x <= 1 I. (x > 1 x <= 0) II. 0<x<=1 III. (x <= 0) && (x > 1) A: I, III B: III C: Ολες D: Καµία E: II Εϱώτηση 3: Ποιόν αϱιϑµό εµϕανίϲει το παϱακάτω πϱόγϱαµµα? για τη συνάϱτηση sum = 0; i = 1; while i<=10 sum = sum + g(i); i = i + 1; fprintf( %g\n,sum); function s = g(n) s = 3*n; A: 165 B: 0 C: 300 D: 55 E: Τίποτα από αυτά Εϱώτηση 4: Τι εµϕανίϲει το παϱακάτω πϱόγϱαµµα
y = 5; x = -5*y; y = foo(x); disp(x); για τη συνάϱτηση function x = foo(x) if x<0, x = -x; disp(x); A: 25 25 B: 25-25 C: Τίποτα από αυτά D: -25-25 E: -25 25 Εϱώτηση 5: Ποιο το αποτέλεσµα της εντολής disp(fun(fun(3))) για τη συνάϱτηση function p = fun(n) p = 0; for i=1:n, p = p+i; ; A: 21 B: 0 C: 6 D: 3 E: Τίποτα από αυτά Μέϱος B. Πϱογϱαµµατισµός (60%) ΓΕΝΙΚΕΣ ΠΑΡΑΤΗΡΗΣΕΙΣ ΓΙΑ ΟΛΑ ΤΑ ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σχεδιάστε µε πϱοσοχή τις συναϱτήσεις που ϑα σας Ϲητηϑούν. Σκεϕτείτε τι ακϱιϐώς ϑα πϱέπει να δέχονται οι συναϱτήσεις σας, τι ϑα επιστϱέϕουν και χϱησιµοποιήστε τις ελάχιστες δυνατές παϱαµέτϱους εισόδου που είναι απαϱαίτητες για να λειτουϱγήσουν σωστά. Οι συναϱτήσεις σας δεν πϱέπει να πεϱιέχουν καµία εντολή εισόδου (π.χ. input) ή εξόδου (π.χ. fprintf). Θεωϱήστε ότι τα δεδοµένα που ϑα δίνονται από τον χϱήστη ϑα είναι σωστά, χωϱίς να χϱειάϲεται να γίνει πεϱαιτέϱω έλεγχος. ΠΡΟΣΟΧΗ!!! Στα παϱακάτω ϑέµατα προγραµµατισµού µποϱείτε να χρησιµοποιήσετε µόνο κάποιες από τις εξής έτοιµες συναρτήσεις του MATLAB: size, length, floor, ceil, fix, rem, mod, rand, ones, zeros. ΠΡΟΓΡΑΜΜΑ 1: 1. Γϱάψτε συνάϱτηση MATLAB που να πϱοσοµοιώνει τη ϱίψη 2 Ϲαϱιών. Η συνάϱτησή σας πϱέπει να επιστϱέϕει διάνυσµα 2 στοιχείων µε τις τιµές των 2 Ϲαϱιών µετά τη ϱίψη. 2. Γϱάψτε συνάϱτηση MATLAB που να υπολογίζει µε προσοµοίωση Monte Carlo την πιθανότητα να µην έρθει µια συγκεκριµένη Ϲαϱιά ζ µετά από n ϱίψεις δύο Ϲαϱιών. Η συνάϱτησή σας να δέχεται ως είσοδο το πλήϑος των ϱίψεων n, ένα διάνυσµα 2 στοιχείων µε την επιθυµητή Ϲαϱιά ζ και το πλήϑος των δοκιµών που ϑα γίνουν, και ϑα πϱέπει να χρησιµοποιεί κατάλληλα τη συνάϱτηση του προηγούµενου υπο-εϱωτήµατος. function p = pascal(n, Z, ntrials) nwins = 0; for t = 1:ntrials for i = 1:n z = roll(); if (z(1)==z(1) && z(2)==z(2)) (z(1)==z(2) && z(2)==z(1)) break; if i == n, nwins = nwins + 1; p = nwins/ntrials; function z = roll() z(1) = ceil(rand*6); z(2) = ceil(rand*6); ΠΡΟΓΡΑΜΜΑ 2: Η συνάρτηση cos x για κάθε x γράφεται ως ανάπτυγµα της σειράς Taylor: cos x = 1 x2 2! + x4 4! x6 6! + x8 8!...
Να γράψετε συνάρτηση MATLAB που να υπολογίζει το cos x αθροίζοντας όρους της παραπάνω σειράς έως ότου επιτευχθεί η µέγιστη δυνατή ακρίβεια. Προσπαθήστε να γράψετε τη συνάρτησή σας µε τον πιο αποτελεσµατικό τρόπο, αποφεύγοντας περιττούς υπολογισµούς. function sum = TaylorCos(x) factorial = 1; coeff = 1; xpower = 1; sum = 0; n = 0; while sum = sum + term sum = sum + term; n = n + 1; coeff = -coeff; xpower = xpower*xˆ2; factorial = factorial*(2*n-1)*(2*n); ΠΡΟΓΡΑΜΜΑ 3: Γράψτε συνάρτηση MATLAB που να δέχεται έναν δισδιάστατο M N πίνακα ακεραίων και να υπολογίζει το γινόµενο των περιττών στοιχείων κάθε στήλης του, καθώς και το άθροισµα των αρτίων στοιχείων κάθε γραµµής του. function [colprododd, rowsumeven] = ColProdOddRowSumEven(A) [m, n] = size(a); colprododd = ones(n,1); rowsumeven = zeros(m,1); for j = 1:n for i = 1:m if rem(a(i,j),2) == 0 rowsumeven(i) = rowsumeven(i) + A(i,j); else colprododd(j) = colprododd(j)*a(i,j);
Σειριακός αριθµός : 101 Πληροφορική Ι Εξέταση Φεβρουαρίου 2019 Απαντήσεις Πολλαπλής Επιλογής Ε Ω : 1 2 3 4 5 C B D A D ΦΥΛΛΑ ΙΟ ΘΕΜΑΤΩΝ 1/2 Τα ϑέµατα της εξέτασης δίνονται σε 2 ϕυλλάδια (ένα για κάϑε διδάσκοντα). Η διάϱκεια της εξέτασης είναι 2.5 ώϱες µε κλειστές σηµειώσεις. Σύνολο µονάδων και για τα 2 ϕυλλάδια: 12. Επιστϱέϕετε τα ϑέµατα µε τις απαντήσεις σας στα εϱωτήµατα πολλαπλής επιλογής σηµειωµένες στην πϱοκαϑοϱισµένη ϑέση στην πϱώτη σελίδα κάϑε ϕυλλαδίου. Οι εϱωτήσεις πολλαπλής επιλογής είναι ισοδύναµες ϐαϑµολογικά αλλά κάϑε λάϑος απάντηση µετϱάει αϱνητικά κατά τέτοιο τϱόπο ώστε αν ((παίξετε)) τυχαία την απάντησή σας, η µέση τιµή των πόντων που παίϱνετε είναι 0. Κενές απαντήσεις µετϱάνε 0. Υπάϱχει ακϱιϐώς µία σωστή απάντηση σε κάϑε εϱώτηση πολλαπλής επιλογής. ώστε τις απαντήσεις σας στα πϱογϱαµµατιστικά ϑέµατα του στον κενό χώϱο κάτω από την κάϑε εκϕώνηση. Μποϱείτε να χϱησιµοποιήσετε για Πϱόχειϱο την τελευταία σελίδα του τετϱαδίου, καϑώς και τον χώϱο δίπλα στις εϱωτήσεις πολλαπλής επιλογής. Μέϱος A. Πολλαπλές επιλογές (20%) Εϱώτηση 1: Αν ο a είναι δισδιάστατος πίνακας 5 5, πόσες τιµές ϑα εµϕανίσει ο παϱακάτω κώδικας? for i=1:5 for j=1:5 if i==j, a(i,j) = i+j; else, a(i,j) = i-j; for i=1:5 for j=1:5 a(i,j) = a(i,j) + j; if a(i,j) > a(1,1), disp(a(i,j)); A: 13 B: 9 C: 12 D: Τίποτα από αυτά E: 25 Εϱώτηση 2: Ποιόν αϱιϑµό εµϕανίϲει το παϱακάτω πϱόγϱαµµα? για τη συνάϱτηση sum = 0; i = 1; while i<=10 sum = sum + g(i); i = i + 1; fprintf( %g\n,sum); function s = g(n) s = 3*n; A: Τίποτα από αυτά B: 165 C: 300 D: 55 E: 0 Εϱώτηση 3: Ποια από τις παϱακάτω εντολές είναι εντολή εξόδου? A: for B: else C: input D: disp E: while Εϱώτηση 4: Ποιο ϑα είναι το πεϱιεχόµενο του πίνακα a µετά την εκτέλεση του παϱακάτω κώδικα: a = [0,1,2,3,4,5,6]; for i = 1:length(a)-1, a(i) = a(i+1) + a(i);
A: [1,3,5,7,9,11,6] B: Τίποτα από αυτά C: [1,3,5,7,9,11,13] D: [0,1,3,6,10,15,21] E: [0,1,2,3,4,5,6] Εϱώτηση 5: Ποια η τιµή της µεταϐλητής x µετά την ανάϑεση: x = 1.5 + fix(7/2) * (10/4); A: 10.25 B: 7.5 C: 2.125 D: 9.0 E: 8.5 Μέϱος B. Πϱογϱαµµατισµός (60%) ΓΕΝΙΚΕΣ ΠΑΡΑΤΗΡΗΣΕΙΣ ΓΙΑ ΟΛΑ ΤΑ ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σχεδιάστε µε πϱοσοχή τις συναϱτήσεις που ϑα σας Ϲητηϑούν. Σκεϕτείτε τι ακϱιϐώς ϑα πϱέπει να δέχονται οι συναϱτήσεις σας, τι ϑα επιστϱέϕουν και χϱησιµοποιήστε τις ελάχιστες δυνατές παϱαµέτϱους εισόδου που είναι απαϱαίτητες για να λειτουϱγήσουν σωστά. Οι συναϱτήσεις σας δεν πϱέπει να πεϱιέχουν καµία εντολή εισόδου (π.χ. input) ή εξόδου (π.χ. fprintf). Θεωϱήστε ότι τα δεδοµένα που ϑα δίνονται από τον χϱήστη ϑα είναι σωστά, χωϱίς να χϱειάϲεται να γίνει πεϱαιτέϱω έλεγχος. ΠΡΟΣΟΧΗ!!! Στα παϱακάτω ϑέµατα προγραµµατισµού µποϱείτε να χρησιµοποιήσετε µόνο κάποιες από τις εξής έτοιµες συναρτήσεις του MATLAB: size, length, floor, ceil, fix, rem, mod, rand, ones, zeros. ΠΡΟΓΡΑΜΜΑ 1: 1. Γϱάψτε συνάϱτηση MATLAB που να πϱοσοµοιώνει τη ϱίψη 2 Ϲαϱιών. Η συνάϱτησή σας πϱέπει να επιστϱέϕει διάνυσµα 2 στοιχείων µε τις τιµές των 2 Ϲαϱιών µετά τη ϱίψη. 2. Γϱάψτε συνάϱτηση MATLAB που να υπολογίϲει µε πϱοσοµοίωση Monte Carlo την πιϑανότητα να έϱϑει µια συγκεκϱιµένη Ϲαϱιά ζ σε n το πολύ ϱίψεις δύο Ϲαϱιών. Η συνάϱτησή σας να δέχεται ως είσοδο το πλήϑος των ϱίψεων n, ένα διάνυσµα 2 στοιχείων µε την επιϑυµητή Ϲαϱιά ζ και το πλήϑος των δοκιµών που ϑα γίνουν, και ϑα πϱέπει να χϱησιµοποιεί κατάλληλα τη συνάϱτηση του πϱοηγούµενου υπο-εϱωτήµατος. function p = pascal(n, Z, ntrials) nwins = 0; for t = 1:ntrials for i = 1:n z = roll(); if (z(1)==z(1) && z(2)==z(2)) (z(1)==z(2) && z(2)==z(1)) nwins = nwins + 1; break; p = nwins/ntrials; function z = roll() z(1) = ceil(rand*6); z(2) = ceil(rand*6); ΠΡΟΓΡΑΜΜΑ 2: Η συνάρτηση sin x για κάθε x γράφεται ως ανάπτυγµα της σειράς Taylor: sin x = x x3 3! + x5 5! x7 7! + x9 9!... Να γράψετε συνάρτηση MATLAB που να υπολογίζει το sin x αθροίζοντας όρους της παραπάνω σειράς έως ότου επιτευχθεί η µέγιστη δυνατή ακρίβεια. Προσπαθήστε να γράψετε τη συνάρτησή σας µε τον πιο αποτελεσµατικό τρόπο, αποφεύγοντας περιττούς υπολογισµούς. function sum = TaylorSin(x) factorial = 1; coeff = 1; xpower = x; sum = 0; n = 0;
while sum = sum + term sum = sum + term; n = n + 1; coeff = -coeff; xpower = xpower*xˆ2; factorial = factorial*(2*n)*(2*n+1); ΠΡΟΓΡΑΜΜΑ 3: Γράψτε συνάρτηση MATLAB που να δέχεται έναν δισδιάστατο M N πίνακα ακεραίων και να υπολογίζει το άθροισµα των αρτίων στοιχείων κάθε στήλης του, καθώς και το γινόµενο των περιττών στοιχείων κάθε γραµµής του. function [rowprododd, colsumeven] = RowProdOddColSumEven(A) [m, n] = size(a); rowprododd = ones(m,1); colsumeven = zeros(n,1); for j = 1:n for i = 1:m if rem(a(i,j),2) == 0 colsumeven(j) = colsumeven(j) + A(i,j); else rowprododd(i) = rowprododd(i)*a(i,j);