ΜΙΑ ΑΣΚΗΣΗ ΜΕ ΕΙΣΗΤΗΡΙΑ ΘΕΑΤΡΟΥ

Ξεκίνησε από landreou, 12 Απρ 2013, 11:14:36 ΠΜ

« προηγούμενο - επόμενο »

landreou

Γεια σας.

Εχω μια άσκηση που δεν ξέρω τι να κανω πραγματικα.
Ετσι οπως ειναι τα ερωτηματα δε με οδηγουν να έχω μια σειρα στον αλγοριθμο

ΕΚΦΩΝΗΣΗ
**** Σε ένα θέατρο υπάρχουν 15 σειρές καθισμάτων (Η 1η σειρά είναι η κοντινότερη στη σκηνή ενώ η 15η
σειρά η πιο μακρινή) και κάθε σειρά περιλαμβάνει 30 καθίσματα.  Να γραφεί αλγόριθμος που να κάνει τα εξής:

α) Να διαβάζει τον πίνακα ΚΡΑΤΗΣΕΙΣ (15Χ30) στον οποίο η τιμή 0 ή 1 σημαίνει ότι η αντίστοιχη θέση του
   θεάτρου είναι διαθέσιμη  ή μη διαθέσιμη, αντίστοιχα.

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

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

δ) Στη συνέχεια, εφόσον υπάρχουν σειρές με διαθέσιμο τον απαιτούμενο αριθμό συνεχόμενων θέσεων, ο αλγόριθμος
   θα πρέπει να διαβάζει τη σειρά που επιθυμεί ο θεατής, η οποία θα πρέπει να ελέγχεται ώστε να ανήκει σε
   αυτές που εμφανίστηκαν στο ερώτημα γ)  και να ενημερώνει τον πίνακα ΚΡΑΤΗΣΕΙΣ καταχωρώντας 1 στις νέες
   θέσεις που κρατήθηκαν. Θεωρείστε ότι η κράτηση του ζητούμενου αριθμού των θέσεων σε μια σειρά γίνεται
   πάντα από το μικρότερο νουμερο καθίσματος (1)  προς το μεγαλύτερο (30). Αν δεν υπάρχουν σειρές με τον
   απαιτούμενο αριθμό θέσεων, ο αλγόριθμος εμφανίζει το μήνυμα "ΛΥΠΟΥΜΑΣΤΕ - ΔΕ ΜΠΟΡΟΥΜΕ ΝΑ ΣΑΣ ΕΞΥΠΗΡΕΤΗΣΟΥΜΕ"
   και συνεχίζει διαβάζοντας τον αριθμό θέσεων που επιθυμεί ο επόμενος θεατής.

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

Αν και όποιος μπορει
[1] να πει τι καταλαβαινει οτι ζητάει το καθενα ερώτημα
[2] να δωσει υποδείξεις
[3] λύσεις 

Σας ευχαριστώ όλους

petrosp13

Ουσιαστικά όλο το θέμα θα βγει σε μια επανάληψη γιατί όλο αφορά την είσοδο δεδομένων
Έχεις έναν πίνακα που χαρτογραφεί το θέατρο με τιμές 0 και 1 για τις θέσεις ανάλογα με το αν είναι ελεύθερες ή όχι. Προφανώς, αρχικά ο πίνακας θα πρέπει να μηδενιστεί. Οι θεατές μπορούν να αγοράσουν από 1 μέχρι 10 συνεχόμενες θέσεις σε κάποια σειρά. Ο αλγόριθμος θα συνεχίζει όσο υπάρχουν ελεύθερες θέσεις για να καλυφθούν, θα διαβάζει τον αριθμό των θέσεων που θέλει ο θεατής, θα σκανάρει τις γραμμές για να βρει τις γραμμές που έχουν κενές συνεχόμενες θέσεις τουλάχιστον ίσες με τον αριθμό που θέλει ο θεατής, θα εμφανίζει τους αριθμούς των γραμμών αυτών, ο θεατής θα επιλέγει τον αριθμό γραμμής που θέλει και οι θέσεις θα γεμίζουν με 1, ξεκινώντας πάντα από την αριστερότερη

Ωραία άσκηση, αλλά δύσκολη για πάρα πολλούς μαθητές
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

landreou

Μήπως  μπορεις να μου πείς ποια είναι η βασικη - εξωτερικη επανάληψη και ποιες εσωτερικές της ;
Πχ
Η εξωτερικη είναι ο αριθμος του θεατή μέχρι να γίνει μεγαλύτερος απο 15*30
μεσα σε αυτην θα ειναι ο βροχος που θα διαβάζει τα εισητήρια , μετά τις σειρές κλπ

Σε ευχαριστω για τη άποψη που παρέθεσες

Επίσης εκ προοιμίου σας ευχαριστώ όλους τους φίλους του ΣτΠ.

petrosp13

Νομίζω ότι μπορεί να λυθεί με διάφορες προσεγγίσεις, αλλά αυτό που λες είναι σωστό
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

nikolasmer

Προσωπικά διαφωνώ με την άποψη του κυρίου Παπαδόπουλου στο παρακάτω σημείο

Παράθεση από: petrosp13 στις 12 Απρ 2013, 11:36:38 ΠΜ
Έχεις έναν πίνακα που χαρτογραφεί το θέατρο με τιμές 0 και 1 για τις θέσεις ανάλογα με το αν είναι ελεύθερες ή όχι. Προφανώς, αρχικά ο πίνακας θα πρέπει να μηδενιστεί.

