Aσκήσεις σε στοίβα και ουρά σε ΓΛΩΣΣΑ

Ξεκίνησε από Πέτρος Κ., 22 Ιουν 2015, 08:53:23 ΜΜ

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

Rathaniel

Παράθεση από: bugman στις 02 Αυγ 2015, 02:52:08 ΠΜ
Νομίζω όμως ότι τέτοιες σπαζοκεφαλιές δεν μπορεί να γίνονται μαθήματα.
Ακόμα και αν συμφωνώ, πρέπει να παίξουμε με τους κανόνες που έβαλε το υπουργείο και φυσικά με το βιβλίο μαθητή.
Από εκεί θα μπουν θέματα εξετάσεων, πάνω σε αυτό θα εξεταστούν μαθητές.
Χρηστίδης Αλέξανδρος,
Μηχανικός Επ/κών και Πλη/κών Συστημάτων,
Msc Στα Προηγμένα Συστήματα Πληροφορικής

bugman

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

itt

Παράθεση από: bugman στις 02 Αυγ 2015, 02:52:08 ΠΜ
Στην βιβλιογραφία της πληροφορικής αναφέρονται δύο ξεχωριστές οντότητες,  το λεγόμενο  stack και το λεγόμενο heap. Σε ελληνικά βιβλία βρίσκω την heap ως στοίβα και τον stack ως σωρό. Η πραγματική διαφορά τους, εκτός από τα ονόματα, είναι εκπληκτικά μεγάλη. Εδώ έχει αξία να αντιληφθεί ο μαθητής τον χάρτη μνήμης. Ένα μικρό μέρος της μνήμης είναι ο σωρός ή stack. Αντίθετα το μεγαλύτερο μέρος της μνήμης είναι heap.  Ο σωρός γράφει τις διευθύνσεις επιστροφής σε κλήσεις υποπρογραμμάτων αλλά περιλαμβάνει πλαίσια δηλαδή καθορισμένες μικρές περιοχές για πέρασμα παραμέτρων. Ο σωρός χρησιμοποιείται για την αποθήκευση των κσταχωρητών του επεξεργαστή. Το heap είναι το σύστημα απόδοσης μνήμης του λειτουργικού. Αν έχει κανείς ιδέα από assembly θα γνωρίζει ότι η μνήμη παραχωρείται με προηγούμενη δέσμευση. Δηλαδή ζητάει κανείς ένα γίγα και σιγά σιγά το παίρνει. Έτσι ξέρει ότι θα έχει κάποια στιγμή το μεγάλο κομμάτι συνεχόμενης μνήμης αλλά δεν θα το πάρει όλο αν δεν έχει πράμα να το γεμίσει. Αυτή είναι η στοίβα. Αυτά που διαβάζω εδώ είναι ουρές που προσομοιάζουν το stack  ή σωρό για άλλες χρήσεις όμως από τις κανονικές, ενώ το αν θα είναι σε πίνακα ή όχι είναι απλά τεχνικής φύσεως θέμα και όχι ουσίας. Οι ουρές πχ οι κυκλικές ουρές με δύο δείκτες και έναν χώρο, ίσως έναν πίνακα, έχουν χρησιμότητα σε προσομοιώσεις. Νομίζω όμως ότι τέτοιες σπαζοκεφαλιές δεν μπορεί να γίνονται μαθήματα.

Ο σωρός δεν έχει διευθύνσεις επιστροφής. Στον x86 η διεύθυνση επιστροφής περνάει ως το τελευταίο πράγμα στο stack κατά το function prolog. Γενικά για τον επεξεργαστή δεν υπάρχει καν η έννοια του heap, είναι ένα abstraction που υπάρχει σε επίπεδου λειτουργικού για να περιγράφουμε memory pools και που δεν έχει απολύτως καμια σχέση με τη δομή δεδομένων που αποκαλούμε σωρό. Σε επίπεδο assembly δεν υπάρχουν semantics για allocation μνήμης. Για παράδειγμα στα Windows το memory allocation περιλαμβάνει τρία πράγματα:


  • τον allocator σε επίπεδο εφαρμογής, είτε του CRT είτε κάποιον custom που έχει στηθεί πάνω στο default process heap
  • τον heap manager, font-end και back-end αναλόγως
  • και εν τέλη τον virtual memory manager του λειτουργικού

