συναρτησεις και διαδικασιες χωρις ορισματα

Ξεκίνησε από JohnyF, 10 Μαρ 2016, 01:55:30 ΜΜ

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

andreas_p

ΠΕΡΙΤΤΟΊ <- ΠΕΡΙΤΤΟΊ  + Ι

Αναδρομή  (;)

Εκτός  ύλης !

wmaster

Καλημέρα,
μια συνάρτηση μπορεί να μην έχει παραμέτρους. π.χ μια συνάρτηση που υπολογίζει και επιστρέφει τον αριθμό Π με 10 δεκαδικά ψηφία, χρησιμοποιώντας μαθηματικό τύπο. Η είσοδος μπορεί να είναι καμία μία ή περισσότερες τιμές.
Συνάρτηση Π():Πραγματική

evry

#17
Αυτό που λες δεν ισχύει.
Ουσιαστικά αυτό που περιγράφεις είναι ένας αλγόριθμος του οποίου η παράμετρος είναι το πλήθος των δεκαδικών ψηφίων (10 =έχεις διαλέξει)
Αν δεν βάλεις παράμετρο έχεις μια υπολογιστική διαδικασία η οποία υπολογίζει πάντα ακριβώς το ίδιο πράγμα, δεν είναι γενικευμένη δηλαδή και δεν ξέρω κατά πόσο μπορεί να χαρακτηριστεί αλγόριθμος. Είναι θέμα ορισμού εδώ. Αν ψάξεις στους πιο πολλούς ορισμούς επιτρέπεται (zero-input algorithms).

Παράθεση από: wmaster στις 10 Ιουν 2018, 09:42:50 ΠΜ
Καλημέρα,
μια συνάρτηση μπορεί να μην έχει παραμέτρους. π.χ μια συνάρτηση που υπολογίζει και επιστρέφει τον αριθμό Π με 10 δεκαδικά ψηφία, χρησιμοποιώντας μαθηματικό τύπο. Η είσοδος μπορεί να είναι καμία μία ή περισσότερες τιμές.
Συνάρτηση Π():Πραγματική

Όμως στο μάθημά μας, αν δεις τον ορισμό του αλγορίθμου στο κεφάλαιο 2 αναφέρει ότι σε αυτή την περίπτωση η είσοδος έρχεται από συνάρτηση παραγωγής τυχαίων αριθμών.
Φυσικά στο πλαίσιο του μαθήματος το σημαντικότερο επιχείρημα είναι ότι ενώ το βιβλίο το αναφέρει ρητά για τις διαδικασίες δεν το αναφέρει για τις συναρτήσεις. Γιατί άραγε;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

wmaster

Καλημέρα και πάλι,
η συνάρτηση ως αλγόριθμος (αυτόνομο τμήμα) μπορεί να έχει καμία μία ή περισσότερες τιμές ως είσοδο.
Το βιβλίο αναφέρει ότι ένας αλγόριθμος μπορεί να μην έχει είσοδο καθώς "η είσοδος έρχεται από συνάρτηση παραγωγής τυχαίων αριθμών" επομένως υπάρχει τέτοια συνάρτηση.
Η συνάρτηση Συνάρτηση Τυχαίος():Πραγματική, χωρίς παραμέτρους, προφανώς είναι σωστή, σύμφωνα και με αυτά που αναφέρεις.

Σχετικά με την χρησιμότητα της συνάρτησης που υπολογίζει το Π δεν γράφω ότι έχει νόημα μια τέτοια συνάρτηση, αλλά δεν καταλαβαίνω ποιον κανόνα παραβιάζει. Το βιβλίο δεν αναφέρει ότι μια συνάρτηση υποχρεωτικά πρέπει να έχει παραμέτρους.
Γιατί πρέπει να είναι γενικευμένη μια συνάρτηση?

evry

Παράθεση από: wmaster στις 10 Ιουν 2018, 11:36:24 ΠΜ
Το βιβλίο δεν αναφέρει ότι μια συνάρτηση υποχρεωτικά πρέπει να έχει παραμέτρους.

