Αποστολέας Θέμα: Επιστροφή από Συνάρτηση  (Αναγνώστηκε 4789 φορές)

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Επιστροφή από Συνάρτηση
« στις: 05 Απρ 2015, 11:16:23 πμ »
Δίνεται το παρακάτω πρόγραμμα (κύριο πρόγραμμα και υποπρόγραμμα):

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 - ΤΕΛΟΣ_ ΣΥΝΑΡΤΗΣΗΣ -προκαλεί ή όχι μεταβολή;

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

Επειδή υπάρχουν ασκήσεις που ζητούν να γραφεί σε πίνακα τιμών, από ποιά εντολή προκύπτουν αλλαγές στις μεταβλητές ή τις παραμέτρους.
« Τελευταία τροποποίηση: 05 Απρ 2015, 03:16:52 μμ από kapapi »

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2212
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #1 στις: 05 Απρ 2015, 11:46:15 πμ »
Νομίζω ότι όλα αυτά αποτελούν τεχνικές λεπτομέρειες που δεν θα έπρεπε να αφορούν ένα λυκειακό μάθημα...
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

itt

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 428
  • Real stupidity beats ΑΙ any time
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #2 στις: 05 Απρ 2015, 12:18:35 μμ »
Σύμφωνα με το νέο σχολικό βιβλίο (αντιγράφω σελίδα 179):
Σε κάθε περίπτωση μετά το τέλος της εκτέλεσης της διαδικασίας ή της συνάρτησης, γίνεται επιστροφή ακριβώς μετά το σημείο απ΄ όπου κλήθηκε.

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

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




kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #3 στις: 05 Απρ 2015, 02:07:11 μμ »
Νομίζω ότι όλα αυτά αποτελούν τεχνικές λεπτομέρειες που δεν θα έπρεπε να αφορούν ένα λυκειακό μάθημα...

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

τότε τι κάνουμε;
« Τελευταία τροποποίηση: 05 Απρ 2015, 03:26:06 μμ από kapapi »

itt

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 428
  • Real stupidity beats ΑΙ any time
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #4 στις: 05 Απρ 2015, 03:21:06 μμ »
Ναι αλλά αν φέτος έχουμε σε υποπρογράμματα θέματα όπως:
1. 2010-ΘΕΜΑ Β
2. 2010-ΘΕΜΑ Β2-ΕΠΑΝΑΛΗΠΤΙΚΕΣ
3. 2009-ΘΕΜΑ 2Α
4. 2009-ΘΕΜΑ 2Α-ΕΠΑΝΑΛΗΠΤΙΚΕΣ

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

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

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #5 στις: 05 Απρ 2015, 03:25:11 μμ »
Ίσως από τα συμφραζόμενα του βιβλίου να βγαίνει καλύτερη άκρη, πάντως αυτό που φαίνεται να θέλει να πει ο ποιητής  είναι ότι , σε επίπεδο γλώσσας μηχανής,  προφανώς η διεύθυνση επιστροφής θα είναι στην επόμενη  εντολή από την κλήση της συνάρτησης. Η οποία θα είναι η ανάθεση του περιεχομένου του καταχωρητή που έχουμε αποφασίσει από κοινού ότι κρατάει το return value για μια συνάρτηση, στη θέση μνήμης της μεταβλητής Ε.

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

itt

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 428
  • Real stupidity beats ΑΙ any time
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #6 στις: 05 Απρ 2015, 03:35:03 μμ »
Δηλαδή η μεταβλητή Ε από ποιά εντολή παίρνει τιμή: την 8, την 9 ή την 18;
Διότι σε αντίστοιχη άσκηση πρέπει να το γράψεις για να πάρεις μονάδες.

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

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #7 στις: 05 Απρ 2015, 03:48:55 μμ »
Πράγματι και εγώ πιστεύω ότι το σωστό είναι το 8.

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

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4879
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #8 στις: 05 Απρ 2015, 03:55:14 μμ »
Δηλαδή η μεταβλητή Ε από ποιά εντολή παίρνει τιμή: την 8, την 9 ή την 18;
Διότι σε αντίστοιχη άσκηση πρέπει να το γράψεις για να πάρεις μονάδες.

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

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

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

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #9 στις: 05 Απρ 2015, 04:04:15 μμ »
Ακριβώς ότι ήμουνα έτοιμος να δώσω ένα τέτοιο παράδειγμα, όπου στα δεξιά του συμβόλου εκχώρησης να βάλω και κάτι άλλο, εκτός από μόνη τη συνάρτηση.

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

