Άσκηση με στοίβες

Ξεκίνησε από akalest0s, 13 Ιουν 2020, 02:17:49 ΜΜ

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

Ποια η γνώμη σας για την άσκηση;

Τι κάπνιζες όταν την έγραφες; (Πολύπλοκη χωρίς λόγο)
2 (50%)
Πόσο έγραφες Έκφραση-Έκθεση είπαμε; (Δυσνόητη/ασαφής εκφώνηση)
0 (0%)
Έχεις ξαναδιδάξει Γ Λυκείου; (Ακατάλληλη για παιδιά Γ Λυκείου - ΑΕΠΠ)
0 (0%)
Ευτυχώς δεν βάζεις εσύ θέματα μεθαύριο! (Ακατάλληλη για Δ θέμα Πανελληνίων)
0 (0%)
Πέρνα ξανά Δευτέρα απ' το γραφείο μου.. (Θέλει δουλειά ακόμη)
0 (0%)
Τρώγεται..
2 (50%)

Σύνολο ψηφοφόρων: 4

akalest0s

Αντώνη, νομίζω έχουμε ξανασυμφωνήσει ότι η κατάσταση που σωστά περιγράφεις, είναι όντως απελπισία και χρήζει άμεσης αλλαγής.
Πάντως εδώ με μπέρδεψες: παραθέτεις την απόλυτη απάντηση του Ευρυπίδη πιο πάνω, και μετά λες
"Ο αποκλεισμός άλλος λειτουργιών είναι αυθαίρετος. Ακόμα και η προσπέλαση τυχαίου στοιχείου."

Εγώ πάντως στην εκφώνηση θα βάλω μια σχετική υποσημείωση, όπως ειπώθηκε, ότι η προσπέλαση μόνο του τοπ στοιχείου, επιτρέπεται για την λύση της άσκησης.
Ήταν ευτύχημα φυσικά, ότι ασκήσεις ΘέμαΓ/Δ, με κώδικα σε στοίβες/ουρές, δεν είδαμε στις εξετάσεις. Επειδή όμως τους είχα ικανούς, έπρεπε να προετοιμάσω κατάλληλα, κατά το δυνατόν, τους μαθητές. Για αυτό και η εν λόγω άσκηση.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

ApoAntonis

Δεν δείχνω προσπελάσεις στο όπου να'ναι. Προφανώς. Όμως δεν το βλέπω και πουθενά γραμμένο. Είναι υλοποίηση, είναι "φρέσκο" υλικό, θα έπρεπε να έχει προσεχθεί.

Το κύριες λειτουργίες δεν μπορεί να σημαίνει αποκλειστικές όπως έγραψες.

Παρένθεση: Το βιβλίο του Προγραμματισμού ΕΠΑΛ, αναφέρει κύριες λειτουργίες που πρέπει να υποστηρίζει η υλοποίηση μιας στοίβας.
Εντελώς διαφορετική διατύπωση, αφού διαχωρίζει την περίπτωση της υλοποίησης. Συνεχίζει με το τι επιτρέπεται στην διεπαφή. Δεν σε αφήνει να νομίζεις ότι θες. Ο Evry το έχει ξεκαθαρίσει και με άλλες τοποθετήσεις ότι "άλλο πράγμα ρε παιδάκι μου η υλοποίηση". (σε κάπως ελεύθερη απόδοση :) )
Δεν καταλαβαίνω όμως από που προκύπτει -και εννοώ μέσα από το βιβλίο- ότι στην περίπτωση της υλοποίησης με πίνακα στην ΓΛΩΣΣΑ, απαγορεύεται η οποιαδήποτε άλλη λειτουργία. Μέχρι και λυμένη άσκηση έχουμε που πάει και βάζει αυτάκια εκεί που κάνει εξαγωγή, παρακάτω από τις ουρές δηλαδή. Εκεί που δεν πειράζουμε τα στοιχεία του πίνακα, ε ας τα πειράξουμε για να μην μπερδευτούμε. Δεν υπάρχει λογική στο τι έχει γραφτεί.

Να επιμείνω στο δεν βλέπω που φταίει η ΓΛΩΣΣΑ σε αυτόν τον αχταρμά.

akalest0s

Κατάλαβα.
Για τη διαφορά adt / υλοποίηση, χρειάζεται μελέτη αλλά και να εμπλακείς και λίγο προσωπικά.. να δεις τι γίνεται στον "πραγματικό" προγραμματιστικό κόσμο, να γράψεις και λίγο "αληθινό" κώδικα... ειδικά αν κάποιος περιμένει να καταλάβει μέσα από το διδακτικό πακέτο και τη wikipedia, good luck with that.

