Το παιχνίδι τρίλιζα παίζεται με διαδοχικές κινήσεις δύο παικτών σε έναν πίνακα Τ[3,3]. Οι παίκτες συμπληρώνουν εναλλάξ μια θέση του πίνακα, τοποθετώντας ο μεν πρώτος το σύμβολοχαρακτήρα ‘Χ’, ο δε δεύτερος το σύμβολο–χαρακτήρα ‘Ο’.

Νικητής είναι ο παίκτης που θα συμπληρώσει πρώτος μια τριάδα όμοιων συμβόλων σε κάποια γραμμή, στήλη ή διαγώνιο του πίνακα. Αν ο πίνακας συμπληρωθεί χωρίς νικητή, το παιχνίδι θεωρείται ισόπαλο.

Α. Να γράψετε πρόγραμμα στη «ΓΛΩΣΣΑ», το οποίο:

  1. Να τοποθετεί σε κάθε θέση του πίνακα Τ τον χαρακτήρα ‘-’.

Μονάδες 2

  1. Για κάθε κίνηση:

α. Να δέχεται τις συντεταγμένες μιας θέσης του πίνακα Τ και να τοποθετεί στην αντίστοιχη θέση το σύμβολο του παίκτη. Να θεωρήσετε ότι οι τιμές των συντεταγμένων είναι πάντοτε σωστές (1 έως 3) είναι όμως αποδεκτές, μόνον αν η θέση που προσδιορίζουν δεν περιέχει ήδη ένα σύμβολο παίκτη.

Μονάδες 4

β. Να ελέγχει εάν με την κίνησή του ο παίκτης νίκησε. Για τον σκοπό αυτόν, να καλεί τη συνάρτηση ΝΙΚΗΣΕ, που περιγράφεται στο ερώτημα Β.

Μονάδες 2

  1. Να τερματίζει το παιχνίδι, εφόσον σημειωθεί ισοπαλία ή νικήσει ένας από τους δύο παίκτες.

Μονάδες 2

  1. Να εμφανίζει με κατάλληλο μήνυμα (πρώτος παίκτης/ δεύτερος παίκτης/ισοπαλία) το αποτέλεσμα του παιχνιδιού.

Μονάδες 2

Β. Να κατασκευάσετε τη συνάρτηση ΝΙΚΗΣΕ, η οποία θα δέχεται τον πίνακα Τ και τις συντεταγμένες (Γ, Σ) μιας θέσης του πίνακα και θα επιστρέφει την τιμή ΑΛΗΘΗΣ, αν υπάρχει τρεις φορές το ίδιο σύμβολο, σε τουλάχιστον μια από τις παρακάτω περιπτώσεις:

  1. Στη γραμμή Γ.
  2. Στη στήλη Σ.
  3. Στην κύρια διαγώνιο (δηλαδή Γ=Σ).
  4. Στη δευτερεύουσα διαγώνιο (δηλαδή Γ+Σ=4).

Σε κάθε άλλη περίπτωση, η συνάρτηση να επιστρέφει την τιμή ΨΕΥΔΗΣ.

Μονάδες 8

Τα θέματα σε pdf, 2009, Επαναληπτικές, Ημερήσια

ΛΥΣΗ

ΠΡΟΓΡΑΜΜΑ ΤΡΙΛΙΖΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: Τ[3, 3] 
  ΑΚΕΡΑΙΕΣ: Γ, Σ, Ι, J, ΚΙΝΗΣΕΙΣ
  ΛΟΓΙΚΕΣ: ΝΙΚΗ, ΠΑΙΖΕΙ_Ο_1ΟΣ
ΑΡΧΗ
!Α1
  ΓΙΑ Γ ΑΠΟ 1 ΜΕΧΡΙ 3
    ΓΙΑ Σ ΑΠΟ 1 ΜΕΧΡΙ 3
      Τ[Γ, Σ] <- '-'
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

