ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ ΘΕΜΑ Α Α.1 Να χαρακτηρίσετε σωστή (Σ) ή λανθασμένη (Λ) καθεμία από τις παρακάτω προτάσεις (Μονάδες 10) 1. Ένας αλγόριθμος μπορεί να έχει άπειρα βήματα εκτέλεσης εντολών 2. Μια συνάρτηση μπορεί να επιστρέφει περισσότερες από μια τιμές στο πρόγραμμα 3. Η έκφραση Α Xor B έχει τιμή False όταν τόσο το Α, όσο και το Β έχουν τιμή True 4. Ο μεταγλωττιστής διαβάζει ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου και το μεταφράζει σε γλώσσα μηχανής 5. Ο τύπος δεδομένων real είναι τακτικός τύπος Α2. Να αναφέρετε 2 διαφορές της διαδικασίας και της συνάρτησης (Μονάδες 4) Α3. Να αναφέρετε τις διαφορές του compiler και του interpreter (Μονάδες 8) Α4. Δίνεται η παρακάτω λογική έκφραση: (Χ AND NOT(Y)) OR (NOT(Χ) AND Y) Να υπολογίσετε αναλυτικά την τιμή της, όταν Χ = TRUE και Υ = FALSE. (Μονάδες 5) A5. Να γράψετε στο τετράδιό σας τους αριθμούς 1,2,3,4,5 από τη Στήλη Α και δίπλα ένα από τα γράμματα α, β, γ, δ, ε της Στήλης Β, που δίνει τη σωστή αντιστοιχία. (Μονάδες 5) ΣΤΗΛΗ Α ΣΤΗΛΗ Β 1. Ακέραιο Υπόλοιπο α. Function 2. Τύπος Υποπρογράμματος β. Cobol 3. Εμπορικές Εφαρμογές γ. MOD 4. Δομή Επιλογής δ. Fortran 5. Επιστημονικές Εφαρμογές ε. Case A6. Να μεταφέρετε στο τετράδιό σας το παρακάτω τμήμα αλγορίθμου, έχοντας συμπληρώσει τις γραμμές εντολών 2, και 3 ώστε να εμφανίζει πάντα το μεγαλύτερο από τους δυο αριθμούς που διαβάστηκαν (Μονάδες 8) 1. readln (Α, Β) 2. If Α Β then 3... ; 4. writeln (Α); 1
ΘΕΜΑ Β Β1. Δίνεται τo παρακάτω τμήμα αλγορίθμου σε μορφή διαγράμματος ροής: ΑΡΧΗ Διάβασε Χ Υ 0 X X+2 Υ Y + 1 X >10 NAI Υ 0 X >20 NAI X X - 2 Υ Y - 1 X < -5 NAI ΤΕΛΟΣ Να κατασκευάσετε ισοδύναμο τμήμα αλγορίθμου σε ψευδοκώδικα. (Μονάδες 12) B2. Δίνεται το παρακάτω τμήμα αλγορίθμου όπου οι μεταβλητές Κ,L,M είναι ακέραιες: K:=35; L:=17; M:=0; While L>0 do If L MOD 2=1 then M:=M+K; Κ:=Κ*2; L:=L DIV 2; End; Writeln (Μ:4); Α) Να συμπληρώσετε τον παρακάτω πίνακα (Μονάδες 4) K L M ΑΡΧΙΚΕΣ ΤΙΜΕΣ 1η επανάληψη 2η επανάληψη 3η επανάληψη 4η επανάληψη 5η επανάληψη Β) Για ποια τιμή της μεταβλητής L τερματίζει ο αλγόριθμος; (Μονάδες 2) Γ) Ποια είναι η τελική τιμή της μεταβλητής Μ; (Μονάδες 2) 2
ΘΕΜΑ Γ Ένα DVD-Club παρέχει στους πελάτες της 3 εναλλακτικούς τρόπους πληρωμής των DVD που έχουν ενοικιάσει μηνιαίως σύμφωνα με το παρακάτω πίνακα Τρόπος πληρωμής Κόστος εγγραφής Κόστος ανά DVD 1 5 1,50 2 10 1,20 3 20 0,80 Να αναπτυχθεί πρόγραμμα που για 100 πελάτες του DVD-Club: Γ1. Θα διαβάζει το όνομα, τον τρόπο πληρωμής που έχει επιλέξει ο πελάτης καθώς και το πλήθος των DVD που έχει νοικιάσει ο πελάτης (δεν απαιτείται έλεγχος εγκυρότητας δεδομένων). (Μονάδες 4) Γ2. Θα υπολογίζει και θα εμφανίζει στο πρόγραμμα το ποσό του μηνιαίου λογαριασμού κάθε πελάτη. (Μονάδες 6) Γ3. Θα υπολογίζει και θα εμφανίζει το όνομα του πελάτη με το μεγαλύτερο λογαριασμό. (υποθέτουμε ότι είναι μοναδικός) (Μονάδες 6) Γ4. Θα υπολογίζει και θα εμφανίζει το πλήθος των πελατών με λογαριασμό πάνω από 50 (Μονάδες 4) ΘΕΜΑ Δ Μια εταιρεία ενοικίασης αυτοκινήτων διαθέτει αυτοκίνητα προς ενοικίαση για τους πελάτες της. Η χρέωση είναι μηνιαία και εξαρτάται από τα χιλιόμετρα που διένυσε το αυτοκίνητο στη διάρκεια του μήνα. Να γραφεί αλγόριθμος ο οποίος για κάθε αυτοκίνητο που έχει ενοικιαστεί: Δ1. Διαβάζει τον αριθμό κυκλοφορίας του αυτοκινήτου (Μονάδες 2) Δ2. Διαβάζει πόσα χιλιόμετρα διένυσε το αυτοκίνητο κάθε ημέρα του μήνα (θεωρούμε ότι ο μήνας έχει 30 ημέρες) και τα δέχεται με την προϋπόθεση ότι τα χιλιόμετρα ημερησίως δεν ξεπερνούν τα 1000. (Μονάδες 4) Δ4. Η επαναληπτική διαδικασία θα ολοκληρώνεται όταν διαβαστεί ως αριθμός κυκλοφορίας το «ΚΕΝΟ» ή όταν 10 αυτοκίνητα διανύσουν περισσότερα από 20000 χιλιόμετρα το μήνα (Μονάδες 4) Δ5. Υπολογίζει και εμφανίζει για κάθε αυτοκίνητο το πλήθος των ημερών του μήνα που διένυσαν λιγότερα από 100 χιλιόμετρα (Μονάδες 4) Δ6. Υπολογίζει και εμφανίζει τη συνολική χρέωση του πελάτη ως εξής: Αν έχει διανύσει το πολύ 10000 χιλιόμετρα τότε πληρώνει 100. Σε αντίθετη περίπτωση πληρώνει 100 και για κάθε επιπλέον χιλιόμετρο από τα 10000 πληρώνει 0,30. (Μονάδες 6) 3
ΛΥΣΕΙΣ Α.1 1. Λ 2. Λ 3. Λ 4. Σ 5. Λ Α2. 1. Ο τρόπος κλήσης της συνάρτησης διαφέρει από αυτόν της διαδικασίας. Όταν καλώ μία διαδικασία από το κύριο πρόγραμμα, απλά γράφω το όνομά της: π.χ. ypologismos(plevra, emvadon); Για να καλέσω μία συνάρτηση πρέπει να τη βάλω στη δεξιά πλευρά της εντολής αντικατάστασης: π.χ emvadon := ypologismos(plevra); 2. Μια συνάρτηση δέχεται ένα σύνολο τιμών και επιστρέφει μόνο μια τιμή στο κυρίως πρόγραμμα ενώ η διαδικασία μπορεί να επιστρέφει και περισσότερες από μια τιμές Α3. Ο interpreter διαφέρει από τον compiler στα εξής χαρακτηριστικά: Ελέγχει κάθε μία εντολή τη φορά και όχι ολόκληρο το πηγαίο πρόγραμμα Η διαδικασία μετάφρασης-ελέγχου επαναλαμβάνεται κάθε φορά που εκτελείται το πρόγραμμα (χρονοβόρο) Γίνεται ευκολότερα ο έλεγχος και η διόρθωση των λαθών καθώς υπάρχει άμεση πληροφόρηση του προγραμματιστή ο οποίος μπορεί να το διορθώσει και να συνεχίσει με την εκτέλεση του προγράμματος Πιο αργή εκτέλεση του προγράμματος Α4. (Χ AND NOT(Y)) OR (NOT(Χ) AND Y) (TRUE AND TRUE) OR (FALSE AND FALSE) TRUE OR FALSE TRUE A5. 1. γ 2. α 3. β 4. ε 5. δ A6. 6. readln (Α, Β) 7. If Α < Β then 8. Α:=Β 9. writeln (Α); ΘΕΜΑ Β Β1. Αρχή Διάβασε Χ Υ 0 Αρχή_επανάληψης Χ Χ + 2 Υ Υ + 1 Μέχρις_ότου Χ > 10 4
Χ Χ - 8 Αν Χ> 20 τότε Αρχή_επανάληψης Χ Χ 2 Υ Υ - 1 Μέχρις_ότου Χ < -5 Τέλος_αν Τέλος B2. Α) K L M ΑΡΧΙΚΕΣ ΤΙΜΕΣ 35 17 0 1η επανάληψη 70 8 35 2η επανάληψη 140 4 3η επανάληψη 280 2 4η επανάληψη 560 1 595 5η επανάληψη 1120 0 Β) 0 Γ) 595 ΘΕΜΑ Γ Program ThemaC; var tropos, plithos, i :integer; poso:real; name, onomamax:char; begin max -1 onomamax For i:=1 to 100 do writeln('δώσε όνομα πελάτη, τρόπο πληρωμής και πλήθος DVD'); readln(name,tropos,plithos); If tropos=1 then poso:= 5 + 1.5*plithos Else if tropos=2 then poso:= 10 + 1.2*plithos else poso:= 20 + 0.8*plithos; Writeln(poso:3:2); If max<poso then max poso onomamax onoma end; end; writeln (onomamax); end. ΘΕΜΑ Δ Program ThemaD; var km, S, N, I :integer; poso:real arithmos:char; begin 5
writeln('δώσε αριθμό κυκλοφορίας'); Readln (arithmos); while arithmos<> ΚΕΝΟ AND K<10 do begin S:=0 N:=0 For i:=1 to 30 do Repeat writeln('δώσε χιλιόμετρα'); readln(km); until km>0 and km<=1000; S S + km; If km<100 then N:=N + 1; Writeln (N:2); If S<=10000 then poso:= 100 else poso:= 100 + 0.8*(S 10000); writeln (poso:5:2); if S>20000 then K:= K + 1; writeln('δώσε αριθμό κυκλοφορίας'); Readln (arithmos); end; end. 6