Η Γλώσσα από μόνη της δεν φταίει, όντως. Είναι θέμα ξεκάθαρων ορισμών/σετ κανόνων. Και σε python να πάμε, αν δεν γίνει αυτό, τα ίδια προβλήματα θα έχουμε.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

gthal

@ApoAntonis ,
θίγεις αρκετά σωστά σημεία στο ποστ που έγραψες τη Δευτέρα το βράδυ.
Θα ήθελα να απαντήσω στο παρακάτω, αν μπορώ να προσφέρω κάτι, γιατί συμπληρώνει και τη συζήτηση που κάναμε την περασμένη βδομάδα με τον @akalest0s
Παράθεση από: ApoAntonis στις 24 Ιουν 2020, 08:48:29 ΜΜ
Το συμπληρωματικό υλικό αναφέρει στα πλεονεκτήματα, μειονεκτήματα λιστών και πινάκων, ότι η τυχαία πρόσβαση στις λίστες δεν επιτρέπεται. Πρώτο σημείο: Τι να υποθέσουμε για τις στοίβες και τις ουρές;
Δεύτερο σημείο: Ποιά είναι - και που ειπώθηκε- η συνθήκη κατά την οποία ότι η τυχαία προσπέλαση σε πίνακα δεν επιτρέπεται.
Αν καταλαβαίνω αυτό που λες είναι ότι "όταν η στοίβα πχ υλοποιείται με πίνακα, και αφού ο πίνακας είναι δομή τυχαίας προσπέλασης, γιατί απαγορεύεται να κάνω τυχαία προσπέλαση στη στοίβα".
Αν το καταλαβαίνω σωστά λοιπόν, η εξήγησή μου θα ξεκινήσει από το ότι η στοίβα, ακόμα κι αν υλοποιείται με πίνακα, δεν είναι πίνακας-δεν πρέπει να νοείται ως πίνακας.
Η δομή, καθορίζεται από τις λειτουργίες με τις οποίες θέλω να την εφοδιάσω (γιαυτό και στον ορισμό του βιβλίου εκτός από τα δεδομένα λέει ότι είναι και το σύνολο των λειτουργιών επί των δεδομένων). Έτσι, αυτό που διαφοροποιεί έναν σκέτο πίνακα, έναν πίνακα που "παριστάνει" τη στοίβα και έναν πίνακα που "παριστάνει" την ουρά, είναι το πώς θέλω να επιτρέψω να γίνεται η προσπέλαση των στοιχείων του, το πώς θέλω να "εισάγονται" ή να "λαμβάνονται" ξανά πίσω οι τιμές που αποθηκεύω (πχ εντελώς ελεύθερα, LIFO ή FIFO)
Εντάξει, η απόλυτη συμμόρφωση με ένα μοντέλο δεν είναι ποτέ εφικτή ούτε απαραίτητη (επιτρέπονται δλδ παρεκκλίσεις αν εξυπηρετούν) αλλά σίγουρα μια στοίβα πχ θα διαθέτει τα βασικά χαρακτηριστικά της στοίβας που είναι η LIFO λειτουργία της.

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

Στη ΓΛΩΣΣΑ βέβαια δε μπορούμε να φτιάξουμε στοίβα ως αντικείμενο, οπότε και ο πίνακάς της και ο τοπ της είναι έρμαια του κύριου προγράμματος αλλά μια σωστή πρακτική ώστε να παραμένουμε κοντά στο παραπάνω μοντέλο είναι ότι το πρόγραμμα δεν θα πειράζει όπως και όποτε γουστάρει τον τοπ ή τα περιεχόμενα του πίνακα αλλά μόνο όταν θέλει να ωθήσει ή να απωθήσει κάτι και σεβόμενο τη LIFO λογική της και όχι σαν να ήταν πίνακας. Η χρήση υποπρογραμμάτων μάλιστα, για την ώθηση και την απώθηση ενθαρρύνει αυτή τη σωστή πρακτική, ώστε ο top και τα περιεχόμενα του πίνακα να μεταβάλλονται μόνο μέσα στα υποπρογράμματα και όποτε το πρόγραμμα πάει να πειράξει κάτι από αυτά έτσι "χύμα" να καταλαβαίνουμε ότι αυτό "κάνει λίγο τζιιζ" και μήπως μπορούμε να το αποφύγουμε.
Φιλικά,
Γιώργος Θαλασσινός