Πρόγραμμα -υποπρογραμμα

Ξεκίνησε από theoni, 15 Μαΐου 2019, 08:34:03 ΜΜ

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

theoni

Καλησπέρα σας μια ερώτηση θέλω να κάνω πάνω στην παρακάτω άσκηση που σας παραθέτω! Η ερώτηση είναι ποιες είναι οι πραγματικές και ποιες οι τυπικές παράμετροι στο παρακάτω κύριο πρόγραμμα στη συνάρτηση και στη διαδικασία
Πρόγραμμα
Μεταβλητές
........
Αρχή
Διάβασε α,β,γ
Γράψε α,β,γ
Αρχη_επαναληψης
  Κάλεσε δ1(α,β,γ,τιμή)
  Γραψε α,β,γ
Μεχρις_οτου τιμή=αληθής
Τελος-προγραμματος

Διαδικασία δ1(γ,β,α,τιμή)
Μεταβλητές
......
Αρχή
Χ<--2*γmod(β+α)
Γράψε Χ
Τιμή<--υπ(Χ,γ)
γ<--γ+2
α<--α+1
Τελος_διαδικασιας

Συνάρτηση υπ(ζ,β):λογική
Μεταβλητές
......
Αρχή
Υ<--ζ-Α_Μ(β/2)
Αν Υ≥0 τότε
υπ<--αληθης
Αλλιώς
υπ<-- ψευδής
Τελος_αν
Τέλος συναρτησης

theoni

Η απάντηση που δίνει ο δημιουργός της άσκησης είναι
Για το πρόγραμμα :
Πραγματικές:α,β,γ,τιμή
Τυπικές: γ,β,α,τιμή

Για τη συνάρτηση
Πραγματικές :ζ,β
Τυπικές: -
 
Για τη διαδικασία
Πραγματικές:Χ,γ
Τυπικές:ζ,β
   Είναι σωστή????

petrosp13

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

theoni

Στο παράδειγμα δηλαδή από ότι κατάλαβα η συνάρτηση έχει τυπικές παραμέτρους και όχι πραγματικές που λέει η λύση....αυτό ότι οι τυπικές είναι πάντα οι ίδιες δεν το κατάλαβα????

petrosp13

Τυπικές είναι αυτές που έχει το υποπρόγραμμα στην παρένθεση του
Πραγματικές όταν το καλείς, άρα μπορείς να το καλείς με πολλές διαφορετικές πραγματικές παραμέτρους κάθε φορά, αλλά οι τυπικές θα είναι πάντα οι ίδιες
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

bugman

Αυτή η διάκριση σε πραγματικές και τυπικές δεν μου αρέσει!

Ουσιαστικά οι μεταβλητές που έχει το υποπρόγραμμα είναι τοπικές μεταβλητές, εκτός από τις ορισμένες ως παραμέτρους που θα περάσουμε με αναφορά. Οι "πραγματικές" που λέγονται παραπάνω είναι οι με αναφορά περασμένες μεταβλητές. Ειδικά στη ΓΛΩΣΣΑ και σε μερικές άλλες όπως η Visual Basic, δέχονται σε θέση παραμέτρων εκφράσεις, που δίνουν το τύπο που περιμένουμε στην παράμετρο. Ίσως από εκεί να προκύπτει και το προσδιορισμός ως τυπική για μια μεταβλητή. Στη ΓΛΩΣΣΑ στις συναρτήσεις όλες οι παράμετροι παίρνουν τιμή και όχι αναφορά. Δηλαδή δεν ισχύει η "πραγματική" μεταβλητή, όπως δείχθηκε παραπάνω (δηλαδή η περασμένη με αναφορά, που γίνεται μόνο στα υποπρογράμματα).

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

theoni

Άρα η ερώτηση ποιες είναι οι τυπικές παράμετροι ενός προγράμματος δεν έχει νόημα γιατί το πρόγραμμα δεν έχει τυπικές!!!!!

andreas_p

Καλημέρα  !
Η συναδέλφισσα (;) από Κόρινθο  , που κάτι ζήτησε ας επικοινωνήσει .
Είναι διαθέσιμο.
Α.Π.

bugman

