Θέμα Α ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2016-2017 Πάτρα 3/5/2017 Ονοματεπώνυμο:.. Α1. Να γράψετε στην κόλλα σας τον αριθμό καθεμιάς από τις προτάσεις 1-7 και δίπλα τη λέξη ΣΩΣΤΟ, αν είναι σωστή, ή τη λέξη ΛΑΘΟΣ, αν είναι λανθασμένη. 1. Για να εκτελεστεί ένα πρόγραμμα το οποίο δεν περιέχει συντακτικά και λογικά λάθη όταν χρησιμοποιείται μεταγλωττιστής απαιτείται η παρουσία του πηγαίου προγράμματος μόνο την πρώτη φορά που γίνεται μεταγλώττιση. (ΣΩΣΤΟ) 2. Τα λάθη ενός προγράμματος εμφανίζονται μόνο κατά την εκτέλεση. (ΛΑΘΟΣ) Τα συντακτικά λάθη εμφανίζονται στη φάση της μεταγλώττισης. Αν υπάρχουν συντακτικά λάθη δεν μπορεί να παραχθεί εκτελέσιμο πρόγραμμα. 3. Αν υπάρχουν συντακτικά λάθη στο πηγαίο πρόγραμμα, κατά τη μεταγλώττιση δημιουργείται το εκτελέσιμο πρόγραμμα το οποίο ακολούθως πρέπει να το διορθώσουμε. (ΛΑΘΟΣ) Αν υπάρχουν συντακτικά λάθη δεν μπορεί να παραχθεί εκτελέσιμο πρόγραμμα. 4. Ο δομημένος προγραμματισμός στηρίζεται αποκλειστικά στη χρήση των βασικών δομών της επιλογής και της επανάληψης.(λαθοσ είναι και η δομή ακολουθίας) 5. Συνάρτηση είναι ένας τύπος υποπρογράμματος που υπολογίζει και επιστρέφει μία μόνο τιμή με το όνομά της. Δεν χρησιμοποιεί παραμέτρους διότι δεν μπορεί να εκτελέσει εντολές Εισόδου και Εξόδου. (ΛΑΘΟΣ Η συνάρτηση μπορεί να έχει λίστα παραμέτρων) 6. Κατά την εκτέλεση ενός προγράμματος, αν η στοίβα χρόνου εκτέλεσης περιέχει δύο τιμές, αυτό σημαίνει ότι το κύριο πρόγραμμα έχει καλέσει δυο υποπρογράμματα. (ΛΑΘΟΣ) Απ Όταν το κυρίως πρόγραμμα καλεί ένα υποπρόγραμμα στη στοίβα χρόνου εκτέλεσης υπάρχει μια τιμή. Αν υπάρχει δεύτερη τιμή αυτό δείχνει ότι το υποπρόγραμμα έχει καλέσει με τη σειρά του ένα δεύτερο υποπρόγραμμα. (βλέπε παράδειγμα βιβλίου σελ 182) 7. Αν σε έναν ακέραιο αριθμό εφαρμοστεί ολίσθηση προς τα δεξιά και στον αριθμό που προκύψει εφαρμοστεί ολίσθηση προς τα αριστερά, τότε ο τελικός αριθμός δεν είναι πάντα ίσος με τον αρχικό. (ΣΩΣΤΟ) Απ Η ολίσθηση δεξιά ισοδυναμεί με ακέραια διαίρεση, ενώ η ολίσθηση αριστερά με πολλαπλασιασμό. Αν ο αρχικός αριθμός είναι περιττός το τελευταίο Bit (δεξια) είναι 1. (πχ 00001111) με την ολίσθηση δεξιά το bit αυτό χάνεται και το πρώτο αριστερά συμπληρώνεται με 0 (00000111). Με την νέα ολίσθηση αριστερά το πρώτο ψηφίο συμπληρώνεται με 0 (00001110). Ο νέος αριθμός μπορεί να είναι διαφορετικός από τον αρχικό. A2. α) Πότε πρέπει να χρησιμοποιούνται οι πίνακες ; Μονάδες 7 Μονάδες 4 1. Όταν τα δεδομένα που εισάγονται σε ένα πρόγραμμα πρέπει να διατηρούνται στην μνήμη μέχρι το τέλος της εκτέλεσης. 2. Η απόφαση για την χρήση ή όχι πίνακα είναι θέμα εμπειρίας στον προγραμματισμό ΤΕΛΟΣ 1ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ
β) Αναφέρατε μειονεκτήματα από τη χρήση πινάκων και εξηγήστε τα. Μονάδες 4 1. Οι πίνακες απαιτούν μνήμη: Κάθε πίνακας δεσμεύει από την αρχή του προγράμματος πολλές θέσεις μνήμης. Σε ένα μεγάλο και σύνθετο πρόγραμμα η άσκοπη χρήση πινάκων μπορεί να οδηγήσει ακόμη και σε αδυναμία εκτέλεσης του προγράμματος. 2. Οι πίνακες περιορίζουν τις δυνατότητες του προγράμματος: Οι πίνακες είναι στατικές δομές δεδομένων αφού το μέγεθός τους, δηλώνεται στην αρχή του προγράμματος παραμένει υποχρεωτικά σταθερό κατά την εκτέλεση. γ) Αναφέρατε ένα μειονέκτημα από τη χρήση διερμηνευτή Μονάδες 2 Η εκτέλεση ενός προγράμματος με τον διερμηνευτή είναι πιο αργή, γιατί για να εκτελεστεί το πρόγραμμα, πρέπει κάθε φορά να ξαναγίνεται η διερμηνεία από την αρχή, ενώ ο μεταγλωττιστής παράγει μια φορά το αντικείμενο πρόγραμμα και δεν χρειάζεται ξανά μεταγλώττιση αφού είναι σχεδόν εκτελέσιμο δ) Ποιους κανόνες πρέπει να ακολουθούν οι λίστες παραμέτρων Μονάδες 3 Μονάδες 13 1. Ο αριθμός των πραγματικών και τυπικών παραμέτρων πρέπει να είναι ο ίδιος. 2. Κάθε πραγματική παράμετρος αντιστοιχεί στην αντίστοιχη τυπική. 3. Η πραγματική παράμετρος και η αντίστοιχή της τυπική πρέπει να είναι του ίδιου τύπου. A3. Ας ορίσουμε ως ολίσθηση πίνακα κατά μια θέση τη διαδικασία με την οποία μετακινεί όλα τα στοιχεία ενός πίνακα ακεραίων κατά 1 θέση αριστερά.το πρώτο στοιχείο του πίνακα μετακινείται στην τελευταία θέση. Για παράδειγμα ο παρακάτω πίνακας ακεραίων Α[7] 1 2 3 4 5 6 7 μετά την ολίσθηση κατά μια θέση δεξιά γίνεται : 2 3 4 5 6 7 1 Να γράψετε τον αριθμό για καθένα από τα κενά 1-8 και δίπλα την απαιτούμενη αριθμητική σταθερά, μεταβλητή ή έκφραση ώστε να υλοποιούνται τα παραπάνω: Temp.(1).. ΓΙΑ ι ΑΠΟ.(2).. ΜΕΧΡΙ.(3).ΜΕ-ΒΗΜΑ..(4).. Α[..(5) ] Α [ (6)..] Α[..(7) ] (8) Μονάδες 8 Απ. 1:A[1], 2 :7, 3: 2, 4: -1, 5: ι-1, 6: ι, 7:7, 8 : Temp ΤΕΛΟΣ 2ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ
A4. Δίνεται το παρακάτω τμήμα προγράμματος σε γλώσσα το οποίο κάνει αντιστροφή στα στοιχεία δύο παράλληλων πινάκων. Γράψτε στην κόλλα σας δίπλα στους αριθμούς 1-4 τα τμήματα του κώδικα που απαιτούνται για να υλοποιηθεί η αντιστροφή. ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ..(1).. τεμπ Α[ι] Α[ι] Α[Μ - ι + 1] Α[Μ - ι + 1] τεμπ ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ζ βτεμπ (2). Β[ι, j] Β[ (3), j] Β[..(4), j] βτεμπ 1) Μ DIV 2 2)Β[ι, j], 3) Μ - ι + 1, 4) Μ - ι + 1 Μονάδες 4 Α5. (προαιρετικό. Αν δεν το γράψετε τα μόρια του προστίθενται στο Α3) Να γράψετε στο τετράδιό σας τους αριθμούς της στήλης Α και δίπλα το γράμμα της στήλης Β που αντιστοιχεί σωστά. Στη στήλη Β υπάρχουν τρία επιπλέον στοιχεία. Α 1. Περιττός αριθμός. Α. x MOD 5 = 0 2. Πολλαπλάσιο του 5. Β. x MOD 2 = 0 3. Το 1ο ψηφίο τετραψήφιου αριθμού Γ. x MOD 2 <> 0 4. Τελευταίο ψηφίο ενός τετραψήφιου αριθμού. Δ. x DIV 1000 Β E. x MOD 1000 ΣΤ. x MOD 10 Ζ. x DIV 10 Μονάδες 8 Θέμα Β Α) Δίνεται το παρακάτω τμήμα αλγορίθμου σε φυσική γλώσσα κατά βήματα: Βήμα 1: Αν Α > 0 τότε πήγαινε στο Βήμα 5 Βήμα 2: Αν Α = 0 τότε πήγαινε στο Βήμα 7 Βήμα 3: Γράψε Αρνητικός Βήμα 4: Πήγαινε στο Βήμα 8 Βήμα 5: Γράψε Θετικός Βήμα 6: Πήγαινε στο Βήμα 8 Βήμα 7: Γράψε Μηδέν Βήμα 8: Γράψε Τέλος ΤΕΛΟΣ 3ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ
Να κωδικοποιήσετε τον παραπάνω αλγόριθμο σε πρόγραμμα γραμμένο σε ΓΛΩΣΣΑ σύμφωνα με τις αρχές του δομημένου προγραμματισμού. Το πρόγραμμα να περιλαμβάνει τις κατάλληλες δηλώσεις και κατάλληλη εντολή εισόδου για την μεταβλητή που θα χρησιμοποιήσετε. ΠΡΟΓΡΑΜΜΑ ΔΟΜΗΜΕΝΟΣ 2 ΑΚΕΡΑΙΕΣ: Α 2 ΔΙΑΒΑΣΕ Α 2 ΑΝ Α> 0 ΤΟΤΕ 3 ΓΡΑΨΕ Θετικός ΑΛΛΙΩΣ_ΑΝ Α=0 ΤΟΤΕ 3 ΓΡΑΨΕ Μηδέν Αλλιώς 2 ΓΡΑΨΕ Αρνητικός ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Μονάδες 14 Β) Διαβάσαμε στο βιβλίο καθηγητή που διδάσκει το μάθημα της ΑΕΠΠ το παρακάτω παράδειγμα αλγορίθμου ταξινόμησης. Ο καθηγητής έχει υλοποιήσει τον αλγόριθμο, αλλά δυστυχώς σβήστηκαν 7 σημεία του κώδικα. Να τα συμπληρώσετε γράφοντας δίπλα στο κάθε νούμερο από 1-7 το τμήμα του κώδικα που λείπει, ώστε να υλοποιείται ο παρακάτω αλγόριθμος. ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ (1). temp.(2) ΤΕΛΟΣ 4ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ
j i - 1 done (3). ΟΣΟ done = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ ΑΝ j = 0 ΤΟΤΕ done ΑΛΗΘΗΣ ΑΛΛΙΩΣ_ΑΝ.(4).. < A[j] ΤΟΤΕ A[..(5)...] A[j] j j - 1 ΑΛΛΙΩΣ done (6).. A[j + 1] (7).. 1)9 2) Α[i] 3) ΨΕΥΔΗΣ 4) temp 5) j + 1 6) ΑΛΗΘΗΣ 7) temp Μονάδες 7 Θέμα Γ Στο σχολείο σας ο καθηγητής πληροφορικής καταχωρεί τα ονόματα των μαθητών της τεχνολογικής κατεύθυνσης σε ένα πίνακα ΟΝ[20] και τις βαθμολογίες τους στο μάθημα ΑΕΠΠ και σε πίνακα Β[20]. Να κατασκευαστεί πρόγραμμα σε ΓΛΩΣΣΑ το οποίο: Γ1 θα ζητά από τον καθηγητή σας να εισάγει στον πίνακα ΟΝ[20] τα ονόματα των μαθητών και στον Β[20] τους βαθμούς μαθητών στο μάθημα της ΑΕΠΠ. (Μονάδες 4) Γ2 κατά την εισαγωγή της βαθμολογίας θα κάνει έλεγχο ορθότητας στις βαθμολογίες, δηλαδή θα επιτρέπει εισαγωγή βαθμών από 0 έως και 20 (Μονάδες 2) Γ3 θα εμφανίζει τα ονόματα των 5 μαθητών που έχουν τους μεγαλύτερους βαθμούς από τον μεγαλύτερο προς τον μικρότερο. Αν υπάρχουν ισοβαθμίες θα εμφανίζει τα ονόματα με αλφαβητική σειρά. (Μονάδες 8) Γ4 θα εμφανίζει τους ισοβαθμίσαντες με τον 5 ο μαθητή που είναι μετά από αυτόν, με αλφαβητική σειρά. (διευκρίνιση : Αν ο 5 ος μαθητής έχει ισοβαθμίσει με τον 4 ο και τον 6 ο, τότε στο ερώτημα αυτό θα εμφανίσει τον 6 ο ) ΠΡΟΓΡΑΜΜΑ βαθμοι ΑΚΕΡΑΙΕΣ: Β[20], Ι, ΤΕΜΠ, Κ ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[20], ΤΕΜΠΟΝ ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 20 ΔΙΑΒΑΣΕ ΟΝ[Ι] _ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ Β[Ι] ΜΕΧΡΙΣ_ΟΤΟΥ Β[Ι] >= 0 ΚΑΙ Β[Ι] <= 20 (Μονάδες 6) ΤΕΛΟΣ 5ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ
ΓΙΑ Κ ΑΠΟ 2 ΜΕΧΡΙ 20 ΓΙΑ Ι ΑΠΟ 10 ΜΕΧΡΙ Κ ΜΕ_ΒΗΜΑ -1 ΑΝ Β[Ι] > Β[Ι - 1] ΤΟΤΕ ΤΕΜΠ <- Β[Ι] Β[Ι] <- Β[Ι - 1] Β[Ι - 1] <- ΤΕΜΠ ΤΕΜΠΟΝ <- ΟΝ[Ι] ΟΝ[Ι] <- ΟΝ[Ι - 1] ΟΝ[Ι - 1] <- ΤΕΜΠΟΝ ΑΛΛΙΩΣ_ΑΝ Β[Ι] = Β[Ι - 1] ΤΟΤΕ ΑΝ ΟΝ[Ι] < ΟΝ[Ι - 1] ΤΟΤΕ ΤΕΜΠΟΝ <- ΟΝ[Ι] ΟΝ[Ι] <- ΟΝ[Ι - 1] ΟΝ[Ι - 1] <- ΤΕΜΠΟΝ ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 5 ΓΡΑΨΕ ΟΝ[Ι], Β[Ι] Ι <- 6 ΟΣΟ Β[Ι] = Β[5] ΕΠΑΝΑΛΑΒΕ ΓΡΑΨΕ "ΙΣΟΒΑΘΜΙΣΑΣ ΜΕ 5ο ΜΑΘΗΤΗ ", ΟΝ[Ι] Ι <- Ι + 1 ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Θέμα Δ Κατά την εκτόξευση ενός διαστημοπλοίου χρειάζεται να πραγματοποιηθεί αντίστροφη μέτρηση μέχρι που η ένδειξη του μετρητή χρόνου έχει τη μορφή 00:00:00. Α. Να κατασκευαστεί πρόγραμμα σε ΓΛΩΣΣΑ το οποίο : i) θα διαβάζει την ώρα έναρξης της αντίστροφης μέτρησης, τα λεπτά και τα δευτερόλεπτα ελέγχοντας την εγκυρότητα τιμών έτσι ώστε η τιμή για τις ώρες είναι ένας ακέραιος θετικός αριθμός από 0-23 και οι τιμές για τα λεπτά και δευτερόλεπτα ακέραιοι θετικοί από 0-59. ΤΕΛΟΣ 6ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ (Μονάδες 4) ii) στη συνέχεια θα καλεί επαναληπτικά υποπρόγραμμα για τον υπολογισμό της τρέχουσας ώρας όπως περιγράφεται παρακάτω στο ερώτημα Β. (Μονάδες 5) iii) θα εμφανίζει το χρόνο που απομένει ανά δευτερόλεπτο, συνεχόμενα και κατά φθίνουσα σειρά μέχρι την ένδειξη 00:00:00 που θα προκαλέσει την εκτόξευση. (Μονάδες 2) B. Nα γραφεί υποπρόγραμμα που θα δέχεται σαν είσοδο την ώρα, τα λεπτά και τα δευτερόλεπτα και υπολογίζει και επιστρέφει το χρόνο σε μορφή ώρες, λεπτά, δευτερόλεπτα μειωμένο κατά ένα δευτερόλεπτο Για παράδειγμα i) Είσοδος: 12 25 45 Έξοδος: 12:25:44
ii) Είσοδος: 1 (ώρα) 0 (λεπτά) 0 (δευτερόλεπτα) Έξοδος: 0:59:59 (Μονάδες 9) ΠΡΟΓΡΑΜΜΑ Αντίστροφη_μέτρηση ΑΚΕΡΑΙΕΣ: h, min, sec _ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ h, min, sec ΜΕΧΡΙΣ_ΟΤΟΥ h >= 0 ΚΑΙ h <= 23 ΚΑΙ min >= 0 ΚΑΙ min <= 59 ΚΑΙ sec >= 0 ΚΑΙ sec <= 59 ΟΣΟ h <> 0 Η min <> 0 Η sec <> 0 ΕΠΑΝΑΛΑΒΕ ΚΑΛΕΣΕ Προηγούμενη_στιγμή(h, min, sec) ΓΡΑΨΕ h, :,min, :, sec ΓΡΑΨΕ 'Εκτόξευση' ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ Προηγούμενη_στιγμή(ώρες, λεπτά, δευτερόλεπτα) ΑΚΕΡΑΙΕΣ: ώρες, λεπτά, δευτερόλεπτα ΑΝ δευτερόλεπτα > 0 ΤΟΤΕ δευτερόλεπτα δευτερόλεπτα - 1 ΑΛΛΙΩΣ! δευτερόλεπτα=0 ΑΝ λεπτά > 0 ΤΟΤΕ λεπτά λεπτά - 1 δευτερόλεπτα <- 59 ΑΛΛΙΩΣ! δευτερόλεπτα=0 και λεπτά=0 ώρες ώρες - 1 λεπτά 59 δευτερόλεπτα 59 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ! εναλλακτικά ΔΙΑΔΙΚΑΣΙΑ Προηγούμενη_στιγμή2(ώρες, λεπτά, δευτερόλεπτα) ΑΚΕΡΑΙΕΣ: ώρες, λεπτά, δευτερόλεπτα, υπόλοιπο, συνολικά_δευτερόλεπτα συνολικά_δευτερόλεπτα ώρες* 3600 + λεπτά* 60 + δευτερόλεπτα συνολικά_δευτερόλεπτα συνολικά_δευτερόλεπτα - 1 ώρες συνολικά_δευτερόλεπτα DIV 3600 υπόλοιπο συνολικά_δευτερόλεπτα MOD 3600 λεπτά υπόλοιπο DIV 60 δευτερόλεπτα υπόλοιπο MOD 60 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΤΕΛΟΣ 7ΗΣ ΑΠΟ 7 ΣΕΛΙΔΕΣ