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

Ξεκίνησε από ΑΚ, 01 Μαρ 2006, 01:56:02 ΜΜ

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

ΑΚ

Να γράψετε πρόγραμμα που
Στο κυρίως μέρος:
α) διαβάζει 50 ακεραίους και τους αποθηκεύει σε πίνακα με όνομα Α.
β) διαβάζει 1000 ακεραίους και τους αποθηκεύει σε πίνακα με όνομα Β.
γ) καλεί την διαδικασία ταξινόμηση με παράμετρο τον πίνακα
δ) καλεί την διαδικασία ταξινόμηση (ακολουθεί υποερώτημα) με παράμετρο τον πίνακα Β
ε) εμφανίζει τα στοιχεία των πινάκων Α και Β.
στ) να γράψετε την διαδικασία Ταξινόμηση που δέχεται έναν πίνακα και τον επιστρέφει ταξινομημένο (χρήση φυσαλίδας).

Το ερώτημα είναι: πως θα γίνει η δήλωση του πίνακα στην διαδικασία;

AK

στο τέλος του ερωτήματος γ να προστεθεί: Α

evry

Ο πίνακας ορίζεται κανονικά όπως και στο πρόγραμμα στη λίστα δηλώσεων της διαδικασίας.
Το πρόβλημα εδώ είναι άλλο. Δεν μπορείς να χρησιμοποιήσεις την ίδια διαδικασία ταξινόμησης και για τους δυο πίνακες γιατί είναι διαφορετικού τύπου. Θα πρέπει να ορίσεις άλλη διαδικασία ταξινόμησης για τον Α και άλλη για τον Β.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

ΔΙΑΔΙΚΑΣΙΑ Ταξινόμηση (Πλήθος, ΠΙΝΑΚΑΣ)
ΣΤΑΘΕΡΕΣ
   Ν = 50000  ! μέγιστο πλήθος
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ΠΙΝΑΚΑΣ[Ν], βοηθ
  ΑΚΕΡΑΙΕΣ : Πλήθος, i, j
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Πλήθος
    ΓΙΑ j ΑΠΟ Πλήθος ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
      ΑΝ (ΠΙΝΑΚΑΣ[j-1] > ΠΙΝΑΚΑΣ[j]) ΤΟΤΕ ! αύξουσα ταξινόμηση
         βοηθ <- ΠΙΝΑΚΑΣ[j-1]
         ΠΙΝΑΚΑΣ[j-1] <- ΠΙΝΑΚΑΣ[j]
         ΠΙΝΑΚΑΣ[j] <- βοηθ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


ερώτημα α.
Πλήθος <- 50
ΚΑΛΕΣΕ Ταξινόμηση (Πλήθος, Α)


ερώτημα β.
Πλήθος <- 1000
ΚΑΛΕΣΕ Ταξινόμηση (Πλήθος, Α)

Δεν μπορούμε στην παραπάνω διαδικασία να δώσουμε ως είσοδο πίνακα μεγαλύτερο από 50.000 θέσεις
Ναι, χαραμίζουμε στην πρώτη περίπτωση 49.950 θέσεις και στην δεύτερη 49.000, ε και τι μ' αυτό;

Με εκτίμηση,

evry

Συμφωνώ μαζί σου απλά θέλω να σημειώσω ότι το μοναδικό μάθημα, σε όλες τις εκπαιδευτικές βαθμίδες στις οποίες διδάσκεται προγραμματισμός Η/Υ (ΑΕΙ, ΤΕΙ, ΙΕΚ, ΤΕΕ, Λύκειο), στο οποίο το παρακάτω πρόγραμμα θεωρείται σωστό είναι μόνο το μάθημα της Ανάπτυξης Εφαρμογών της Γ' Λύκειου και κανένα άλλο.
   Το να χαραμίζεις τόσες θέσεις μνήμης δε νομίζω ότι έχει μεγάλη διαφορά από το να αλλάζεις το μετρητή μέσα στην επανάληψη ΓΙΑ. Και τα δυο ισχύουν σε όλες τις γλώσσες προγραμματισμού αλλά κανείς δεν τα θεωρεί καλή πρακτική.