Εκεί είναι το θέμα, ότι το βιβλίο αναφέρει ρητά ότι στη διαδικασία η λίστα παραμέτρων δεν είναι υποχρεωτική. Δεν λέει τίποτα όμως για συνάρτηση. Αν και στις δυο περιπτώσεις η λίστα ήταν προαιρετική δεν θα έλεγε ότι ότι στα υποπρογράμματα η λίστα παραμέτρων δεν είναι υποχρεωτική? Γιατί το αναφέρει μόνο για διαδικασίες?

Επίσης όσον αφορά το θέμα με τη γεννήτρια τυχαίων αριθμών, δεν υπάρχει τέτοια συνάρτηση στη ΓΛΩΣΣΑ. Το ότι την αναφέρει στον ορισμό του αλγορίθμου ως παράδειγμα καμίας εισόδου εγώ το εκλαμβάνω ότι ακόμα και στην περίπτωση που ο αλγόριθμος δεν έχει explicit input θα έχει κάποια άλλη είσοδο π.χ. από άλλο υποπρόγραμμα ή αρχείο ή Pipe/socket η δεν ξέρω τι άλλο. Το θέμα όμως είναι ότι αυτές οι δυνατότητες δεν υπάρχουν στη ΓΛΩΣΣΑ.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

akalest0s

Επειδή αυτό το θέμα έχει μείνει άλυτο στο μυαλό μου, συγγνώμη για την επαναφορά μετά από 2 χρόνια, αλλά έχω κάποιες ερωτήσεις.
Παράθεση από: evry στις 10 Ιουν 2018, 12:03:07 ΜΜ
Επίσης όσον αφορά το θέμα με τη γεννήτρια τυχαίων αριθμών, δεν υπάρχει τέτοια συνάρτηση στη ΓΛΩΣΣΑ. Το ότι την αναφέρει στον ορισμό του αλγορίθμου ως παράδειγμα καμίας εισόδου εγώ το εκλαμβάνω ότι ακόμα και στην περίπτωση που ο αλγόριθμος δεν έχει explicit input θα έχει κάποια άλλη είσοδο π.χ. από άλλο υποπρόγραμμα ή αρχείο ή Pipe/socket η δεν ξέρω τι άλλο. Το θέμα όμως είναι ότι αυτές οι δυνατότητες δεν υπάρχουν στη ΓΛΩΣΣΑ.
Η απάντηση στην ερώτηση "μια συνάρτηση μπορεί να μην έχει καθόλου παραμέτρους;", εξαρτάται άμεσα από αυτό που συζητούσατε, τι θεωρείται ως είσοδος σε έναν αλγόριθμο.
Με τα λόγια του βιβλίου:
"Η περίπτωση που δεν δίνονται τιμές δεδομένων εμφανίζεται, όταν ο αλγόριθμος δημιουργεί και επεξεργάζεται κάποιες πρωτογενείς τιμές με τη βοήθεια συναρτήσεων παραγωγής τυχαίων αριθμών ή με τη βοήθεια άλλων απλών εντολών."
Αυτές οι απλές εντολές τι μπορεί να είναι; Πρώτο πράγμα που μου έρχεται στο μυαλό είναι απευθείας εκχωρήσεις τιμών, πχ α <- 12;

Αν αυτές οι απλές εντολές είναι κάτι άλλο (τι; ), κάτι που επίσης δεν μπορεί να υλοποιηθεί με Γλώσσα, όπως οι συναρτήσεις παραγωγής τυχαίων αριθμών, τότε όντως δεν μπορεί να υπάρχει αλγόριθμος γραμμένος σε Γλώσσα (τουλάχιστον αν μείνουμε σε μια αυστηρή προσέγγιση), ο οποίος να μην έχει είσοδο.
Αλλιώς_Αν αυτές οι απλές εντολές είναι αυτό που είπα, πχ εκχωρήσεις τιμών, τότε μπορεί ένας αλγόριθμος γραμμένος σε Γλώσσα να έχει είσοδο "καμμία τιμή δεδομένων" και να εξακολουθεί να θεωρείται ότι έχει είσοδο (μέσω των "απλών" αυτών εντολών). Κατ' επέκταση, σε αυτή τη περίπτωση, μπορεί να υπάρχει συνάρτηση χωρίς παραμέτρους, η οποία παίρνει τιμές από κλήση άλλης συνάρτησης ή από απευθείας εκχωρήσεις εντός της.

