Θα ήθελα μόνο και από τον Άλκη μια απάντηση στα μηνύματα όπου περιγράφω την δομή.
...
1) Κατάργηση των άνω ορίων (τα οποία είναι δούρειος ίππος)
...
Εγώ θα επιμείνω ότι πρέπει να κάνουμε ένα βήμα πίσω και να κοιτάξουμε το θέμα από παραέξω.
Για ποια ψευδογλώσσα μιλάμε;
Για τη "διεθνώς αποδεκτή ψευδογλώσσα που χρησιμοποιεί η επιστημονική κοινότητα" όπως την αναφέρουν οι συγγραφείς, την οποία αντίθετα από τη ΓΛΩΣΣΑ δεν την όρισαν οι ίδιοι αλλά απλά αποτύπωσαν κάποια στοιχεία της στο βιβλίο,
ή για την ψευδογλώσσα όπως θα θέλαμε να ήταν, σε στενά καλούπια και αλληλένδετη με τη ΓΛΩΣΣΑ για να μπορούμε να την εξετάζουμε πιο εύκολα στις πανελλήνιες;
Νομίζω ότι η "ψευδογλώσσα των πανελληνίων" δεν ήταν στους στόχους των συγγραφέων. Επιπλέον νομίζω ότι η "ψευδογλώσσα των πανελληνίων" δεν έχει καν λόγο ύπαρξης, εφόσον μπει σε καλούπια τότε αυτόματα γίνεται μια γλώσσα προγραμματισμού και όχι ψευδογλώσσα, και έτσι απλά προκαλεί διπλό κόπο στη διδασκαλία χωρίς κανένα όφελος.
Έτσι ερμηνεύω το βιβλίο θεωρώντας ότι η ψευδογλώσσα είναι αυτή που περιγράφεται και στο βιβλίο του καθηγητή και αυτή που χρησιμοποιείται γενικά στα papers της πληροφορικής, με χαλαρό συντακτικό, μεταβαλλόμενες δυνατότητες ανάλογα με το είδος του προβλήματος, και με μεγαλύτερη έμφαση στην καθαρή έκφραση του αλγορίθμου παρά σε προγραμματιστικά τρυκ.
Με βάση αυτά, οκ, να πω τη γνώμη μου για τα παρακάτω:
Οι πίνακες που προτείνω είναι στατικοί.
Δεν επιτρέπεται η προσθήκη - διαγραφή κόμβων οπότε ούτε και η αλλαγή του μεγέθους τους κατά την εκτέλεση. Δεν υπάρχει θέμα resize. Αυτό απαγορεύεται.
Η προσπέλασή τους έχει πολυπλοκότητα Ο(1) όπως και στους υπάρχοντες.
Η μόνη διαφορά τους είναι ότι το μέγεθός τους ορίζεται ΜΙΑ φορά κατά είτε κατά την εκτέλεση είτε κατά την μεταγλώττιση και από κει και πέρα δεν αλλάζει.
Για το resize, να πω καταρχάς ότι στο επίπεδο που διδάσκουμε είναι λάθος να λύσουμε άσκηση με resize πίνακα. Το resize θα είχε νόημα αν θέλαμε κάτι πιο δύσκολο, για παράδειγμα να υλοποιήσουμε αραιούς πίνακες, όπου ξεκινάμε με τη δήλωση ενός πίνακα στο περίπου (αφού ο μοναδικός μας στόχος είναι να γλυτώσουμε RAM), και στη συνέχεια τον μεγαλώνουμε κλιμακωτά ανάλογα με το πόσο πυκνά είναι τα στοιχεία που θα λάβουμε, αλλά μετράμε στην πολυπλοκότητα του αλγορίθμου μας και το κόστος κάθε resize. Προφανώς λοιπόν resize δεν θα πρέπει να διδάξουμε στο Λύκειο, η ερώτηση είναι πιο θεωρητική για τις «δυνατότητες» της ψευδογλώσσας γενικά.
Θεωρώ λοιπόν ότι εφόσον επιτρέπεται ο ορισμός του μεγέθους ενός πίνακα κατά την εκτέλεση, τότε είναι συντακτικό τρυκ να κοπεί το resize. Δεν μπορούμε π.χ. να επιτρέπουμε το «Διάβασε n; Δήλωσε έναν πίνακα Α με n στοιχεία», και μετά να του πούμε ότι δεν μπορεί να αλλάξει το μέγεθος του πίνακα Α. Θα μας πει πολύ απλά, "οκ, να δηλώσω τότε έναν άλλον μεγαλύτερο και να αντιγράψω τα στοιχεία εκεί".
Αντίθετα στη ΓΛΩΣΣΑ το μέγεθος των πινάκων δεν αποφασίζεται κατά την εκτέλεση, αλλά είναι γνωστό κατά τη μεταγλώττιση. Στη ΓΛΩΣΣΑ, ακόμα κι αν ένας πίνακας δηλωθεί εντός μίας διαδικασίας, δεν μπορούμε να την καλέσουμε με μεταβλητό αριθμό στοιχείων Ν. Ο "compiler" ή ο "διερμηνευτής" ξέρουν πριν την εκτέλεση του προγράμματος πόση RAM θα χρειαστεί να δεσμεύσουν για την κλήση κάθε διαδικασίας.
@Νίκος: σόρρυ, δεν κατάλαβα ότι έλεγες για τη ΓΛΩΣΣΑ. Όχι, απ' όσο έχω καταλάβει στη ΓΛΩΣΣΑ δεν επιτρέπεται ο ορισμός του μεγέθους ενός πίνακα κατά την εκτέλεση.
Και το να "υποβιβάσουμε" την ψευδογλώσσα στο επίπεδο της ΓΛΩΣΣΑΣ και να πούμε ότι δεν επιτρέπεται να μάθουμε το μέγεθος ενός πίνακα κατά την εκτέλεση, δεν το θεωρώ αποδεκτό, γιατί τότε για παράδειγμα δεν μπορώ να φτιάξω τον αλγόριθμο για τους αραιούς πίνακες που έλεγα παραπάνω. Δεν νομίζω ότι πρέπει να μπουν τέτοιοι τεχνητοί περιορισμοί στην ψευδογλώσσα μόνο και μόνο για να έχουμε ευκολότερη εξέταση στις πανελλήνιες, αν είναι αυτός ο σκοπός μπορούμε απλά να ζητήσουμε σε επόμενο βιβλίο να ενώσουν την ΓΛΩΣΣΑ με την ψευδογλώσσα και να ξεμπερδεύουμε.
1) Κατάργηση των άνω ορίων (τα οποία είναι δούρειος ίππος)
2) Οι ασκήσεις με άγνωστο πλήθος στοιχείων δεν λύνονται με πίνακες (δεν υπάρχουν άνω όρια)
Για τα όρια, όχι, θεωρώ ότι ακόμα κι αν δεν φαίνονται, ανά πάσα στιγμή θα πρέπει να ξέρουμε τα όρια του πίνακα. Είναι στις ιδιότητες της δομής, δεν μπορούμε να υποθέσουμε ότι μπορούμε να την μεγαλώσουμε αυθαίρετα χωρίς να έχουμε τεράστιο κόστος για reallocation και memory copy.
Στην ψευδογλώσσα, θεωρώ ότι το «Διάβασε Α[ι] μέχρι ο χρήστης να δώσει 0» δεν λύνεται με πίνακες (εκτός φυσικά αν κάποιος δεχτεί να εφαρμόσει πολυπλοκότητα Ο(n
2) σε πρόβλημα Ο(n), ενώ από την άλλη, θεωρώ ότι το «Διάβασε n; Δήλωσε έναν πίνακα Α[n]» είναι αποδεκτό (στη ΓΛΩΣΣΑ όμως δεν είναι).
Χμμμ σόρρυ, βγήκε τεράστιο τελικά.