Μάλλον είναι από τα πράγματα που θα πρέπει να αλλάξουν στο μάθημα μαζί με κάποια θέματα απόδοσης αλγορίθμων

Παράθεση από: ptsiotakis στις 01 Μαρ 2006, 03:46:57 ΜΜ
ΔΙΑΔΙΚΑΣΙΑ Ταξινόμηση (Πλήθος, ΠΙΝΑΚΑΣ)
ΣΤΑΘΕΡΕΣ
Ν = 50000 ! μέγιστο πλήθος
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΙΝΑΚΑΣ[Ν], βοηθ
ΑΚΕΡΑΙΕΣ : Πλήθος, i, j
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Πλήθος
ΓΙΑ j ΑΠΟ Πλήθος ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ (ΠΙΝΑΚΑΣ[j-1] > ΠΙΝΑΚΑΣ[j]) ΤΟΤΕ ! αύξουσα ταξινόμηση
βοηθ <- ΠΙΝΑΚΑΣ[j-1]
ΠΙΝΑΚΑΣ[j-1] <- ΠΙΝΑΚΑΣ[j]
ΠΙΝΑΚΑΣ[j] <- βοηθ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


ερώτημα α.
Πλήθος <- 50
ΚΑΛΕΣΕ Ταξινόμηση (Πλήθος, Α)


ερώτημα β.
Πλήθος <- 1000
ΚΑΛΕΣΕ Ταξινόμηση (Πλήθος, Α)

Δεν μπορούμε στην παραπάνω διαδικασία να δώσουμε ως είσοδο πίνακα μεγαλύτερο από 50.000 θέσεις
Ναι, χαραμίζουμε στην πρώτη περίπτωση 49.950 θέσεις και στην δεύτερη 49.000, ε και τι μ' αυτό;

Με εκτίμηση,
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

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

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

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

alkisg

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

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

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

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

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

ΑΚ

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


gpapargi

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

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

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

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

alkisg

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

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

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

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

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

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

kinik

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

Vangelis

Εδώ οι άλλοι σκέφτονται να καταργήσουν το μάθημα και εμείς "μαλώνουμε" για το είδος της γλώσσας προγραμματισμού που πρέπει να χρησιμοποιήσουμε.
Μήπως πρέπει να ξαναδιαβάσουμε την συζήτηση  για το σκοπό του μαθήματος;

Βαγγέλης   

evry

Τελικά γνωρίζουμε τι θα γίνει με αυτό το θέμα; Θα καταργηθεί το μάθημα της ΑΕΠΠ και ο καθηγητής πληροφορικής θα έχει υποβοηθητικό ρόλο στο σχολείο? Κάτι σαν διοικητικός υπάλληλος δηλαδή?  Για τι χρονικό όρίζοντα μιλάμε?


Παράθεση από: Vangelis στις 03 Μαρ 2006, 09:09:55 ΜΜ
Εδώ οι άλλοι σκέφτονται να καταργήσουν το μάθημα και εμείς "μαλώνουμε" για το είδος της γλώσσας προγραμματισμού που πρέπει να χρησιμοποιήσουμε.
Μήπως πρέπει να ξαναδιαβάσουμε την συζήτηση για το σκοπό του μαθήματος;

Βαγγέλης
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

xara_pap