που δεν έχουν να κάνουν σε τίποτα με assembly.

ΠαράθεσηΔηλαδή ζητάει κανείς ένα γίγα και σιγά σιγά το παίρνει. Έτσι ξέρει ότι θα έχει κάποια στιγμή το μεγάλο κομμάτι συνεχόμενης μνήμης αλλά δεν θα το πάρει όλο αν δεν έχει πράμα να το γεμίσει. Αυτή είναι η στοίβα.

Όχι, δεν είναι αυτη η στοίβα. Η στοίβα ειναι private χώρος μνήμης, reserved και commited με lifo semantics για allocation/deletion που παραχωρείται σε κάθε thread. Αυτό που περιέγραψες εσύ είναι μάλλον (δεν εχω ιδέα τι έχεις μπλέξει στο μυαλό σου) ένα heap segment. Προφανώς και επίσης δεν θα εξηγούσες ποτέ σε κάνεναν τη στοίβα με το τι κάνει το λειτουργικό στα threads, οπότε δεν καταλαβαίνω γιατί έγραψες όλα αυτά που έγραψες.



bugman

#63
Και εγώ επίσης δεν μπορώ να καταλάβω όλο αυτό το ακατάσχετο jargon που αράδιασες. Αλλά δικαίωμα του καθένα είναι να γράφει ότι θέλει.
Δεν σου αρέσει ο σωρός για διευθύνσεις επιστροφής αλλά είναι λες το τελευταίο που κάνει...και κάτι άλλα αμερικάνικα!!!!
Προφανώς όταν χρησιμοποιούμε Assembly δεν γράφουμε κώδικα για να παίζουμε με τους καταχωρητές αλλά χρειαζόμαστε μνήμη και αυτή την αποδίδει το λειτουργικό, διότι όπως είναι γνωστό η μνήμη δεν μοιράζεται σε πιάτα ή μερίδες στα προγράμματα αλλά όπως αναφέρεις το commit είναι η δεύσμευση που έγραψα. Και φυσικά το heap segment είναι το παραθυρόφυλλο του παραθύρου που κατά τη γνώμη σου δεν είναι παράθυρο. Αλλά νομίζω όταν μιλάω για το παραθυλόφυλλο κάνω αναφορά στο παράθυρο έτσι δεν είναι;
Αναφέρεσαι σε threads και άλλα άσχετα θέματα με το ζητούμενο...απλά μάλλον για να βαρύνεις την συζήτηση. Η υπόθεσή μου είναι απλή. Πρέπει κανείς να μαθαίνει την χρήση των διάφορων δομών, και όχι απλά να παίζει με αυτές με άσχετες ασκήσεις. Διότι αφενός δεν μαθαίνουν τίποτα, και αφετέρου το μόνο που δοκιμάζουν είναι την ψυχολογική κατάσταση του μαθητή. Ανάλογα με το πόσο ψυχάκιας είναι κάποιος μπορεί ή όχι να συνεχίσει..π.χ. να παίζει με Ώθηση και απώθηση για να βρεί αν σε ένα αλφαριθμητικό έχουμε εντάξει τις αριστερές με τις δεξιές παρενθέσεις..(Από εκεί φρίκαρα)...
Εντάξει είμαι και εγώ της γνώμης ότι αν κάτι γίνεται με έναν τρόπο τότε είναι και αυτός σωστός. Όμως στη τελική δεν γίνεται να εμπλουτίζεις με "δύσκολα" κάτι που γίνεται με εύκολο τρόπο.
Δεν έχω διάθεση για αέανη αντιπαράθεση, κ. itt. Προφανώς μου αρέσει να μπλέκω με το μυαλό μου...και να ασχολούμε τα τελευταία τριάντα χρόνια με την πληροφορική.

