Γενικό Λύκειο > Διαδικασίες

ΠΙΝΑΚΕΣ ΣΕ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

<< < (2/4) > >>

gpapargi:
Υπάρχει ένα θέμα πάνω στα υποπρογράμματα που με έχει απασχολήσει αρκετά. Από ότι καταλαβαίνω σύμφωνα με τον τρόπο που έχει υλοποιηθεί η ΓΛΩΣΣΑ, όταν ένας πίνακας είναι παράμετρος, τότε περνάνε σαν παράμετροι από το πρόγραμμα προς το υποπρόγραμμα όλα τα στοιχεία του πίνακα ένα προς ένα. Επειδή το πλήθος των παραμέτρων σε πρόγραμμα και υποπρόγραμμα πρέπει να είναι το ίδιο φοβάμαι πως ο πίνακας θα πρέπει να έχει το ίδιο πλήθος στοιχείων και στα 2.

Πάνω σε αυτό θα ήθελα να ακούσω και άλλες γνώμες.

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

alkisg:
Δυστυχώς Γιώργο με το μηχανισμό copy-in/copy-out που επιβάλλει το σχολικό βιβλίο, στο θέμα της υλοποίησης είναι υποχρεωτικό οι πίνακες να έχουν το ίδιο μέγεθος (τυπική/πραγματική παράμετρος).

Αυτό γιατί με το ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ σύμφωνα με το βιβλίο πρέπει να αντιγραφεί όλος ο τοπικός πίνακας (= τυπική παράμετρος) στον "καλώντα" πίνακα (=πραγματική παράμετρος), χωρίς να δίνεται κάποιος τρόπος περιορισμού του μεγέθους που αντιγράφεται. Ακόμα και αν περάσουμε π.χ. το Ν σαν παράμετρο, δεν είναι δυνατόν ένας μεταφραστής να καταλάβει ότι η πρώτη ακέραια παράμετρος αντιστοιχεί στο πλήθος των στοιχείων που πρέπει να αντιγραφούν.

edit: δεν το έκφρασα καλά, δεν εννοώ ότι δεν είναι δυνατή η υλοποίησή του (μπορώ άνετα να το υλοποιήσω στο Διερμηνευτή), εννοώ ότι δεν επιτρέπεται να υλοποιηθεί έτσι με βάση το σχολικό βιβλίο.

Αν η ΓΛΩΣΣΑ ήταν loosely-typed τα πράγματα θα ήταν διαφορετικά, θα ήταν δυνατή η μεταβίβαση πίνακα με διαφορετικό αριθμό στοιχείων.

Πάντως ας μην ξεχνάμε ότι ακόμα και στις επαγγελματικές αλλά strongly-typed γλώσσες όπως η Pascal αυτό απαγορεύεται, δεν είναι δηλαδή κάτι πρωτοφανές.

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

--- Παράθεση από: evry στις 01 Μαρ 2006, 02:18:03 μμ ---Ο πίνακας ορίζεται κανονικά όπως και στο πρόγραμμα στη λίστα δηλώσεων της διαδικασίας.
Το πρόβλημα εδώ είναι άλλο. Δεν μπορείς να χρησιμοποιήσεις την ίδια διαδικασία ταξινόμησης και για τους δυο πίνακες γιατί είναι διαφορετικού τύπου. Θα πρέπει να ορίσεις άλλη διαδικασία ταξινόμησης για τον Α και άλλη για τον Β.


--- Τέλος παράθεσης ---

gpapargi:
Κι εγώ δεν εκφράστηκα σωστά Άλκη. Όταν έγραψα για "τον τρόπο που έχει υλοποιηθεί η ΓΛΩΣΣΑ" εννούσα τον τρόπο που έχει οριστεί η ΓΛΩΣΣΑ μέσα στο σχολικό βιβλίο.

ʼλλωστε είναι γνωστή η θέση μου ότι μέχρι να πιστοποιηθεί κάποια υλοποίηση της ΓΛΩΣΣΑΣ αναγκαστικά πρέπει να επικαλούμαστε το σχολικό βιβλίο. Όταν με το καλό πιστοποιηθεί κάποια υλοποίηση τότε θα μπορούμε να επικαλούμαστε και αυτή σαν ισοδύναμο ορισμό.

Ήθελα οπωσδήποτε τη δική σου απάντηση αφού λόγω του ότι έχεις υλοποίησει τη ΓΛΩΣΣΑ, έχεις ασχοληθεί και με τον ορισμό της μέσα από το σχολικό βιβλίο όσο κανείς εδω μέσα.

Το πράγμα φοβάμαι πως είναι ξεκάθαρο. Ο πίνακας πρέπει να έχει το ίδιο μέγεθος σε πρόγραμμα και υποπρόγραμμα.

alkisg:
@AK: Συμφωνώ με το σκεπτικό σου, αλλά δεν είναι τόσο τραγικό όσο ακούγεται. Μπορούμε π.χ. να δηλώσουμε τους πίνακες έτσι ώστε να έχουν το ίδιο μέγεθος και ας χρησιμοποιούμε λιγότερες θέσεις (αυτό που είπε και ο Παναγιώτης παραπάνω - ίσως όχι τόσο εξτρεμιστικά ;)). Τα ίδια πράγματα ισχύουν και στην Pascal (εκτός κι αν επιλέξει κάποιος να περάσει pointer και όχι πίνακα).

Το να επιτρεπόταν μεταβλητός αριθμός στοιχείων σε πίνακες-παραμέτρους δε θα είχε μόνο θετικά, θα είχε και αρνητικές επιπτώσεις στην εκπαιδευτική πρακτική. Θα χρειαζόταν και ένας τρόπος να οριστεί το μέγεθος της κάθε διάστασης του πίνακα. Γι' αυτό βέβαια θα μπορούσαν να προταθούν αρκετοί τρόποι, φαντάσου όμως να χρειαζόταν να εξηγήσεις στους μαθητές το παρακάτω:

[glossa]ΔΙΑΔΙΚΑΣΙΑ ΕκτύπωσηΔισδιάστατουΠίνακα(Α)
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Α[?, ?] !Ένα θέμα εδώ, με τι διάσταση πρέπει να δηλωθεί;
  ΑΚΕΡΑΙΕΣ: ι, κ
ΑΡΧΗ
  ΓΙΑ ι από 1 μέχρι ΠάνωΌριοΠίνακα(Α, 1) !Το πάνω όριο της πρώτης διάστασης
    ΓΙΑ κ από 1 μέχρι ΠάνωΌριοΠίνακα(Α, 2) !Το πάνω όριο της δεύτερης διάστασης
      ΓΡΑΨΕ Α[ι, κ]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ[/glossa]

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

Ένας άλλος τρόπος θα ήταν να έχουμε "μαγικές δηλώσεις", π.χ.
ΠΡΑΓΜΑΤΙΚΕΣ: Α[Ν, Μ]
και αυτόματα να θεωρείται ότι δηλώθηκαν δυο σταθερές, οι Ν και οι Μ, οι οποίες θα είναι διαφορετικές σε κάθε εκτέλεση του υποπρογράμματος, και εκφράζουν τις διαστάσεις του πίνακα... Πάλι δύσκολο να το εξηγήσεις.

Αυτό που προσπαθώ να πω είναι ότι θα δυσκόλευε κι εμάς και τα παιδιά.

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

[*] Προηγούμενη σελίδα

Μετάβαση στην πλήρη έκδοση