!Α2
  ΚΙΝΗΣΕΙΣ <- 0
  ΝΙΚΗ <- ΨΕΥΔΗΣ                                                  ! ΤΙΜΗ ΦΡΟΥΡΟΣ
  ΟΣΟ ( ΝΙΚΗ = ΨΕΥΔΗΣ ΚΑΙ ΚΙΝΗΣΕΙΣ < 9) ΕΠΑΝΑΛΑΒΕ
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΔΙΑΒΑΣΕ Γ, Σ
    ΜΕΧΡΙΣ_ΟΤΟΥ Τ[Γ, Σ] = '-'
    ΑΝ ΚΙΝΗΣΕΙΣ mod 2 = 1 ΤΟΤΕ
      Τ[Γ, Σ] <- 'Χ'
    ΑΛΛΙΩΣ
      Τ[Γ, Σ] <- 'Ο'
    ΤΕΛΟΣ_ΑΝ
    ΚΙΝΗΣΕΙΣ <- ΚΙΝΗΣΕΙΣ + 1
    ΝΙΚΗ <- ΝΙΚΗΣΕ(Τ, Γ, Σ)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

! ΕΞΟΔΟΣ
  ΑΝ ΝΙΚΗ = ΑΛΗΘΗΣ ΤΟΤΕ                                            ! ΕΧΟΥΜΕ ΝΙΚΗ
    ΑΝ ΚΙΝΗΣΕΙΣ mod 2 = 1 ΤΟΤΕ
      ΓΡΑΨΕ 'ΝΙΚΗΣΕ Ο 1ΟΣ ΠΑΙΚΤΗΣ'
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ 'ΝΙΚΗΣΕ Ο 2ΟΣ ΠΑΙΚΤΗΣ'
    ΤΕΛΟΣ_ΑΝ
  ΑΛΛΙΩΣ                                                       ! ΕΧΟΥΜΕ ΙΣΟΠΑΛΙΑ
    ΓΡΑΨΕ 'ΙΣΟΠΑΛΙΑ'
  ΤΕΛΟΣ_ΑΝ

! Α2 Β ΤΡΟΠΟΣ
!  ΚΙΝΗΣΕΙΣ <- 0
!  ΠΑΙΖΕΙ_Ο_1ΟΣ <- ΑΛΗΘΗΣ
!  ΝΙΚΗ <- ΨΕΥΔΗΣ                                                  ! ΤΙΜΗ ΦΡΟΥΡΟΣ
!  ΟΣΟ ( ΝΙΚΗ = ΨΕΥΔΗΣ ΚΑΙ ΚΙΝΗΣΕΙΣ < 9) ΕΠΑΝΑΛΑΒΕ
!    ΚΙΝΗΣΕΙΣ <- ΚΙΝΗΣΕΙΣ + 1
!    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
!   ΜΕΧΡΙΣ_ΟΤΟΥ Τ[Γ, Σ] = '-'
!    ΑΝ ΠΑΙΖΕΙ_Ο_1ΟΣ = ΑΛΗΘΗΣ ΤΟΤΕ
!      Τ[Γ, Σ] <- 'Χ'
!    ΑΛΛΙΩΣ
!      Τ[Γ, Σ] <- 'Ο'
!    ΤΕΛΟΣ_ΑΝ
!    ΝΙΚΗ <- ΝΙΚΗΣΕ(Τ, Γ, Σ)
!    ΑΝ ΠΑΙΖΕΙ_Ο_1ΟΣ = ΑΛΗΘΗΣ ΤΟΤΕ
!      ΠΑΙΖΕΙ_Ο_1ΟΣ <- ΨΕΥΔΗΣ
!    ΑΛΛΙΩΣ
!      ΠΑΙΖΕΙ_Ο_1ΟΣ <- ΑΛΗΘΗΣ
!    ΤΕΛΟΣ_ΑΝ
!  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
                                                                        !ΕΞΟΔΟΣ
!  ΑΝ ΝΙΚΗ = ΑΛΗΘΗΣ ΤΟΤΕ                                            ! ΕΧΟΥΜΕ ΝΙΚΗ
!   ΑΝ ΠΑΙΖΕΙ_Ο_1ΟΣ = ΨΕΥΔΗΣ ΤΟΤΕ    ! ΑΝΑΠΟΔΑ ΓΙΑΤΙ ΑΛΛΑΖΕΙ ΣΤΟ ΤΕΛΟΣ Ο ΠΑΙΚΤΗΣ
!      ΓΡΑΨΕ 'ΝΙΚΗΣΕ Ο 1ΟΣ ΠΑΙΚΤΗΣ'
!    ΑΛΛΙΩΣ
!      ΓΡΑΨΕ 'ΝΙΚΗΣΕ Ο 2ΟΣ ΠΑΙΚΤΗΣ'
!    ΤΕΛΟΣ_ΑΝ
!  ΑΛΛΙΩΣ                                                       ! ΕΧΟΥΜΕ ΙΣΟΠΑΛΙΑ
!    ΓΡΑΨΕ 'ΙΣΟΠΑΛΙΑ'
!  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΝΙΚΗΣΕ(Τ, Γ, Σ): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Γ, Σ, Ι, J
  ΛΟΓΙΚΕΣ: ΤΡΙΛΙΖΑ
  ΧΑΡΑΚΤΗΡΕΣ: Τ[3, 3] 