Επειδή μου αρέσουν και οι αναφορές (είναι καθαρά θέμα επιστήμης)
1. Η εντολή RET του x86 http://x86.renejeschke.de/html/file_module_x86_id_280.html
Διαβάζουμε επιπλέον: The optional source operand specifies the number of stack bytes to be released after the return address is popped; Τι δεν καταλαβαίνουμε από το popped της διεύθυνσης επιστροφής;  Επίσης εδώ κατανοούμε ότι έχουμε και την δυνατότητα (optional) να απελευθερώσουμε ένα αριθμό τιμών στον σωρό που είχαμε δεσμεύσει (το λεγόμενο και stack frame) και χρησιμοποιείται για ότι θέλει ο προγραμματιστής, π.χ. για τοπικές μεταβλητές (μέσω δεικτών).
2. Από το εγχειρίδιο του MASM (Assembler)
http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/CH08.PDF
Σελίδα 81 του PDF εμφανίζει τον τρόπο μέσω assembly που φτιάχνουμε πίνακες με δυναμική (δηλαδή μεταβαλλόμενη) δέσμευση μνήμης.  Ουσιαστικά δηλαδή όταν γράφουμε σε assembly δεν γράφουμε για να πάμε να δείξουμε πέντε γραμμές κώδικα που παίζουν με δυο τρεις καταχωρητές και το πολύ να στέλνουν και δυο χαρακτήρες στην κοσνόλα αλλά χρησιμοποιούμε τον υπολογιστή, την μνήμη του, τους δίσκους και όλα τα περιφερειακά μέσω του λειτουργικού.
Δυστυχώς πρέπει τα μαθήματα πληροφορικής να περάσουν σε επίπεδο εφαρμογής, να έχουν δηλαδή παρουσία πέρα από το χαρτί. Σε αυτό το σημείο σίγουρα βοηθούν εφαρμογές όπως αυτή του Διερμηνευτή της Γλώσσας. Όμως και αυτός έχει το κουσούρι της Γλώσσας, δηλαδή ανύπαρκτες εντολές για έξοδο και είσοδο.
Πόσα θέματα πληροφορικής εξηγούνται με τα γραφικά αλλά δεν μπορούν να έρθουν στην Γλώσσα γιατί δεν έχει γραφικά! Ακόμα και ο ΖΧ81 είχε γραφικά!!!!!!Έλεος


itt

Παράθεση από: bugman στις 02 Αυγ 2015, 03:10:31 ΜΜ
Και εγώ επίσης δεν μπορώ να καταλάβω όλο αυτό το ακατάσχετο jargon που αράδιασες. Αλλά δικαίωμα του καθένα είναι να γράφει ότι θέλει.

Ποιο ειναι ακριβώς το ακατάσχετο jargon;

Παράθεση από: bugman στις 02 Αυγ 2015, 03:10:31 ΜΜ
Δεν σου αρέσει ο σωρός για διευθύνσεις επιστροφής αλλά είναι λες το τελευταίο που κάνει...και κάτι άλλα αμερικάνικα!!!!

Ποιος σωρός;  Stack = Στοίβα, καταλαβαίνεις τι γράφεις; Μην προσπαθείς να ερμηνεύεις αυτά που γράφω όπως σου κατέβει. Όταν φτιάχνεις το function prolog (κάνε αναζήτηση στο google άμα είσαι τόσο άσχετος με την ορολογία) κάνεις implicitly push με το call τη διεύθυνση της επόμενης εντολής στο STACK και κάνεις expliticly pop και jmp με το ret σε αυτήν την διεύθυνση από τη συνάρτηση.

