Παρασκευή, 15 Δεκεμβρίου 2017

Πρωτάθλημα Σκάκι

Βαθμός Δυσκολίας:
5/5
Εκφώνηση Ασκησης: 

Στο πρωτάθλημα σκακιού της Β΄ εθνικής το 2012 συμμετείχαν 10 ομάδες. Το  πρωτάθλημα περιλαμβάνει 9 γύρους που όλες οι ομάδες αναμετριούνται μεταξύ τους. Η κάθε ομάδα έχει 10 παίκτες και σε κάθε αναμέτρηση δύο ομάδων ο κάθε παίκτης παίζει έναν αγώνα σκάκι με τον αντίστοιχο της άλλης ομάδας. Ο νικητής του αγώνα αυτού παίρνει ένα (1) πόντο για την ομάδα του, ο χαμένος κανένα (0) πόντο και αν έρθουν ισοπαλία παίρνουν και οι δύο από μισό (0.5) πόντο. Σε περίπτωση που κάποια ομάδα διαθέτει σε μία αναμέτρηση λιγότερους από δέκα (10) παίκτες τότε η ομάδα χάνει τον αγώνα από τον οποίο απουσίαζε ο συγκεκριμένος παίκτης της και σαν ποινή χάνει κι άλλο μισό (0.5) πόντο στην αναμέτρηση αυτή. Η νικήτρια ομάδα παίρνει δύο (2) βαθμούς, η χαμένη κανένα (0) και αν λήξει ισοπαλία παίρνουν και οι δύο από ένα (1) βαθμό. (Νικήτρια του πρωταθλήματος ανακηρύσσεται η ομάδα που θα μαζέψει τους πιο πολλούς βαθμούς).

Να γραφεί αλγόριθμος ο οποίος:

1)    Διαβάζει έναν πίνακα ΟΝ[10] με τα ονόματα των ομάδων και έναν πίνακα ΠΟΝΤΟΙ[10,10] στον οποίο και στις γραμμές και στις στήλες θα έχει τις δέκα ομάδες και στα κελιά θα έχει τους πόντους που συγκέντρωσε η κάθε ομάδα στην κάθε αναμέτρηση. Για παράδειγμα στο κελί ΠΟΝΤΟΙ[1,5] θα έχει τους πόντους που συγκέντρωσε η ομάδα ένα (1) όταν έπαιξε με την ομάδα πέντε (5). Επίσης να γίνεται έλεγχος εγκυρότητας τιμών εισόδου:

  • Oι πόντοι μιας ομάδας πρέπει να είναι μεγαλύτεροι ή ίσοι του
    μηδενός (0) και μικρότεροι ή ίσοι του δέκα (10).
  • Σε κάθε αναμέτρηση το άθροισμα των πόντων των δύο (2) ομάδων να είναι το πολύ δέκα (10) και τουλάχιστον οκτώ (8).

Στην κύρια διαγώνιο να εκχωρεί την τιμή μείον ένα (-1).

2)    Καταχωρεί σε άλλους πίνακες τους συνολικούς πόντους και τους βαθμούς της κάθε ομάδας μετά το τέλος του πρωταθλήματος.

3)    Εμφανίζει το όνομα της ομάδας που θα ανέβει κατηγορία. Η τελική κατάταξη προκύπτει με βάση τους βαθμούς της κάθε ομάδας. Σε περίπτωση ισοβαθμίας δεύτερο κριτήριο είναι οι πόντοι, των δύο ομάδων που ισοβαθμούν, στο μεταξύ τους παιχνίδι και τρίτο κριτήριο είναι οι συνολικοί πόντοι των ομάδων. (Θεωρήστε ότι όλες οι ομάδες έχουν διαφορετικούς συνολικούς πόντους και ότι το πολύ δύο (2) ομάδες μπορούν να ισοβαθμήσουν σε μια θέση). Η ομάδα που τερμάτισε πρώτη ανεβαίνει κατηγορία και η τελευταία κατεβαίνει κατηγορία.

4)    Εμφανίζει τη θέση που κατέλαβε η ομάδα που πέρυσι ανέβηκε κατηγορία. (Θεωρήστε ότι αυτή είναι η ομάδα δέκα (10)).

5)    Εμφανίζει το πλήθος των αναμετρήσεων των ομάδων που έληξαν ισόπαλες.

Σημείωση: Θεωρήστε ότι κάθε ομάδα διαθέτει τουλάχιστον 8 παίκτες σε κάθε αναμέτρηση.

Επιμέλεια: Καλογριδάκης Γιώργος

Σωτηρόπουλος Ιωάννης

Τζαβάρας Στέφανος

 

H άσκηση συμμετέχει στον διαγωνισμό 1 Άσκηση = 1 Tablet.

 

Βαθμολογία Κριτών

Χρήστος Τσάλης Γιάννης Καψάλης Φανή Αναγνώστου Δημήτρης Τζανέκας Μίλτος Στάμος
7.8 9 9 10 10

 

