Η άσκηση:
|
|
Έχουμε 10 παιδιά σε έναν κύκλο, και θέλουμε να μοιράσουμε ένα καλάθι μήλα. Το καλάθι μπορεί να έχει από 7 έως 50 μήλα. Δίνουμε σε ένα οποιοδήποτε παιδί το καλάθι. Κάθε παιδί που παίρνει το καλάθι κρατάει ένα μήλο και δίνει το καλάθι στο επόμενο παιδί με μια φορά για όλα τα παιδιά. Μόλις τελειώσουν τα μήλα από το καλάθι πρέπει να μετρήσουμε πόσα μήλα πήραν τα παιδιά φτιάχνοντας μια ή δυο ομάδες. Μια ομάδα αν έχουν μοιραστεί δίκαια τα μήλα, δηλαδή κάθε παιδί πήρε ίδιο αριθμό μήλων, ή αν μερικά παιδά δεν πήραν καθόλου μήλα. Δυο ομάδες αν έχουν μοιραστεί σε μερικά παιδιά που πήραν λιγότερα μήλα από άλλα. Θα εμφανίζουμε στην αρχή ένα λεκτικό "Υπολογισμός" στο κέντρο της γραμμής της κονσόλας της Μ2000. Πρέπει να δείξουμε ένα πίνακα που θα λέει για κάθε ομάδα πόσα παιδιά πήραν πόσα μήλα και συνολικά πόσα μήλα πήραν. Ως επικεφαλίδες ο πίνακας θα έχει κενό “”, “Παιδιά”, “Μήλα”, “Σύνολο”. Σε κάθε γραμμή του πίνακα θα εμφανίζουμε τα “Ομάδα1:” και “Ομάδα2:” (αν έχουμε παιδιά στην Ομάδα 2 αν όχι δεν θα εμφανίζουμε τη γραμμή αυτή). Θα βρούμε και θα δείξουμε το σύνολο των μήλων στο καλάθι, από τα υπολογιζόμενα και θα δείξουμε αν επαληθεύεται το νούμερο με το αρχικό νούμερο του καλαθιού με το λεκτικό “Επαλήθευση:Σωστή”. Τέλος αν έχουμε δίκαιη μοιρασιά θα το δείξουμε και αυτό με εμφάνιση του λεκτικού “Δίκαιη Μοιρασιά”. |
Για να λύσουμε την άσκηση πρέπει να φτιάξουμε ένα πίνακα Μήλα() στον οποίο θα γράφουμε τα μήλα για κάθε παιδί. Αυτός ο πίνακας θα έχει δείκτες από 1 έως 10.
Για το καλάθι θα χρησιμοποιήσουμε την Τυχαίος(7, 50) που δίνει έναν ακέραιο αριθμό από 7 έως 50.
Για τον πρώτο παιδί που θα πάρει το καλάθι θα χρησιμοποιήσουμε το Τυχαίος(1, 10) που δίνει έναν ακέραιο από 1 έως 10.
Για να προχωράμε το καλάθι στο επόμενο παιδί θα αυξάνουμε μια μεταβλητή Παιδί που χρησιμοποιούμε ως δείκτη στον πίνακα Μήλα() και αν η αύξηση γίνει μεγαλύτερη του 10 τότε θα βάζουμε την τιμή 1 για να γίνεται ο κύκλος όπως λέει η άσκηση.
Χρησιμοποιούμε μεταβλητές τύπου Διπλός (δηλαδή πραγματικός αν το δούμε στη ΓΛΩΣΣΑ του σχολείου).
Χρησιμοποιούμε για την εμφάνιση στη κονσόλα της Μ2000 την $(Κέντρο) που αλλάζει την εμφάνιση στην στήλη με οριζόντια στοίχιση στο κέντρο της στήλης. Η Τύπωσε Πάνω αφενός καθαρίζει όλη την γραμμή, και αφετέρου την χρησιμοποιεί ως μια στήλη. Έτσι η $(Κέντρο) βάζει το λεκτικό "Υπολογισμός". Επειδή η Τύπωσε Πάνω όπως και η Τύπωσε Μέρος δεν αλλάζουν γραμμή, θα βάζουμε μια Τύπωσε για αλλαγή γραμμής.
Πρώτα μας ενδιαφέρει να μοιράσουμε σωστά τα μήλα! Αυτό γίνεται με μια ακολουθία επανάληψης ενώ η μεταβλητή Καλάθι έχει μήλα δηλαδή είναι μεγαλύτερο από το μηδέν. Κάθε φορά που δίνουμε ένα μήλο, αφαιρούμε ένα από το Καλάθι. Κάθε φορά που δίνουμε ένα μήλο για ένα Παιδί, αυξάνουμε το Μήλα(Παιδί) κατά ένα με το Μήλα(Παιδί)++. Αμέσως μετά αυξάνουμε την τιμή του δείκτη Παιδί κατά ένα και αν περάσει το 10 τότε βάζουμε τιμή 1.
Μετά με μια επανάληψη για κάθε παιδί, βρίσκουμε το μικρότερο και το μεγαλύτερο στο πίνακα Μήλα().
Υπάρχουν τρεις περιπτώσεις.
- Το μικρότερο και το μεγαλύτερο να διαφέρουν, και το μικρότερο δεν έχει μηδενική τιμή: Έχουμε δυο ομάδες
- Το μικρότερο να είναι μηδέν: Έχουμε μια ομάδα βάσει του μεγαλύτερου (της μη μηδενικής τιμής)
- Το μικρότερο να είναι ίσο με το μεγαλύτερο: Έχουμε μια ομάδα που όλα τα παιδιά έχουν μοιραστεί δίκαια τα μήλα, δηλαδή έχουν το καθένα τα ίδια μήλα με κάθε άλλο.
Στην περίπτωση 2, θα χρησιμοποιήσουμε την πρώτη ομάδα, έτσι θα αντιγράψουμε το μεγαλύτερο στο μικρότερο. Επειδή το Ομάδα2 θα έχει τιμή 0, στο λογαριασμό που κάνουμε το δεύτερο μέρος θα είναι μηδέν: Ομάδα1*Μικρότερο+Ομάδα2*Μεγαλύτερο
Επειδή στη περίπτωση 2 βάζουμε τη τιμή του Μεγαλύτερο στο Μικρότερο, έχουμε βάλει την συνθήκη Μικρότερο=Μεγαλύτερο στην ΔίκαιηΜοιρασιά, ώστε να κρατήσουμε τη πραγματική τιμή της συνθήκης για να την χρησιμοποιήσουμε στο τέλος, για την εμφάνιση ή μη του λεκτικού "Δίκαιη Μοιρασιά"
Η περίπτωση 2 συμβαίνει όταν έχουμε Καλάθι με λιγότερα μήλα από 10.
Για την περίπτωση 3 το να δώσουμε πάλι το Μικρότερο=Μεγαλύτερο δεν μας χαλάει (αφού είναι ήδη ίσα). Η περίπτωση 3 συμβαίνει όταν έχουμε Καλάθι πολλαπλάσιο του 10 (από το 10).
Η περίπτωση 1 είναι η πιο συχνή περίπτωση όπου η ομάδα 1 έχει παιδιά με ένα μήλο λιγότερο από αυτά της ομάδας 2.
Υπάρχει τρόπος να υπολογιστούν τα μήλα χωρίς να γίνει η μοιρασιά όπως εδώ. Αλλά αυτό δεν μας ενδιαφέρει. Θέλουμε η μοιρασιά να γίνει όπως περιγράφει η άσκηση.
Κρατάμε την ΚαλάθιΑρχικό για να κάνουμε την επαλήθευση.
|
|
Τμήμα
ΜοίρασεΜήλα
{ |
Γιώργος Καρράς
Υ.Γ.
Η άσκηση αυτή μπορεί να αντιγραφεί σε οποιαδήποτε γλώσσα από οποιονδήποτε, ελεύθερα!
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.