Παράθεση από: bugman στις 02 Αυγ 2015, 03:10:31 ΜΜ
Προφανώς όταν χρησιμοποιούμε Assembly δεν γράφουμε κώδικα για να παίζουμε με τους καταχωρητές αλλά χρειαζόμαστε μνήμη και αυτή την αποδίδει το λειτουργικό, διότι όπως είναι γνωστό η μνήμη δεν μοιράζεται σε πιάτα ή μερίδες στα προγράμματα αλλά όπως αναφέρεις το commit είναι η δεύσμευση που έγραψα. Και φυσικά το heap segment είναι το παραθυρόφυλλο του παραθύρου που κατά τη γνώμη σου δεν είναι παράθυρο. Αλλά νομίζω όταν μιλάω για το παραθυλόφυλλο κάνω αναφορά στο παράθυρο έτσι δεν είναι;

Τρικυμία εν κρανίω. Όταν λες παραθυρόφυλλο μόνο εσύ ξέρεις τι λες.

Παράθεση από: bugman στις 02 Αυγ 2015, 03:10:31 ΜΜ
Αναφέρεσαι σε threads και άλλα άσχετα θέματα με το ζητούμενο...απλά μάλλον για να βαρύνεις την συζήτηση.
Όχι δεν είνα καθόλου άσχετα. Δεν μπορείς να γράφεις για heap segement και να το βαπτίζεις stack επειδή έτσι γουστάρεις. Τo stack όταν μιλάμε στο επίπεδο του λειτουργικού είναι αυτό που έγραψα, όχι η μπαρούφα που πέταξες.

Παράθεση από: bugman στις 02 Αυγ 2015, 03:10:31 ΜΜ
Δεν έχω διάθεση για αέανη αντιπαράθεση, κ. itt. Προφανώς μου αρέσει να μπλέκω με το μυαλό μου...και να ασχολούμε τα τελευταία τριάντα χρόνια με την πληροφορική.

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


ΠαράθεσηΕπειδή μου αρέσουν και οι αναφορές (είναι καθαρά θέμα επιστήμης)
1. Η εντολή RET του x86 http://x86.renejeschke.de/html/file_module_x86_id_280.html
Διαβάζουμε επιπλέον: The optional source operand specifies the number of stack bytes to be released after the return address is popped; Τι δεν καταλαβαίνουμε από το popped της διεύθυνσης επιστροφής;  Επίσης εδώ κατανοούμε ότι έχουμε και την δυνατότητα (optional) να απελευθερώσουμε ένα αριθμό τιμών στον σωρό που είχαμε δεσμεύσει (το λεγόμενο και stack frame) και χρησιμοποιείται για ότι θέλει ο προγραμματιστής, π.χ. για τοπικές μεταβλητές (μέσω δεικτών).

"The optional source operand specifies the number of stack bytes to be released after the return address is popped". Καταλαβαίνεις τι ειναι το stack; Ποιος σωρός;

Παράθεση
2. Από το εγχειρίδιο του MASM (Assembler)
http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/CH08.PDF
Σελίδα 81 του PDF εμφανίζει τον τρόπο μέσω assembly που φτιάχνουμε πίνακες με δυναμική (δηλαδή μεταβαλλόμενη) δέσμευση μνήμης.  Ουσιαστικά δηλαδή όταν γράφουμε σε assembly δεν γράφουμε για να πάμε να δείξουμε πέντε γραμμές κώδικα που παίζουν με δυο τρεις καταχωρητές και το πολύ να στέλνουν και δυο χαρακτήρες στην κοσνόλα αλλά χρησιμοποιούμε τον υπολογιστή, την μνήμη του, τους δίσκους και όλα τα περιφερειακά μέσω του λειτουργικού.
Δυστυχώς πρέπει τα μαθήματα πληροφορικής να περάσουν σε επίπεδο εφαρμογής, να έχουν δηλαδή παρουσία πέρα από το χαρτί. Σε αυτό το σημείο σίγουρα βοηθούν εφαρμογές όπως αυτή του Διερμηνευτή της Γλώσσας. Όμως και αυτός έχει το κουσούρι της Γλώσσας, δηλαδή ανύπαρκτες εντολές για έξοδο και είσοδο.
Πόσα θέματα πληροφορικής εξηγούνται με τα γραφικά αλλά δεν μπορούν να έρθουν στην Γλώσσα γιατί δεν έχει γραφικά! Ακόμα και ο ΖΧ81 είχε γραφικά!!!!!!Έλεος

