Γεια σας.
Εχω μια άσκηση που δεν ξέρω τι να κανω πραγματικα.
Ετσι οπως ειναι τα ερωτηματα δε με οδηγουν να έχω μια σειρα στον αλγοριθμο
ΕΚΦΩΝΗΣΗ
**** Σε ένα θέατρο υπάρχουν 15 σειρές καθισμάτων (Η 1η σειρά είναι η κοντινότερη στη σκηνή ενώ η 15η
σειρά η πιο μακρινή) και κάθε σειρά περιλαμβάνει 30 καθίσματα. Να γραφεί αλγόριθμος που να κάνει τα εξής:
α) Να διαβάζει τον πίνακα ΚΡΑΤΗΣΕΙΣ (15Χ30) στον οποίο η τιμή 0 ή 1 σημαίνει ότι η αντίστοιχη θέση του
θεάτρου είναι διαθέσιμη ή μη διαθέσιμη, αντίστοιχα.
β) Όσο υπάρχουν διαθέσιμες θέσεις, να διαβάζει τον αριθμό των εισιτηρίων που επιθυμεί να αγοράσει ο θεατής,
ο οποίος θα πρέπει να ελέγχεται ώστε να είναι από 1 μέχρι 10.
γ) Στη συνέχεια, να εμφανίζει όλους τους αριθμούς σειρών στις οποίες υπάρχει διαθέσιμος αριθμός συνεχόμενων
καθισμάτων τουλάχιστον ίσος με αυτόν που ζήτησε ο θεατής. Οι σειρές θα πρέπει να εμφανίζονται με αύξουσα
σειρά ως προς την απόστασή τους από τη σκηνή.
δ) Στη συνέχεια, εφόσον υπάρχουν σειρές με διαθέσιμο τον απαιτούμενο αριθμό συνεχόμενων θέσεων, ο αλγόριθμος
θα πρέπει να διαβάζει τη σειρά που επιθυμεί ο θεατής, η οποία θα πρέπει να ελέγχεται ώστε να ανήκει σε
αυτές που εμφανίστηκαν στο ερώτημα γ) και να ενημερώνει τον πίνακα ΚΡΑΤΗΣΕΙΣ καταχωρώντας 1 στις νέες
θέσεις που κρατήθηκαν. Θεωρείστε ότι η κράτηση του ζητούμενου αριθμού των θέσεων σε μια σειρά γίνεται
πάντα από το μικρότερο νουμερο καθίσματος (1) προς το μεγαλύτερο (30). Αν δεν υπάρχουν σειρές με τον
απαιτούμενο αριθμό θέσεων, ο αλγόριθμος εμφανίζει το μήνυμα "ΛΥΠΟΥΜΑΣΤΕ - ΔΕ ΜΠΟΡΟΥΜΕ ΝΑ ΣΑΣ ΕΞΥΠΗΡΕΤΗΣΟΥΜΕ"
και συνεχίζει διαβάζοντας τον αριθμό θέσεων που επιθυμεί ο επόμενος θεατής.
ε) Ο αλγόριθμος τερματίζει όταν το θέατρο γεμίσει, οπότε και θα πρέπει να εμφανίζεται ο μέσος όρος εισιτηρίων
που ζητήθηκαν τόσο από αυτούς που εξυπηρετήθηκαν όσο και από αυτούς που τελικά δε βρήκαν τον αριθμό θέσων
που ήθελαν.
Αν και όποιος μπορει
[1] να πει τι καταλαβαινει οτι ζητάει το καθενα ερώτημα
[2] να δωσει υποδείξεις
[3] λύσεις
Σας ευχαριστώ όλους
Ουσιαστικά όλο το θέμα θα βγει σε μια επανάληψη γιατί όλο αφορά την είσοδο δεδομένων
Έχεις έναν πίνακα που χαρτογραφεί το θέατρο με τιμές 0 και 1 για τις θέσεις ανάλογα με το αν είναι ελεύθερες ή όχι. Προφανώς, αρχικά ο πίνακας θα πρέπει να μηδενιστεί. Οι θεατές μπορούν να αγοράσουν από 1 μέχρι 10 συνεχόμενες θέσεις σε κάποια σειρά. Ο αλγόριθμος θα συνεχίζει όσο υπάρχουν ελεύθερες θέσεις για να καλυφθούν, θα διαβάζει τον αριθμό των θέσεων που θέλει ο θεατής, θα σκανάρει τις γραμμές για να βρει τις γραμμές που έχουν κενές συνεχόμενες θέσεις τουλάχιστον ίσες με τον αριθμό που θέλει ο θεατής, θα εμφανίζει τους αριθμούς των γραμμών αυτών, ο θεατής θα επιλέγει τον αριθμό γραμμής που θέλει και οι θέσεις θα γεμίζουν με 1, ξεκινώντας πάντα από την αριστερότερη
Ωραία άσκηση, αλλά δύσκολη για πάρα πολλούς μαθητές
Μήπως μπορεις να μου πείς ποια είναι η βασικη - εξωτερικη επανάληψη και ποιες εσωτερικές της ;
Πχ
Η εξωτερικη είναι ο αριθμος του θεατή μέχρι να γίνει μεγαλύτερος απο 15*30
μεσα σε αυτην θα ειναι ο βροχος που θα διαβάζει τα εισητήρια , μετά τις σειρές κλπ
Σε ευχαριστω για τη άποψη που παρέθεσες
Επίσης εκ προοιμίου σας ευχαριστώ όλους τους φίλους του ΣτΠ.
Νομίζω ότι μπορεί να λυθεί με διάφορες προσεγγίσεις, αλλά αυτό που λες είναι σωστό
Προσωπικά διαφωνώ με την άποψη του κυρίου Παπαδόπουλου στο παρακάτω σημείο
Παράθεση από: petrosp13 στις 12 Απρ 2013, 11:36:38 ΠΜ
Έχεις έναν πίνακα που χαρτογραφεί το θέατρο με τιμές 0 και 1 για τις θέσεις ανάλογα με το αν είναι ελεύθερες ή όχι. Προφανώς, αρχικά ο πίνακας θα πρέπει να μηδενιστεί.
Θεωρώ πως ο πίνακας ΚΡΑΤΗΣΕΙΣ θα πρέπει να διαβαστεί (με έλεγχο ορθής καταχώρισης για τις τιμές 0 και 1 ή όχι) και θα αποτελεί ενα στιγμιότυπο της παρουσίας διαθέσιμων ή οχι θέσεων του θεάτρου και όχι μια "άδεια" αίθουσα.
Ένα ενδεικτικό πρόγραμμα για την παραπάνω άσκηση μπορεί να είναι το παρακάτω.
Παιζει και το ενδεχόμενο όμως να πηγαινει ένας για εισητήρια και μην εξυπηρετείται άρα δεν θα μπει στη αίθουσα, άρα δεν θα προσμετρηθεί .
Τώρα , ρουτίνα για τις συνεχόμενες θέσεις πώς μπορεί να είναι .
Τη φτιάχνουμε με φωλευμενα άν; με όσο; Καμια ιδέα κανενας
Εγω λέω
σειρά <- 1
Οσο σειρά <= 15 επανάλαβε
κάθισμα <- 1
φορές <- 1
Οσο κάθισμα <= 30 επανάλαβε
Αν ΚΡΑΤΗΣΕΙΣ[σειρά,κάθισμα]= 0 τοτε
Αν ΚΡΑΤΗΣΕΙΣ[σειρά,κάθισμα]= ΚΡΑΤΗΣΕΙΣ[σειρά,κάθισμα] τότε
φορές <- φορές +1
Τέλος_αν
Τέλος_αν
Αν φορες >= εισιτήρια και φορές <= κάθισμα τότε
Εμφάνισε σειρά
Τέλος_αν
κάθισμα<-καθισμα+1
Τέλος_επανάληψης
σειρά <- σειρα + 1
Τελος_επανάληψης
Κάτι τετοιο στο περιπου.
Κάθε αποψη - ευπροσδεκτη
Ευχαριστώ όλους
Λουκά, προτείνω η εξωτερική να είναι ΓΙΑ - θα σαρώσεις όλες τις σειρές έτσι κι αλλιώς
για σειρά από 1 μέχρι 15
τώρα εκεί μέσα, ξεκινώντας από την πρώτη θέση:
1. βρες την επόμενη άδεια θέση της σειράς (με μια ΟΣΟ) - προσέχεις πάντα να μην περάσεις το τέλος της σειράς
2. από αυτή τη θέση και πέρα, μέτρα πόσες άδειες ακολουθούν (με μια ΟΣΟ, αφού θα έχει τελειώσει η προηγούμενη) - προσέχεις πάντα να μην περάσεις το τέλος της σειράς
3. αν φτάνουν, τελείωσες με αυτή τη σειρά, την εμφανίζεις (ίσως πρέπει να αποθηκεύσεις κάποιες πληροφορίες για αργότερα) και πας στην επόμενη
αν όχι, επαναλαμβάνεις από το βήμα 1, μέχρι να φτάσεις στο τέλος της σειράς (άρα, επανάληψη που περιλαμβάνει τις ΟΣΟ του 1 και του 2)
Για να δούμε ... :)
Έγραψα μια λύση χωρίς υποπρογράμματα, νομίζω οτι κάνει τη δουλειά που πρέπει.
Λογικά θα πρέπει να τρέχει και με copy-paste στη ΓΛΩΣΣΑ.
Ελπίζω τα σχόλια να βοηθάνε στην κατανόηση, κάθε παρατήρηση ή λάθος που θα βρείτε είναι αποδεκτό
@Lorien
Νομίζω ότι για κάθε σειρά ελέγχεις απλώς αν υπάρχουν αρκετές διαθέσιμες θέσεις και όχι αν υπάρχουν αρκετές συνεχόμενες διαθέσιμες θέσεις.
Συγνώμη που άργησα να απαντήσω.
Νομίζω οτι το καλύπτω σωστά αυτό που λες, καθώς η μεταβλητή 'άδειες' αυξάνει μόνο όταν οι θέσεις είναι συνεχόμενες και στο 'αλλιώς' μηδενίζεται και πάλι, πέρα από την αρχικοποίηση έξω από την εντολή ΟΣΟ.
Έχεις δίκιο. Απροσεξία μου. Νομίζω ότι είναι σωστή η λύση σου.
Έχω απάντηση αλγόριθμο στην άσκηση που παρέθεσες φίλε!Σίγουρα δεν είναι ο βέλτιστος αλλά είμαι υποψήφιος και δεν έχω ούτε την ικανότητα ούτε και τον χρόνο να βρώ τον βέλτιστο...λοιπόν αυτό έφτιαξα και δουλεύει το έτρεξα αρκετές φορές!
Εχω θεωρήσει ότι οι κρατήσεις ξεκινάνε απο το 0!Σε περίπτωση που ζητείται να μην...τοτε διαβασε τον δυσδιαστατο κανεις μετρηση των 1 και δινεις αρχικη τιμη στο Μ το 15*30 - το πληθος των ασσων
κατα τα αλλα ιδιο
Με λίγο αλλαγμένη εκφώνηση παραθέτω την (ομολογουμένως λίγο υπερβολική) λύση. Η διαφορά στην δική μου αντιμετώπιση είναι ότι όταν βρίσκω σειρά με τόσα καθίσματα όσα χρειάζομαι, αποθηκεύω σε μονοδιάστατο τον αριθμό του καθίσματος από το οποίο ξεκινούν οι συνεχόμενες που με ενδιαφέρουν.