Επιστροφή από Συνάρτηση

Ξεκίνησε από kapapi, 05 Απρ 2015, 11:16:23 ΠΜ

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

kapapi

Δίνεται το παρακάτω πρόγραμμα (κύριο πρόγραμμα και υποπρόγραμμα):

1. ΠΡΟΓΡΑΜΜΑ Εμβαδό_Τριγώνου
2. ΜΕΤΑΒΛΗΤΕΣ
3. ΠΡΑΓΜΑΤΙΚΕΣ: Β, Υ, Ε
4. ΑΡΧΗ
5.     Β <- 20
6.     Υ <- 5
7.     ΓΡΑΨΕ Β, Υ
8.     Ε <- Υπολογισμός (Β, Υ)
9.     ΓΡΑΨΕ Ε
10. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
11. ! =============================
12. ΣΥΝΑΡΤΗΣΗ Υπολογισμός (αριθμός1, αριθμός2) : ΠΡΑΓΜΑΤΙΚΗ
13. ΜΕΤΑΒΛΗΤΕΣ
14. ΠΡΑΓΜΑΤΙΚΕΣ: αριθμός1, αριθμός2, αριθμός3
15. ΑΡΧΗ
16.     αριθμός3 <- αριθμός1 * αριθμός2
17.     Υπολογισμός <- αριθμός3 / 2
18. ΤΕΛΟΣ_ ΣΥΝΑΡΤΗΣΗΣ

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

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

Και κάτι ακόμη: Η ίδια η συνάρτηση ,Υπολογισμός, από ποιά εντολή παίρνει την τιμή που θα επιστρέψει: από την 17, την 18 ή από την 8;
Η εντολή 18 - ΤΕΛΟΣ_ ΣΥΝΑΡΤΗΣΗΣ -προκαλεί ή όχι μεταβολή;

Αν είχα Διαδικασία, η αντίστοιχη εντολή -ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ- προκαλεί ή όχι μεταβολές;

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

petrosp13

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

itt

Παράθεση από: kapapi στις 05 Απρ 2015, 11:16:23 ΠΜ
Σύμφωνα με το νέο σχολικό βιβλίο (αντιγράφω σελίδα 179):
Σε κάθε περίπτωση μετά το τέλος της εκτέλεσης της διαδικασίας ή της συνάρτησης, γίνεται επιστροφή ακριβώς μετά το σημείο απ΄ όπου κλήθηκε.

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

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




kapapi

#3
Παράθεση από: petrosp13 στις 05 Απρ 2015, 11:46:15 ΠΜ
Νομίζω ότι όλα αυτά αποτελούν τεχνικές λεπτομέρειες που δεν θα έπρεπε να αφορούν ένα λυκειακό μάθημα...

Ναι αλλά αν φέτος έχουμε σε υποπρογράμματα θέματα όπως:
1. 2010-ΘΕΜΑ Β
2. 2010-ΘΕΜΑ Β2-ΕΠΑΝΑΛΗΠΤΙΚΕΣ
3. 2009-ΘΕΜΑ 2Α
4. 2009-ΘΕΜΑ 2Α-ΕΠΑΝΑΛΗΠΤΙΚΕΣ

τότε τι κάνουμε;

itt

Παράθεση από: kapapi στις 05 Απρ 2015, 02:07:11 ΜΜ
Ναι αλλά αν φέτος έχουμε σε υποπρογράμματα θέματα όπως:
1. 2010-ΘΕΜΑ Β
2. 2010-ΘΕΜΑ Β2-ΕΠΑΝΑΛΗΠΤΙΚΕΣ
3. 2009-ΘΕΜΑ 2Α
4. 2009-ΘΕΜΑ 2Α-ΕΠΑΝΑΛΗΠΤΙΚΕΣ

τότε τι κάνουμε;

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

kapapi

Παράθεση από: itt στις 05 Απρ 2015, 12:18:35 ΜΜ
Ίσως από τα συμφραζόμενα του βιβλίου να βγαίνει καλύτερη άκρη, πάντως αυτό που φαίνεται να θέλει να πει ο ποιητής  είναι ότι , σε επίπεδο γλώσσας μηχανής,  προφανώς η διεύθυνση επιστροφής θα είναι στην επόμενη  εντολή από την κλήση της συνάρτησης. Η οποία θα είναι η ανάθεση του περιεχομένου του καταχωρητή που έχουμε αποφασίσει από κοινού ότι κρατάει το return value για μια συνάρτηση, στη θέση μνήμης της μεταβλητής Ε.

Δηλαδή η μεταβλητή Ε από ποιά εντολή παίρνει τιμή: την 8, την 9 ή την 18;
Διότι σε αντίστοιχη άσκηση πρέπει να το γράψεις για να πάρεις μονάδες.

itt

