Παρακάτω είναι η αυτόματη επίλυση του προβλήματος, όπου ο Πέτρος, ο λύκος και το πρόβατο πρέπει να περάσουν το ποτάμι, αλλά δεν πρέπει να μείνουν μόνα τους ο λύκος και το πρόβατο.
(υπάρχει και πιο δύσκολο, αλλά εδώ είναι το απλό πρόβλημα...)
Χρησιμοποιούμε αντικείμενα για να διευκολυνθούμε στην ανάπτυξη της λογικής. Το κυρίως πρόγραμμα είναι στο Επανάλαβε { } Πάντα, το οποίο τελειώνει με άλμα στο 10000
Ο αλγόριθμος θα τερματίσει χωρίς να χρειάζεται να προκαθορίσουμε τα βήματα!
φορμα 60,30
\\ Τύπωσε $(4) \\ βγάλε τα πρώτα \\ και θα έχεις Αναλογική γραφή στη Τύπωσε
οθονη 1 : Πενα 14
γενικό ενέργεια$(3), ιδιότητα$(2)
ενέργεια$(0)="Τρώει","Τρώγεται","Αδιάφορο"
ιδιότητα$(0)="Οδηγός","Επιβάτης"
κλάση άτομο {
όνομα$, τύπος$, ιδιότητα$
τμήμα άτομο {
αν ταύτιση("S") τότε διάβασε .όνομα$
αν ταύτιση("S") τότε διάβασε .τύπος$
αν ταύτιση("S") τότε διάβασε .ιδιότητα$
}
}
κλάση μέρος {
όνομα$, υπάρχουν_άτομα
πινακας ατομο()
τμημα βάλε.άτομο {
Διάβασε άτομο
.υπάρχουν_άτομα++
πίνακας .άτομο( .υπάρχουν_άτομα)
.άτομο(.υπάρχουν_άτομα-1)=άτομο
}
τμημα μέρος {
αν ταύτιση("S") τότε διάβασε .όνομα$
.υπάρχουν_άτομα <= μέγεθος.σωρού
αν .υπάρχουν_άτομα τότε {
πίνακας .άτομο(.υπάρχουν_άτομα)
ι=0 : ενώ όχι κενό { διάβασε .άτομο(ι) : ι++}
}
}
Συνάρτηση Θα.βγει { Διάβασε Ποιος
καθαρο υπολογισε
αν .υπάρχουν_άτομα>2 τότε {
πίνακας α(2)
καθαρο κ
για ι=0 εως 2 {
αν ποιος<>ι τότε α(κ)=ι : κ++
}
\\ Τρώει -1
\\ Τρώγεται 0
\\ Αδιάφορο 1
για ι=0 εως 1 {
αν .άτομο(α(ι)).τύπος$=ενέργεια$(0) τότε {υπολογισε-=1
} αλλιώς.αν .άτομο(α(ι)).τύπος$=ενέργεια$(2) τότε υπολογισε+=1
}
}
=υπολογισε>=0
}
συνάρτηση Βγάλε.άτομο {
διάβασε ποιος
= .άτομο(ποιος)
αν ποιος+1<.υπάρχουν_άτομα τότε {
άλλαξε .άτομο(.υπάρχουν_άτομα-1), .άτομο(ποιος)
}
.υπάρχουν_άτομα--
Πίνακας .άτομο(.υπάρχουν_άτομα)
}
}
Γενική Θέση_επιβατών(3)
Θέση_επιβατών(0)=μέρος("Όχθη Α", άτομο("Πέτρος","Αδιάφορο","Οδηγός"),άτομο("λύκος","Τρώει","Επιβάτης"), άτομο("πρόβατο","Τρώγεται","Επιβάτης"))
Θέση_επιβατών(1)=μέρος("Βάρκα")
Θέση_επιβατών(2)=μέρος("Όχθη Β")
Πίνακας Προορισμός$(4)
Προορισμός$(0)="Προς Όχθη Β","Άφιξη στην Όχθη Β","Προς Όχθη Α","Άφιξη στην Όχθη Α"
Θέση_βάρκας=0 \\ από 0 έως 3
\\Διαμέσου Τύπωσε.Θέσεις()
επανάλαβε {
Αν θέση_βάρκας υπολοιπο 2 =1 τότε {
τύπωσε "κατεβάζω από βάρκα"
για Θέση_επιβατών(1) {
τοπικη όχθη=0
αν θέση_βάρκας =1 τότε όχθη=2
τοπικη κ =.υπάρχουν_άτομα -1
ενω κ>=0 {
Θέση_επιβατών(όχθη).βαλε.άτομο .βγάλε.άτομο(κ)
κ--
}
θέση_βάρκας++ : αν θέση_βάρκας>3 τότε θέση_βάρκας=0
}
}
Διαμέσου Τύπωσε.Θέσεις()
Αν θέση_βάρκας=0 τότε {
πένα 12 {Τύπωσε "Χρειάζομαι Επιβάτη" }
\\όχθη=0
για Θέση_επιβατών(0) {
τοπικη κ
ενω κ<.υπάρχουν_άτομα {
Αν .άτομο(κ).ιδιότητα$=ιδιότητα$(0) τότε { κ++ } αλλιώς έξοδος
}
Αν κ<.υπάρχουν_άτομα Τότε {
Τύπωσε "βρήκα επιβάτη! ";.άτομο(κ).όνομα$
Θέση_επιβατών(1).βαλε.άτομο .βγάλε.άτομο(κ)
}
}
}
όχθη=0
αν θέση_βάρκας>1 τότε όχθη=2
για Θέση_επιβατών(όχθη) {
αν όχθη=2 και .υπάρχουν_άτομα=3 τότε 10000
πένα 12 {Τύπωσε "Χρειάζομαι οδηγό" }
τοπικη κ
ενω κ<.υπάρχουν_άτομα {
Αν .άτομο(κ).ιδιότητα$=ιδιότητα$(1) τότε { κ++ } αλλιώς έξοδος
}
Αν κ<.υπάρχουν_άτομα Τότε {
Τύπωσε "βρήκα οδηγό, ο γνωστός ";.άτομο(κ).όνομα$
Θέση_επιβατών(1).βαλε.άτομο .βγάλε.άτομο(κ)
θέση_βάρκας++ : αν θέση_βάρκας>3 τότε θέση_βάρκας=0
}
}
Διαμέσου Τύπωσε.Θέσεις()
Πλάγια 1: Τύπωσε "Πάτα ένα πλήκτρο" : Πλάγια 0
α$=κομ$
οθονη
} πάντα
10000 Τύπωσε "Όλοι έφθασαν σώοι!"
\\ εδώ κάνει έξοδο το πρόγραμμα..(με το που δει την Ρουτίνα.τερματίζει)
Ρουτινα Τύπωσε.Θέσεις()
\\ η λέξη ρουτινα εδώ δεν θέλει τόνο...γιατί την ψάχνει ο διερμηνευτής χωρίς τόνο
\\ οι τόνοι στο όνομα πρέπει να συμφωνούν με το όνομα στην ΔΙΑΜΕΣΟΥ
τοπικη κ
Για ι=0 έως 2 {
για Θέση_επιβατών(ι) {
πενα 7 { Τύπωσε "Θέση:"; .όνομα$}
αν .υπάρχουν_άτομα τότε {
για κ=0 έως .υπάρχουν_άτομα-1 {τύπωσε .άτομο(κ).όνομα$;" ";}
τύπωσε
} αλλιώς {
Τύπωσε "Κανένας"
}
αν ι=1 τότε τύπωσε "Προορισμός:", Προορισμός$(θέση_βάρκας)
}
}
Τελος Ρουτινας
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.