ΑΡΧΗ
! Α ΤΡΟΠΟΣ
!ΕΛΕΓΧΩ ΑΝ Η ΓΡΑΜΜΗ ΕΧΕΙ ΤΡΙΛΙΖΑ
!  ΤΡΙΛΙΖΑ <- ΑΛΗΘΗΣ
!  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 3
!    ΑΝ Τ[Γ, Σ] <> Τ[Γ, J] ΤΟΤΕ
!      ΤΡΙΛΙΖΑ <- ΨΕΥΔΗΣ
!    ΤΕΛΟΣ_ΑΝ
!  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

!  ΑΝ ΤΡΙΛΙΖΑ = ΨΕΥΔΗΣ ΤΟΤΕ
!ΕΛΕΓΧΩ ΑΝ Η ΣΤΗΛΗ ΕΧΕΙ ΤΡΙΛΙΖΑ
!    ΤΡΙΛΙΖΑ <- ΑΛΗΘΗΣ
!    ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 3
!      ΑΝ Τ[Γ, Σ] <> Τ[Ι, Σ] ΤΟΤΕ
!        ΤΡΙΛΙΖΑ <- ΨΕΥΔΗΣ
!      ΤΕΛΟΣ_ΑΝ
!    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!  ΤΕΛΟΣ_ΑΝ

!  ΑΝ ΤΡΙΛΙΖΑ = ΨΕΥΔΗΣ ΚΑΙ Γ = Σ ΤΟΤΕ
!ΕΛΕΓΧΩ ΑΝ Η ΔΙΑΓΩΝΙΟΣ ΕΧΕΙ ΤΡΙΛΙΖΑ
!    ΤΡΙΛΙΖΑ <- ΑΛΗΘΗΣ
!    ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 3
!      ΑΝ Τ[Γ, Σ] <> Τ[Ι, Ι] ΤΟΤΕ
!        ΤΡΙΛΙΖΑ <- ΨΕΥΔΗΣ
!      ΤΕΛΟΣ_ΑΝ
!    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!  ΤΕΛΟΣ_ΑΝ

!  ΑΝ ΤΡΙΛΙΖΑ = ΨΕΥΔΗΣ ΚΑΙ Γ + Σ = 4 ΤΟΤΕ
!ΕΛΕΓΧΩ ΑΝ Η ΔΙΑΓΩΝΙΟΣ ΕΧΕΙ ΤΡΙΛΙΖΑ
!    ΤΡΙΛΙΖΑ <- ΑΛΗΘΗΣ
!    ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 3
!      ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 3
!        ΑΝ Ι + J = 4 ΤΟΤΕ
!          ΑΝ Τ[Γ, Σ] <> Τ[Ι, J] ΤΟΤΕ
!            ΤΡΙΛΙΖΑ <- ΨΕΥΔΗΣ
!          ΤΕΛΟΣ_ΑΝ
!        ΤΕΛΟΣ_ΑΝ
!      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!  ΤΕΛΟΣ_ΑΝ

!  ΝΙΚΗΣΕ <- ΤΡΙΛΙΖΑ

! Β ΤΡΟΠΟΣ
  ΑΝ (Τ[Γ, 1] = Τ[Γ, 2] ΚΑΙ Τ[Γ, 1] = Τ[Γ, 3]) Η 
     (Τ[1, Σ] = Τ[2, Σ] ΚΑΙ Τ[1, Σ] = Τ[3, Σ]) Η 
     ((Τ[1, 1] = Τ[2, 2] ΚΑΙ Τ[1, 1] = Τ[3, 3]) ΚΑΙ Γ = Σ) Η 
     ((Τ[3, 1] = Τ[2, 2] ΚΑΙ Τ[3, 1] = Τ[1, 3]) ΚΑΙ Γ + Σ = 4) ΤΟΤΕ
     ΝΙΚΗΣΕ <- ΑΛΗΘΗΣ
  ΑΛΛΙΩΣ
     ΝΙΚΗΣΕ <- ΨΕΥΔΗΣ
  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
</code class="language-javascript">