Παράθεση από: kapapi στις 05 Απρ 2015, 03:25:11 ΜΜ
Δηλαδή η μεταβλητή Ε από ποιά εντολή παίρνει τιμή: την 8, την 9 ή την 18;
Διότι σε αντίστοιχη άσκηση πρέπει να το γράψεις για να πάρεις μονάδες.

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

kapapi

Πράγματι και εγώ πιστεύω ότι το σωστό είναι το 8.

Μπορώ να κάνω εκχώρηση σε μεταβλητή, αν πρώτα δεν έχει αποτιμηθεί (υπολογισθεί η τιμή) το δεξιό μέλος της; ΟΧΙ
Όμως αυτό -ο υπολογισμός της τιμής της-γίνεται αφού εκτελεστεί η συνάρτηση.
Άρα η επιστροφή δεν μπορεί να γίνει στην επόμενη εντολή (την 9), αλλά υποχρεωτικά στο ίδιο σημείο, στην εντολή 8 για να ολοκληρωθεί η εκχώρηση.

alkisg

Παράθεση από: kapapi στις 05 Απρ 2015, 03:25:11 ΜΜ
Δηλαδή η μεταβλητή Ε από ποιά εντολή παίρνει τιμή: την 8, την 9 ή την 18;
Διότι σε αντίστοιχη άσκηση πρέπει να το γράψεις για να πάρεις μονάδες.

Από την γραμμή 8. (btw το Ε είναι δεσμευμένο όνομα συνάρτησης και δεν μπορεί να είναι μεταβλητή).
Άλλο παράδειγμα. Φαντάσου το εξής:
Κώδικας: ΓΛΩΣΣΑ
  μεταβλητή <- Άθροισμα(1, 2) + Άθροισμα(3, 4)


Η μεταβλητή θα πρέπει να γίνει 1+2+3+4, δηλαδή 10. Την τιμή 10 δεν την έχουν δει πουθενά οι συναρτήσεις, ούτε καν στο ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ τους. Υπολογίζεται ως μέρος της εντολής ανάθεσης τιμής.

Για το "γίνεται επιστροφή ακριβώς μετά το σημείο απ΄ όπου κλήθηκε", το "σημείο" δεν αντιστοιχεί ένα-προς-ένα με γραμμές, μπορεί να είναι στην ίδια γραμμή.
Π.χ. κοιτώντας και πάλι το παραπάνω παράδειγμα που έγραψα, και οι δύο κλήσεις της συνάρτησης Άθροισμα θα επιστρέψουν στην ίδια γραμμή, ώστε μετά να γίνει ο υπολογισμός του αθροίσματος, και μετά να γίνει η ανάθεση τιμής.
Ουσιαστικά το "μετά το σημείο κλήσης" μπορεί να εξηγηθεί σωστά μόνο λέγοντας για τον ισοδύναμο κώδικα μηχανής, για instruction pointers που μπαίνουν στη στοίβα κλήσης κλπ.

kapapi

#9
Ακριβώς ότι ήμουνα έτοιμος να δώσω ένα τέτοιο παράδειγμα, όπου στα δεξιά του συμβόλου εκχώρησης να βάλω και κάτι άλλο, εκτός από μόνη τη συνάρτηση.

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

το -Υπολογισμός- είναι δεσμευμένο όνομα συνάρτησης, όχι το Ε.


kapapi

Το Ε ήταν όνομα μιας μεταβλητής στο παράδειγμα που έδωσα στην αρχή του θέματος.

Αλλά άνοιξε άλλο θέμα που το διαβάζω για πρώτη φορά:

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

Μου φαίνεται πολύ περίεργο. Έχω δει πάρα πολλές ασκήσεις ακόμη και στις πανελλήνιες να χρησιμοποιούν ονόματα για μεταβλητές όπως: Ε, ΕΦ,ΗΜ, ΛΟΓ.
Παράδειγμα σε άσκηση για να υπολογίσω  το λογαριασμό του ρεύματος βάζω ως όνομα μεταβλητής το ΛΟΓ, επίσης σε μια άσκηση για κυκλοφορία εφημερίδων υπήρχε ένας πίνακας με όνομα ΕΦ.

Για να ζητώ την έτοιμη συνάρτηση δεν θα έπρεπε να γράφει ΕΦ(  χ  ) όπου χ οποιαδήποτε μεταβλητή ή σταθερά;

petrosp13

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

kapapi

#13
Έχουν ποτέ κοπεί μονάδες από γραπτό πανελληνίων γιατί μαθητής ονόμασε μια μεταβλητή Ε;

(ΜΑΪΟΣ 2010 ΗΜΕΡΗΣΙΑ ΘΕΜΑ Α3 : Στην εκφώνηση του θέματος Μεταβλητή με όνομα Ε)

michaeljohn

Κατά τη γνώμη μου δεν πρέπει σε καμιά περίπτωση να κοπούν μόρια.
Δεν ξέρουμε αν το Ε είναι Ελληνικό ή Λατινικό !!!