Στοίβα – Ουρά

Άσκηση 1
Μία αεροπορική εταιρία εκτελεί το δρομολόγιο Θεσσαλονίκη – Χανιά κατά τους θερινούς μήνες του έτους. Λόγω της αυξανόμενης ζήτησης, η εταιρία διατηρεί σε λίστα αναμονής τους επιβάτες που δεν πρόλαβαν να κλείσουν εισιτήριο ώστε αν προκύψει κάποια ακύρωση τότε να ενημερώσει τον πρώτο στη σειρά πελάτη που εισήχθη στην λίστα αναμονής να κλείσει εισιτήριο. Η λίστα αναμονής δεν μπορεί να περιλαμβάνει περισσότερα από 10 ονόματα.
Να κάνετε πρόγραμμα το οποίο:
1. Θα δέχεται μία εκ των τριών τιμών εισαγωγής: «ΕΓΓΡΑΦΗ», «ΑΚΥΡΩΣΗ» ή «ΤΕΛΟΣ» κάνοντας έλεγχος εγκυρότητας.
2. Αν ο χρήστης δώσει την τιμή «ΕΓΓΡΑΦΗ» τότε θα ζητείται το όνομα του χρήστη και θα καταχωρείται στην λίστα αναμονής μόνο εφόσον η λίστα αναμονής είναι μικρότερη ή ίση των 10 ατόμων. Διαφορετικά να εμφανίζει το μήνυμα: «Η λίστα αναμονής είναι πλήρης».
3. Αν ο χρήστης δώσει την τιμή «ΑΚΥΡΩΣΗ», τότε κάποιος από τους επιβάτες της πτήσης έχει ακυρώσει την κράτησή του, συνεπώς το πρόγραμμα θα πρέπει να εμφανίσει το όνομα του ατόμου που είναι πρώτο διαθέσιμο στην λίστα αναμονής. Αν δεν υπάρχουν άτομα στην λίστα αναμονής, να εμφανίζεται το μήνυμα «Η λίστα αναμονής είναι άδεια».
4. Η παραπάνω διαδικασία να επαναλαμβάνεται μέχρι ο χρήστης να δώσει την τιμή «ΤΕΛΟΣ».
5. Το πρόγραμμα να εμφανίζει το πλήθος των ατόμων που κατάφεραν να κάνουν κράτηση μέσα από την λίστα αναμονής, καθώς και το μέγιστο πλήθος των ατόμων που περίμεναν στην ουρά αναμονής.

Άσκηση 2
Σε μία τράπεζα οι πελάτες εξυπηρετούνται με βάση της σειρά άφιξής τους στο κατάστημα. Η τράπεζα έχει ένα ταμείο και ο μέσος χρόνος εξυπηρέτησης κάθε πελάτη είναι 2 λεπτά. Η ουρά αναμονής στην τράπεζα δεν μπορεί να ξεπερνά τα 40 άτομα.
Να γίνει πρόγραμμα το οποίο:
1. Θα δέχεται μία εκ των δύο τιμών εισαγωγής: «ΕΙΣΟΔΟΣ» ή «ΕΠΟΜΕΝΟΣ» κάνοντας έλεγχος εγκυρότητας.
2. Αν δοθεί η τιμή «ΕΙΣΟΔΟΣ» τότε να διαβάζει το ονοματεπώνυμο του πελάτη και αμέσως μετά να εμφανίζει το πλήθος των ατόμων που περιμένουν πριν από αυτόν, εκτός αν η ουρά αναμονής είναι γεμάτη οπότε θα εμφανιστεί το μήνυμα «ΤΟ ΚΑΤΑΣΤΗΜΑ ΕΪΝΑΙ ΓΕΜΑΤΟ. ΕΛΑΤΕ ΑΛΛΗ ΜΕΡΑ».
3. Αν δοθεί η τιμή «ΕΠΟΜΕΝΟΣ» τότε να εμφανίζεται το ονοματεπώνυμο του πελάτη προς εξυπηρέτηση.
4. Η παραπάνω διαδικασία να επαναλαμβάνεται μέχρι να μην υπάρχει κανένας πελάτης προς εξυπηρέτηση.
5. Στο τέλος να εμφανίζεται
a. το πλήθος των ατόμων που εξυπηρετήθηκαν και
b. τον μέσο χρόνο αναμονής των πελατών.