το -Υπολογισμός- είναι δεσμευμένο όνομα συνάρτησης, όχι το Ε.
« Τελευταία τροποποίηση: 05 Απρ 2015, 04:46:01 μμ από kapapi »


kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #11 στις: 05 Απρ 2015, 05:33:30 μμ »
Το Ε ήταν όνομα μιας μεταβλητής στο παράδειγμα που έδωσα στην αρχή του θέματος.

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

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

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

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

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2212
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #12 στις: 05 Απρ 2015, 05:35:54 μμ »
Είναι συντακτικό λάθος, είναι δεσμευμένες λέξεις
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #13 στις: 05 Απρ 2015, 05:41:16 μμ »
Έχουν ποτέ κοπεί μονάδες από γραπτό πανελληνίων γιατί μαθητής ονόμασε μια μεταβλητή Ε;

(ΜΑΪΟΣ 2010 ΗΜΕΡΗΣΙΑ ΘΕΜΑ Α3 : Στην εκφώνηση του θέματος Μεταβλητή με όνομα Ε)
« Τελευταία τροποποίηση: 05 Απρ 2015, 05:51:42 μμ από kapapi »

michaeljohn

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 129
  • "Είναι παιδιά πολλών ανθρώπων τα λόγια μας"
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #14 στις: 05 Απρ 2015, 05:52:51 μμ »
Κατά τη γνώμη μου δεν πρέπει σε καμιά περίπτωση να κοπούν μόρια.
Δεν ξέρουμε αν το Ε είναι Ελληνικό ή Λατινικό !!!

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2212
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #15 στις: 05 Απρ 2015, 06:09:55 μμ »
To ότι δεν κόβονται μονάδες για ένα τόσο συνηθισμένο όνομα μεταβλητής δεν σημαίνει ότι δεν είναι συντακτικό λάθος και ότι πρέπει να επισημαίνεται
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #16 στις: 05 Απρ 2015, 06:14:44 μμ »
Αφού όμως δεν υπάρχει έτοιμη μαθηματική συνάρτηση που να έχει μόνο ένα, υποχρεωτικά ελληνικό γράμμα, καμία από αυτές ως μεταβλητή δεν είναι δεσμευμένη λέξη αφού δεν ξέρουμε αν γράφτηκε με ελληνικά ή αγγλικά.

Άλλωστε τόσα χρόνια στις εκφωνήσεις των πανελληνίων εξετάσεων έχει χρησιμοποιηθεί χωρίς να ιδρώνει το αυτί κανενός.
« Τελευταία τροποποίηση: 05 Απρ 2015, 06:30:28 μμ από kapapi »

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2212
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #17 στις: 05 Απρ 2015, 06:19:05 μμ »
Όλες οι άλλες συναρτήσεις έχουν ελληνικά ονόματα, γιατί αυτή να είναι με αγγλικά;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #18 στις: 05 Απρ 2015, 06:21:58 μμ »
Λέω το ακριβώς αντίθετο. Οι συναρτήσεις καλά κάνουν και είναι στο ελληνικά, αλλά οι μεταβλητές μπορούν να έχουν και αγγλικά και ελληνικά γράμματα.
Παράδειγμα χρησιμοποιώ τη μεταβλητή ΛΟΓ αλλα το γράμμα Ο είναι αγγλικό, άρα δεν είναι δεσμευμένη λέξη.

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

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2212
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #19 στις: 05 Απρ 2015, 06:30:15 μμ »
Συμφωνούμε τότε
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kapapi

  • Οπαδός
  • **
  • Μηνύματα: 15
Απ: Επιστροφή από Συνάρτηση
« Απάντηση #20 στις: 05 Απρ 2015, 06:39:38 μμ »
Πράγματι έχετε δίκαιο. Η δεσμευμένη λέξη, είναι δεσμευμένη λέξη, απλώς στο χαρτί δεν μπορεί να φανεί το λάθος σε αυτή την περίπτωση.

Βέβαια μετά από όλα αυτά μπορεί καποιος να ονομάσει μια μεταβλητή: ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ή μια συνάρτηση: ΠΡΟΓΡΑΜΜΑ