Ό,τι νανε.

Επίσης άμα σου αρέσουν τα references, να κάνεις cite το Developer Manual της Intel όχι κάποιο random γερμανικό site. Οπότε ακόμα δεν μου απάντησες. Γιατί τα έγραψες όλα αυτά;  Τι σχέση έχουν με το μάθημα και ειδικότερα με το thread που γράφουμε;

bugman

Το θέμα αν stack λέγεται σωρός ή στοίβα..είναι ένα θέμα που πρέπει να ξεκαθαριστεί. Προσωπικά λέω σωρό το Stack. και επειδή δεν είμαι ο Κουζινόπουλος Χάρης, εδώ λοιπόν άλλος κύριος γράφει ξεκάθαρα αυτό που λέω...ότι σωρός λέγεται το Stack. http://users.uom.gr/~ckouz/assembly/lesson7.pdf
Λες να το ανέβασα για να υποστηρίξω ντε μεκ τη γνώμη μου;
Σημασία έχει να αντιλαμβάνεσαι τι λεει ο άλλος. Αν λέει την στοίβα σωρό τότε δεν διαφωνείς με αυτό, ας το πει και πατάτα αρκεί να μιλάμε για το ίδιο πράγμα. Και όπως διαπίστωσα εννόησες πως το Stack το μπέρδεψα με το Heap...που το είδες αυτό; Το έγραψα ξεκάθαρα, με το παράδειγμα με τον χάρτη μνήμης, το heap έχει όλη τη μνήμη, o σωρός ή stack όπως το λέω εγώ έχει περιορισμένη μνήμη και έχει και διαφορετική λειτουργία.
Κάπου αναρωτιέσαι γιατί γράφω εδώ. Σωστά, μετά από τη συζήτησή μας το ίδιο αναρωτιέμαι και εγώ! Για το λόγο αυτό χαιρετώ, και εύχομαι να περάσουμε το μεσαίωνα της Ελληνικής Πληροφορικής, και ότι σχετίζεται με Ιερές Εξετάσεις... :)

Rathaniel

Χρηστίδης Αλέξανδρος,
Μηχανικός Επ/κών και Πλη/κών Συστημάτων,
Msc Στα Προηγμένα Συστήματα Πληροφορικής

itt

Παράθεση από: bugman στις 02 Αυγ 2015, 09:25:14 ΜΜ
Το θέμα αν stack λέγεται σωρός ή στοίβα..είναι ένα θέμα που πρέπει να ξεκαθαριστεί. Προσωπικά λέω σωρό το Stack. και επειδή δεν είμαι ο Κουζινόπουλος Χάρης, εδώ λοιπόν άλλος κύριος γράφει ξεκάθαρα αυτό που λέω...ότι σωρός λέγεται το Stack. http://users.uom.gr/~ckouz/assembly/lesson7.pdf
Λες να το ανέβασα για να υποστηρίξω ντε μεκ τη γνώμη μου;

Εσύ τώρα σοβαρά θες να μας βάλεις να αναφερόμαστε στο stack ως σωρό, ειδικά όταν μιλάμε για δομές δεδομένων, επειδή το λες εσύ και ένας ακαδημαϊκός σε ένα μάθημα 16μπιτης assembly;  Τι ακριβώς περιμένεις να σου απαντήσω;

