Το παιχνίδι τρίλιζα παίζεται με διαδοχικές κινήσεις δύο παικτών σε έναν πίνακα Τ[3,3]. Οι παίκτες συμπληρώνουν εναλλάξ μια θέση του πίνακα, τοποθετώντας ο μεν πρώτος το σύμβολοχαρακτήρα ‘Χ’, ο δε δεύτερος το σύμβολο–χαρακτήρα ‘Ο’.
Νικητής είναι ο παίκτης που θα συμπληρώσει πρώτος μια τριάδα όμοιων συμβόλων σε κάποια γραμμή, στήλη ή διαγώνιο του πίνακα. Αν ο πίνακας συμπληρωθεί χωρίς νικητή, το παιχνίδι θεωρείται ισόπαλο.
Α. Να γράψετε πρόγραμμα στη «ΓΛΩΣΣΑ», το οποίο:
- Να τοποθετεί σε κάθε θέση του πίνακα Τ τον χαρακτήρα ‘-’.
Μονάδες 2
- Για κάθε κίνηση:
α. Να δέχεται τις συντεταγμένες μιας θέσης του πίνακα Τ και να τοποθετεί στην αντίστοιχη θέση το σύμβολο του παίκτη. Να θεωρήσετε ότι οι τιμές των συντεταγμένων είναι πάντοτε σωστές (1 έως 3) είναι όμως αποδεκτές, μόνον αν η θέση που προσδιορίζουν δεν περιέχει ήδη ένα σύμβολο παίκτη.
Μονάδες 4
β. Να ελέγχει εάν με την κίνησή του ο παίκτης νίκησε. Για τον σκοπό αυτόν, να καλεί τη συνάρτηση ΝΙΚΗΣΕ, που περιγράφεται στο ερώτημα Β.
Μονάδες 2
- Να τερματίζει το παιχνίδι, εφόσον σημειωθεί ισοπαλία ή νικήσει ένας από τους δύο παίκτες.
Μονάδες 2
- Να εμφανίζει με κατάλληλο μήνυμα (πρώτος παίκτης/ δεύτερος παίκτης/ισοπαλία) το αποτέλεσμα του παιχνιδιού.
Μονάδες 2
Β. Να κατασκευάσετε τη συνάρτηση ΝΙΚΗΣΕ, η οποία θα δέχεται τον πίνακα Τ και τις συντεταγμένες (Γ, Σ) μιας θέσης του πίνακα και θα επιστρέφει την τιμή ΑΛΗΘΗΣ, αν υπάρχει τρεις φορές το ίδιο σύμβολο, σε τουλάχιστον μια από τις παρακάτω περιπτώσεις:
- Στη γραμμή Γ.
- Στη στήλη Σ.
- Στην κύρια διαγώνιο (δηλαδή Γ=Σ).
- Στη δευτερεύουσα διαγώνιο (δηλαδή Γ+Σ=4).
Σε κάθε άλλη περίπτωση, η συνάρτηση να επιστρέφει την τιμή ΨΕΥΔΗΣ.
Μονάδες 8
Τα θέματα σε pdf, 2009, Επαναληπτικές, Ημερήσια
ΛΥΣΗ
ΠΡΟΓΡΑΜΜΑ ΘΕΜΑ_Γ_2009_ΕΠΑΝ_ΗΜΕΡ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: κίνηση, γραμμή, στήλη, i, j ΧΑΡΑΚΤΗΡΕΣ: Τ[9,9] ΛΟΓΙΚΕΣ: βρέθηκε_νικητής ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3 Τ[i,j] <-- '-' ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ βρέθηκε_νικητής <-- ΨΕΥΔΗΣ κίνηση <-- 1 ΟΣΟ κίνηση <= 9 ΚΑΙ βρέθηκε_νικητής = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ ΓΡΑΨΕ 'Δώσε τις συντεταγμένες: Γραμμή(1-3), Στήλη(1-3)' ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ γραμμή, στήλη ΜΕΧΡΙΣ_ΟΤΟΥ Τ[γραμμή,στήλη] = '-' ΑΝ κίνηση MOD 2 = 1 ΤΟΤΕ Τ[γραμμή,στήλη] <-- 'X' ΓΡΑΨΕ 'Καταχωρήθηκε η κίνηση του παίκτη 1' ΑΛΛΙΩΣ Τ[γραμμή,στήλη] <-- 'Ο' ΓΡΑΨΕ 'Καταχωρήθηκε η κίνηση του παίκτη 2' ΤΕΛΟΣ_ΑΝ βρέθηκε_νικητής <-- ΝΙΚΗΣΕ(Τ, γραμμή, στήλη) ΑΝ (βρέθηκε_νικητής = ΨΕΥΔΗΣ) ΤΟΤΕ κίνηση <-- κίνηση + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ κίνηση > 9 ΤΟΤΕ ΓΡΑΨΕ 'Ισοπαλία' ΑΛΛΙΩΣ_ΑΝ κίνηση MOD 2 = 1 ΤΟΤΕ ΓΡΑΨΕ 'Νίκησε ο πρώτος παίκτης' ΑΛΛΙΩΣ ΓΡΑΨΕ 'Νίκησε ο δεύτερος παίκτης' ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΥΝΑΡΤΗΣΗ ΝΙΚΗΣΕ(Τ, Γ, Σ): ΛΟΓΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ : Γ, Σ ΧΑΡΑΚΤΗΡΕΣ: Τ[9,9] ΑΡΧΗ ΑΝ (Τ[Γ,1] = Τ[Γ,2] ΚΑΙ Τ[Γ,2] = Τ[Γ,3]) Ή (Τ[1,Σ] = Τ[2,Σ] ΚΑΙ Τ[2,Σ]= Τ[3,Σ]) Ή (Γ = Σ ΚΑΙ Τ[1,1] = Τ[2,2] ΚΑΙ Τ[2,2] = Τ[3,3]) Ή (Γ + Σ = 4 ΚΑΙ Τ[1,3] = Τ[2,2] ΚΑΙ Τ[2,2] = Τ[3,1]) ΤΟΤΕ ΝΙΚΗΣΕ <-- ΑΛΗΘΗΣ ΑΛΛΙΩΣ ΝΙΚΗΣΕ <-- ΨΕΥΔΗΣ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
!παραλλαγή για τον καθορισμό του παίκτη που παίζει
ΠΡΟΓΡΑΜΜΑ ΘΕΜΑ_Γ_2009_ΕΠΑΝ_ΗΜΕΡ_paralagi
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: κίνηση, γραμμή, στήλη, i, j
ΧΑΡΑΚΤΗΡΕΣ: Τ[9,9]
ΛΟΓΙΚΕΣ: βρέθηκε_νικητής, παίζει_ο_πρώτος, παίζει_ο_δεύτερος, temp
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3
Τ[i,j] <-- '-'
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
βρέθηκε_νικητής <-- ΨΕΥΔΗΣ
παίζει_ο_πρώτος <-- ΑΛΗΘΗΣ
παίζει_ο_δεύτερος <-- ΨΕΥΔΗΣ
κίνηση <-- 1
ΟΣΟ κίνηση <= 9 ΚΑΙ βρέθηκε_νικητής = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'Δώσε τις συντεταγμένες: Γραμμή(1-3), Στήλη(1-3)'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ γραμμή, στήλη
ΑΝ Τ[γραμμή,στήλη] <> '-' ΤΟΤΕ
ΓΡΑΨΕ 'Έπιλέξτε διαφορετικές συντεταγμένες'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ Τ[γραμμή,στήλη] = '-'
ΑΝ παίζει_ο_πρώτος = ΑΛΗΘΗΣ ΤΟΤΕ
Τ[γραμμή,στήλη] <-- 'X'
ΓΡΑΨΕ 'Καταχωρήθηκε η κίνηση του παίκτη 1'
ΑΛΛΙΩΣ
Τ[γραμμή,στήλη] <-- 'Ο'
ΓΡΑΨΕ 'Καταχωρήθηκε η κίνηση του παίκτη 2'
ΤΕΛΟΣ_ΑΝ
βρέθηκε_νικητής <-- ΝΙΚΗΣΕ(Τ, γραμμή, στήλη)
ΑΝ (βρέθηκε_νικητής = ΨΕΥΔΗΣ) ΤΟΤΕ
κίνηση <-- κίνηση + 1
ΤΕΛΟΣ_ΑΝ
!παίζει ο επόμενος παίκτης
temp <-- παίζει_ο_πρώτος
παίζει_ο_πρώτος <-- παίζει_ο_δεύτερος
παίζει_ο_δεύτερος <-- temp
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ κίνηση > 9 ΤΟΤΕ
ΓΡΑΨΕ 'Ισοπαλία'
ΑΛΛΙΩΣ_ΑΝ κίνηση MOD 2 = 1 ΤΟΤΕ
ΓΡΑΨΕ 'Νίκησε ο πρώτος παίκτης'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Νίκησε ο δεύτερος παίκτης'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Πρόσφατα σχόλια