Παράθεση από: Παναγιώτης Τσιωτάκης στις 01 Μαρ 2006, 03:46:57 ΜΜ
ΔΙΑΔΙΚΑΣΙΑ Ταξινόμηση (Πλήθος, ΠΙΝΑΚΑΣ)
ΣΤΑΘΕΡΕΣ
   Ν = 50000  ! μέγιστο πλήθος
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ΠΙΝΑΚΑΣ[Ν], βοηθ
  ΑΚΕΡΑΙΕΣ : Πλήθος, i, j
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Πλήθος
    ΓΙΑ j ΑΠΟ Πλήθος ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
      ΑΝ (ΠΙΝΑΚΑΣ[j-1] > ΠΙΝΑΚΑΣ[j]) ΤΟΤΕ ! αύξουσα ταξινόμηση
         βοηθ <- ΠΙΝΑΚΑΣ[j-1]
         ΠΙΝΑΚΑΣ[j-1] <- ΠΙΝΑΚΑΣ[j]
         ΠΙΝΑΚΑΣ[j] <- βοηθ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


ερώτημα α.
Πλήθος <- 50
ΚΑΛΕΣΕ Ταξινόμηση (Πλήθος, Α)


ερώτημα β.
Πλήθος <- 1000
ΚΑΛΕΣΕ Ταξινόμηση (Πλήθος, Α)

Δεν μπορούμε στην παραπάνω διαδικασία να δώσουμε ως είσοδο πίνακα μεγαλύτερο από 50.000 θέσεις
Ναι, χαραμίζουμε στην πρώτη περίπτωση 49.950 θέσεις και στην δεύτερη 49.000, ε και τι μ' αυτό;

Με εκτίμηση,

Κυριε Τσιωτάκη,
στο κυρίως πρόγραμμα οι πίνακες Α και Β θα είναι δηλωμένοι για 50000 θέσεις ή Α[50] και Β[100]?
Ευχαριστώ

Καρκαμάνης Γεώργιος

Θεωρητικά μπορεί να είναι στο πρόγραμμα δηλωμένος ο πίνακας και ως Α[50], και να αντιγράφεται  σε υποπρόγραμμα σε έναν μεγαλύτερο σε μέγεθος πίνακα

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


P.Tsiotakis

παρότι αυτό περιορίζει κατά πολύ την ευελιξία των υποπρογραμμάτων, θεωρώ σε αυτή τη φάση οτι οι πίνακες ως τυπικές και πραγματικές παράμετροι πρέπει να έχουν το ίδιο μέγεθος (και τύπο) Κι αυτο γιατί συνδέονται ένα προς ένα.
Διαφορετικά ανοίγονται πολλές κερκόπορτες που πρέπει να οριστούν.
Θεωρώ ότι αυτή η προσέγγιση είναι η πιο απλή και ασφαλής για την ώρα.

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

marvic

Θα ήθελα να ρωτήσω εάν γίνεται μία Διαδικασία να δεχτεί σαν παράμετρο μόνο ένα στοιχείο ενός πίνακα. Πχ ο πίνακας Α=[20] και να δεχτει ως παράμετρο μόνο το Α[1].
Αν ναι πως?
???

Laertis

Φυσικά γίνεται, ως απλή μεταβλητή.
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

marvic

Αρχικά ευχαριστώ  :)
Aλλά..
Αν πχ εχω μια        ΔΙΑΔΙΚΑΣΙΑ Παραδειγμα(Α)    , όπου Α ένας πίνακας 20 θεσεων..
Περνάω σαν είσοδο όλον τον πίνακα.
Πώς θα γίνει να περάσω το πρώτο μόνο στοιχείο?
Έχω κολλήσει...

Νίκος Αδαμόπουλος

Παράθεση από: marvic στις 02 Απρ 2014, 10:45:33 ΠΜ
Αν πχ εχω μια        ΔΙΑΔΙΚΑΣΙΑ Παραδειγμα(Α)    , όπου Α ένας πίνακας 20 θεσεων..
Περνάω σαν είσοδο όλον τον πίνακα.
Πώς θα γίνει να περάσω το πρώτο μόνο στοιχείο?

Αν εννοείς την πραγματική παράμετρο:

ΔΙΑΔΙΚΑΣΙΑ Παραδειγμα(x)
ΜΕΤΑΒΛΗΤΕΣ
Τύπος: x

Στην κλήση:

.... Παράδειγμα(Α[ ι ])