Παράθεση από: bugman στις 02 Αυγ 2015, 09:25:14 ΜΜ
Σημασία έχει να αντιλαμβάνεσαι τι λεει ο άλλος. Αν λέει την στοίβα σωρό τότε δεν διαφωνείς με αυτό, ας το πει και πατάτα αρκεί να μιλάμε για το ίδιο πράγμα. Και όπως διαπίστωσα εννόησες πως το Stack το μπέρδεψα με το Heap...που το είδες αυτό; Το έγραψα ξεκάθαρα, με το παράδειγμα με τον χάρτη μνήμης, το heap έχει όλη τη μνήμη, o σωρός ή stack όπως το λέω εγώ έχει περιορισμένη μνήμη και έχει και διαφορετική λειτουργία.

Τι έγραψες ξεκάθαρα, μας δουλεύεις;  Δεν μπορείς "ξέκαθαρα" χρησιμοποιήσεις ούτε έναν όρο που τα τελευταία 20 χρόνια χρησιμοποιούμε και έχουμε καθιερώσει, βγάζεις δικούς σου αδόκιμους όρους (παραθυρόφυλλα, παντζούρια w/e) και περιμένεις να καταλαβαίνω εγώ τι ακριβώς λες εσυ;

Παράθεση από: bugman στις 02 Αυγ 2015, 09:25:14 ΜΜ
Κάπου αναρωτιέσαι γιατί γράφω εδώ. Σωστά, μετά από τη συζήτησή μας το ίδιο αναρωτιέμαι και εγώ! Για το λόγο αυτό χαιρετώ, και εύχομαι να περάσουμε το μεσαίωνα της Ελληνικής Πληροφορικής, και ότι σχετίζεται με Ιερές Εξετάσεις... :)

Κάτσε ρε Γιώργο γιατί θα μας τρελάνεις. Δεν μπορείς εσύ, που εδώ και 10+ χρόνια γράφεις την ελληνική vb5 με την vb5 να κατηγορείς τον οποιοδήποτε για μεσαίωνα πληροφορικής. Σε τελική ποιος νομίζεις ότι είσαι; Σοβαρέψου.

bugman

#68
Μήπως βιάστηκες να απαντήσεις...itt? Αν ξαναδιαβάσεις τι έχω γράψει θα καταλάβεις ότι μάλλον υπάρχει παρεξήγηση.

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

Για τις δομές δεδομένων
Στα πρώτα βιβλία που διάβαζα περί πληροφορικής..το 81, έπαιζαν τότε οι δομές δεδομένων. Σήμερα δεν υπάρχει αυτό το πράγμα. Ουδείς *ασχολείται με δομές δεδομένων και απορώ πως κολλάει το σχολείο εκεί! (ίσως και αυτοί που ασχολούνται με την ύλη να έχουν κολλήσει από το 80). Τώρα μιλάμε για βάσεις δεδομένων, γιατί να μην μάθουν SQL τα παιδιά;
(πραγματικά πριν δυο χρόνια ασχολήθηκα με μια διπλή συνδεδεμένη λίστα όταν ήθελα να φτιάξω έναν επεξεργαστή κειμένου).


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

ether

Παράθεση από: bugman στις 03 Αυγ 2015, 01:55:37 ΜΜ
Για τις δομές δεδομένων
Στα πρώτα βιβλία που διάβαζα περί πληροφορικής..το 81, έπαιζαν τότε οι δομές δεδομένων. Σήμερα δεν υπάρχει αυτό το πράγμα. Ουδείς *ασχολείται με δομές δεδομένων και απορώ πως κολλάει το σχολείο εκεί! (ίσως και αυτοί που ασχολούνται με την ύλη να έχουν κολλήσει από το 80).
Δε φαντάζομαι να σοβαρολογείς