Θεωρώ ατυχή και άχαρα αυτά τα θέματα βέβαια, εστιάζοντας στις αδυναμίες του βιβλίου και είναι και χιλιοειπωμένα, αλλά ένα Σ-Λ με την συγκεκριμένη ερώτηση, παραμένει νομίζω διφορούμενο... Ελπίζω να μην το δούμε σε εξετάσεις.
Γιατί, για το "καλώς ορισμένο" σε αυτό το μάθημα, έπαψα να ελπίζω :P
Άραγε, μετά από 20 χρόνια, αν πάμε σε python κάποια στιγμή, αναρωτιέμαι αν μάθαμε το μάθημά μας (περί του "καλώς ορισμένου") ή θα το διαιωνίσουμε στο κατά τα άλλα "νέο" ΠΣ...

υγ> το θέμα καλύτερα να μεταφερόταν στο "Θεωρία"
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

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

Το σχολικό βιβλιο στη σελιδα 179  στις διαδικασίες αναφέρει:

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

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

akalest0s

Γιώργο ευχαριστώ για την απάντηση (με ευθύτητα όχι με ειρωνεία). Το ξέρω αυτό, και έχει ειπωθεί και εδώ. Αλλά θεωρώ αυτό το συμπέρασμα πολύ στον αέρα, ειδικά για ένα βιβλίο που ξέρουμε όλοι πόσες αδυναμίες φραστικές έχει.
Για τις διαδικασίες δεν τίθεται θέμα. Για τις συναρτήσεις μιλάμε.
Το πόσο επίφοβο είναι να βασιστούμε σε αυτό που λέτε ("στις συναρτήσεις δεν αναφέρει κάτι αντίστοιχο"), φαίνεται από πολλά κακογραμμένα σημεία στο βιβλίο. Ένα από τα πολλά, είναι αμέσως μετά: μπαχαλωδώς αντιμετωπίζει την κλήση υποπρογράμματος από υποπρόγραμμα.
"Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται από το κύριο πρόγραμμα ή από άλλη διαδικασία ή συνάρτηση."
Ενώ είναι υποτίθεται στο υποκεφάλαιο διαδικασιών, πετάει μια παράγραφο για όλα τα υποπρογράμματα, όπου χωρίς σαφές ξεκαθάρισμα, λέει ότι όλα μπορούν να καλούν όλα. Έτσι το θέλανε; Ή θέλανε να ξεχωρίσουν ότι οι συναρτήσεις δεν μπορούν να καλούν διαδικασίες; Ή δεν το είχαν ακόμη αποφασίσει όταν γραφόταν το βιβλίο;

Απορώ πως σε αυτό το σημείο βγάζετε ένα τόσο προωθημένο συμπέρασμα από μια τόσο μικρή λεπτομέρεια, ενός τόσο κακογραμμένου βιβλίου;
Μπορεί κάποιος να αναιρέσει αυτό που ισχυρίστηκα περί εισόδου; αυτό θα διαφώτιζε περισσότερο την κατάσταση.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

thaaanos

Μία συνάρτηση χωρίς ορίσματα είναι μια τιμή

Μπορείς να χρησιμοποιήσεις μια συνάρτηση που επιστρέφει μια σταθερά, για την καθολικής της εμβέλεια και να παρακάμψεις την περιορισμένη εμβέλεια των σταθερών, πχ για όρια, ρυθμίσεις κλπ που θες να μοιράζονται σε όλα τα υποπρογράμματα.




alkisg

Στον Διερμηνευτή, στην Pascal και αλλού, δεν επιτρέπεται κλήση συνάρτησης ορισμένης από τον χρήστη σε σημεία όπου χρειάζεται αποτίμηση κατά τη μεταγλώττιση, όπως είναι για παράδειγμα τα όρια ενός πίνακα.

