Και το άλλο ερώτημα, αμέσως μετά από αυτό:
Θεωρείς ότι έχει νόημα τότε Γιώργο να τις έχουμε και τις δυο?
Και αν ναι, ποιο ?
Σόρυ για το μεγάλο μήνυμα Γιώργο, αλλά έκατσα και στα έγραψα όλα αυτά επειδή σε σέβομαι και θέλω να καταλάβεις πως τα έχω μέσα στο κεφάλι μου. Καλύτερα μια φορά με πληρότητα παρά 100 σκόρπιες κουβέντες.
Το σίγουρο είναι ότι πρέπει να υπάρχει ένα προγραμματιστικό περιβάλλον για να μη μιλάμε αόριστα. Απλά επειδή δε θέλουμε να μπλέξουμε τους μαθητές με δηλώσεις μεταβλητών και γενικά με τεχνικές λεπτομέρειες υλοποίησης φτιάχτηκε η ψευδογλώσσα. Έτσι δίνουμε έμφαση στο αλγοριθμικό κομμάτι. Αυτός είναι και ο λόγος που δεν διδάσκεται με το μάθημα μια πραγματική γλώσσα προγραμματισμού.
Ο μαθητής λοιπόν με τη βοήθεια της ψευδογλώσσας αποτυπώνει τη σκέψη του στο χαρτί.
Είναι αρκετό αυτό; Όχι.
Μέρος του αλγορίθμου δεν είναι μόνο οι ενέργειες, είναι και τα δεδομένα. Άρα πρέπει ο μαθητής να μάθει και για κάποιους περιορισμούς που υπάρχουν στα αληθινά περιβάλλοντα. Το σημαντικότερο από αυτά για μένα είναι το ζήτημα τω δομών δεδομένων. Οι δομές δεδομένων είναι συνυφασμένες με τον αλγόριθμο. Δε γίνεται να πεις ασχολούμαι μόνο με αλγορίθμους αλλά όχι με δομές. Θα δώσω 2 παραδείγματα για αυτό:
Πρώτον αν θέλουμε να βρούμε τα στοιχεία μιας λίστας που είναι πάνω από το μέσο όρο τους, πρέπει να προσπελάσεις κάθε στοιχείο πάνω από μια φορά,. Άρα θέλεις κάποια δομή δεδομένων που θα αποθηκεύσει τα στοιχεία και θα επιτρέπει το μαζικό χειρισμό τους. Θέλεις πίνακα.
Δεύτερον: Έστω ότι μιλάμε για διάσχιση λαβυρίνθου. Μια λύση είναι σε κάθε διασταύρωση να ακολουθείς ένα δρόμο και να αποθηκεύεις τους άλλους έτσι ώστε να βρεθείς σε αδιέξοδο να γυρίσεις πίσω και να πάρεις άλλο δρόμο. Εδώ θέλεις στοίβα. Ο συγκεκριμένος αλγόριθμος δε γίνεται να περπατήσει χωρίς στοίβα. Βλέπουμε λοιπόν ότι η δομή δεδομένων είναι κομμάτι του αλγορίθμου.
Εφόσον οι δομές δεδομένων είναι κομμάτι των αλγορίθμων, σε ένα μάθημα αλγορίθμων πρέπει να μιλήσεις αναγκαστικά και για αυτές.
Προσοχή τώρα: Η δομή δεδομένων είναι ένα σύνολο δεδομένων εφοδιασμένο με ένα σύνολο πράξεων. Όταν μιλάς μόνο για αυτό σύνολο πράξεων και δεν ασχολείσαι με την υλοποίησή τους τότε ασχολείσαι με την αφηρημένη δομή δεδομένων (ΑΔΔ).
Λύνοντας προβλήματα σε ψευδογλώσσα λύνεις προβλήματα σε αφηρημένες δομές δεδομένων. Πίνακες απροσδιόριστου μεγέθους, στοίβες και ουρές που δεν έχουν ακόμα χαρακτηριστεί σαν στατικές ή δυναμικές γιατί είμαστε ακόμα σε φάση αφηρημένης δομής δεδομένων και όχι υλοποίησης.
Το ερώτημα που τίθεται είναι: Είναι δυνατόν να δέχεσαι λύσεις που κάνουν χρήση αφηρημένων δομών δεδομέων; Μπορείς να μιλάς για άπειρους πίνακες; Έχει νόημα να μιλάς για πίνακες που δεν ξέρεις το μέγεθός τους; Όχι. Τα αληθινά περιβάλλοντα έχουν περιορισμούς και για να μην πετάμε στον αέρα θα πρέπει να δίνουμε λύσεις που είναι δυνατόν να υλοποιηθούν σε κάποιο περιβάλλον και θα σεβόμαστε τους περιορισμούς τους.
Έτσι είναι αναγκαίο να υπάρχει ένα προγραμματιστικό περιβάλλον στα πλαίσια του μαθήματος διαφορετικά οι μαθητές θα λύνουν ασκήσεις σε αφηρημένες δομές δεδομένων και θα νομίζουν ότι τις λύνουν σε πίνακες απείρων διαστάσεων ή δυναμικούς πίνακες ή δεν ξέρω εγώ τι άλλο.
Πχ
Διάβασε ν
Για ι από 1 μέχρι ν
Διάβασε α[ι]
Τέλος_επανάληψης
Διάβασε α[ν+1]
Με βάση το λόγο ύπαρξης του περιβάλλοντος θεωρώ αδιανόητο να δίνουμε λύσεις σε ψευδογλώσσα οι οποίες δεν μεταφέρονται στο προγραμματιστικό μας περιβάλλον. Θεωρώ λάθος επίσης να λέμε άλλο ΓΛΩΣΣΑ και άλλο ψευδογλώσσα διότι καταστρατηγούμε το βασικό σκοπό για τον οποίο υπάρχει το προγραμματιστικό περιβάλλον: Να φτιάξουμε ένα αλγόριθμο σε ψευδογλώσσα και στη συνέχεια να δούμε πως ο συγκεκριμένος αλγόριθμος και όχι κάποιος άλλος υλοποιείται στο προγραμματιστικό μας περιβάλλον.
Τότε γιατί να υπάρχει η ψευδογλώσσα και όχι μόνο η ΓΛΩΣΣΑ;
Ο λόγος ύπαρξης είναι ότι θέλουμε αρχικά να μη μπλέξουμε το μαθητή με δηλώσεις μεταβλητών και λεπτομέρειες υλοποίησης. Δεν έχω πρόβλημα να μην υπάρχει ψευδογλώσσα. Είναι όμως βολική στο πρώτο στάδιο και δε με χαλάει. Αλλά σε καμία περίπτωση δεν πρέπει να παρεξηγούμε την ελευθερία της και το στόχο της και να δίνουμε λύσεις σε ψευδογλώσσα που δε μεταφέρονται σε ΓΛΩΣΣΑ.
Εντολές όπως το αντιμετάθεσε (που άκουσα από τον Πέτρο) μεταφέρονται σε ΓΛΩΣΣΑ με τη βοήθεια των 3 εντολών, οπότε δε μας χαλάνε. Αλλά λύσεις που κάνουν χρήση αγνώστων μεγεθών σε πίνακα μας χαλάνε.
Θεωρώ ότι ο φίλος μου ο Στάθης (Στέργου), είναι λάθος που θεωρεί διαφορετικά πράγματα ΓΛΩΣΣΑ και ψευδογλώσσα. Θεωρεί ότι η ψευδογλώσσα κάνει χρήση δυναμικών πινάκων. Για μένα η ψευδογλώσσα χρησιμοποιεί απλά αφηρημένες δομές δεδομένων. Αυτά τα 2 είναι διαφορετικά. Στο ένα δε μας ενδιαφέρει η υλοποίηση του πίνακα (γιατί δεν είναι της παρούσας στιγμής) ενώ στο άλλο μας ενδιαφέρει, το υλοποιήσαμε και το κάναμε δυναμικά.
Θεωρώ αντιπαιδαγωγικό το να έχουμε ένα στατικό και ένα δυναμικό περιβάλλον στο ίδιο μάθημα. Θεωρώ πως το σκεπτικό με βάση το οποίο υπάρχουν και τα 2 είναι αυτό που περιγράφω παραπάνω.
Για να παρακάμψουμε το θέμα του μεγέθους των πινάκων στην ψευδογλώσσα χρησιμοποιούμε το Δεδομένα //χ,ψ// το οποίο σημαίνει ότι τα χ και ψ είναι γνωστά. Δε μας νοιάζει από πού είναι γνωστά γιατί αυτή τη στιγμή μας απασχολεί το κομμάτι της επεξεργασίας και όχι του αποθηκευτικού χώρου ή των δομών δεδομένων. Είναι όμως γνωστοί αριθμοί πχ 5, 10, 20 κλπ
Είναι γνωστά με την έννοια που ο φυσικός λέει «Σώμα εκτοξεύεται με γωνία φ από ύψος h και με αρχική ταχύτητα υ0. Να βρείτε το χρόνο t στον οποίο θα φτάσει στο έδαφος». Τα φ, h και υ0 είναι γνωστά υπό την έννοια ότι ο άγνωστος t θα βρεθεί συναρτήσει αυτών. Δε δίνουμε τα νούμερά τους αλλά θεωρήστε ότι είναι γνωστά.
Όπως επίσης στις παραμετρικές εξισώσεις των μαθηματικών σου δίνει μια εξίσωση με άγνωστο το χ και παράμετρο το λ και σου ζητάει το χ. Τι είναι το λ; Είναι γνωστός ή άγνωστος; Είναι γνωστός και συναρτήσει αυτού θα βρούμε το χ. Δεν είναι διαθέσιμη η τιμή του εκείνη τη στιγμή αλλά θα του φερθούμε σαν να είναι γνωστός.