bugman

Ας μου αποδείξει κάποιος ότι χρειάστηκε μια συνδεδεμένη λίστα για το πρόγραμμά του....Εγώ μία φορά χρειάστηκα με δείκτες μπρος πίσω...για να μην χρησιμοποιήσω αντικείμενο για κάθε στοιχείο...(παράγραφος σε επεξεργαστή κειμένου)...

ether

Παράθεση από: bugman στις 03 Αυγ 2015, 05:55:49 ΜΜ
Ας μου αποδείξει κάποιος ότι χρειάστηκε μια συνδεδεμένη λίστα για το πρόγραμμά του....Εγώ μία φορά χρειάστηκα με δείκτες μπρος πίσω...για να μην χρησιμοποιήσω αντικείμενο για κάθε στοιχείο...(παράγραφος σε επεξεργαστή κειμένου)...
Μόλις συνειδητοποίησα ότι, αφού δε χρησιμοποιώ εγώ ΙΧ για τις μετακινήσεις μου, τότε δε χρησιμοποιεί και κανένας άλλος. Κι όχι μόνο δε χρησιμοποιεί κανένας άλλος, αλλά ούτε καν υπάρχουν ΙΧ, ούτε κι ασχολείται κανένας μ' αυτά.
Επίσης, συνειδητοποίησα ότι είμαι το κέντρο του κόσμου.

tdrivas

Παράθεση από: bugman στις 03 Αυγ 2015, 05:55:49 ΜΜ
Ας μου αποδείξει κάποιος ότι χρειάστηκε μια συνδεδεμένη λίστα για το πρόγραμμά του....Εγώ μία φορά χρειάστηκα με δείκτες μπρος πίσω...για να μην χρησιμοποιήσω αντικείμενο για κάθε στοιχείο...(παράγραφος σε επεξεργαστή κειμένου)...

όλα τα προγράμματα που κάνουν χρήση της FIFO ιδιότητας (κυρίως) μπορεί να υλοποιηθούν με συνδεδεμένη λίστα. Σου παραθέτω παραδείγματα λίστας:
1. Παιχνίδια με τράπουλα
2. Η κρυφή μνήμη των browser (για επιστροφή)
3. binary tree - hash tables
4. Undo κουμπί στα προγράμματα.
5. Λίστα αντικειμένων σε 3D παιχνίδι που περιμένουν να γίνουν rentered.
6. Χρονοπρογραμματισμός σε ΛΣ

όπως καταλαβαίνεις η λίστα είναι πολύ μεγάλη. Μη ξεχνάς ότι η επιλογή της καταλληλότερης δομής θα διευκολύνει το έργο του προγραμματιστή..
Thanassis Drivas
BSc in Computer Science
MSc in Space Science Applications and Technologies
https://github.com/tdrivas

bugman

