Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015 Βάλβης Δημήτριος Μηχανικός Πληροφορικής ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω προτάσεις 1-5 και δίπλα τη λέξη ΣΩΣΤΟ, αν η πρόταση είναι σωστή, ή τη λέξη ΛΑΘΟΣ, αν η πρόταση είναι λανθασμένη. 1. Ένα υποπρόγραμμα μπορεί να καλείται από το κύριο πρόγραμμα, αλλά όχι από άλλο υποπρόγραμμα. 2. Όταν για μία επαναληπτική διαδικασία γνωρίζουμε τον αριθμό των επαναλήψεων, δεν μπορούμε να χρησιμοποιήσουμε τη δομή επανάληψης Αρχή_επανάληψης Μέχρις_ότου. 3. Η λίστα των πραγματικών παραμέτρων καθορίζει τις παραμέτρους στην κλήση του υποπρογράμματος. 4. Η τιμή μίας μεταβλητής ενός υποπρογράμματος μπορεί να χρησιμοποιηθεί και στο κύριο πρόγραμμα. 5. Σε μία δυναμική δομή δεδομένων τα δεδομένα αποθηκεύονται υποχρεωτικά σε συνεχόμενες θέσεις μνήμης. Α2. Δίνεται το παρακάτω πρόγραμμα και υποπρογράμματα: ΠΡΟΓΡΑΜΜΑ Κύριο ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Α, Β, Γ ΑΡΧΗ ΔΙΑΒΑΣΕ Α, Β, Γ ΚΑΛΕΣΕ Διαδ(Α, Β, Γ) ΓΡΑΨΕ Α, Β, Γ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Μονάδες 5 ΔΙΑΔΙΚΑΣΙΑ Διαδ(Γ, Α, Β) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Γ, Α, Β ΑΡΧΗ ΑΝ Α <>0 ΤΟΤΕ Α Α + 3 Β Α / 2 Γ Α + Β - 3 ΑΛΛΙΩΣ Α Α + 5 Β Α * 2 Γ Β - Α + 2 ΓΡΑΨΕ Α, Β, Γ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Τι θα εμφανιστεί κατά την εκτέλεση του προγράμματος, αν ως τιμές εισόδου δοθούν οι αριθμοί 3, 0, 2; Μονάδες 10
A3. α. Να εξηγήσετε τι εννοούμε με τον όρο μεταφερσιμότητα των προγραμμάτων και να αναφέρετε ποια ήταν η πρώτη κατηγορία γλωσσών που προσφέρει αυτή τη δυνατότητα. β. Να αναφέρετε τις δύο βασικές λειτουργίες που επιτελούνται από τις ΟΥΡΕΣ δεδομένων. Ποιες βοηθητικές μεταβλητές βοηθούν στην τέλεση αυτών των λειτουργιών; ΘΕΜΑ Β Μονάδες 10 Β1. Δίνεται πίνακας Π[50] με αριθμητικές τιμές. Στις μονές θέσεις βρίσκονται καταχωρισμένοι θετικοί αριθμοί και στις ζυγές αρνητικοί αριθμοί. Επίσης, δίνεται το παρακάτω τμήμα αλγορίθμου ταξινόμησης τιμών του πίνακα. Για x από 3 μέχρι 49 με_βήμα.. Για y από.. μέχρι.. με_βήμα.. Αν Π[.. ] < Π[..] Τότε Αντιμετάθεσε Π[.. ], Π[.. ] Αν Π[.. ] < Π[..] Τότε Αντιμετάθεσε Π[.. ], Π[.. ] Τέλος_Επανάληψης Τέλος_Επανάληψης Να μεταφέρετε στο τετράδιό σας το παραπάνω τμήμα αλγορίθμου συμπληρώνοντας τα κενά με τις κατάλληλες σταθερές, μεταβλητές ή εκφράσεις, ώστε να ταξινομούνται σε αύξουσα σειρά μόνο οι θετικές τιμές του πίνακα αλλά και οι αρνητικές. Β2. Δίνεται ο παρακάτω αλγόριθμος: Αλγόριθμος Αθροίσματα sum_α 0 sum_π 0 Για i από 1 μέχρι 50 Αρχή_επανάληψης Διάβασε x Μέχρις_ότου x > 0 Αν x mod 2 = 0 τότε sum_α sum_α + x Αλλιώς sum_π sum_π + x Τέλος_Αν Εμφάνισε sum_α, sum_β Τέλος Αθροίσματα Να σχεδιάσετε στο τετράδιό σας το αντίστοιχο διάγραμμα ροής. Μονάδες 13 Μονάδες 12
ΘΕΜΑ Γ Η στατιστική υπηρεσία κρατάει αρχεία με τον πληθυσμό δέκα πόλεων για τα τελευταία είκοσι έτη (1996 2015). Σας ζητήθηκε να φτιάξετε ένα πρόγραμμα που να μπορεί να επεξεργαστεί κάποια από αυτά τα δεδομένα, ώστε να προκύψουν διάφορες χρήσιμες πληροφορίες. Συγκεκριμένα, σας ζητείται να φτιάξετε πρόγραμμα σε ΓΛΩΣΣΑ, στο οποίο: Α. Θα διαβάζεται ο πληθυσμός κάθε μίας από 10 πόλεις, για 20 έτη, σε δισδιάστατο πίνακα ΠΛΗΘ[10,20] και τα ονόματα των πόλεων σε πίνακα ΟΝ[10]. Ο πληθυσμός πρέπει να είναι θετικός αριθμός ή 0. Να γίνεται έλεγχος ορθότητας. Μονάδες 5 Β. Να υπολογίζεται και να εμφανίζεται το έτος που η κάθε πόλη είχε το μεγαλύτερο πληθυσμό της (να εμφανίζεται κάθε φορά και η αντίστοιχη πόλη). Τα έτη με τους μέγιστους πληθυσμούς να τοποθετηθούν σε νέο πίνακα ΕΤΗ[10]. Θεωρήστε ότι το πρώτο σε σειρά έτος είναι το 1996. Μονάδες 8 Γ. Να βρίσκει και να εμφανίζει το έτος με τους περισσότερους μέγιστους πληθυσμούς από τον πίνακα ΕΤΗ[10]. Θεωρήστε ότι υπάρχει έτος με περισσότερους μέγιστους πληθυσμούς από τα υπόλοιπα και ότι είναι μοναδικό. Μονάδες 6 Δ. Να γίνεται φθίνουσα ταξινόμηση των πόλεων βάση του πληθυσμού τους για το έτος 2015. Προκειμένου να διασφαλιστεί η ακεραιότητα των αρχικών δεδομένων, να γίνει μεταφορά των προς ταξινόμηση πληθυσμών σε πίνακα ΠΛ_Τ[10] και των ονομάτων σε πίνακα ΟΝ_Τ[10] και να γίνει ταξινόμηση των δύο νέων πινάκων. Τέλος, να εμφανιστούν οι ταξινομημένες πόλεις με τους αντίστοιχους πληθυσμούς για το 2015. Μονάδες 6
ΘΕΜΑ Δ Το Sudoku είναι ένα από τα πιο δημοφιλή παιχνίδια γρίφων. Κάθε Sudoku, αποτελείται από 81 τετράγωνα, κάποια από τα οποία περιέχουν κάποιες αριθμητικές τιμές. Οι μόνες έγκυρες τιμές είναι οι τιμές από το 1 μέχρι το 9. Για να συμπληρωθεί το Sudoku, θα πρέπει κάθε γραμμή, κάθε στήλη και κάθε ένα από τα 9 τετράγωνα που σχηματίζονται (από τις έντονες γραμμές στο σχήμα), να έχουν όλους τους αριθμούς από το 1 μέχρι το 9, με οποιαδήποτε διάταξη. Σας ζητείται να γράψετε πρόγραμμα σε «ΓΛΩΣΣΑ», το οποίο θα προσομοιώνει ένα απλοποιημένο Sudoku με ένα μόνο τετράγωνο 3Χ3 (Με διακεκομμένη γραμμή στο σχήμα) το οποίο θα πρέπει να γεμίζει με τιμές από το 1 μέχρι το 9. Οι τιμές θα εκχωρούνται στον πίνακα SUD[3,3]. 1. Να αρχικοποιηθεί ο πίνακας με τις τιμές του σχήματος. Κάθε κενό τετράγωνο θα δέχεται την τιμή 0. Μονάδες 2 2. Να εισάγονται τιμές από τον χρήστη. Για κάθε τιμή που τοποθετείται θα πρέπει να διαβάζονται οι συντεταγμένες του πίνακα και η τιμή που θέλουμε να εκχωρηθεί και να γίνεται έλεγχος εγκυρότητας με χρήση της συνάρτησης Έγκυρο που θα δέχεται τον πίνακα και την τιμή που θέλουμε να εισάγουμε και θα επιστρέφει την τιμή Αληθές αν η τιμή είναι έγκυρη και Ψευδές σε διαφορετική περίπτωση. Μία τιμή θεωρείται έγκυρη από την συνάρτηση, εάν μπορεί να τοποθετηθεί στο τετράγωνο που περιγράφουν οι συντεταγμένες με βάση τους κανόνες του παιχνιδιού (ο κανόνας που αφορά τις γραμμές και τις στήλες προφανώς δεν ισχύει). Ο έλεγχος για το αν η τιμή που εισάγεται είναι ανάμεσα στο 0 και το 9, θα γίνεται εκτός συνάρτησης. Η εισαγωγή των τιμών θα γίνεται μέχρι να συμπληρωθούν όλες οι τιμές ή μέχρι να εισάγει ο χρήστης την τιμή 0. Θεωρήστε ότι οι συντεταγμένες είναι πάντα έγκυρες. Μετά από κάθε νέα εισαγωγή τιμής θα εμφανίζεται ο πίνακας με τα μέχρι στιγμής συμπληρωμένα στοιχεία. Μονάδες 10 3. Να εμφανίζεται κατάλληλο μήνυμα εάν το απλοποιημένο Sudoku συμπληρώθηκε σωστά ή όχι. Μονάδες 4 4. Να εμφανίζεται το πλήθος των μη έγκυρων καταχωρήσεων. Στο πλήθος αυτό μη συμπεριλάβετε τις περιπτώσεις όπου το x δεν έχει τιμή από 0 μέχρι 9. Μονάδες 4 5. Να γραφεί η συνάρτηση Έγκυρο. Για να είναι έγκυρη μία τιμή θα πρέπει να μην υπάρχει άλλο τετράγωνο με την τιμή αυτή ή η τιμή να είναι μηδενική (οπότε και δεν θα πρέπει να γίνει εκχώρηση της στον πίνακα). 3 1 6 Μονάδες 5
Λύσεις Προτεινόμενων Θεμάτων ΑΕΠΠ 2015 ΘΕΜΑ Α Α1. 1. Λ 2. Λ 3. Σ 4. Λ 5. Λ Α2 Κύριο Πρόγραμμα Διαδικασία Α Β Γ Γ Α Β Πριν την κλήση 3 0 2 Κατά την κλήση 3 0 2 7 5 10 Μετά την κλήση 7 5 10 Εμφάνιση μέσα στη Διαδικασία: 5,10,7 Εμφάνιση στο Κύριο Πρόγραμμα: 7,5,10 Βάλβης Δημήτριος Μηχανικός Πληροφορικής Α3 α. Μεταφερσιμότητα καλούμε τη δυνατότητα ενός προγράμματος να μπορεί να εκτελεστεί σε υπολογιστές με διαφορετική αρχιτεκτονική. Η δυνατότητα αυτή εμφανίστηκε για πρώτη φορά στις γλώσσες προγραμματισμού υψηλού επιπέδου και αποτελεί ένα από τα σημαντικότερα πλεονεκτήματά τους. β. Οι βασικές λειτουργίες μιας ΟΥΡΑΣ δεδομένων είναι η εισαγωγή και η εξαγωγή, οι οποίες πραγματοποιούνται με τις βοηθητικές μεταβλητές front και rear. ΘΕΜΑ Β B1 Για i από 3 μέχρι 49 με_βήμα 2 Για j από 49 μέχρι i με_βήμα -2 Αν Π[ j ] < Π[ j-2 ] Τότε Αντιμετάθεσε Π[ j ], Π[ j-2 ]!Ταξινόμηση θετικών Αν Π[ j+1] < Π[ j-1] Τότε Αντιμετάθεσε Π[j+1], Π[j-1]!Ταξινόμηση αρνητικών Τέλος_Επανάληψης Τέλος_Επανάληψης
Β2 ΘΕΜΑ Γ ΠΡΟΓΡΑΜΜΑ Στατιστικά_Πληθυσμού ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Ι, J, ΠΛΗΘ[10,20], ΕΤΗ[10], ΠΛ_Τ[10], ΜΑΧ, ΜΑΧ_ΕΤΟΣ, ΠΛΗΘΟΣ, ΜΑΧ_ΠΛΗΘΟΣ,ΕΤΟΣ ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[10], ΟΝ_Τ[10] ΑΡΧΗ!Υποερώτημα Α ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 10 ΔΙΑΒΑΣΕ ΟΝ[I] ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 20 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ ΠΛΗΘ[Ι,J] ΜΕΧΡΙΣ_ΟΤΟΥ ΠΛΗΘ[Ι,J] > 0
!Υποερώτημα Β ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΑΧ ΠΛΗΘ[Ι,1] MAX_ΕΤΟΣ 1996 ΓΙΑ J ΑΠΟ 2 ΜΕΧΡΙ 20 ΑΝ ΠΛΗΘ[Ι,J] > MAX TOTE MAX ΠΛΗΘ[Ι,J] MAX_ΕΤΟΣ 1995+Ι ΕΤΗ[Ι] ΜΑΧ_ΕΤΟΣ ΓΡΑΨΕ ΟΝ[Ι],ΕΤΗ[Ι]!Υποερώτημα Γ ΜΑΧ_ΠΛΗΘΟΣ 0 ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 10 ΠΛΗΘΟΣ 0 ΕΤΟΣ 1995 + Ι ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 10 ΑΝ ΕΤΗ[J] = ΕΤΟΣ ΤΟΤΕ ΠΛΗΘΟΣ ΠΛΗΘΟΣ +1 ΑΝ ΠΛΗΘΟΣ > MAX_ΠΛΗΘΟΣ ΤΟΤΕ MAX_ΠΛΗΘΟΣ ΠΛΗΘΟΣ MAX_ΕΤΟΣ ΕΤΟΣ ΓΡΑΨΕ Έτος με τους περισσότερους μέγιστους πληθυσμούς:, ΜΑΧ_ΕΤΟΣ!Υποερώτημα Δ ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 10 ΠΛ_Τ[Ι] ΠΛΗΘ[Ι,20] ΟΝ_Τ[Ι] ΟΝ[Ι] ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ 10 ΓΙΑ J ΑΠΟ 10 ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1 ΑΝ ΠΛ_Τ[J]>ΠΛ_Τ[J-1] TOTE ΑΝΤΙΜΕΤΑΘΕΣΕ ΠΛ_Τ[J], ΠΛ_Τ[J-1] ΑΝΤΙΜΕΤΑΘΕΣΕ ΟΝ_Τ[J], ON_T[J-1] ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10 ΓΡΑΨΕ ΟΝ_Τ[Ι], :, ΠΛ_Τ[Ι] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΘΕΜΑ Δ Πρόγραμμα Sudoku Μεταβλητές Ακέραιες: SUD[3,3],i,j,x,κίνηση,πλήθος Αρχή!Αρχικοποίηση πίνακα Για i από 1 μέχρι 3 Για j από 1 μέχρι 3 SUD[3,3] <- 0 SUD[1,1] <- 3 SUD[2,3] <- 6 SUD[3,2] <- 1 κίνηση <- 1 πλήθος <- 0 Γράψε Δώσε συντεταγμένες Διάβασε i,j Γράψε Δώσε αριθμό (0 για έξοδο) Αρχή_επαναλήψης Διάβασε x Μέχρις_ότου x>=0 ΚΑΙ x<=9 Όσο κίνηση <=6 ΚΑΙ x <> 0 επανάλαβε Όσο Έγκυρο(SUD,x) = Ψευδής επανάλαβε πλήθος <- πλήθος + 1 Γράψε Μη έγκυρη εκχώρηση Γράψε Δώσε συντεταγμένες Διάβασε i,j Γράψε Δώσε αριθμό (0 για έξοδο) Αρχή_επαναλήψης Διάβασε x Μέχρις_ότου x>=0 ΚΑΙ x<=9 Αν x <> 0 τότε SUD[i,j] <- x κίνηση <- κίνηση + 1 Για i από 1 μέχρι 3 Για j από 1 μέχρι 3 Γράψε SUD[i,j] Αν κίνηση <> 6 τότε Γράψε Δώσε συντεταγμένες Διάβασε i,j Γράψε Δώσε αριθμό (0 για έξοδο) Αρχή_επαναλήψης Διάβασε x!έχουμε να συμπληρώσουμε 6 αριθμούς!εάν η καταχώρηση δεν ήταν έγκυρη!μέτρηση των μη έγκυρων καταχωρήσεων!εάν δεν έχει επιλεγεί έξοδος!κάνουμε την εκχώρηση!εμφανίζουμε τον πίνακα!εάν δεν παίχτηκε η τελευταία κίνηση!διαβάζουμε τη νέα εκχώρηση
Μέχρις_ότου x>=0 ΚΑΙ x<=9 Τέλος_Αν Αν x = 0 τότε Γράψε Το Sudoku δεν συμπληρώθηκε Αλλιώς Γράψε Το Sudoku συμπληρώθηκε Τέλος_Αν Γράψε Πλήθος μη έγκυρων καταχωρήσεων, πλήθος Τέλος_Προγράμματος Συνάρτηση Έγκυρο(S,x):Λογική Μεταβλητές Ακέραιες: i,j,x,s[3,3] Λογικές: valid Αρχή valid <- αληθές Για i από 1 μέχρι 3 Για j από 1 μέχρι 3 Αν S[i,j] = x ΚΑΙ x <> 0 τότε valid <- ψευδές Έγκυρο <- valid Τέλος_συνάρτησης!Αν έστω μία τιμή είναι ίση με την τιμή που δώσαμε!τότε είναι μη έγκυρη