Θεωρώ πως ο πίνακας ΚΡΑΤΗΣΕΙΣ θα πρέπει να διαβαστεί (με έλεγχο ορθής καταχώρισης για τις τιμές 0 και 1 ή όχι) και θα αποτελεί ενα στιγμιότυπο της παρουσίας διαθέσιμων ή οχι θέσεων του θεάτρου και όχι μια "άδεια" αίθουσα.
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

Ένα ενδεικτικό πρόγραμμα για την παραπάνω άσκηση μπορεί να είναι το παρακάτω.
Μερεντίτης Νικόλαος
Πληροφορικός

landreou

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

Τώρα , ρουτίνα  για τις συνεχόμενες θέσεις  πώς μπορεί να είναι .
Τη φτιάχνουμε με φωλευμενα άν; με όσο; Καμια ιδέα κανενας
Εγω λέω

σειρά  <- 1
Οσο σειρά <= 15 επανάλαβε
              κάθισμα <- 1
              φορές <- 1
              Οσο κάθισμα <= 30 επανάλαβε
                      Αν ΚΡΑΤΗΣΕΙΣ[σειρά,κάθισμα]= 0 τοτε
                           Αν ΚΡΑΤΗΣΕΙΣ[σειρά,κάθισμα]= ΚΡΑΤΗΣΕΙΣ[σειρά,κάθισμα] τότε
                                               φορές <- φορές +1
                           Τέλος_αν
                      Τέλος_αν
              Αν φορες >= εισιτήρια και φορές <= κάθισμα τότε
                       Εμφάνισε σειρά
              Τέλος_αν
              κάθισμα<-καθισμα+1
              Τέλος_επανάληψης
σειρά <- σειρα + 1
Τελος_επανάληψης

Κάτι τετοιο στο περιπου.

Κάθε αποψη - ευπροσδεκτη
Ευχαριστώ όλους

                       






gthal

Λουκά, προτείνω η εξωτερική να είναι ΓΙΑ - θα σαρώσεις όλες τις σειρές έτσι κι αλλιώς
για σειρά από 1 μέχρι 15

τώρα εκεί μέσα, ξεκινώντας από την πρώτη θέση:
1. βρες την επόμενη άδεια θέση της σειράς (με μια ΟΣΟ) - προσέχεις πάντα να μην περάσεις το τέλος της σειράς
2. από αυτή τη θέση και πέρα, μέτρα πόσες άδειες ακολουθούν (με μια ΟΣΟ, αφού θα έχει τελειώσει η προηγούμενη) - προσέχεις πάντα να μην περάσεις το τέλος της σειράς
3. αν φτάνουν, τελείωσες με αυτή τη σειρά, την εμφανίζεις (ίσως πρέπει να αποθηκεύσεις κάποιες πληροφορίες για αργότερα) και πας στην επόμενη
    αν όχι, επαναλαμβάνεις από το βήμα 1, μέχρι να φτάσεις στο τέλος της σειράς (άρα, επανάληψη που περιλαμβάνει τις ΟΣΟ του 1 και του 2)

Για να δούμε ...   :)
Φιλικά,
Γιώργος Θαλασσινός

mokasa

Έγραψα μια λύση χωρίς υποπρογράμματα, νομίζω οτι κάνει τη δουλειά που πρέπει.

Λογικά θα πρέπει να τρέχει και με copy-paste στη ΓΛΩΣΣΑ.

Ελπίζω τα σχόλια να βοηθάνε στην κατανόηση, κάθε παρατήρηση ή λάθος που θα βρείτε είναι αποδεκτό

gthal

@Lorien
Νομίζω ότι για κάθε σειρά ελέγχεις απλώς αν υπάρχουν αρκετές διαθέσιμες θέσεις και όχι αν υπάρχουν αρκετές συνεχόμενες διαθέσιμες θέσεις.
Φιλικά,
Γιώργος Θαλασσινός

mokasa

Συγνώμη που άργησα να απαντήσω.
Νομίζω οτι το καλύπτω σωστά αυτό που λες, καθώς η μεταβλητή 'άδειες' αυξάνει μόνο όταν οι θέσεις είναι συνεχόμενες και στο 'αλλιώς' μηδενίζεται και πάλι, πέρα από την αρχικοποίηση έξω από την εντολή ΟΣΟ.

gthal

Έχεις δίκιο. Απροσεξία μου. Νομίζω ότι είναι σωστή η λύση σου.
Φιλικά,
Γιώργος Θαλασσινός

ΑλεξανδροςΑναστΓ

Έχω απάντηση αλγόριθμο στην άσκηση που παρέθεσες φίλε!Σίγουρα δεν είναι ο βέλτιστος αλλά είμαι υποψήφιος και δεν έχω ούτε την ικανότητα ούτε και τον χρόνο να βρώ τον βέλτιστο...λοιπόν αυτό έφτιαξα και δουλεύει το έτρεξα αρκετές φορές!

ΑλεξανδροςΑναστΓ

Εχω θεωρήσει ότι οι κρατήσεις ξεκινάνε απο το 0!Σε περίπτωση που ζητείται να μην...τοτε διαβασε τον δυσδιαστατο κανεις μετρηση των 1 και δινεις αρχικη τιμη στο Μ το 15*30 - το πληθος των ασσων
κατα τα αλλα ιδιο

igeorgi

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