e-ΜΑΘΗΜΑΤΑ |
Λύσεις ασκήσεων από θέματα Πανελλαδικών εξετάσεων |
ΠΡΟΓΡΑΜΜΑ ΤΡΙΛΙΖΑ
!Ε2009-Θ4
!Το παιχνίδι τρίλιζα παίζεται με διαδοχικές κινήσεις δύο παικτών σε έναν πίνακα Τ[3,3].
! Οι παίκτες συμπληρώνουν εναλλάξ μια θέση του πίνακα, τοποθετώντας ο μεν πρώτος
! το σύμβολο-χαρακτήρα ‘Χ’, ο δε δεύτερος το σύμβολο–χαρακτήρα ‘Ο’.
! Νικητής είναι ο παίκτης που θα συμπληρώσει πρώτος μια τριάδα όμοιων συμβόλων σε
! κάποια γραμμή, στήλη ή διαγώνιο του πίνακα. Αν ο πίνακας συμπληρωθεί χωρίς νικητή,
! το παιχνίδι θεωρείται ισόπαλο.
! Α. Να γράψετε πρόγραμμα στη «ΓΛΩΣΣΑ», το οποίο:
!1. Να τοποθετεί σε κάθε θέση του πίνακα Τ τον χαρακτήρα ‘-’.
!2. Για κάθε κίνηση:
!α. Να δέχεται τις συντεταγμένες μιας θέσης του πίνακα Τ και να τοποθετεί στην
!αντίστοιχη θέση το σύμβολο του παίκτη. Να θεωρήσετε ότι οι τιμές των συντεταγμένων
!είναι πάντοτε σωστές (1 έως 3) είναι όμως αποδεκτές, μόνον αν η θέση που προσδιορίζουν
!δεν περιέχει ήδη ένα σύμβολο παίκτη.
!β. Να ελέγχει εάν με την κίνησή του ο παίκτης νίκησε. Για τον σκοπό αυτόν, να καλεί τη
!συνάρτηση ΝΙΚΗΣΕ, που περιγράφεται στο ερώτημα Β.
!3. Να τερματίζει το παιχνίδι, εφόσον σημειωθεί ισοπαλία ή νικήσει ένας από τους δύο παίκτες.
!4. Να εμφανίζει με κατάλληλο μήνυμα (πρώτος παίκτης/ δεύτερος παίκτης/ισοπαλία) το
!αποτέλεσμα του παιχνιδιού.
!Β. Να κατασκευάσετε τη συνάρτηση ΝΙΚΗΣΕ, η οποία θα δέχεται τον πίνακα Τ και
! τις συντεταγμένες (Γ, Σ) μιας θέσης του πίνακα και θα επιστρέφει την τιμή ΑΛΗΘΗΣ,
! αν υπάρχει τρεις φορές το ίδιο σύμβολο, σε τουλάχιστον μια από τις παρακάτω περιπτώσεις:
!1. Στη γραμμή Γ.
!2. Στη στήλη Σ.
!3. Στην κύρια διαγώνιο (δηλαδή Γ=Σ).
!4. Στη δευτερεύουσα διαγώνιο (δηλαδή Γ+Σ=4).
!Σε κάθε άλλη περίπτωση, η συνάρτηση να επιστρέφει την τιμή ΨΕΥΔΗΣ.
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: Τ[3, 3]
ΑΚΕΡΑΙΕΣ: i, j, παίκτης, Γ, Σ, πλήθος_κινήσεων
ΛΟΓΙΚΕΣ: game_over
ΑΡΧΗ
!1. Να τοποθετεί σε κάθε θέση του πίνακα Τ τον χαρακτήρα ‘-’.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3
Τ[i, j] <- '-'
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
game_over <- ΨΕΥΔΗΣ
παίκτης <- 1
πλήθος_κινήσεων <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
!2. Για κάθε κίνηση:
!α. Να δέχεται τις συντεταγμένες μιας θέσης του πίνακα Τ και να τοποθετεί στην
!αντίστοιχη θέση το σύμβολο του παίκτη. Να θεωρήσετε ότι οι τιμές των συντεταγμένων
!είναι πάντοτε σωστές (1 έως 3) είναι όμως αποδεκτές, μόνον αν η θέση που προσδιορίζουν
!δεν περιέχει ήδη ένα σύμβολο παίκτη.
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'ΠΑΙKΤΗΣ : ', παίκτης
ΓΡΑΨΕ 'Δώστε Γραμμή (1..3) : '
ΔΙΑΒΑΣΕ Γ
ΓΡΑΨΕ 'Δώστε Στήλη (1..3) : '
ΔΙΑΒΑΣΕ Σ
ΜΕΧΡΙΣ_ΟΤΟΥ Γ >= 1 ΚΑΙ Γ <= 3 ΚΑΙ Σ >= 1 ΚΑΙ Σ <= 3 ΚΑΙ Τ[Γ, Σ] = '-'
ΑΝ παίκτης = 1 ΤΟΤΕ
Τ[Γ, Σ] <- 'x'
ΑΛΛΙΩΣ
Τ[Γ, Σ] <- 'o'
ΤΕΛΟΣ_ΑΝ
πλήθος_κινήσεων <- πλήθος_κινήσεων + 1
!β. Να ελέγχει εάν με την κίνησή του ο παίκτης νίκησε. Για τον σκοπό αυτόν, να καλεί τη
!συνάρτηση ΝΙΚΗΣΕ, που περιγράφεται στο ερώτημα Β.
ΑΝ ΝΙΚΗΣΕ (Τ, Γ, Σ) ΤΟΤΕ
!4. Να εμφανίζει με κατάλληλο μήνυμα (πρώτος παίκτης/ δεύτερος παίκτης/ισοπαλία) το
!αποτέλεσμα του παιχνιδιού.
ΓΡΑΨΕ 'Νίκησε ο παίκτης : ', παίκτης
game_over <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
!3. Να τερματίζει το παιχνίδι, εφόσον σημειωθεί ισοπαλία ή νικήσει ένας από τους δύο παίκτες.
ΑΝ πλήθος_κινήσεων = 9 ΤΟΤΕ
ΓΡΑΨΕ "Το παιχνίδι έληξε ισόπαλο"
game_over <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
ΑΝ παίκτης = 1 ΤΟΤΕ
παίκτης <- 2
ΑΛΛΙΩΣ
παίκτης <- 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
! Δεν το ζητάει η εκφώνηση, αλλά αν το κάνετε copy paste στον διερμηνευτή της ΓΛΩΣΣΑΣ
! μπορείτε να παίξετε μια παρτίδα και να βλέπετε την τρίλιζα!
ΚΑΛΕΣΕ ΕΜΦΑΝΙΣΕ_ΠΙΝΑΚΑ (Τ)
ΜΕΧΡΙΣ_ΟΤΟΥ game_over = ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
! ---------------------------------------------------------------------
ΣΥΝΑΡΤΗΣΗ ΝΙΚΗΣΕ (Τ, Γ, Σ): ΛΟΓΙΚΗ
!Β. Να κατασκευάσετε τη συνάρτηση ΝΙΚΗΣΕ, η οποία θα δέχεται τον πίνακα Τ και
! τις συντεταγμένες (Γ, Σ) μιας θέσης του πίνακα και θα επιστρέφει την τιμή ΑΛΗΘΗΣ,
! αν υπάρχει τρεις φορές το ίδιο σύμβολο, σε τουλάχιστον μια από τις παρακάτω περιπτώσεις:
!1. Στη γραμμή Γ.
!2. Στη στήλη Σ.
!3. Στην κύρια διαγώνιο (δηλαδή Γ=Σ).
!4. Στη δευτερεύουσα διαγώνιο (δηλαδή Γ+Σ=4).
!Σε κάθε άλλη περίπτωση, η συνάρτηση να επιστρέφει την τιμή ΨΕΥΔΗΣ.
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: Τ[3, 3], ΣΥΜΒΟΛΟ
ΑΚΕΡΑΙΕΣ: Γ, Σ, i, j
ΑΡΧΗ
ΣΥΜΒΟΛΟ <- Τ[Γ, Σ]
ΑΝ Τ[Γ, 1] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[Γ, 2] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[Γ, 3] = ΣΥΜΒΟΛΟ ΤΟΤΕ
ΝΙΚΗΣΕ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ Τ[1, Σ] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[2, Σ] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[3, Σ] = ΣΥΜΒΟΛΟ ΤΟΤΕ
ΝΙΚΗΣΕ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ Τ[1, 1] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[2, 2] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[3, 3] = ΣΥΜΒΟΛΟ ΤΟΤΕ
ΝΙΚΗΣΕ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ Τ[1, 3] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[2, 2] = ΣΥΜΒΟΛΟ ΚΑΙ Τ[3, 1] = ΣΥΜΒΟΛΟ ΤΟΤΕ
ΝΙΚΗΣΕ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
ΝΙΚΗΣΕ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
! ------------------------------------------------------------
! Δεν το ζητάει η εκφώνηση, αλλά αν το κάνετε copy paste στον διερμηνευτή της ΓΛΩΣΣΑΣ
! μπορείτε να παίξετε μια παρτίδα και να βλέπετε την τρίλιζα!
ΔΙΑΔΙΚΑΣΙΑ ΕΜΦΑΝΙΣΕ_ΠΙΝΑΚΑ (Τ)
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: Τ[3, 3]
ΑΚΕΡΑΙΕΣ: i, j
ΑΡΧΗ
ΓΡΑΨΕ Τ[1, 1], ' | ', Τ[1, 2], ' | ', Τ[1, 3]
ΓΡΑΨΕ '--+---+--'
ΓΡΑΨΕ Τ[2, 1], ' | ', Τ[2, 2], ' | ', Τ[2, 3]
ΓΡΑΨΕ '--+---+--'
ΓΡΑΨΕ Τ[3, 1], ' | ', Τ[3, 2], ' | ', Τ[3, 3]
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
|