Σε ένα ταχυδρομικό κατάστημα, οι πελάτες εξυπηρετούνται με βάση τη σειρά άφιξής τους σε αυτό. Το ταχυδρομικό κατάστημα έχει ένα ταμείο και ο μέσος χρόνος εξυπηρέτησης κάθε πελάτη είναι 3 λεπτά. Η ουρά αναμονής στο κατάστημα δεν μπορεί να ξεπερνά τα 30 άτομα.
Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ το οποίο:
1. Να δέχεται σαν είσοδο από τον χρήστη μία εκ των δύο τιμών εισαγωγής: «1.ΕΙΣΑΓΩΓΗ» ή «2.ΕΠΟΜΕΝΟΣ» (με έλεγχο εγκυρότητας).
2. Αν δοθεί η τιμή «1.ΕΙΣΑΓΩΓΗ», τότε το πρόγραμμα να διαβάζει το ονοματεπώνυμο του πελάτη και αμέσως μετά να εμφανίζει το πλήθος των ατόμων που περιμένουν πριν από αυτόν, εκτός αν η ουρά αναμονής είναι γεμάτη, οπότε να εμφανίζει το μήνυμα «Το κατάστημα γέμισε. Παρακαλούμε ελάτε άλλη φορά».
3. Αν δοθεί η τιμή «2.ΕΠΟΜΕΝΟΣ», τότε το πρόγραμμα να εμφανίζει το ονοματεπώνυμο του πελάτη προς εξυπηρέτηση.
4. Η παραπάνω διαδικασία να επαναλαμβάνεται μέχρι να εξυπηρετηθούν όλοι οι πελάτες.
5. Στο τέλος το πρόγραμμα να εμφανίζει το πλήθος των ατόμων που εξυπηρετήθηκαν, καθώς και τον μέσο χρόνο αναμονής των πελατών.
αρχ, τελος: δείκτες ουράς (αρχής και τέλους).
ώρες: Οι ώρες λειτουργίας του καταστήματος προς εξυπηρέτηση πελατών.
αθρολ: Αθροιστής που δείχνει το σύνολο των πελατών που εισέρχονται στο κατάστημα για να εξυπηρετηθούν.
αθρ: Αθροιστής που δείχνει το σύνολο των πελατών που βρίσκονται κάθε στιγμή στην ουρά και περιμένουν να εξυπηρετηθούν.
μεγ_πληθος: Το μέγιστο πλήθος των πελατών που δύναται να εξυπηρετήσει το κατάστημα κατά τις ώρες λειτουργίας του. Υπολογίζεται βάσει του χρόνου των 3 λεπτών, που είναι ο μέσος χρόνος εξυπηρέτησης του κάθε πελάτη.
επ: Μεταβλητή για τις επιλογές του ΜΕΝΟΥ. «(1) ΕΙΣΑΓΩΓΗ» πελάτη στην ουρά, «(2) ΕΠΟΜΕΝΟΣ» πελάτης στην ουρά προς εξυπηρέτηση ή αλλιώς εξαγωγή από την ουρά, «(3) ΕΞΟΔΟΣ» για τερματισμό του προγράμματος.
αθρεξυπ: Αθροιστής που δείχνει το σύνολο των πελατών που έχουν εξυπηρετηθεί. Το σύνολο των πελατών που πρόκειται να εξυπηρετηθεί από το ταχυδρομείο δεν μπορεί να είναι μεγαλύτερο από το μεγ_πληθος.
συν_χρονος_αναμ: Είναι ο συνολικός χρόνος αναμονής του συνόλου των πελατών που έχουν ήδη εξυπηρετηθεί από το ταχυδρομείο. Εξαρτάται από τον μέσο χρόνο εξυπηρέτησης του κάθε πελάτη και του πλήθους των ατόμων που βρίσκονται στην ουρά πριν από αυτόν.
επιθετο: Μεταβλητή για την εισαγωγή του επιθέτου κάθε πελάτη που εισέρχεται στην ουρά.
πινακας_επιθετων [30]: Ο πίνακας για την καταχώρηση των επιθέτων των πελατών που προσομοιάζει την ουρά 30 θέσεων.
Στις θέσεις των επιθέτων των πελατών που διαγράφονται από τον πίνακα (ουρά), καταχωρίζεται το «κενό», για να φαίνονται σαφώς τα επίθετα των πελατών, που βρίσκονται στην ουρά και δεν έχουν εξυπηρετηθεί.
Σημειώνεται ότι για να μην υπάρξουν κενές θέσεις στην αρχή της ουράς, υλοποιείται ολίσθηση (shift) των περιεχομένων της ουράς, ώστε οι κενές θέσεις προς εισαγωγή νέων πελατών να βρίσκονται στο πίσω μέρος της ουράς. Για την περίπτωση αυτή, ελέγχεται αν η τελευταία θέση της ουράς είναι γεμάτη και ταυτόχρονα υπάρχει διαθέσιμη (από προηγούμενη εξαγωγή στοιχείων) τουλάχιστον μία κενή θέση στην αρχή της ουράς. Τότε πραγματοποιείται ολίσθηση.
ΠΡΟΓΡΑΜΜΑ ΤΑΧΥΔΡΟΜΕΙΟ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αρχ, τελος, αθρ, επ, αθρεξυπ, αθρολ
ΑΚΕΡΑΙΕΣ: συν_χρονος_αναμ, i, ώρες, μεγ_πληθος
ΧΑΡΑΚΤΗΡΕΣ: επιθετο, πινακας_επιθετων[30]
ΑΡΧΗ
αρχ <- 0 ! Δείκτης της αρχής της ουράς
τελος <- 0 ! Δείκτης του τέλους της ουράς
αθρ <- 0 ! Δείχνει το σύνολο των πελατών που βρίσκονται κάθε στιγμή στην ουρά και περιμένουν να εξυπηρετηθούν.
αθρεξυπ <- 0 ! Δείχνει το σύνολο των πελατών που έχουν εξυπηρετηθεί.
συν_χρονος_αναμ <- 0 ! Είναι ο συνολικός χρόνος αναμονής του συνόλου των πελατών που έχουν ήδη εξυπηρετηθεί από το ταχυδρομείο. Εξαρτάται από τον μέσο χρόνο εξυπηρέτησης του κάθε πελάτη και του πλήθους των ατόμων που βρίσκονται στην ουρά πριν από αυτόν.
αθρολ <- 0 ! Δείχνει το σύνολο των πελατών που εισέρχονται στο κατάστημα για να εξυπηρετηθούν
μεγ_πληθος <- 0 ! Το μέγιστο πλήθος των πελατών που δύναται να εξυπηρετήσει το κατάστημα κατά τις ώρες λειτουργίας του.
ΓΡΑΨΕ ' Δώστε τον αριθμό των ωρών λειτουργίας του καταστήματος'
ΔΙΑΒΑΣΕ ώρες
μεγ_πληθος <- (ώρες* 60) div 3
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ '(1) ΕΙΣΑΓΩΓΗ'
ΓΡΑΨΕ '(2) ΕΠΟΜΕΝΟΣ'
ΓΡΑΨΕ '(3) ΕΞΟΔΟΣ'
ΓΡΑΨΕ 'Δώσε επιλογή: '
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ επ
ΑΝ επ < 1 Η επ > 3 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος επιλογή. Ξαναπροσπαθήστε...'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ >= 1 ΚΑΙ επ <= 3
ΑΝ επ = 1 ΤΟΤΕ
ΑΝ αθρολ = μεγ_πληθος ΤΟΤΕ
ΓΡΑΨΕ 'Το ταχυδρομείο δεν μπορεί να εξυπηρετήσει άλλους πελάτες'
ΓΡΑΨΕ 'Παρακαλούμε ελάτε άλλη φορά.'
ΑΛΛΙΩΣ_ΑΝ αθρ = 30 ΤΟΤΕ
ΓΡΑΨΕ ' Η ουρά αναμονής είναι πλήρης. '
ΓΡΑΨΕ ' Παρακαλούμε ελάτε αργότερα.'
ΑΛΛΙΩΣ
ΑΝ (αρχ > 1) ΚΑΙ (τελος = 30) ΤΟΤΕ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ αθρ
πινακας_επιθετων[i] <- πινακας_επιθετων[αρχ - 1 + i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ αθρ + 1 ΜΕΧΡΙ τελος
πινακας_επιθετων[i] <- ""
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
αρχ <- 1
τελος <- αθρ
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ ' Πληκτρολογήστε το επίθετό σας '
ΔΙΑΒΑΣΕ επιθετο
αθρ <- αθρ + 1
αθρολ <- αθρολ + 1
ΑΝ (αρχ = 0 ΚΑΙ τελος = 0) ΤΟΤΕ
αρχ <- 1
τελος <- 1
ΑΛΛΙΩΣ
τελος <- τελος + 1
ΤΕΛΟΣ_ΑΝ
συν_χρονος_αναμ <- συν_χρονος_αναμ + (αθρ - 1)* 3
πινακας_επιθετων[τελος] <- επιθετο
ΓΡΑΨΕ ' κ. ', πινακας_επιθετων[τελος], ' πρίν '
ΓΡΑΨΕ ' από εσάς περιμένουν να εξυπηρετηθούν '
ΓΡΑΨΕ αθρ - 1, ' πελάτες'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ_ΑΝ επ = 2 ΤΟΤΕ
ΑΝ (αρχ = 0 ΚΑΙ τελος = 0) Η (αρχ > τελος) ΤΟΤΕ
ΓΡΑΨΕ ' Η ουρά είναι άδεια. Δεν υπάρχει πελάτης να εξυπηρετηθεί'
ΑΛΛΙΩΣ_ΑΝ αρχ <= τελος ΤΟΤΕ
αθρ <- αθρ - 1
ΓΡΑΨΕ 'Καλείται ο/η κ. ', πινακας_επιθετων[αρχ]
πινακας_επιθετων[αρχ] <- " "
αρχ <- αρχ + 1
αθρεξυπ <- αθρεξυπ + 1
ΑΝ αρχ > τελος ΤΟΤΕ
αρχ <- 0
τελος <- 0
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ (επ = 3) Η(αθρεξυπ = μεγ_πληθος)
ΓΡΑΨΕ 'Οι πελάτες που εξυπηρετήθηκαν είναι ', αθρεξυπ
ΑΝ αθρεξυπ <> 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο μέσος χρόνος αναμονής είναι '
ΓΡΑΨΕ συν_χρονος_αναμ/αθρεξυπ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ο μέσος χρόνος αναμονής είναι 0 '
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΑΧΥΔΡΟΜΕΙΟ