Άσκηση 3
Ένα οχηματαγωγό πλοίο εκτελεί το δρομολόγιο ΠΕΙΡΑΙΑΣ – ΨΑΡΡΑ – ΧΙΟΣ – ΜΥΤΙΛΗΝΗ. Τα οχήματα που επιβιβάζονται πρώτα είναι αυτά για Μυτιλήνη, έπειτα για Χίο και στο τέλος για ΨΑΡΑ. Προφανώς κατά την αποβίβαση ακολουθείται η αντίστροφη διαδικασία. Στο λιμάνι του Πειραιά προσέρχονται τα αυτοκίνητα για αναχώρηση. Να γίνει πρόγραμμα το οποίο:
Α) θα διαβάζει τον αριθμό κυκλοφορίας και τον προορισμό καθενός από τα 500 αυτοκίνητα που προσέρχονται.
– Εφόσον το αυτοκίνητο έχει προορισμό την Μυτιλήνη ο αριθμός του κυκλοφορίας να καταχωρείται στη στοίβα με όνομα ΟΧΗΜΑΤΑ.
– Εφόσον έχει προορισμό την Χίο ή τα Ψαρρά, ο αριθμός κυκλοφορίας να καταχωρείται στις ουρές ΟΥΡΑ_ΧΙΟΥ ΚΑΙ ΟΥΡΑ_ΨΑΡΡΩΝ αντίστοιχα.
Β) Όταν διαβαστούν τα στοιχεία όλων των οχημάτων, να καταχωρείται στην στοίβα ΟΧΗΜΑΤΑ ένα-ένα τα οχήματα της ουράς ΟΥΡΑ_ΧΙΟΥ και ΟΥΡΑ_ΨΑΡΡΩΝ.
Γ) Στο τέλος να εξάγει και να εμφανίζει από την στοίβα ΟΧΗΜΑΤΑ σε τρεις διαφορετικές λίστες τα οχήματα με προορισμό τα Ψαρρά, τη Χίο και τη Μυτιλήνη.

Άσκηση 4
Για την διαχείριση προτεραιότητας των πελατών στα καταστήματά της μία τράπεζα θέλει να υλοποιήσει ένα πρόγραμμα το οποίο θα διαβάζει τα ονόματα των πελατών της (σε μία ουρά 30 θέσεων) όταν αυτοί εισέρχονται στο κατάστημα και θα τα εμφανίζει σε οθόνη όταν είναι η σειρά τους να εξυπηρετηθούν.
Να γίνει πρόγραμμα το οποίο:
1. Να διαβάζει από το πληκτρολόγιο το όνομα κάθε εισερχόμενου πελάτη.
2. Αν ως όνομα δοθεί η λέξη ΕΠΟΜΕΝΟΣ τότε εξάγει το επόμενο όνομα της ουράς και το εμφανίζει. Αν δεν υπάρχει τότε εμφανίζει το μήνυμα «ΚΑΝΕΙΣ ΔΕΝ ΠΕΡΙΜΕΝΕΙ».
3. Αν ως όνομα δοθεί η λέξη ΤΕΛΟΣ δεν θα επιτρέπει την εισαγωγή άλλων ονομάτων, παρά μόνο της τιμής ΕΠΟΜΕΝΟΣ.
4. Σε οποιαδήποτε άλλη περίπτωση καταχωρείται το όνομα του πελάτη στην ουρά εκτός αν η ουρά είναι γεμάτη οπότε εμφανίζεται το μήνυμα «ΠΕΡΑΣΤΕ ΑΡΓΟΤΕΡΑ».
5. Το πρόγραμμα σταματά όταν έχει δοθεί η λέξη ΤΕΛΟΣ και η ουρά άδειασε.