morfeus,
ευχαριστώ για την απάντησή σου. Ασφαλώς και συμφωνώ με το ότι αν θέλει κανείς να χρησιμοποιήσει μια "συνδεδεμένη λίστα" μπορεί να το κάνει, αλλά οι μοντέρνες γλώσσες έχουν άλλα καλά, όπως collections στη Vb6, vector και map στη C++. Και εδώ υπάρχει η συνδεδεμένη λίστα αλλά δεν ασχολείσαι με μεταβλητές τύπου Top...αλλά με μεθόδους και ιδιότητες, δηλαδή η λίστα είναι κρυμμένη στο αντικείμενο. Τώρα αν θέλουν εδώ να μάθουν τα FIFO και LIFO καλώς. Αυτό με το απώθησε δεν μου αρέσει ως όνομα. Στη γλώσσα που έχω γράψει έχω την Βάλε (και ως Push) και Διάβασε (Read). Οπότε
Βάλε 1,2,3
Διάβασε Α,Β,Γ
διαβάζει στο Α το 3, αυτή είναι η LiFO
Σωρός νέος { Σειρά 1, 2, 3 : Διάβασε Α, Β, Γ}   \\ εδώ ανοίγω ένα προσωρινό σωρό (άντε να το πούμε και στοίβα..) και διαβάζω ως FIFO το Α θα είναι 1.
Όπως βλέπεις δεν υπαρχουν Top και ότι άλλο, αλλά υπάρχουν αρκετές εντολές όπως ΑΔΕΙΑΣΕ  αλλά και ΦΕΡΕ για να φέρει κανείς π.χ το 3 στοιχείο στη κορυφή, η Πέτα 3 πετάει τρία στοιχεία από τη κορυφή, η Πάνω 2 παίρνει το δεύτερο στοιχείο και το βγάζει αντίγραφο στη κορυφή. Στο σωρό της Μ2000 μπορεί κανείς να βάλει ακόμα και πίνακα  byvalue και με την Πάνω 1 (παίρνει την κορυφή και βγάζει αντίγραφο) βγάζεις αντίγραφο του πίνακα. Με μια Διάβασε Α() διαβάζεις τον πίνακα...που ήταν στο Top στοιχείο. Ο σωρός στην Μ2000 χρησιμοποιείται κύρια για να επιστρέφει τιμές από βάσεις δεδομένων αλλά και για να περνάει τιμές μεταξύ τμημάτων (κάτι παραπάνω από απλά υποπρογράμματα).
Για μένα αυτά είναι θέμα της εργασίας που κάνω. Όμως για τον μαθητή καλό θα ήταν να μάθει όχι απλά πως να στήνει μια ουρά ή μια στοίβα αλλά και όλες τις ιδιότητες, τις καταστάσεις του και τις μεθόδους. Τότε θα μπορούμε να λέμε ότι κατάλαβε τι έγινε.
Συμφωνείς;

tdrivas

Παράθεση από: bugman στις 03 Αυγ 2015, 10:59:48 ΜΜ
morfeus,
ευχαριστώ για την απάντησή σου. Ασφαλώς και συμφωνώ με το ότι αν θέλει κανείς να χρησιμοποιήσει μια "συνδεδεμένη λίστα" μπορεί να το κάνει, αλλά οι μοντέρνες γλώσσες έχουν άλλα καλά, όπως collections στη Vb6, vector και map στη C++. Και εδώ υπάρχει η συνδεδεμένη λίστα αλλά δεν ασχολείσαι με μεταβλητές τύπου Top...αλλά με μεθόδους και ιδιότητες, δηλαδή η λίστα είναι κρυμμένη στο αντικείμενο.

Κατ' εμέ, πρέπει πάντα να ξέρεις πως οι έτοιμες μέθοδοι των αντικειμένων υλοποιούνται για να έχεις μία σφαιρική αντίληψη του τι κάνουν και πως να κάνεις τη βέλτιστη χρήση τους. Φυσικά, υπάρχουν vectors, arrayLists, maps κτλ. αλλά τι νόημα έχει αν δεν ξέρεις πως λειτουργούν, πως υλοποιούνται..

Παράθεση από: bugman στις 03 Αυγ 2015, 10:59:48 ΜΜ

εδώ ανοίγω ένα προσωρινό σωρό (άντε να το πούμε και στοίβα..)


Ο σωρός είναι δένδρο(maxHeap - MinHeap), δεν μπορώ να πω την στοίβα σωρό.

Παράθεση από: bugman στις 03 Αυγ 2015, 10:59:48 ΜΜ
Όμως για τον μαθητή καλό θα ήταν να μάθει όχι απλά πως να στήνει μια ουρά ή μια στοίβα αλλά και όλες τις ιδιότητες, τις καταστάσεις του και τις μεθόδους.
Συμφωνώ,αλλά...
Thanassis Drivas
BSc in Computer Science
MSc in Space Science Applications and Technologies
https://github.com/tdrivas