!Το πρόγραμμα αυτό είναι υλοποίηση του αλγόριθμου παράδειγμα 2 σελ. 104-108 του τετραδίου μαθητή.
!Το πρόβλημα συνίσταται στην μεταφορά των αριθμών (ροδέλλες) από μία στήλη σε άλλη
!τηρώντας τους δύο παρακάτω κανόνες:'
! Επιτρέπεται να μετακινούμε μόνο έναν αριθμό κάθε φορά'
! Δεν επιτρέπεται να τοποθετούμε έναν μεγαλύτερο αριθμό πάνω από έναν μικρότερο'
!για να μπορέσουν να γίνουν οι μεταφορές υπάρχει τρίτη βοηθητική στήλη.
!Αντί για δίσκους διαφόρων μεγεθών εδώ χρησιμοποιούμε αριθμούς.
!Οι τρείς στύλοι είναι τρείς στοίβες που υλοποιούνται με την βοήθεια ενός πίνακα τριών στηλών
!σύμφωνα με το σχολικό βιβλίο σελ. 59-60.
!Η αναδρομή είναι εκτός διδακτέας ύλης.
!Αν θέλετε το πρόγραμμα να εκτελείται ταχύτερα τρέξτε το στην έκδοση με compiler.
!
!Αν οι αριθμοί δεν εμφανίζονται πάνω από τα Π Π Π: στο μενού επιλογές κάντε τσεκ στο 'διαχωρισμός παραμέτρων στις γράψε'
!
ΠΡΟΓΡΑΜΜΑ Towers
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ST[10,3], I, J, TOP[3], NUM, AR, TE
ΑΡΧΗ
ΓΡΑΨΕ 'Δώστε την ποσότητα των αριθμών που θα μετακινηθούν από την μία στήλη στην άλλη'
ΔΙΑΒΑΣΕ NUM
ΟΣΟ NUM<1 Η NUM>9 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ ' Η ποσότητα πρέπει να είναι μεταξύ του 1 και 9 συμπεριλαμβανομένων'
ΔΙΑΒΑΣΕ NUM
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Υπάρχουν 3 διαθέσιμες στήλες η 1 η 2 και η 3.'
ΓΡΑΨΕ 'Δώστε το νούμερο της στήλης στην οποία θα είναι αρχικά οι αριθμοί'
ΔΙΑΒΑΣΕ AR
ΜΕΧΡΙΣ_ΟΤΟΥ AR=1 Η AR=2 Η AR=3
ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 3
ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 9
ST[I,J] <-- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ST[10,J] <-- 10
TOP[J] <-- 10
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ I ΑΠΟ 10-NUM ΜΕΧΡΙ 9
ST[I,AR] <-- NUM+I-9
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
TOP[AR] <-- 10-NUM
ΓΡΑΨΕ
ΚΑΛΕΣΕ PRINT(ST,TOP)
ΓΡΑΨΕ 'Η βάση της κάθε στήλης παριστάνεται με ένα Π'
ΓΡΑΨΕ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώστε το νούμερο της στήλης στην οποία θα μεταφερθούν οι αριθμοί'
ΔΙΑΒΑΣΕ TE
ΑΝ TE=AR ΤΟΤΕ
ΓΡΑΨΕ 'Οι αριθμοί βρίσκονται ήδη στην στήλη',AR
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ (TE=1 Η TE=2 Η TE=3) ΚΑΙ TE<>AR
ΓΡΑΨΕ
ΓΡΑΨΕ
ΚΑΛΕΣΕ MOVEMANY(NUM,AR,TE,ST,TOP)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
!
!
ΔΙΑΔΙΚΑΣΙΑ MOVE(FROM,STO,ARAY,LEV)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: FROM, STO, ARAY[10,3], LEV[3]
ΑΡΧΗ
ARAY[LEV[STO]-1,STO] <-- ARAY[LEV[FROM],FROM]
LEV[STO] <-- LEV[STO]-1
ARAY[LEV[FROM],FROM] <-- 0
LEV[FROM] <-- LEV[FROM]+1
ΚΑΛΕΣΕ PRINT(ARAY,LEV)
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!
!
ΔΙΑΔΙΚΑΣΙΑ MOVEMANY(DOWN,DEP,DEST,ST,TOP)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:DOWN,DOWN1,DEP,DEST,ST[10,3],TOP[3],TEMPOR
ΑΡΧΗ
ΑΝ (DOWN=1) ΤΟΤΕ
ΚΑΛΕΣΕ MOVE(DEP,DEST,ST,TOP)
ΑΛΛΙΩΣ
TEMPOR <-- 6-DEP-DEST
DOWN1 <-- DOWN-1
ΚΑΛΕΣΕ MOVEMANY(DOWN1,DEP,TEMPOR,ST,TOP)
ΚΑΛΕΣΕ MOVE(DEP,DEST,ST,TOP)
ΚΑΛΕΣΕ MOVEMANY(DOWN1,TEMPOR,DEST,ST,TOP)
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
!
!
ΔΙΑΔΙΚΑΣΙΑ PRINT(AR,PANO)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: AR[10,3],PANO[3],K,L,MIN
ΑΡΧΗ
ΑΝ PANO[1]<PANO[2] ΤΟΤΕ
MIN <-- PANO[1]
ΑΛΛΙΩΣ
MIN <-- PANO[2]
ΤΕΛΟΣ_ΑΝ
ΑΝ PANO[3]<MIN ΤΟΤΕ
MIN <-- PANO[3]
ΤΕΛΟΣ_ΑΝ
ΓΙΑ K ΑΠΟ MIN ΜΕΧΡΙ 9
ΓΙΑ L ΑΠΟ 1 ΜΕΧΡΙ 3
ΑΝ (AR[K,L]<>0) ΤΟΤΕ
ΓΡΑΨΕ_ AR[K,L]
ΑΛΛΙΩΣ
ΓΡΑΨΕ_ ' '
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Π Π Π'
ΓΡΑΨΕ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