ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Το παιχνίδι Game of Life είναι ένα κυτταρικό αυτόματο που επινοήθηκε από τον Βρετανό μαθηματικό John Horton Conway το 1970. Το παιχνίδι αυτό δεν χρειάζεται κανέναν παίκτη, που σημαίνει ότι η εξέλιξη του καθορίζεται από την αρχική του κατάσταση. Το σύμπαν του παιχνιδιού είναι ένα άπειρο δισδιάστατο ορθογώνιο πλέγμα, κάθε κελί του οποίου μπορεί να περιέχει ένα ζωντανό ('*') ή ένα νεκρό (' ') κύτταρο. Κάθε κελί έχει 8 γείτονες και από την μία γενιά στην επόμενη ισχύουν οι εξής κανόνες:
- Κάθε ζωντανό κύτταρο με λιγότερους από 2 ζωντανούς γείτονες πεθαίνει από μοναξιά
- Κάθε ζωντανό κύτταρο με 2 ή 3 ζωντανούς γείτονες επιζεί
- Κάθε ζωντανό κύτταρο με περισσότερους από 3 ζωντανούς γείτονες πεθαίνει λόγω υπερπληθυσμού
- Κάθε νεκρό κύτταρο με ακριβώς 3 ζωντανούς γείτονες γίνεται ζωντανό (αναπαράγεται)
Να γραφεί πρόγραμμα που:
- Διαβάζει την αρχική κατάσταση του πλέγματος Π[10, 8] και διασφαλίζει ότι κάθε κελί έχει την τιμή '*' για ζωντανό ή ' ' για νεκρό κύτταρο.
- Υπολογίζει την κατάσταση του πλέγματος μετά από 30 γενιές, χρησιμοποιώντας τα παρακάτω υποπρογράμματα:
Επομενη_Γενια: Αντιγράφει το πλέγμα, που δέχεται ως παράμετρο, σε ένα νέο ίσων διαστάσεων. Στη συνέχεια, το αντίγραφο επεξεργάζεται από το υποπρόγραμμα Νεα_Κατασταση και ενημερώνεται κάθε κελί του αρχικού πλέγματος.
Νεα_Κατασταση: Δέχεται ένα πλέγμα και τις συντεταγμένες ενός κελιού και υπολογίζει και επιστρέφει την νέα κατάσταση του κελιού σύμφωνα με τους παραπάνω κανόνες.
Ζωντανοι_Ανα_Γραμμη: Δέχεται ένα πλέγμα, μία γραμμή, το αριστερότερο και το δεξιότερο άκρο των γειτόνων ενός κυττάρου και επιστρέφει το πλήθος των ζωντανών οργανισμών στη γραμμή αυτή.
Γειτονες: Δέχεται ένα πλέγμα και τις συντεταγμένες ενός κελιού και επιστρέφει το πλήθος των ζωντανών γειτόνων.
- Εμφανίζει την κατάσταση του πλέγματος μετά από 30 γενιές.
ΠΡΟΓΡΑΜΜΑ Game_of_Life
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ι, J
ΧΑΡΑΚΤΗΡΕΣ: Π[10, 8]
ΑΡΧΗ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 8
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ Π[Ι, J]
ΜΕΧΡΙΣ_ΟΤΟΥ Π[Ι, J] = '*' Η Π[Ι, J] = ' '
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 30
ΚΑΛΕΣΕ ΕΠΟΜΕΝΗ_ΓΕΝΙΑ(Π)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 8
ΓΡΑΨΕ Π[Ι, J]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΕΠΟΜΕΝΗ_ΓΕΝΙΑ(Π)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ι, J
ΧΑΡΑΚΤΗΡΕΣ: Π[10, 8], Π2[10, 8]
ΑΡΧΗ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10 ! Αντιγραφή αρχικού πλέγματος για τη δημιουργία της επόμενης γενιάς
ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 8
Π2[Ι, J] ← Π[Ι, J]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 8
Π[Ι, J] ← ΝΕΑ_ΚΑΤΑΣΤΑΣΗ(Π2, Ι, J)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΣΥΝΑΡΤΗΣΗ ΝΕΑ_ΚΑΤΑΣΤΑΣΗ(Π, X, Y): ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: X, Y, κ
ΧΑΡΑΚΤΗΡΕΣ: Π[10, 8]
ΑΡΧΗ
κ ← ΓΕΙΤΟΝΕΣ(Π, X, Y)
ΑΝ Π[X, Y] = '*' ΚΑΙ (κ = 2 Ή κ = 3) ΤΟΤΕ
ΝΕΑ_ΚΑΤΑΣΤΑΣΗ ← '*'
ΑΛΛΙΩΣ_ΑΝ Π[X, Y] = ' ' ΚΑΙ κ = 3 ΤΟΤΕ
ΝΕΑ_ΚΑΤΑΣΤΑΣΗ ← '*'
ΑΛΛΙΩΣ
ΝΕΑ_ΚΑΤΑΣΤΑΣΗ ← ' '
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΣΥΝΑΡΤΗΣΗ ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π, X, Y1, Y2): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: I, πλ, X, Y1, Y2
ΧΑΡΑΚΤΗΡΕΣ: Π[10, 8]
ΑΡΧΗ
πλ ← 0
ΓΙΑ I ΑΠΟ Y1 ΜΕΧΡΙ Y2
ΑΝ Π[X, I] = '*' ΤΟΤΕ
πλ ← πλ + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ ← πλ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΣΥΝΑΡΤΗΣΗ ΓΕΙΤΟΝΕΣ(Π, X, Y): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: X, Y, Y1, Y2, πλ
ΧΑΡΑΚΤΗΡΕΣ: Π[10,8]
ΑΡΧΗ
ΑΝ Y = 1 ΤΟΤΕ ! Στήλη = 1, δεν υπάρχουν γείτονες αριστερά
Y1 ← 1
Y2 ← 2
ΑΛΛΙΩΣ_ΑΝ Y = 8 ΤΟΤΕ ! Στήλη = 8, δεν υπάρχουν γείτονες δεξιά
Y1 ← 7
Y2 ← 8
ΑΛΛΙΩΣ ! Υπάρχουν γείτονες αριστερά και δεξιά
Y1 ← Y - 1
Y2 ← Y + 1
ΤΕΛΟΣ_ΑΝ
ΑΝ X = 1 ΤΟΤΕ ! Γραμμή = 1, δεν υπάρχουν γείτονες πάνω
πλ ← ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π,1,Y1,Y2) + ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π,2,Y1,Y2)
ΑΛΛΙΩΣ_ΑΝ X = 10 ΤΟΤΕ ! Γραμμή = 10, δεν υπάρχουν γείτονες κάτω
πλ ← ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π,9,Y1,Y2) + ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π,10,Y1,Y2)
ΑΛΛΙΩΣ ! Υπάρχουν γείτονες πάνω και κάτω
πλ ← ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π,X-1,Y1,Y2) + ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π,X,Y1,Y2) + ΖΩΝΤΑΝΟΙ_ΑΝΑ_ΓΡΑΜΜΗ(Π, X+1, Y1,Y2)
ΤΕΛΟΣ_ΑΝ
ΑΝ Π[X, Y] = '*' ΤΟΤΕ
πλ ← πλ - 1
ΤΕΛΟΣ_ΑΝ
ΓΕΙΤΟΝΕΣ ← πλ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Επιμέλεια θεμάτων: Καλαϊτζάκη Μαρία
Επισκεφθείτε το φροντιστηριακό όμιλο ΕΝΑ εδώ
Όλες οι σημαντικές και έκτακτες ειδήσεις σήμερα
ΕΛΜΕΠΑ: Το κορυφαίο πρόγραμμα Ειδικής Αγωγής στην Ελλάδα για διπλή μοριοδότηση
Το 1ο στην Ελλάδα Πρόγραμμα επιμόρφωσης Τεχνητής Νοημοσύνης για εκπαιδευτικούς με Πιστοποιητικό
ΑΣΕΠ: Η πιο Εύκολη Πιστοποίηση Αγγλικών για μόρια σε 2 ημέρες (δίνεις από το σπίτι σου με 95 ευρώ)
Παν.Πατρών: Μοριοδοτούμενο σεμινάριο ΕΙΔΙΚΗ ΑΓΩΓΗΣ με 65Є εγγραφή - έως 27/11
ΕΥΚΟΛΕΣ πιστοποιήσεις ΙΣΠΑΝΙΚΩΝ - ΙΤΑΛΙΚΩΝ - ΓΑΛΛΙΚΩΝ - ΓΕΡΜΑΝΙΚΩΝ για ΑΣΕΠ - Πάρτε τις ΑΜΕΣΑ
2ος Πανελλήνιος Γραπτός Διαγωνισμός ΑΣΕΠ: Τα 2 μαθήματα εξέτασης και η ύλη