Παρασκευή, 17 Αυγούστου 2018

Ώρα για PvP

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

Το online game "όχι άλλο κάψιμο" έχει τουρνουά pvp (player versus player), στο οποίο οι παίκτες οργανώνονται σε ομάδες των 2 ατόμων. Οι ομάδες διαγωνίζονται μεταξύ τους ώστε να βγει η νικήτρια ομάδα, η οποία θα κερδίσει ένα ταξίδι στα κεντρικά γραφεία της εταιρείας. Νικήτρια ομάδα θεωρείται αυτή που θα μαζέψει τους περισσότερους βαθμούς στο τέλος του τουρνουά. Επίσης η εταιρεία θα δώσει δώρο από έναν υπολογιστή στη δεύτερη και τρίτη καλύτερη ομάδα. 

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

α) διαβάζει το όνομα της ομάδας που νίκησε στο προηγούμενο τουρνουά και να το αποθηκεύει σε μια μεταβλητή.

β) διαβάζει σε έναν πίνακα τα ονόματα των 11 ομάδων που συμμετέχουν φέτος στο διαγωνισμό.

γ) αποθηκεύει σε έναν πίνακα 11x20 τα αποτελέσματα κάθε ομάδας σε κάθε αγώνα. Καταχωρείται Ν σε περίπτωση νίκης και Η σε περίπτωση ήττας. Να γίνει έλεγχος ώστε να καταχωρούνται μόνο αυτές οι τιμές. 

δ) υπολογίζει και εμφανίζει το πλήθος των νικών κάθε ομάδας.

ε) υπολογίζει και εμφανίζει το όνομα της νικήτριας ομάδας καθώς και τις άλλες δυο ομάδες που θα πάρουν δώρο υπολογιστή. Για τον υπολογισμό της βαθμολογίας θεωρήστε ότι κάθε ομάδα παίρνει 11 βαθμούς για τη νίκη και για κάθε ήττα -7.

ζ) καλεί υποπρόγραμμα το οποίο παίρνει σαν είσοδο το όνομα της ομάδας που νίκησε πέρσι καθώς και τον πίνακα των φετινών διαγωνιζομένων και επιστρέφει τη θέση της ομάδας φέτος, αν διαγωνίσθηκε και φέτος, ή αλλιώς την τιμή 0. Στη συνέχεια, στο κυρίως πρόγραμμα θα εμφανίζει τη θέση της περσινής νικήτριας ομάδας φέτος, αν διαγωνίσθηκε φέτος, αλλιώς να εμφανίζει "ΔΕΝ ΈΛΑΒΕ ΜΈΡΟΣ ΣΤΟ ΔΙΑΓΩΝΙΣΜΌ ΦΈΤΟΣ".

Επιμέλεια: mstamos.gr

Λύση Άσκησης: 
ΠΡΟΓΡΑΜΜΑ PvP
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: περ_νικ, ΟΝ[11], ΑΓ[11, 20], tmp1
  ΑΚΕΡΑΙΕΣ: ΣΒ[11], θέση_περ_φετ, tmp, j, ι, πλ
 
ΑΡΧΗ
 
!Ερώτημα α
  ΓΡΑΨΕ "Δώσε το όνομα της περσινής νικήτριας ομάδας."
  ΔΙΑΒΑΣΕ περ_νικ
 
!Ερώτημα β και γ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 11
    ΓΡΑΨΕ "Δώσε το όνομα της ", ι, "ης ομάδας."
    ΔΙΑΒΑΣΕ ΟΝ[ι] 
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 20
!Με την ΜΕΧΡΙΣ_ΟΤΟΥ εδώ κάνω έλεγχο τιμών ώστε να είναι Ν ή Η.
      ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
        ΓΡΑΨΕ "Δώσε το αποτέλεσμα του ", j, "ου αγώνα. Πληκτρολόγησε Ν για νίκη ή Η για ήττα."
        ΔΙΑΒΑΣΕ ΑΓ[ι, j] 
      ΜΕΧΡΙΣ_ΟΤΟΥ ΑΓ[ι, j] = "Η" Η ΑΓ[ι, j] = "Ν"
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
!Ερώτημα δ και ε
!θα υπολογίσουμε για κάθε ομάδα το σύνολο των βαθμών της.
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 11
    ΣΒ[ι] <- 0
    πλ <- 0
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 20
      ΑΝ ΑΓ[ι, j] = "Ν" ΤΟΤΕ
        ΣΒ[ι] <- ΣΒ[ι] + 11
        πλ <- πλ + 1
      ΑΛΛΙΩΣ
        ΣΒ[ι] <- ΣΒ[ι] - 7
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ "Η ομάδα ", ΟΝ[ι], " είχε ", πλ, " νίκες."
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
!Επειδή χρειαζόμαστε τις 3 καλύτερες ομάδες γι'αυτο θα χρησιμοποιήσουμε την ταξινόμηση ευθείας ανταλλαγής. Θα ταξινομήσω τα στοιχεία κατά φθίνουσα σειρά ώστε οι 3 καλύτερες ομάδες να είναι στις 3 πρώτες θέσεις.
 
  ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ 11
    ΓΙΑ j ΑΠΟ 11 ΜΕΧΡΙ ι ΜΕ_ΒΗΜΑ -1
      ΑΝ ΣΒ[j] > ΣΒ[j - 1] ΤΟΤΕ
        tmp <- ΣΒ[j] 
        ΣΒ[j] <- ΣΒ[j - 1] 
        ΣΒ[j] <- tmp
        tmp1 <- ΟΝ[j] 
        ΟΝ[j] <- ΟΝ[j - 1] 
        ΟΝ[j - 1] <- tmp1
      ΤΕΛΟΣ_ΑΝ
 
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
  ΓΡΑΨΕ "Η νικήτρια ομάδα που θα πάει το ταξίδι είναι η ", ΟΝ[1] 
  ΓΡΑΨΕ "Οι δύο ομάδες που θα πάρουν τους υπολογιστές είναι οι ", ΟΝ[2], ΟΝ[3] 
 
!Ερώτημα ζ
  θέση_περ_φετ <- ΕΥΡ_ΠΕΡ(περ_νικ, ΟΝ) 
  ΑΝ θέση_περ_φετ = 0 ΤΟΤΕ
    ΓΡΑΨΕ "ΔΕΝ ΈΛΑΒΕ ΜΈΡΟΣ ΣΤΟΝ ΔΙΑΓΩΝΙΣΜΌ ΦΈΤΟΣ"
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ "Ο περσινός νικητής φέτος τερμάτισε στην ", θέση_περ_φετ, " θέση."
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
!Η συνάρτηςη του ζ ερωτήματος
ΣΥΝΑΡΤΗΣΗ ΕΥΡ_ΠΕΡ(πν, ΟΝ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: θέση, ι
  ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[11], πν
 
ΑΡΧΗ
 
  θέση <- 0
  ι <- 1
  ΟΣΟ ι <= 11 ΚΑΙ θέση = 0 ΕΠΑΝΑΛΑΒΕ
    ΑΝ ΟΝ[ι] = πν ΤΟΤΕ
      θέση <- ι
    ΤΕΛΟΣ_ΑΝ
    ι <- ι + 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΕΥΡ_ΠΕΡ <- θέση
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