Υποπρογράμματα – παράμετροι πίνακες - μέγεθος

Ξεκίνησε από lsourtzo, 15 Απρ 2006, 02:04:29 ΜΜ

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

lsourtzo

Υποπρογράμματα – παράμετροι πίνακες - μέγεθος

Θα μπορούσε να φτιαχτεί υποπρόγραμμα που να ταξινομεί διαφορετικού μεγέθους πίνακα κάθε φορά !!

Δηλαδή ένα υποπρόγραμμα έστω ΤΑΞ το οποίο να το καλώ την πρώτη φορά με όρισμα έναν πίνακα 40 θέσεων και την δεύτερη φορά με έναν πίνακα Ν θέσεων !!

( με λίγα λόγια αν θα μπορούσε να διατυπωθεί σε υποπρόγραμμα ο αλγόριθμος της φυσαλίδας όπως είναι διατυπωμένος στο σχολικό )

filippos

#1
Όχι, δεν γίνεται

ο αριθμός των πραγματικών και των τυπικών παραμέτρων πρέπει να είναι ίδιος.

Επομένως, εάν το υποπρόγραμμα περιμένει 100 τιμές (πίνακα 100 στοιχείων) το πρόγραμμα πρέπει να του "περάσει" 100 τιμές.  Ούτε 50, ούτε 150.

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

βλ.και https://alkisg.mysch.gr/steki/index.php?topic=392.0

Το μόνο που θα μπορούσε να γίνει σε αυτή την κατεύθυνση είναι να δημιουργηθεί "γενικός" αλγόριθμος ταξινόμησης αλλά με ΜΕΓΙΣΤΟ αριθμό στοιχείων:

ΔΙΑΔΙΚΑΣΙΑ Ταξινόμηση(Π, Ν)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Π[1000], Ν, ι, πρόχειρο
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ Ν
    ΓΙΑ j ΑΠΟ Ν ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1
       ΑΝ Π[j] > Π[j-1] TOTE
         ...
       ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

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

Σε αυτή την περίπτωση, εάν θέλαμε να ταξινομήσουμε πίνακα λιγότερων στοιχείων (π.χ. 500) θα έπρεπε:
1) στο κύριο πρόγραμμα  να αντιγράψουμε τα στοιχεία σε πίνακα 1000 στοιχείων
2) να καλέσουμε τη διαδικασία με τον 1000άρη πίνακα
3) στο κύριο πρόγραμμα να αντιγράψουμε τα στοιχεία από το 1000άρη στον αρχικό

π.χ

ΑΚΕΡΑΙΕΣ: Χ[1000, Ψ[500]
.
.
.
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 500
  Χ[Ι] <- Ψ[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Ταξινόμηση(Χ, 500)
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 500
  Ψ[Ι] <- Χ[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

lsourtzo

κατάλαβα τι θες να πείς ...

Σύμφωνα όμος με το κεφάλαιο 9, στην παράγραφο που αναφέρετε στο πότε χρησιμοποιούμε πίνακες, η χρήση τόσο μεγάλων πινάκων που δεν θα χρησιμοποιούνται κιόλας ολόκληροι … δεν είναι λανθασμένη ??

σπατάλη θέσεων μνήμης ...

filippos

Παράθεση από: lsourtzo στις 16 Απρ 2006, 02:26:32 ΠΜ
...η χρήση τόσο μεγάλων πινάκων που δεν θα χρησιμοποιούνται κιόλας ολόκληροι … δεν είναι λανθασμένη ??  σπατάλη θέσεων μνήμης ...

Ασφαλώς και είναι.  Έχεις δίκαιο.

"Πραγματικός" τμηματικός προγραμματισμός χωρίς τη δυνατότητα call by reference δεν είναι εύκολο (ή και δυνατό) να υπάρξει όταν θέλουμε μία παράμετρος (και ιδίως πίνακας) να αποτελεί και είσοδο και έξοδο του αλγόριθμου που υλοποιείται από το υποπρόγραμμα. 

Εν τούτοις, ο μηχανισμός copy-in-copy-out που παρουσιάζεται στο βιβλίο είναι ιδιαίτερα εύληπτος και γι' αυτό ίσως διδακτικά προτιμότερος.  Ήδη με αυτόν οι μαθητές παρουσιάζουν έντονες μαθησιακές δυσκολίες σε θέματα τμηματικού προγραμματισμού.  Εδώ δυσκολεύονται να κατανοήσουν την έννοια της στοίβας χρόνου εκτέλεσης, φαντάζεσαι τι θα γινόταν αν προσπαθούσαμε να τους μιλήσουμε για αναφορά στην ίδια θέση μνήμης με δύο διαφορετικά ονόματα !!!

Γι' αυτό το λόγο πιστεύω ότι είναι άδικος κόπος (και ίσως και λανθασμένη επιλογή) να προσπαθούμε να δημιουργήσουμε ασκήσεις σαν αυτή που συζητάμε.  Όταν μας δίνουν μαχαίρι, γιατί να προσπαθούμε να κάνουμε εγχείριση;;;  Ας αρκεστούμε στο να κόβουμε ψωμί και να αλείφουμε μαρμελάδα :):)   Ας τους μάθουμε εμείς να χρησιμοποιούν το μαχαίρι, και ... τους μαθαίνουν στο πανεπιστήμιο, να χρησιμοποιούν ... νυστέρι :)  Όταν (και αν γίνει αυτό) το κόψιμο ψωμιού θα αποτελέσει την ... πρότερη γνώση!!