e-ΜΑΘΗΜΑΤΑ |
Δημιουργία παιχνιδιού : Πύργοι του Ανόι |
ΠΡΟΓΡΑΜΜΑ Πύργοι_του_Ανόι
! * *
! * | * | * | *
!7* =+= * | * | *
!6* ==+== * | * | *
!5* ===+=== * | * | *
!4* ====+==== * | * | *
!3* =====+===== * | * | *
!2* ======+====== * | * | *
!1*=======+=======* | * | *
!****************************************************
! * 1 * * 2 * * 3 *
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: απάντηση
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων
ΑΡΧΗ
ΚΑΛΕΣΕ τιτλοι_αρχής
πλήθος_δίσκων <- 5
ΚΑΛΕΣΕ αρχικοποίησε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ εμφάνισε_Μενού (απάντηση)
ΕΠΙΛΕΞΕ απάντηση
ΠΕΡΙΠΤΩΣΗ '1'
ΚΑΛΕΣΕ ορισμός_πλήθους_δίσκων (πλήθος_δίσκων)
ΚΑΛΕΣΕ αρχικοποίησε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΠΕΡΙΠΤΩΣΗ '2'
ΚΑΛΕΣΕ εναρξη_παιχνιδιού_παίκτη (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΠΕΡΙΠΤΩΣΗ '3'
ΚΑΛΕΣΕ λύση_παιχνιδιού_ΗΥ (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΜΕΧΡΙΣ_ΟΤΟΥ απάντηση = '9'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ αρχικοποίησε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, i
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΠΥΡΓΟΙ[i, 2] <- 0
ΠΥΡΓΟΙ[i, 3] <- 0
ΑΝ i <= πλήθος_δίσκων ΤΟΤΕ
ΠΥΡΓΟΙ[i, 1] <- πλήθος_δίσκων - i + 1
ΑΛΛΙΩΣ
ΠΥΡΓΟΙ[i, 1] <- 0
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ εμφάνισε_Μενού (απάντηση)
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: απάντηση
ΑΡΧΗ
ΓΡΑΨΕ '******************************'
ΓΡΑΨΕ '* ΕΠΙΛΟΓΕΣ *'
ΓΡΑΨΕ '* 1 Ορισμός πλήθους δίσκων *'
ΓΡΑΨΕ '* 2 Έναρξη παιχνιδιού παίκτη *'
ΓΡΑΨΕ '* 3 Λύση παιχνιδιού από Η/Υ *'
ΓΡΑΨΕ '* *'
ΓΡΑΨΕ '* 9 Τέλος *'
ΓΡΑΨΕ '******************************'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώστε επιλογή (1,2,3,9): '
ΔΙΑΒΑΣΕ απάντηση
ΜΕΧΡΙΣ_ΟΤΟΥ απάντηση = '1' Η απάντηση = '2' Η απάντηση = '3' Η απάντηση = '9'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, i
ΑΡΧΗ
ΓΡΑΨΕ
ΓΡΑΨΕ ' * *'
ΓΡΑΨΕ ' * | * | * | *'
ΓΙΑ i ΑΠΟ πλήθος_δίσκων ΜΕΧΡΙ 1 ΜΕ ΒΗΜΑ -1
ΓΡΑΨΕ i, ' '
ΑΝ ΠΥΡΓΟΙ[i, 1] = 7 ΤΟΤΕ
ΓΡΑΨΕ '*=======+=======* '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 6 ΤΟΤΕ
ΓΡΑΨΕ '* ======+====== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 5 ΤΟΤΕ
ΓΡΑΨΕ '* =====+===== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 4 ΤΟΤΕ
ΓΡΑΨΕ '* ====+==== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 3 ΤΟΤΕ
ΓΡΑΨΕ '* ===+=== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 2 ΤΟΤΕ
ΓΡΑΨΕ '* ==+== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 1 ΤΟΤΕ
ΓΡΑΨΕ '* =+= * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 1] = 0 ΤΟΤΕ
ΓΡΑΨΕ '* | * '
ΤΕΛΟΣ_ΑΝ
ΑΝ ΠΥΡΓΟΙ[i, 2] = 7 ΤΟΤΕ
ΓΡΑΨΕ ' =======+=======* '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 6 ΤΟΤΕ
ΓΡΑΨΕ ' ======+====== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 5 ΤΟΤΕ
ΓΡΑΨΕ ' =====+===== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 4 ΤΟΤΕ
ΓΡΑΨΕ ' ====+==== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 3 ΤΟΤΕ
ΓΡΑΨΕ ' ===+=== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 2 ΤΟΤΕ
ΓΡΑΨΕ ' ==+== * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 1 ΤΟΤΕ
ΓΡΑΨΕ ' =+= * '
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 2] = 0 ΤΟΤΕ
ΓΡΑΨΕ ' | * '
ΤΕΛΟΣ_ΑΝ
ΑΝ ΠΥΡΓΟΙ[i, 3] = 7 ΤΟΤΕ
ΓΡΑΨΕ ' =======+=======*'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 6 ΤΟΤΕ
ΓΡΑΨΕ ' ======+====== *'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 5 ΤΟΤΕ
ΓΡΑΨΕ ' =====+===== *'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 4 ΤΟΤΕ
ΓΡΑΨΕ ' ====+==== *'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 3 ΤΟΤΕ
ΓΡΑΨΕ ' ===+=== *'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 2 ΤΟΤΕ
ΓΡΑΨΕ ' ==+== *'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 1 ΤΟΤΕ
ΓΡΑΨΕ ' =+= *'
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[i, 3] = 0 ΤΟΤΕ
ΓΡΑΨΕ ' | *'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! ΓΡΑΨΕ '1* ======+====== * | * | *'
ΓΡΑΨΕ '****************************************************'
ΓΡΑΨΕ ' * 1 * * 2 * * 3 *'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ ορισμός_πλήθους_δίσκων (πλήθος_δίσκων)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: πλήθος_δίσκων
ΑΡΧΗ
ΓΡΑΨΕ 'Δώστε αριθμό δίσκων (1..7): '
ΔΙΑΒΑΣΕ πλήθος_δίσκων
ΟΣΟ πλήθος_δίσκων < 1 Η πλήθος_δίσκων > 7 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'Δώστε αριθμό δίσκων (1..7): '
ΔΙΑΒΑΣΕ πλήθος_δίσκων
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ εναρξη_παιχνιδιού_παίκτη (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, from, to
ΛΟΓΙΚΕΣ: επίλυση_οκ
ΑΚΕΡΑΙΕΣ: πλήθος
ΑΡΧΗ
ΓΡΑΨΕ 'Μεταφορά όλων από 1 σε 3 με τη βοήθεια του 2,'
ΓΡΑΨΕ 'χωρίς να μπει μεγαλύτερος δίσκος πάνω σε μικρότερο'
ΚΑΛΕΣΕ αρχικοποίησε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
επίλυση_οκ <- ΨΕΥΔΗΣ
πλήθος <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ διαβασε_μετακίνηση (from, to)
ΑΝ ΟΧΙ (from = 0 ΚΑΙ to = 0) ΤΟΤΕ
ΑΝ αποδεκτή_κίνηση (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to) ΤΟΤΕ
ΚΑΛΕΣΕ μετακίνησε (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to)
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
πλήθος <- πλήθος + 1
ΓΡΑΨΕ πλήθος, ' κινήσεις'
ΑΝ ολοκληρώθηκε_το_παιχνίδι (πλήθος_δίσκων, ΠΥΡΓΟΙ) ΤΟΤΕ
επίλυση_οκ <- ΑΛΗΘΗΣ
ΓΡΑΨΕ 'Συγχαρητήρια! Ολοκλήρωσες το παιχνίδι '
ΓΡΑΨΕ ' σε ', πλήθος, ' κινήσεις.'
ΓΡΑΨΕ 'Βέλτιστο Πλήθος κινήσεων : ', Α_Μ( 2^ πλήθος_δίσκων - 1)
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'ΜΗ ΑΠΟΔΕΚΤΗ ΚΙΝΗΣΗ!'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Τερματισμός παιχνιδιού ...'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ (from = 0 ΚΑΙ to = 0) Η (επίλυση_οκ = ΑΛΗΘΗΣ)
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ διαβασε_μετακίνηση (from, to)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: from, to
ΑΡΧΗ
ΓΡΑΨΕ 'Δώστε από 1..3 ή 0,0 για τερματισμό'
ΓΡΑΨΕ 'Δώστε γράμμα δίσκου ΑΠΟ : '
ΔΙΑΒΑΣΕ from
ΓΡΑΨΕ 'Δώστε γράμμα δίσκου ΠΡΟΣ: '
ΔΙΑΒΑΣΕ to
ΟΣΟ ΟΧΙ ((from = 1 Η from = 2 Η from = 3) ΚΑΙ
& (to = 1 Η to = 2 Η to = 3) ΚΑΙ (from <> to)
& Η (from = 0 ΚΑΙ to = 0)) ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'Λάθος τιμές!'
ΓΡΑΨΕ 'Δώστε από 1..3 ή 0,0 για τερματισμό'
ΓΡΑΨΕ 'Δώστε γράμμα δίσκου ΑΠΟ : '
ΔΙΑΒΑΣΕ from
ΓΡΑΨΕ 'Δώστε γράμμα δίσκου ΠΡΟΣ: '
ΔΙΑΒΑΣΕ to
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ μετακίνησε (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, from, to
ΑΚΕΡΑΙΕΣ: top_from, top_to, temp
ΑΡΧΗ
top_from <- top (πλήθος_δίσκων, ΠΥΡΓΟΙ, from)
top_to <- top (πλήθος_δίσκων, ΠΥΡΓΟΙ, to)
temp <- ΠΥΡΓΟΙ[top_from, from]
ΠΥΡΓΟΙ[top_from, from] <- 0
top_to <- top_to + 1
ΠΥΡΓΟΙ[top_to, to] <- temp
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΣΥΝΑΡΤΗΣΗ top (πλήθος_δίσκων, ΠΥΡΓΟΙ, disk): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, disk
ΛΟΓΙΚΕΣ: είναι_κενό
ΑΚΕΡΑΙΕΣ: i
ΑΡΧΗ
i <- πλήθος_δίσκων
είναι_κενό <- ΑΛΗΘΗΣ
ΟΣΟ i > 0 ΚΑΙ είναι_κενό = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
ΑΝ ΠΥΡΓΟΙ[i, disk] = 0 ΤΟΤΕ
i <- i - 1
ΑΛΛΙΩΣ
είναι_κενό <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
top <- i
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
!*********************************
ΣΥΝΑΡΤΗΣΗ αποδεκτή_κίνηση (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, from, to
ΑΚΕΡΑΙΕΣ: top_from, top_to
ΑΡΧΗ
αποδεκτή_κίνηση <- ΑΛΗΘΗΣ
top_from <- top (πλήθος_δίσκων, ΠΥΡΓΟΙ, from)
top_to <- top (πλήθος_δίσκων, ΠΥΡΓΟΙ, to)
ΑΝ top_from = 0 ΤΟΤΕ
αποδεκτή_κίνηση <- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ_ΑΝ top_to = πλήθος_δίσκων ΤΟΤΕ
αποδεκτή_κίνηση <- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ_ΑΝ top_to = 0 ΤΟΤΕ
αποδεκτή_κίνηση <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ ΠΥΡΓΟΙ[top_from, from] > ΠΥΡΓΟΙ[top_to, to] ΤΟΤΕ
αποδεκτή_κίνηση <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
!*********************************
ΣΥΝΑΡΤΗΣΗ ολοκληρώθηκε_το_παιχνίδι (πλήθος_δίσκων, ΠΥΡΓΟΙ): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, i
ΛΟΓΙΚΕΣ: ok
ΑΡΧΗ
ολοκληρώθηκε_το_παιχνίδι <- ΑΛΗΘΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ πλήθος_δίσκων
ΑΝ ΠΥΡΓΟΙ[i, 1] <> 0 Η ΠΥΡΓΟΙ[i, 2] <> 0 ΤΟΤΕ
ολοκληρώθηκε_το_παιχνίδι <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ τιτλοι_αρχής
ΑΡΧΗ
ΓΡΑΨΕ '****************************************************'
ΓΡΑΨΕ '. ΠΥΡΓΟΙ ΤΟΥ ΑΝΟΪ .'
ΓΡΑΨΕ '. (c) 2024 - 2ο ΓΕΛ Γέρακα - Βασίλης Αναστόπουλος .'
ΓΡΑΨΕ '****************************************************'
ΓΡΑΨΕ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ λύση_παιχνιδιού_ΗΥ (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, from, to, temp, disks
ΑΡΧΗ
from <- 1
to <- 3
temp <- 2
disks <- πλήθος_δίσκων
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΚΑΛΕΣΕ λύση_με_αναδρομή (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to, temp, disks)
ΓΡΑΨΕ 'Πλήθος κινήσεων : ', Α_Μ( 2^ πλήθος_δίσκων - 1)
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!*********************************
ΔΙΑΔΙΚΑΣΙΑ λύση_με_αναδρομή (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to, temp, disks)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΥΡΓΟΙ[10, 3], πλήθος_δίσκων, from, to, temp, disks, new_disks
ΑΡΧΗ
ΑΝ disks = 1 ΤΟΤΕ
ΓΡΑΨΕ 'Από: ', from, ' Προς: ', to
ΚΑΛΕΣΕ μετακίνησε (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to)
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΑΛΛΙΩΣ
new_disks <- disks - 1
ΚΑΛΕΣΕ λύση_με_αναδρομή (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, temp, to, new_disks)
ΓΡΑΨΕ 'Από: ', from, ' Προς: ', to
ΚΑΛΕΣΕ μετακίνησε (πλήθος_δίσκων, ΠΥΡΓΟΙ, from, to)
ΚΑΛΕΣΕ εμφάνισε_δίσκους (πλήθος_δίσκων, ΠΥΡΓΟΙ)
ΚΑΛΕΣΕ λύση_με_αναδρομή (πλήθος_δίσκων, ΠΥΡΓΟΙ, temp, to, from, new_disks)
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
|