Συνολική Βαθμολογία Κριτών                45.8

Συνολική Βαθμολογία από τα Likes        35

Συνολική Βαθμολογία                       80.8

 

 

Λύση Άσκησης: 

Αλγόριθμος Πρωτάθλημα_Σκάκι
Για i από 1 μέχρι 10
  Διάβασε ΟΝ[i]
Τέλος_επανάληψης
Για i από 1 μέχρι 10
  Για j από 1 μέχρι 10
    Αν i = j τότε
      ΠΟΝΤΟΙ[i, j] ← -1
    αλλιώς_αν j > i τότε
      Αρχή_επανάληψης
        Διάβασε ΠΟΝΤΟΙ[i, j]
      Μέχρις_ότου ΠΟΝΤΟΙ[i, j] ≥ 0 και ΠΟΝΤΟΙ[i, j] ≤ 10
    αλλιώς
      Αρχή_επανάληψης
        Διάβασε ΠΟΝΤΟΙ[i, j]
      Μέχρις_ότου (ΠΟΝΤΟΙ[i, j] + ΠΟΝΤΟΙ[j, i]) ≥ 8 και (ΠΟΝΤΟΙ[i, j] + ΠΟΝΤΟΙ[j, i]) ≤ 10
    Τέλος_αν
  Τέλος_επανάληψης
Τέλος_επανάληψης
Για i από 1 μέχρι 10
  Σ_Π[i] ← 0
  Για j από 1 μέχρι 10
    Αν i ≠ j τότε
      Σ_Π[i] ← Σ_Π[i] + ΠΟΝΤΟΙ[i, j]
    Τέλος_αν
  Τέλος_επανάληψης
Τέλος_επανάληψης
Για i από 1 μέχρι 10
  Σ_Β[i] ← 0
  Για j από 1 μέχρι 10
    Αν i ≠ j τότε
      Αν ΠΟΝΤΟΙ[i, j] > ΠΟΝΤΟΙ[j, i] τότε
        Σ_Β[i] ← Σ_Β[i] + 2
      αλλιώς_αν ΠΟΝΤΟΙ[i, j] = ΠΟΝΤΟΙ[j, i] τότε
        Σ_Β[i] ← Σ_Β[i] + 1
      Τέλος_αν
    Τέλος_αν
  Τέλος_επανάληψης
Τέλος_επανάληψης
max ← Σ_Β[1]
pos1 ← 1
Για i από 2 μέχρι 10
  Αν max < Σ_Β[i] τότε
    max ← Σ_Β[i]
    pos1 ← i
  Τέλος_αν
Τέλος_επανάληψης
flag ← 0
Για i από 1 μέχρι 10
  Αν i ≠ pos1 τότε
    Αν max = Σ_Β[i] τότε
      pos2 ← i
      flag ← 1
    Τέλος_αν
  Τέλος_αν
Τέλος_επανάληψης
Αν flag = 1 τότε
  Αν ΠΟΝΤΟΙ[pos1, pos2] > ΠΟΝΤΟΙ[pos2, pos1] τότε
    Εμφάνισε ΟΝ[pos1]
  αλλιώς_αν ΠΟΝΤΟΙ[pos1, pos2] < ΠΟΝΤΟΙ[pos2, pos1] τότε
    Εμφάνισε ΟΝ[pos2]
  αλλιώς
    Αν Σ_Π[pos1] > Σ_Π[pos2] τότε
      Εμφάνισε ΟΝ[pos1]
    αλλιώς
      Εμφάνισε ΟΝ[pos2]
    Τέλος_αν
  Τέλος_αν
αλλιώς
  Εμφάνισε ΟΝ[pos1]
Τέλος_αν
θεση ← 1
Για i από 1 μέχρι 9
  Αν Σ_Β[i] > Σ_Β[10] τότε
    θεση ← θεση + 1
  αλλιώς_αν Σ_Β[i] = Σ_Β[10] τότε
    Αν ΠΟΝΤΟΙ[i, 10] > ΠΟΝΤΟΙ[10, i] τότε
      θεση ← θεση + 1
    αλλιώς_αν ΠΟΝΤΟΙ[i, 10] = ΠΟΝΤΟΙ[10, i] τότε
      Αν Σ_Π[i] > Σ_Π[10] τότε
        θεση ← θεση + 1
      Τέλος_αν
    Τέλος_αν
  Τέλος_αν
Τέλος_επανάληψης
Εμφάνισε θεση
πλ ← 0
Για i από 1 μέχρι 10
  Για j από 1 μέχρι 10
    Αν i ≠ j τότε
      Αν ΠΟΝΤΟΙ[i, j] = ΠΟΝΤΟΙ[j, i] τότε
        πλ ← πλ + 1
      Τέλος_αν
    Τέλος_αν
  Τέλος_επανάληψης
Τέλος_επανάληψης
πλ_ισ ← πλ/2
Εμφάνισε πλ_ισ
Τέλος Πρωτάθλημα_Σκάκι