http://users.sch.gr/manpap/school_material/aepp/unit2/unit2.htm
Εδώ υπάρχει αναφορά για πραγματικές και τυπικές παράμετρους. Ενδιαφέρον παρουσιάζει ο περιορισμός στο όνομα των δύο μεταβλητών που θα κάνουν ένα ζευγάρι πραγματικής με τυπική παράμετρο. Ο περιορισμός είναι ότι δεν θα έχουν το ίδιο όνομα!
Ειλικρινά δεν μπορώ να σκεφτώ ποιο είναι το κόλλημα για αυτόν τον περιορισμό.
Επιπλέον ο μηχανισμός αντιγραφής τιμής της πραγματικής στην τυπική κατά την αρχή της κλήσης και το ανάποδο στο τέλος της κλήσης (copy in copy out) είναι μια επιλογή περισσότερο για να δώσουν μια απλή εξήγηση του πώς συνδέονται οι πραγματικές παράμετροι με τις τυπικές, μάλλον άτυχη. Και αυτό γιατί ανάγκασε τους διερμηνευτές να αντιγράφουν και πίνακες!
Επίσης από το σύνδεσμο παραπάνω προκύπτουν δύο ιδιαίτερες αναφορές, το πέρασμα πραγματικής σε τυπική, χωρίς η πραγματική να έχει πάρει μια αρχική τιμή, και τα μεγέθη των πινάκων, ως τυπικών παραμέτρων, να προκαθορίζονται, στατικά, πριν την εκτέλεση. Για το πρώτο σε συνάρτηση προφανώς δεν γίνεται, αφού η τυπική παράμετρος περνάει με τιμή. Για το δεύτερο αναφέρεται η ανάγκη χρήσης μιας παραμέτρου ακόμα που θα δέχεται τον αριθμό των ενεργών στοιχείων.
Τα στοιχεία ενός πίνακα έχουν νόημα να τα χωρίζουμε σε ενεργά και μη για δυο λόγους. Ο πρώτος προκύπτει από την απουσία καθορισμού μεγέθους στοιχείων πίνακα κατά την εκτέλεση, οπότε φτιάχνουμε ένα μεγάλο πίνακα και σε μια μεταβλητή, για μονοδιάστατο πίνακα, κρατάμε τον τωρινό αριθμό στοιχείων (συνεχόμενων). Ο δεύτερος δεν φαίνεται εκ πρώτης όψεως, αλλά είναι σημαντικός. Η ΓΛΩΣΣΑ ελέγχει πριν χρησιμοποιήσει ένα στοιχείο πίνακα αν έχει πάρει τιμή, σε κάθε χρήση. Αν ζητάμε τιμή από στοιχείο πίνακα που δεν έχει πάρει αρχική τιμή βγαίνει λάθος κατά την εκτέλεση (run time error). Έτσι ενδέχεται να περάσουμε έναν πίνακα όπου τα μη ενεργά στοιχεία να μην έχουν πάρει ποτέ τιμή. Και προκύπτει το ερώτημα, κατά την αντιγραφή στο πέρασμα με αναφορά, αντιγράφεται και η μή τιμή; Δηλαδή ο πίνακας οφείλει να έχει για κάθε στοιχείο και ένα ακόμα εσωτερικό που να δείχνει αν το στοιχείο έχει τιμή ή όχι!  Εδώ βλέπουμε δηλαδή ότι οι περιορισμοί ή στη πράξη οι διατυπώσεις λειτουργίας, της ΓΛΩΣΣΑΣ, οδηγούν σε πολύπλοκες ιδέες, που δεν συμβάλλουν στην κατανόησή της.

epsilonXi

Πρόγραμμα ...
  Κάλεσε δ1(α,β,γ,τιμή)   !πραγματικές: α,β,γ,τιμή
Τελος-προγραμματος

Διαδικασία δ1(γ,β,α,τιμή) !τυπικές: γ,β,α,τιμή
Τιμή<--υπ(Χ,γ) !πραγματικές: Χ,γ
Τελος_διαδικασιας

Συνάρτηση υπ(ζ,β):λογική !τυπικές: ζ,β
Υ<--ζ-Α_Μ(β/2)   !πραγματικές: β/2 ;χμμμ
Τέλος συναρτησης

theoni

Το β/2 δεν είναι πραγματική γιατί δεν καλεί κάποιο προγραμμα

bugman

Στη κλήση συνάρτησης δεν έχουμε πέρασμα με αναφορά, έτσι η Χ είναι τοπική μεταβλητή στη δ1και θα αντιγραφεί στην τυπική Ζ της υπ(),,ενώ η γ είναι η πραγματική α του προγράμματος η οποία θα αντιγραφεί στην β, μια τυπική παράμετρος στην υπ().

theoni

Δεν το κατάλαβα αυτό το τελευταίο????η συνάρτηση έχει μόνο τυπικές σωστά???