Ένα από τα πιο ωραία προβλήματα-τρυκ που βάζουμε στους μαθητές. Σκοπός είναι να τοποθετήσεις οχτώ Βασίλισσες σε μια σκακιέρα έτσι ώστε καμία από αυτές να μην τρώει – απειλεί καμία άλλη. Πρόβλημα το οποίο έχει μαζί με τις συμμετρικές λύσεις πάνω από 50 διαφορετικές λύσεις. Ωστόσο πάνω σε μια σκακιέρα τα παιδιά ξοδεύουν ώρες και ώρες ανεπιτυχώς, χωρίς να μπορούν να βρούν έστω και μια λύση, αν και αρχικά φαίνεται εύκολο πρόβλημα. Η δυσκολία μπορεί να εξηγηθεί αν αναλογιστούμε τα δεκάδες χιλιάδες των διαφορετικών συνδυασμών.
Σχετικό άρθρο υπάρχει στο photodentro http://photodentro.edu.gr/photodentro/queen_pidx0041705/senario.htm
Παρακάτω θα βρείτε μια υλοποίηση μου στην ΓΛΩΣΣΑ στα πλαίσια του μαθήματος ΑΕΠΠ. Βέβαια είναι υψηλής δυσκολίας η υλοποίηση του και ξεφεύγει από τα πλαίσια του μαθήματος. Η δυσκολία δεν είναι τόσο προγραμματιστική όσο του να σκεφτείς και να σχεδιάσεις μια λύση.
Για μαθητές σίγουρα είναι πολύ δύσκολο, οι συνάδελφοι όμως θα μπορούσαν να πειραματιστούν. Πρώτη άσκηση είναι να φτιάξουν πρόγραμμα σε γλώσσα που να βρίσκει μια λύση στο πρόβλημα με τις οχτώ βασίλισσες, όπως κάνει και το παρακάτω πρόγραμμα. Δεύτερη άσκηση είναι να φτιάξουν πρόγραμμα σε ΓΛΩΣΣΑ ή να βελτιώσουν το παρακάτω ώστε όχι απλά να βρίσκει μια λύση, αλλά να βρίσκει όλες τις δυνατές λύσεις του προβλήματος. Περιμένω απαντήσεις και σχόλια. Καλή επιτυχία!!!
ΠΡΟΓΡΑΜΜΑ ΒΑΣΙΛΙΣΣΕΣ_8
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: i, k, Α[8, 2]
ΛΟΓΙΚΕΣ: t
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 8
Α[i, 1] <- i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <- 1
k <- 1
ΟΣΟ k <= 8 ΕΠΑΝΑΛΑΒΕ
Α[i, 2] <- k
t <- ΕΛΕΓΧΟΣ(Α, i)
ΑΝ t = ΑΛΗΘΗΣ ΤΟΤΕ
i <- i + 1
k <- 1
ΑΝ i = 9 ΤΟΤΕ
k <- 9
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΑΝ k < 8 ΤΟΤΕ
k <- k + 1
ΑΛΛΙΩΣ
ΟΣΟ Α[i, 2] = 8 ΕΠΑΝΑΛΑΒΕ
i <- i – 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Α[i, 2] <- Α[i, 2] + 1
k <- 1
i <- i + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 8
ΓΡΑΨΕ Α[i, 1], ‘ ‘, Α[i, 2]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ ΕΛΕΓΧΟΣ(Α, i): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: i, Α[8, 2], j, k, x, xx, y, yy
ΑΡΧΗ
ΕΛΕΓΧΟΣ <- ΑΛΗΘΗΣ
ΑΝ i = 1 ΤΟΤΕ
ΕΛΕΓΧΟΣ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ i – 1
x <- Α[j, 1]
y <- Α[j, 2]
ΓΙΑ k ΑΠΟ j + 1 ΜΕΧΡΙ i
xx <- Α[k, 1]
yy <- Α[k, 2]
ΑΝ y = yy ΤΟΤΕ
ΕΛΕΓΧΟΣ <- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ_ΑΝ Α_Τ(x – xx) = Α_Τ(y – yy) ΤΟΤΕ
ΕΛΕΓΧΟΣ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