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

Μπάμπης Trucks

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

Ο Μπάμπης ο φορτηγατζής, λόγω μεγάλης αύξησης της δουλειάς, θέλησε να δημιουργήσει ένα πρόγραμμα με το οποίο θα βαθμολογούνται όλοι του οι οδηγοί για όλα τους τα ταξίδια. Το πρόγραμμα θα πρέπει να:

α) διαβάζει σε μονοδιάστατο πίνακα 50 θέσεων τα ονόματα των οδηγών της εταιρείας του και σε έναν πίνακα 10 θέσεων τις χώρες παράδοσης φορτίων. Επιπλέον, σε ένα δισδιάστατο πίνακα 50x10 θα πρέπει να αποθηκεύει τη βαθμολογία που πήρε κάθε οδηγός ανά διαδρομή.

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

γ) διαβάζει το όνομα μιας χώρας και να ταξινομεί τις βαθμολογίες που της αντιστοιχούν κατά φθίνουσα σειρά, χωρίς να χάνεται η αντιστοίχηση με τις βαθμολογίες των άλλων χωρών και των οδηγών.

δ) βρίσει και να εμφανίζει τη μικρότερη βαθμολογία που παρουσιάστηκε, ποιος οδηγός την πήρε και σε ποια χώρα την πήρε και να τον τιμωρεί σύμφωνα με τον παρακάτω πίνακα:

Βαθμολογία

Ποινή

βαθμ <= 1

500 ευρώ

βαθμ <= 5

100 ευρώ

βαθμ <= 7

50 ευρώ

 

 Η άσκηση συμμετέχει στο διαγωνισμό "Σας πάμε σινεμά"

Επιμέλεια: Φίλιππος φον Κάουφμαν και Γιώργος Παναγιωτακόπουλος

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

 

ΠΡΟΓΡΑΜΜΑ Μπάμπης_Trucks
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ποινή, ι, j, ΘΓ, ΘΣ, λ, θ, κ
  ΧΑΡΑΚΤΗΡΕΣ: Ονομα[50], Χωρα[10], όνομα, χώρα, tmp2
  ΠΡΑΓΜΑΤΙΚΕΣ: Βαθμ[50, 10], μαχ, tmp, ΜΙΝ
  ΛΟΓΙΚΕΣ: flag
 
 
ΑΡΧΗ
 
!Α Ερώτημα
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 50
    ΓΡΑΨΕ "Δώσε το όνομα του ", ι, " οδηγού."
    ΔΙΑΒΑΣΕ Ονομα[ι] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
    ΓΡΑΨΕ "Δώσε το όνομα της ", ι, " χώρας."
    ΔΙΑΒΑΣΕ Χωρα[ι] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 50
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 10
      ΓΡΑΨΕ "Δώσε βαθμολογία του ", Ονομα[ι], " στη χώρα ", Χωρα[ι] 
      ΔΙΑΒΑΣΕ Βαθμ[ι, j] 
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
!Β Ερώτημα
  ΓΡΑΨΕ "Δώσε ζητούμενο όνομα"
  ΔΙΑΒΑΣΕ όνομα
  flag <- ΨΕΥΔΗΣ
  ι <- 1
  ΟΣΟ ι <= 50 ΚΑΙ flag = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
    ΑΝ Ονομα[ι] = όνομα ΤΟΤΕ
      flag <- ΑΛΗΘΗΣ
      θ <- ι
    ΑΛΛΙΩΣ
      ι <- ι + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΝ flag = ΨΕΥΔΗΣ ΤΟΤΕ
    ΓΡΑΨΕ "Δεν βρέθηκε το ζητούμενο όνομα"
  ΑΛΛΙΩΣ
    μαχ <- Βαθμ[θ, 1] 
    λ <- 1
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 10
      ΑΝ Βαθμ[θ, j] > μαχ ΤΟΤΕ
        μαχ <- Βαθμ[θ, j] 
        λ <- j
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΑΝ
  ΓΡΑΨΕ "Ο ", όνομα, " πήρε ", μαχ, " στην ", Χωρα[λ] 
 
!Γ Ερώτημα
  ΓΡΑΨΕ "Δώσε όνομα χώρας"
  ΔΙΑΒΑΣΕ χώρα
  flag <- ΑΛΗΘΗΣ
  ι <- 1
  ΟΣΟ ι <= 10 ΚΑΙ flag = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
    ΑΝ Χωρα[ι] = χώρα ΤΟΤΕ
      flag <- ΨΕΥΔΗΣ
      θ <- ι
    ΑΛΛΙΩΣ
      ι <- ι + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΝ flag = ΑΛΗΘΗΣ ΤΟΤΕ
    ΓΡΑΨΕ "Δεν βρέθηκε η χώρα"
  ΑΛΛΙΩΣ
    ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ 50
      ΓΙΑ j ΑΠΟ 50 ΜΕΧΡΙ ι ΜΕ_ΒΗΜΑ -1
        ΑΝ Βαθμ[j, θ] > Βαθμ[j - 1, θ] ΤΟΤΕ
          ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 10
            tmp <- Βαθμ[j, κ] 
            Βαθμ[j, κ] <- Βαθμ[j - 1, κ] 
            Βαθμ[j - 1, κ] <- tmp
          ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
          tmp2 <- Ονομα[ j] 
          Ονομα[ j] <- Ονομα[ j - 1] 
          Ονομα[ j - 1] <- tmp2
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΑΝ
 
!Δ Ερώτημα
  ΜΙΝ <- Βαθμ[1, 1] 
  ΘΓ <- 1
  ΘΣ <- 1
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 50
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 10
      ΑΝ Βαθμ[ι, j] < ΜΙΝ ΤΟΤΕ
        ΜΙΝ <- Βαθμ[ι, j] 
        ΘΓ <- ι
        ΘΣ <- j
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Ο ", Ονομα[ΘΓ], " στην ", Χωρα[ΘΣ], " πήρε βαθμολογία ", ΜΙΝ
 
  ΑΝ ΜΙΝ <= 1 ΤΟΤΕ
    ποινή <- 500
  ΑΛΛΙΩΣ_ΑΝ ΜΙΝ <= 5 ΤΟΤΕ
    ποινή <- 100
  ΑΛΛΙΩΣ_ΑΝ ΜΙΝ <= 7 ΤΟΤΕ
    ποινή <- 50
  ΤΕΛΟΣ_ΑΝ
  ΓΡΑΨΕ Ονομα[ΘΓ], " Ο Μπάμπης θα σε τιμωρήσει με ", ποινή, " ευρώ ποινή!"
 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