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

Υπολογισμός Απουσιών!

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

 Η διευθύντρια του Λυκείου Κολινδρού ύστερα από επανειλημμένες ερωτήσεις μαθητών για τις απουσίες, ζήτησε από τους μαθητές της 3ης λυκείου να γράψουν ένα πρόγραμμα.

Το πρόγραμμα θα πρέπει να:

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

Β) διαβάζει ένα όνομα και αν δεν είναι καταχωρημένο να εμφανίζει το μήνυμα "ΔΕΝ ΥΠΑΡΧΕΙ Ο ΜΑΘΗΤΗΣ/ ΜΑΘΗΤΡΙΑ". Αν ο μαθητής βρεθεί, καλεί συνάρτηση η οποία θα επιστρέφει πόσες απουσίες απομένουν για το μαθητή μέχρι να μείνει στη τάξη. Το σύνολο των απουσιών που έχει ο μαθητής για μια χρόνια είναι 114 εκτός αν η βαθμολογία του είναι πάνω από 15 που παίρνει επιπρόσθετα 50 απουσίες. Κάθε μαθητής έχει μοναδικό όνομα.

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

Δ) καλεί υποπρόγραμμα το οποίο θα προειδοποιεί με κατάλληλο μήνυμα (εμφανίζει το όνομα τους και το μήνυμα "Εεεπ προσοχή! Μήπως να ερχόμαστε καμιά ωρίτσα και στο σχολείο?!")  τους μαθητές που κοντεύουν να μείνουν από απουσίες, δηλαδή αυτούς που έχουν ακόμη 10 απουσίες.

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

Λύση Άσκησης: 
 
ΠΡΟΓΡΑΜΜΑ Αφρούλα_Κουτσ
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[50], ον_αν
  ΑΚΕΡΑΙΕΣ: θέση, ι, ΑΠ[50], πλ_απ, πλ_μαθ_επ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΒΑΘ[50] 
 
ΑΡΧΗ
!Ερώτημα Α
!Καλούμε διαδικασία γιατί θέλουμε είσοδο δεδομένων από το χρήστη πράγμα.
  ΚΑΛΕΣΕ ΕΙΣ(ΟΝ, ΒΑΘ, ΑΠ) 
 
!Ερώτημα Β
  ΓΡΑΨΕ "Δώσε το όνομα του μαθητή που θέλεις να ψάξεις"
  ΔΙΑΒΑΣΕ ον_αν
 
!Θα χρησιμοποιήσουμε τη σειριακή αναζήτηση πρώτης εμφάνισης γιατί μας λέει ότι κάθε μαθητής έχει μοναδικό όνομα. Όπότε την πρώτη φορά που το βρούμε να τερματίσουμε και την επανάληψη.
 
  ι <- 1
  θέση <- 0
  ΟΣΟ ι <= 50 ΚΑΙ θέση = 0 ΕΠΑΝΑΛΑΒΕ
    ΑΝ ΟΝ[ι] = ον_αν ΤΟΤΕ
      θέση <- ι
    ΤΕΛΟΣ_ΑΝ
    ι <- ι + 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
  ΑΝ θέση = 0 ΤΟΤΕ
    ΓΡΑΨΕ "ΔΕΝ ΥΠΑΡΧΕΙ Ο ΜΑΘΗΤΗΣ/ ΜΑΘΗΤΡΙΑ"
  ΑΛΛΙΩΣ
    πλ_απ <- ΥΠ_ΑΠ(ΒΑΘ[θέση], ΑΠ[θέση]) 
    ΓΡΑΨΕ "Έχει ", πλ_απ, " ακόμη!"
  ΤΕΛΟΣ_ΑΝ
 
!Ερώτημα Γ
  πλ_μαθ_επ <- ΥΠ_Μαθ(ΒΑΘ) 
  ΓΡΑΨΕ πλ_μαθ_επ
 
!Ερώτημα Δ
  ΚΑΛΕΣΕ ΠΡΟΔ_ΜΑΘ(ΟΝ, ΒΑΘ, ΑΠ) 
 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
!Η διαδικασία του Α ερωτήματος
ΔΙΑΔΙΚΑΣΙΑ ΕΙΣ(ΟΝ, ΒΑΘ, ΑΠ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[50] 
  ΑΚΕΡΑΙΕΣ: ι, ΑΠ[50] 
  ΠΡΑΓΜΑΤΙΚΕΣ: ΒΑΘ[50] 
 
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 50
    ΓΡΑΨΕ "Δώσε το όνομα, τον βαθμό και τις απουσίες του/της ", ι, "ου/ης μαθητή/τριας"
    ΔΙΑΒΑΣΕ ΟΝ[ι], ΒΑΘ[ι], ΑΠ[ι] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
 
!Η συνάρτηση του Β ερωτήματος
ΣΥΝΑΡΤΗΣΗ ΥΠ_ΑΠ(βαθ, απ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: απ
  ΠΡΑΓΜΑΤΙΚΕΣ: βαθ
 
ΑΡΧΗ
  ΑΝ βαθ > 15 ΤΟΤΕ
    ΥΠ_ΑΠ <- 164 - απ
  ΑΛΛΙΩΣ
    ΥΠ_ΑΠ <- 114 - απ
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
 
!Η συνάρτηση του Γ ερωτήματος
ΣΥΝΑΡΤΗΣΗ ΥΠ_Μαθ(ΒΑΘ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ι, πλ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΒΑΘ[50] 
 
ΑΡΧΗ
  πλ <- 0
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 50
    ΑΝ ΒΑΘ[ι] > 15 ΤΟΤΕ
      πλ <- πλ + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΥΠ_Μαθ <- πλ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
 
!Η διαδικασία του Δ ερωτήματος
ΔΙΑΔΙΚΑΣΙΑ ΠΡΟΔ_ΜΑΘ(ΟΝ, ΒΑΘ, ΑΠ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[50] 
  ΑΚΕΡΑΙΕΣ: ι, ΑΠ[50] 
  ΠΡΑΓΜΑΤΙΚΕΣ: ΒΑΘ[50] 
 
ΑΡΧΗ
 
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 50
    ΑΝ ΒΑΘ[ι] > 15 ΤΟΤΕ
      ΑΝ Α_Τ(164 - ΑΠ[ι]) < 10 ΤΟΤΕ
        ΓΡΑΨΕ ΟΝ[ι], " Εεεπ Προσοχή! Μήπως να ερχόμαστε καμιά ωρίτσα και στο σχολείο?!"
      ΤΕΛΟΣ_ΑΝ
    ΑΛΛΙΩΣ
      ΑΝ Α_Τ(114 - ΑΠ[ι]) < 10 ΤΟΤΕ
        ΓΡΑΨΕ ΟΝ[ι], " Εεεπ Προσοχή! Μήπως να ερχόμαστε καμιά ωρίτσα και στο σχολείο?!"
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