Οι γεωμετρικές πρόοδοι στην οργάνωση αθλητικών αγώνων:Ανάπτυξη εφαρμογής στη γλώσσα προγραμματισμού C. Σχολείο:Π.Σ.Π.Θ. Μαθητές: Τσαπκίνης Χρήστος Ευάγγελος Αλβανός Χρήστος Παπάρας Δημήτρης Εκπαιδευτικοί: Γεωργία Αλεξούδα Νίκος Γουναρόπουλος
Αφορμή - Ενθάρρυνση - Ενδιαφέρον Αφορμή για αυτή την εργασία ήταν ένας γρίφος (puzzle) που ο καθηγητής Μαθηματικών μας ο κ. Γουναρόπουλος μας παρέδωσε και αφορούσε έναν αγώνα squash. Η έμφυτη περιέργειά μας και το ενδιαφέρον του θέματος σε συνδυασμό με την ενθάρυνση των καθηγητών μας (κ. Γουναρόπουλος και κα. Αλεξούδα) , βοήθησαν στο να κατανοήσουμε τις βασικές αρχές των Μαθηματικών που υπάρχουν στο πρόβλημα και στη συνέχεια να αποφασίσουμε να υλοποιήσουμε την εφαρμογή στον Η/Υ. Η εφαρμογή αυτή δημιουργήθηκε στην επαγγελματική γλώσσα προγραμματισμού C. Με τυχαίο, άρα αντικειμενικό τρόπο, ο Η/Υ οργανώνει αποτελεσματικά τους αγώνες και σε ελάχιστα δευτερόλεπτα εκτυπώνει πλήρες πρόγραμμα από την προκριματική φάση μέχρι και τον τελκό. Το μόνο που απαιτείται είναι ο αριθμός των συμμετοχών !
ΤΟ ΠΡΟΒΛΗΜΑ Ν άτομα (ή ομάδες) δηλώνουν συμμετοχή σε κάποιους αθλητικούς αγώνες. Ο κανονισμός λέει ότι πρέπει να γίνονται αγώνες νοκ-άουτ μέχρι να βγεί ο τελικός νικητής. Επίσης, οι αγώνες πρέπει να επιλέγονται εντελώς τυχαία. Είναι φανερό ότι, αν ο αριθμός των συμμετοχών Ν είναι δύναμη του 2, τότε η οργάνωση είναι πολύ απλή, αφού κάθε φορά θα μένουν οι μισοί. (Γ. Πρόοδος με λόγο 0,5) Αν όμως αυτό δεν συμβαίνει ; Πώς θα οργανωθούν σωστά οι αγώνες ;
ΕΙΣΑΓΩΓΗ ΣΤΗ ΜΑΘΗΜΑΤΙΚΗ ΛΥΣΗ Θα ασχοληθούμε με αριθμούς που ΔΕΝ ανήκουν στην γεωμετρική πρόοδο ( ακολουθία με δυνάμεις του 2 ), διότι αν ανήκει στην γεωμετρική πρόοδο δεν θα κάνουμε καμία τροποποίηση γιατί κάθε φορά θα μένουν το ½. Byes: ονομάζεται ο αριθμός των παιχτών, που δεν θα παίξουν προκριματικούς , δηλαδή θα περάσουν στον επόμενο γύρο χωρίς να παίξουν. Σκοπός μας είναι ότι μετά τους προκριματικούς ο αριθμός των παιχτών, που απέμειναν να είναι δύναμη του 2. Πως όμως θα βρούμε πόσοι θα πάνε bye; Πως θα οργανώσουμε το τουρνουά;
ΜΑΘΗΜΑΤΙΚΗ ΛΥΣΗ Για κάθε αριθμό (Ν) που ΔΕΝ είναι δύναμη του 2 ισχύει ότι: , όπου i φυσικός αριθμος. Ας ονομάσουμε Χ τα byes, τότε αυτοί που παίζουν προκριματικά είναικαι αυτοί που παιρνάνε στον επόμενο γύρο είναι. Συνεπώς το άθροισμα, το οποίο δηλώνει τους παίχτες του επόμενου γύρου,πρέπει να ισούται με την προηγούμενη δύναμη (). Άρα, και τέλος
Παράδειγμα με 27 συμμετοχές Συνοπτικός Πίνακας Input / Output Αριθμός παικτών (Ν) 27 Αριθμός παικτών που βγαίνουν εκτός (Byes) 5 Αριθμός προκριματικών αγώνων 11 Αριθμός παικτών στους προκριματικούς αγώνες 22 Συνολικοί γύροι
Παράδειγμα με 27 συμμετοχές 1ος Γύρος (Προκριματικός) Αγώνες Π1 Π2 Εκτός Αγώνας 1ος 16 3 13 Αγώνας 2ος 1 21 Αγώνας 3ος 11 27 14 Αγώνας 4ος 2 17 Αγώνας 5ος 20 4 18 Αγώνας 6ος 12 7 Αγώνας 7ος 19 15 24 Αγώνας 8ος 26 23 Αγώνας 9ος 9 6 25 Αγώνας 10ος 5 10 Αγώνας 11ος 22 8 2ος Γύρος Αγώνες Π1 Π2 Αγώνας 1ος Ν1-1 Ν1-3 Αγώνας 2ος Ν1-4 14 Αγώνας 3ος Ν1-5 25 Αγώνας 4ος Ν1-10 13 Αγώνας 5ος Ν1-8 Ν1-7 Αγώνας 6ος Ν1-9 24 Αγώνας 7ος Ν1-11 Ν1-6 Αγώνας 8ος 18 Ν1-2 3ος Γύρος Αγώνες Π1 Π2 Αγώνας 1ος Ν2-1 Ν2-5 Αγώνας 2ος Ν2-4 Ν2-7 Αγώνας 3ος Ν2-2 Ν2-6 Αγώνας 4ος Ν2-8 Ν2-3 4ος Γύρος (Ημιτελικός) Αγώνες Π1 Π2 Αγώνας 1ος Ν3-4 Ν3-1 Αγώνας 2ος Ν3-2 Ν3-3 ΤΕΛΙΚΟΣ ΑΓΩΝΑΣ Αγώνες Π1 Π2 Αγώνας 1ος Ν4-2 Ν4-1 Δημήτρη , να βάλεις σε όλους τους γύρους τους νικητές των προηγούμενων γύρων, όχι τους κωδικούς τους. Όπως σου τα έχω στείλει. Να κάνεις ακόμη 1-2 παραδείγματα π.χ. για Ν=40 (το έχεις) και ακόμη ένα. Στα κουτάκια θα φαίνεται π.χ. Ν1-3 Ν1-10 δηλ. νικητής 1ου γύρου αγώνα 3 με νικητή 1ου γύρου αγώνα 10. Νικητής Ν5-1
Παράδειγμα με 40 συμμετοχές Συνοπτικός Πίνακας Input / Output Αριθμός παικτών (Ν) 40 Αριθμός παικτών που βγαίνουν εκτός (Byes) 24 Αριθμός προκριματικών αγώνων 8 Αριθμός παικτών στους προκριματικούς αγώνες 16 Συνολικοί γύροι 6
Παράδειγμα με 40 συμμετοχές 1ος Γύρος (Προκριματικός) Αγώνες Π1 Π2 Εκτός Αγώνας 1ος 12 29 1 14 30 Αγώνας 2ος 31 11 3 15 33 Αγώνας 3ος 25 9 4 16 34 Αγώνας 4ος 26 13 6 18 35 Αγώνας 5ος 23 37 7 20 36 Αγώνας 6ος 28 5 8 22 38 Αγώνας 7ος 2 21 10 24 39 Αγώνας 8ος 19 32 27 40 2ος Γύρος Αγώνες Π1 Π2 Αγώνας 1ος Ν1-1 22 Αγώνας 2ος 34 Ν1-4 Αγώνας 3ος 39 18 Αγώνας 4ος Ν1-2 10 Αγώνας 5ος 8 Ν1-8 Αγώνας 6ος 14 3 Αγώνας 7ος Ν1-6 6 Αγώνας 8ος 4 35 Αγώνας 9ος 33 Ν1-3 Αγώνας 10ος 16 38 Αγώνας 12ος Ν1-7 36 Αγώνας 13ος 27 12 Αγώνας 14ος 15 Ν1-5 Αγώνας 15ος 7 24 Αγώνας 16ος 30 20 3ος Γύρος Αγώνες Π1 Π2 Αγώνας 1ος Ν2-5 Ν2-1 Αγώνας 2ος Ν2-14 Ν2-6 Αγώνας 3ος Ν2-7 Ν2-8 Αγώνας 4ος Ν2-2 Ν2-9 Αγώνας 5ος Ν2-15 Ν2-11 Αγώνας 6ος Ν2-10 Ν2-3 Αγώνας 7ος Ν2-12 Ν2-16 Αγώνας 8ος Ν2-4 Ν2-13 Δημήτρη , να βάλεις σε όλους τους γύρους τους νικητές των προηγούμενων γύρων, όχι τους κωδικούς τους. Όπως σου τα έχω στείλει. Να κάνεις ακόμη 1-2 παραδείγματα π.χ. για Ν=40 (το έχεις) και ακόμη ένα. Στα κουτάκια θα φαίνεται π.χ. Ν1-3 Ν1-10 δηλ. νικητής 1ου γύρου αγώνα 3 με νικητή 1ου γύρου αγώνα 10.
Παράδειγμα με 40 συμμετοχές 4ος Γύρος Αγώνες Π1 Π2 Αγώνας 1ος Ν3-1 Ν3-7 Αγώνας 2ος Ν3-4 Ν3-5 Αγώνας 3ος Ν3-3 Ν3-6 Αγώνας 4ος Ν3-8 Ν3-2 5ος Γύρος (Ημιτελικός) Αγώνες Π1 Π2 Αγώνας 1ος Ν4-4 Ν4-2 Αγώνας 2ος Ν4-1 Ν4-3 ΤΕΛΙΚΟΣ ΑΓΩΝΑΣ Αγώνες Π1 Π2 Αγώνας 1ος Ν5-2 Ν5-1 Νικητής Ν6-1 Δημήτρη , να βάλεις σε όλους τους γύρους τους νικητές των προηγούμενων γύρων, όχι τους κωδικούς τους. Όπως σου τα έχω στείλει. Να κάνεις ακόμη 1-2 παραδείγματα π.χ. για Ν=40 (το έχεις) και ακόμη ένα. Στα κουτάκια θα φαίνεται π.χ. Ν1-3 Ν1-10 δηλ. νικητής 1ου γύρου αγώνα 3 με νικητή 1ου γύρου αγώνα 10.
Προγραμματιστικό Μέρος Χρησιποποιήθηκαν 2 πίνακες που ενναλάσονταν μεταξύ των γύρων. Χρήσιμοποιήθηκαν επίσης οι εντολές rand και srand, για να εξασφαλίσουν τυχαιότητα, αλλά και πως οι ψευδοτυχαίοι δεν επαναλαμβάνονταν, καθώς η εντολή srand ορίζει πως οι τυχαίες τιμές που παράγονται, είναι διαφορετικές σε κάθε εκτέλεση. H επιλογή των παικτών του κάθε γύρου γίνεται τυχαία, και ο ίδιος παίκτης δεν επαναλαμβάνεται 2 φορές.
Ο Αλγόριθμος Βήματα : 1. Ελέγχω εάν ο αριθμός των συμμετεχόντων είναι δύναμη του 2. Είναι 2. Βάζω σε τυχαία ζευγάρια τους παίκτες. 3. Επιλέγω νικητές, τους προσθέτω στον επόμενο πίνακα. 4. Επαναλαμβάνω βήματα 2 & 3, μέχρι να υπάρχει 1 μόνο νικητής.
Ο Αλγόριθμος Βήματα : 1. Ελέγχω εάν ο αριθμός των συμμετεχόντων είναι δύναμη του 2. Δεν είναι 2. Βρίσκω τους περισσευόμενους. (byes) 3. Βάζω σε τυχαία ζευγάρια τους υπόλοιπους παίκτες. 4. Επιλέγω νικητές, τους προσθέτω στον επόμενο πίνακα. 5. Προσθέτω τους byes στον επόμενο πίνακα. 6. Βάζω σε τυχαία ζευγάρια τους παίκτες. 7. Επιλέγω νικήτες, τους προσθέτω στον επόμενο πίνακα. 8. Επαναλαμβάνω βήματα 6 & 7, μέχρι να υπάρχει 1 μόνο νικητής.
Τυχαία Αναδιάταξη των Παικτών Ο Αλγόριθμος Τυχαία Αναδιάταξη των Παικτών 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 15 8 4 12 10 14 9 11 1 6 3 7 13 5 Ν ≠ 2ν Byes = 1
Τμήμα Πηγαίου Κώδικα : Εύρεση των byes, τυχαία αναδιάταξη, επιλογή νικητών.
Στιγμιότυπο Εκτέλεσης: Τυχαία Αναδιάταξη.
Συμπεράσματα Τα Μαθηματικά , σε συνδυασμό με την Πληροφορική, μας έδωσαν ένα πολύ χρήσιμο εργαλείο για την διεξαγωγή πλήθους αθλητικών αγώνων, είτε ατομικών, είτε ομαδικών. Οι γεωμετρικές πρόοδοι με λόγο 0,5 μπορούν να αναπαραστήσουν μια οποιαδήποτε αθλητική διοργάνωση με σύστημα νοκ - άουτ, αρκεί να προβλέψουμε τι θα κάνουμε με όσους «περισσεύουν» Οι Η/Υ εξασφαλίζουν αντικειμενικότητα, ταχύτητα και αποτελεσματικότητα στην διεκπεραίωση των αγώνων.
Προοπτικές Προγράμματος Συμπερίληψη επιλογής δημιουργίας αρχείων προς αποθήκευση. Φιλικότερο περιβάλλον χρήστη. Αύξηση του ορίου του αριθμού των συμμετοχών. Εναλλαγή σε νέο περιβάλλον προγραμματισμού με γραφικά στοιχεία. Δυνατότητα επιλογής νικητή και άλλων θέσεων.
Ευχαριστούμε για την προσοχή σας!