Άσκηση 5
Ένα συνεργείο αυτοκινήτων αναθέτει καθημερινά στους μηχανικούς του τις εργασίες που πρέπει να κάνουν για τους πελάτες του. Π.χ.
- Συντήρηση 30.000 χλμ για το αυτοκίνητο του κου Παπαδόπουλου
- Αλλαγή πίσω φρένων για το αυτοκίνητο του κου Χατζηγεωργίου
- Συντήρηση 60.000 χλμ για το αυτοκίνητο της κας Νικολάου
κοκ
Οι αρχικές εργασίες έχουν οριστεί κατόπιν τηλεφωνικού ραντεβού ωστόσο κατά τη διάρκεια της ημέρας μπορεί να προκύψουν επιπρόσθετες από πελάτες που προσήλθαν στο συνεργείο χωρίς ραντεβού. Το συνεργείο διαθέτει 4 μηχανικούς κάθε ένας από τους οποίους αναλαμβάνει μία τέτοια εργασία. Για ευκολία στους μηχανικούς ανατίθεται ένας κωδικός αριθμός για να τους ξεχωρίζουμε. Ο πρώτος παίρνει τον αριθμό 1, ο δεύτερος το 2, ο τρίτος το 3 και ο τέταρτος το 4. Να γίνει πρόγραμμα το οποίο:
1. Να διαβάζει από το πληκτρολόγιο την περιγραφής της κάθε μίας από τις αρχικές εργασίες που κλείστηκαν μέσω ραντεβού. Οι εργασίες να τοποθετούνται στην ουρά ΕΡΓ 40 θέσεων. Η εισαγωγή να τερματίζεται όταν εισαχθεί εργασία με περιγραφή “ΤΕΛΟΣ ΕΡΓΑΣΙΩΝ ΜΕ ΡΑΝΤΕΒΟΥ”. Υποθέστε ότι οι εργασίες θα είναι λιγότερες από 40.
2. Στη συνέχεια να διαβάζει μία εντολή από το πληκτρολόγιο. Η εντολή μπορεί να είναι μία από τις ακόλουθες: “ΝΕΑ ΕΡΓΑΣΙΑ”, “ΑΝΑΘΕΣΗ”, “ΤΕΛΟΣ ΗΜΕΡΑΣ” και θα πρέπει να γίνεται έλεγχος εγκυρότητας κατά την είσοδο.
α. Αν δοθεί η εντολή “ΝΕΑ ΕΡΓΑΣΙΑ”, τότε θα καταχωρείται στην ουρά ΕΡΓ εφόσον επιτρέπεται ζητώντας την περιγραφή της εργασίας, διαφορετικά θα απορρίπτεται με κατάλληλο μήνυμα.
β. Αν δοθεί η εντολή “ΑΝΑΘΕΣΗ”, τότε θα εξάγεται η επόμενη προς ανάθεση εργασία και θα ζητείται ο κωδικός αριθμός του μηχανικού που θα την διεκπεραιώσει. Αν δεν υπάρχει διαθέσιμη εργασία να τυπώνεται κατάλληλο μήνυμα.
γ. Τα παραπάνω επαναλαμβάνονται μέχρι να δοθεί η εντολή “ΤΕΛΟΣ ΗΜΕΡΑΣ” οπότε το πρόγραμμα σταματά να δέχεται νέες εντολές.
3. Στο τέλος να εμφανίζει:
α. Πόσες εργασίες ήρθαν χωρίς ραντεβού.
β. Πόσες εργασίες απορρίφθηκαν.
γ. Πόσες εργασίες ανατέθηκαν μέσα στην ημέρα.
δ. Σε ποιο κωδικό αριθμό μηχανικού ανατέθηκαν οι περισσότερες εργασίες ε. Πόσες εργασίες δεν διεκπεραιώθηκαν στο τέλος της ημέρας.
Σημείωση: Υποθέσετε ότι θα καταχωρηθεί τουλάχιστον μία εργασία στην ουρά ΕΡΓ. Επίσης υποθέστε πως εφόσον γίνει ανάθεση μιας εργασίας, αυτή θα ολοκληρωθεί, δεν θα μείνει δηλαδή για την επόμενη.