Δηλαδή το παρακάτω δεν είναι αποδεκτό:

ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ: πίνακας[συνάρτηση_όρια]

thaaanos

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

bugman

Παράθεση από: alkisg στις 08 Μαρ 2021, 02:21:06 ΜΜ
Στον Διερμηνευτή, στην Pascal και αλλού, δεν επιτρέπεται κλήση συνάρτησης ορισμένης από τον χρήστη σε σημεία όπου χρειάζεται αποτίμηση κατά τη μεταγλώττιση, όπως είναι για παράδειγμα τα όρια ενός πίνακα.

Δηλαδή το παρακάτω δεν είναι αποδεκτό:

ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ: πίνακας[συνάρτηση_όρια]
Με πιο απλά λόγια σε δήλωση στατικού πίνακα (θα έχει ήδη το προαποφασισμένο μέγεθος πριν την εκτέλεση), μπαίνουν μόνο σταθερές τιμές. Σταθερή τιμή μπορεί να είναι μια απλή αριθμητική τιμή πχ 100 ή ένα όνομα σταθερής τιμής που δηλώνει μια αριθμητική τιμή.
Η τεχνολογία έχει προχωρήσει ως προς τη διαχείριση μνήμης ενός υπολογιστή και για το λόγο αυτό επικρατούν οι δυναμικοί πίνακες οι οποίοι μπορούν να αυξομοιώσουν μέγεθος.
Έχουμε περάσει την εποχή της χρήσης μιας επίπεδης μνήμης. Η μνήμη είναι τεμαχισμένη σε μπλοκ τα οποία μπορούν να αναδιαταχτούν από το λειτουργικό σύστημα, με το λεγόμενο Memory Management Unit MMU. Για το   λόγο αυτό μιλάμε για εικονική μνήμη, μέρος της οποίας μπορεί να είναι ακόμα και στο δίσκο (swap file η partition).


alkisg

Παράθεση από: bugman στις 08 Μαρ 2021, 06:32:27 ΜΜ
Με πιο απλά λόγια σε δήλωση στατικού πίνακα (θα έχει ήδη το προαποφασισμένο μέγεθος πριν την εκτέλεση), μπαίνουν μόνο σταθερές τιμές.

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

Κώδικας: glossa
ΠΡΟΓΡΑΜΜΑ ΌριαΠίνακα
ΣΤΑΘΕΡΕΣ
  Ν = 10
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίνακας[Α_Μ(Τ_Ρ(2*Ν))] 
ΑΡΧΗ
  ΓΡΑΨΕ "Ο πίνακας έχει τόσα στοιχεία: ", Α_Μ(Τ_Ρ(2*Ν)) 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

telits

Συγγνώμη αν έχει απαντηθεί ξανά το ερώτημα....
Αν μια πραγματικη παραμετρος είναι ΑΚΕΡΑΙΑ και η
αντίστοιχη τυπική της λογική... τι λάθος θεωρείται;
κάποιοι μεταγλωττιστές σίγουρα θα το εντόπιζαν.
Όμως στη ΓΛΩΣΣΑ; υπάρχει σε κάποιο σημείο της ύλης γραμμένο;
Τηλέμαχος Ελευθερίου
Καθηγητης Πληροφορικης στο Ρεθυμνο☘

pgrontas

#29
Παράθεση από: telits στις 05 Απρ 2021, 02:19:57 ΠΜ
Συγγνώμη αν έχει απαντηθεί ξανά το ερώτημα....
Αν μια πραγματικη παραμετρος είναι ΑΚΕΡΑΙΑ και η
αντίστοιχη τυπική της λογική... τι λάθος θεωρείται;
κάποιοι μεταγλωττιστές σίγουρα θα το εντόπιζαν.
Όμως στη ΓΛΩΣΣΑ; υπάρχει σε κάποιο σημείο της ύλης γραμμένο;

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

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

ΥΓ: Για να μην παρεξηγηθώ, θα έγραφα αντικανονικού τερματισμού μόνο αν με το ζόρι έπρεπε να απαντήσω κάτι. Όπως λέει και ο Άλκης παρακάτω, υπάρχει θέμα με το ερώτημα αυτό.

Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson