Απλά για πολλοστή αλλά και τελευταία φορά ερωτώ το ακόλουθο ερώτημα: Μπορώ να κατασκευάσω αλγόριθμο ο οποίος να κάνει χρήση πίνακα του οποίου (πίνακα) το μέγεθος υπολογίζεται από κάποια συνάρτηση ή παρέχεται από τον χρήστη όχι σαν δεδομένο αλλά ως στοιχείο εισόδου με κάποια εντολή του διάβασε? Ναι ή όχι τόσο απλά...
Και η δική μου απάντηση είναι «όχι με βάση το σχολικό βιβλίο» και δίνω παρακάτω το επιχείρημα.
Κάποιος που πιστεύει ότι το πρόβλημα λύνεται με στατικό πίνακα που διαβάζεται το μέγεθός του κατά την είσοδο συνήθως έχει στο νου του τις γλώσσες προγραμματισμού που συμφωνούμε ότι υποστηρίζουν κάτι τέτοιο.
Υπάρχει όμως μια διαφορά με την ψευδογλώσσα του βιβλίου.
Όταν σε μια γλώσσα προγραμματισμού διαβάζουμε ένα αριθμό ν και δημιουργούμε ένα πίνακα με μέγεθος ν ή μέγεθος κάποιο αριθμό που εξαρτάται από το ν (κάποια συνάρτηση του ν δηλαδή) συμβαίνει στη μνήμη κάτι πολύ συγκεκριμένο: Δεσμεύεται χώρος πολύ συγκεκριμένος ο οποίος δε μπορεί να αλλάξει εφόσον δεχόμαστε ότι ο πίνακας είναι στατικός. Δηλαδή αν το μέγεθος του πίνακα είναι ν τότε δεν μπορεί να γίνει προσπέλαση στο στοιχείο α[ν+1].
Αυτή είναι η διαφορά με την ψευδογλώσσα του βιβλίου. Όταν γράφεις Δεδομένα //ν// αυτό δε σημαίνει απολύτως τίποτα για το μέγεθος του πίνακα. Μπορεί να είναι ν, μπορεί να είναι και μεγαλύτερο. Αυτό ακριβώς γίνεται στο τετράδιο μαθητή με τους αραιούς πίνακες (σελίδα 32-33). Το δεδομένο είναι ν (το πλήθος των μη μηδενικών στοιχείων) αλλά ο πίνακας είναι 3ν.
Άρα αν έχω Δεδομένα //ν// κανείς δεν μπορεί να με εμποδίσει να προσπελάσω το α[ν+1] στοιχείο. Αυτή είναι η διαφορά: ενώ στη γλώσσα προγραμματισμού υπάρχει συγκεκριμένη εντολή που δεσμεύει πίνακα συγκεκριμένου μεγέθους, στην ψευσογλώσσα το Δεδομένα //ν// δεν σημαίνει απολύτως τίποτε για το μέγεθος του πίνακα.
Μπορώ δηλαδή να γράψω Δεδομένα //ν// και μετά για τις επόμενες 1000 γραμμές να κάνω προσπέλαση στα 1000 στοιχεία του πίνακα. Μετά μπορώ να γράψω
Διάβασε κ
Διάβασε α[ν+κ]
Και κανείς δεν μπορεί να το εμποδίσει αυτό αφού δεν έχω δέσμευση για το μέγεθος του πίνακα.
Μόνο μετά το τέλος του αλγορίθμου και αφού δω τον κώδικα μπορώ να πω με σιγουριά ποιο ήταν το μέγεθος. Εφόσον ισχύει αυτό τότε μπορώ να πω και το εξής:
ι<-0
Διάβασε χ
Όσο χ>=0 επανάλαβε
ι<-ι+1
α[ι]<-χ
Διάβασε χ
Τελος_επαναληψης
το οποίο βέβαια ισχύει μόνο σε δυναμικό πίνακα ή αφηρημένη δομή δεδομένων.
Το θέμα είναι ότι με βάση αυτά που λέει το σχολικό βιβλίο στο κεφάλαιο 3 για τους πίνακες βγαίνει το συμπέρασμα ότι οι συγγραφείς θέλουν το μαθητή να φαντάζεται τον πίνακα μόνο σαν στατική δομή. Άρα ο κώδικας με Όσο λογικά δε θα πρέπει να είναι αποδεκτός. Και άρα δε θα πρέπει να γίνεται αποδεχτός ούτε ο κώδικας με πίνακα αφού με το παραπάνω σκεπτικό μας οδηγεί εκεί.
Αν οι συγγραφείς πουν ότι με βάση το βιβλίο είναι αποδεκτός ο κώδικας με Όσο γεννιόνται 2 θέματα. Πρώτον, γιατί λέει αυτά που λέει το κεφάλαιο 3 για τους πίνακες και δεύτερον… είναι παιδαγωγικά σωστό να κάνουμε δεκτές λύσεις σε ψευδογλώσσα (κεφάλαιο 3) που δεν είναι αποδεκτές σε ΓΛΩΣΣΑ (κεφάλαιο 9);