Ένας κινηματογράφος έχει 10 αίθουσες ίδιας χωρητικότητας, αριθμημένες από το 1 έως το 10. Η χωρητικότητα των αιθουσών δεν υπερβαίνει τα 1000 άτομα. Στον κινηματογράφο προβάλλονται 3 ταινίες με ώρες προβολής 12:30, 14:00, 18:30, 21:00, 23:00. Σε κάθε αίθουσα παίζεται μία μόνο από τις ταινίες.

Να κατασκευασθεί πρόγραμμα σε ΓΛΩΣΣΑ το οποίο:

Δ1. Να έχει τμήμα δηλώσεων μεταβλητών. (μονάδες 2)
Δ2. Να διαβάζει την χωρητικότητα των αιθουσών και τους τίτλους των 3 ταινιών και να τους αποθηκεύει σε μονοδιάστατο πίνακα Τ[3]. (μονάδες 2)
Δ3. Να διαβάζει και να αποθηκεύει σε μονοδιάστατο πίνακα Π[10] ποια ταινία παίζεται σε κάθε αίθουσα. Θα δίνεται ο αριθμός 1 για την 1η ταινία, ο αριθμός 2 για την δεύτερη ταινία και ο αριθμός 3 για την 3η ταινία. (μονάδες 2)

Στην συνέχεια το πρόγραμμα θα διαχειρίζεται τις κρατήσεις θέσεων στον κινηματογράφο κάνοντας τα εξής:

Δ4. Για κάθε αίτημα κράτησης:
• Θα εμφανίζει για κάθε ταινία τον αριθμό και τον τίτλο της καθώς και τους αριθμούς των αιθουσών με τις διαθέσιμες θέσεις ανά αίθουσα και ανά ώρα προβολής. Αν κάποια αίθουσα δεν έχει διαθέσιμες θέσεις σε κάποια ώρα προβολής να εμφανίζεται το μήνυμα “ΕΞΑΝΤΛΗΜΕΝΟ”. (μονάδες 6)
• Θα διαβάζει το ονοματεπώνυμο του ατόμου που κάνει την κράτηση, τον αριθμό της ταινίας, τον αριθμό της αίθουσας και την ώρα προβολής (12:30 έως 23:00) για την οποία θα γίνει η κράτηση. Η κάθε κράτηση αφορά την αγορά ενός και μόνο εισιτηρίου. (μονάδες 4)
• Να οριστικοποιεί την κράτηση εφόσον ο αριθμός της ταινίας είναι από 1 μέχρι 3, ο αριθμός της αίθουσας βρίσκεται στις αίθουσες στις οποίες παίζεται η ταινία και υπάρχουν διαθέσιμες θέσεις για την επιλεγμένη αίθουσα και ώρα προβολής, εμφανίζοντας το μήνυμα “Η ΚΡΑΤΗΣΗ ΕΓΙΝΕ ΔΕΚΤΗ”. Σε αντίθετη περίπτωση να εμφανίζει το μήνυμα “Η ΚΡΑΤΗΣΗ ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΓΙΝΕΙ ΔΕΚΤΗ”. (μονάδες 6)
Δ5. Η διαχείριση των κρατήσεων θα ολοκληρώνεται όταν δεν έχει μείνει καμία διαθέσιμη θέση σε όλες τις αίθουσες και ώρες προβολής ή όταν στο ονοματεπώνυμο του ατόμου που κάνει την κράτηση δοθεί το “ΤΕΛΟΣ_ΚΡΑΤΗΣΕΩΝ”. (μονάδες 5)

Μετά το τέλος της διαδικασίας των κρατήσεων το πρόγραμμα θα υπολογίζει και εμφανίζει:
Δ6. Σε ποια/ποιες ώρα/ώρες προβολής έγιναν οι περισσότερες κρατήσεις για κάθε αίθουσα. (μονάδες 8)
Δ7. Τον τίτλο της ταινίας που είχε τις περισσότερες κρατήσεις. Θεωρείστε ότι είναι μόνο μία. (μονάδες 5)

 

Μια μικρή βοήθεια:

ΠΙΝΑΚΕΣ:

Τ[3] τίτλος ταινίας (ΧΑΡΑΚΤΗΡΕΣ)
Π[10] προβολη ταινίας για κάθε αίθουσα (ΑΚΕΡΑΙΕΣ)
ΚΡΑΤ[10,5] κρατήσεις ανα αίθουσα και ανα ώρα (ΑΚΕΡΑΙΕΣ)
Ω[5] κειμενο ώρας «12:30» έως «23:00» (ΧΑΡΑΚΤΗΡΕΣ) – το χρησιμοποιούμε για λόγους εμφάνισης
ΠΛΚ[3] πλήθος συνολικών κρατήσεων για κάθε ταινία

ΑΝΑΛΥΣΗ Δ4:

Τον πίνακα των κρατήσεων ΚΡΑΤ[10,5] πρέπει να τον σκεφτούμε μόνοι μας ότι τον χρειαζόμαστε, δεν είναι υποχρεωτικό να μας καθοδηγεί η εκφώνηση αναλυτικά για την οργάνωση των δεδομένων και των ζητουμένων του προβλήματος.
Η διαδικασία κρατήσεων αφορά άγνωστο αριθμό επαναλήψεων («για κάθε κράτηση») αρα θα χρησιμοποιηθεί το σχήμα φρουρός-τιμή με επιπρόσθετη συνθήκη σταματήματος (να μην μπορεί να γίνει άλλη κράτηση δηλ όλες οι θέσεις για όλες τις ώρες να έχουν καλυφθεί).

Το γενικό σχήμα είναι:

Διαβασε ον
Οσο ον <> "ΤΕΛΟΣ" ΚΑΙ επιπρόσθετη_συνθήκη=ΨΕΥΔΗΣ επανάλαβε
    ....
    Διάβασε ον
Τέλος_επανάληψης

το οποίο θα το αλλάξουμε λίγο (με χρήση flag) γιατί η άσκηση απαιτεί την εμφάνιση των διαθέσημων θέσεων ΠΡΙΝ από το διάβασμα του ονόματος

ΑΝΑΛΥΣΗ Δ6:

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

ΑΝΑΛΥΣΗ Δ7:

Μέτριας δυσκολίας ερώτημα, μας διευκολύνει αρκετά αν σκεφτούμε να βρύμε σε ένα πίνακα ΠΛΚ[3] το πλήθος των συνολικών
κρατήσεων για κάθε μία από τις τρείς ταινίες. Αλλιώς, αν πάμε να το κάνουμε με πλ1, πλ2, πλ3 θα χρειαστεί να γράψουμε πολλά (χάσιμο χρόνου)

Δείτε εδώ την λύση (απαιτεί κωδικό)