Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Τμηματικός προγραμματισμός => Μήνυμα ξεκίνησε από: thanosgn στις 08 Μαΐου 2012, 12:21:46 ΜΜ

Τίτλος: συναρτηση μεσα σε συναρτηση?
Αποστολή από: thanosgn στις 08 Μαΐου 2012, 12:21:46 ΜΜ
Καλημέρα, έχω δει αρκετές συζητήσεις για χρήση σταθερών τιμών στισ παραμέτρους. Θα μπορούσαμε να χρησιμοποιήσουμε μια συνάρτηση σαν παράμετρο π.χ.
Κώδικας [Επιλογή]
f(f(x))  ή
Κώδικας [Επιλογή]
synart(Α_Μ(χ)) ? Φαντάζομαι σε διαδικασία σιγουρα όχι...
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: petrosp13 στις 08 Μαΐου 2012, 01:06:58 ΜΜ
Φυσικά και γίνεται

Αν σου δοθεί μια παράσταση που πρέπει να υπολογίζεις την τετραγωνική ρίζα μιας απόλυτης τιμής, δεν θα χρειαστεί να το κάνεις βήμα βήμα, αλλά να γράψεις όλη την έκφραση, καλώντας την μια συνάρτηση με παράμετρο που να εμπεριέχει και την άλλη
Εφόσον δεν υπάρχει αντιγραφή παραμέτρων πίσω, η κλήση κατά τιμή είναι εφικτή
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: thanosgn στις 08 Μαΐου 2012, 01:27:58 ΜΜ
και εγώ αυτό πιστεύω. απλά το  :angel:βιβλίο:angel: λεει πως οι παράμετροι πρέπει να είναι μεταβλητές...   :-\
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: Stefevan στις 08 Μαΐου 2012, 07:57:12 ΜΜ
Τι να πει το βιβλίο... ειδικά για τις συναρτήσεις που δεν είναι έτοιμες  :P Τρομάζει κάποιος να μάθει τι είναι η παράμετρος, φαντάσου να του πουν και ότι δέχεται και συνάρτηση σαν παράμετρο  ;D Και να το δούμε στις εξετάσεις  :o
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: evry στις 08 Μαΐου 2012, 10:08:02 ΜΜ
Για να είμαστε ακριβείς στις εκφράσεις μας, δεν δέχεται συνάρτηση σαν παράμετρο αλλά κάποια τιμή που προκύπτει ως αποτέλεσμα μιας συνάρτησης.
Αφού μπορούμε να δώσουμε ως όρισμα εκφράσεις τότε μπορούμε να γράψουμε και το παρακάτω

Α_Τ(ΛΟΓ(Ε(Χ)))

Συνάρτηση ως παράμετρο έχουμε σε άλλες γλώσσες όπως C, Lisp κλπ.

Φυσικά από την άλλη μπορούμε να ακολουθήσουμε τυφλά το βιβλίο και να παίρνουμε σαν λάθος εντολές του στυλ

Γράψε 2+3+5

Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: gpapargi στις 09 Μαΐου 2012, 09:18:19 ΠΜ
Η συνάρτηση μέσα σε συνάρτηση είναι η σύνθεση των συναρτήσεων. Γίνεται υπολογισμός της "μέσα" και η τιμή χρησιμοποιείται στην κλήση της έξω. Ένα ενδιαφέρον ζήτημα που μπορεί να εξηγηθεί με αυτόν τον τροπο είναι το γιατί το 234 υπολογίζεται από αριστερά προς τα δεξιά αν το γράψεις σαν 2^3^4 ενώ υπολογίζεται από δεξιά προς τα αριστερά στα μαθηματικά. Είναι γιατί το θεωρούν σαν την τιμή που παίρνει η σύνθεση της 2x και της 3x στο 4.

Ενδιαφέρον έχει και το αν μπορείς να βάλεις συνάρτηση μέσα σε διαδικασία, δηλαδή την τιμή της συνάρτησης σαν παράμετρο στη διαδικασία. Είναι ισοδύναμο με το αν μπορείς να βάλεις σταθερά σαν παράμετρο στη διαδικασία. Το ενδεχόμενο πρόβλημα είναι ότι κατά την επιστροφή της διαδικασίας θα πρέπει η τιμή επιστροφής να αντιγραφεί πάνω στη σταθερά και αυτό δε γίνεται. Βέβαια στο τετράδιο μαθητή στους πύργους του Ανόι το κάνει, οπότε το δεχόμαστε.
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 08 Φεβ 2015, 11:44:58 ΜΜ
σε γλωσσα τρεχει κανονικα αν πχ κανεις κληση τετοια: ΚΑΛΕΣΕ Δ1(1,2)
ΔΙΑΔΙΚΑΣΙΑ Δ1(Α,Β)
μεταβλητες
ακεραιες:Α,Β,χ
ΑΡΧΗ
χ<-Α*Β
ΓΡΑΨΕ χ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: petrosp13 στις 08 Φεβ 2015, 11:46:52 ΜΜ
Τι σημαίνει "τρέχει κανονικά";
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 09 Φεβ 2015, 12:36:56 ΠΜ
εννοω οτι το δεχεται και δεν σου εμφανιζει μυνημα λαθους.
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 09 Φεβ 2015, 12:40:51 ΠΜ
Παράθεση από: petrosp13 στις 08 Φεβ 2015, 11:46:52 ΜΜ
Τι σημαίνει "τρέχει κανονικά";
εννοω οτι δεν σου εμφανιζει μυνημα λαθους και σου βγαζει τα σωστα αποτελεσματα.μην ξεχνας πως η διαδικασια δεν επιστρεφει παντα τιμες. στη διαδικασια πρεπει να περιλαμβανει στις παραμετρους τις 2 ειδων πραγματα.1)οτι πρεπει να ξερει για να κανει πραξεις.2)οτι 8ελουμε να μας δωσει πισω.στην προκειμενη περιπτωση 8ελουμε απλα να κανει εναν πολλαπλασιασμο μεταξυ 2 αρι8μων και να εμφανισει το αποτελεσμα. άρα τετοιου ειδους κλήση οχι μονο επιτρέπεται αλλα ειναι η ουσια της διαδικασιας.παιρνει τιμες.είτε μεσω μεταβλητων είτε απευ8είας

ΠΡΟΓΡΑΜΜΑ ασκηση
ΑΡΧΗ
  ΚΑΛΕΣΕ Δ1(2, 4)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ








ΔΙΑΔΙΚΑΣΙΑ Δ1(Α, Β)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α, Β, χ
ΑΡΧΗ
  χ <- Α*Β
  ΓΡΑΨΕ χ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 09 Φεβ 2015, 01:02:12 ΠΜ
ενα ακομα παραδειγμα
η διαδικασια λειτουργει ως εξης:αν τις δωσουμε μεταβλητες παιρνει την τιμη τους και επειτα αν αλλαξουν οι αντιστοιχοι παραμετροι στη διαδικασια αλλαζουν και οι αντιστοιχες μεταβλητες στο κυριο προγραμμα.αν ομως δεν τις δωσουμε μεταβλητες αλλα απευθειας σταθερες τοτε απλα κανει τις πραξεις που θελουμε και δεν επιστρεφει τιποτα.ή επιστρεφει μονο οτι της εχουμε δωσει σε μορφη μεταβλητης.πχ ΚΑΛΕΣΕ Δ2(3,2,Χ)
ΔΙΑΔΙΚΑΣΙΑ Δ2(Α,Β,Ε)


ΠΡΟΓΡΑΜΜΑ ασκηση
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Χ
ΑΡΧΗ
  ΚΑΛΕΣΕ Δ1(2, 4, Χ)
  ΓΡΑΨΕ Χ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ








ΔΙΑΔΙΚΑΣΙΑ Δ1(Α, Β, Δ)
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Α, Β, Δ
ΑΡΧΗ
  Α <- Α + 2
  Β <- Β + 3
  Δ <- Α*Β
  ΓΡΑΨΕ Δ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Οι αλλαγές θα γινουν μονο στο χ.στην περιπτωση αυτη θα εμφανιστει το αποτελεσμα στην οθονη:28.00
28.00 δυο φορές μια για το δ και μια για το χ που εχει πλεον την τιμη του δ

Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 09 Φεβ 2015, 03:33:01 ΠΜ
ΠΡΟΓΡΑΜΜΑ ΑΣΚΗΣΑΡΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ))
  ΓΡΑΨΕ Γ(Χ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΑΣΚ(Φ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Φ
ΑΡΧΗ
  Φ <- Φ + 2
  ΓΡΑΨΕ Φ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΣΥΝΑΡΤΗΣΗ Γ(Χ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  Χ <- 54
  Γ <- Χ + 10
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


ΓΡΑΨΕ Γ(Χ) ΤΙΜΗ 64
ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ)) ΤΙΜΗ 66
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 09 Φεβ 2015, 03:47:11 ΠΜ
Στο καλεσε ασκ(γ(χ)) εκτελειται πρωτα οτι βρισκεται στη συναρτηση γ(χ).επιστρεφεται μια τιμη=64.επειτα καλειται η διαδικασια ασκ(64)ουσιαστικα τωρα πια
αφου η γ(χ) εχει τιμη 64.το 64 μπαινει στο φ και το φ αλλαζει και γινεται 66.ομως δεν επιστρεφει καμια τιμη πισω στη γ(χ)!!!!!αρα στην εντολη του κυρίως προγραμματος ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ)) εμφανιζεται στην ο8ονη η τιμη 66.αντιθέτως στην εντολή γραψε γ(χ) εμφανιζει 64 αφου η γ(χ) δεν εχει αλλαξει!!!
αυτα τα ολίγα για να γνωρίζουμε τι κανουμε με τις συναρτήσεις και τι με τις διαδικασίες γιατι ξέρω αρκετους που είναι λιγο μπερδεμένοι σχετικά με αυτο το θέμα.ελπίζω να βοήθησα κάπως



ΠΡΟΓΡΑΜΜΑ ΑΣΚΗΣΑΡΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ))
  ΓΡΑΨΕ Γ(Χ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΑΣΚ(Φ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Φ
ΑΡΧΗ
  Φ <- Φ + 2
  ΓΡΑΨΕ Φ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΣΥΝΑΡΤΗΣΗ Γ(Χ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  Χ <- 54
  Γ <- Χ + 10
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


ΓΡΑΨΕ Γ(Χ) ΤΙΜΗ 64
ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ)) ΤΙΜΗ 66
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: evry στις 09 Φεβ 2015, 11:24:57 ΠΜ
(Συνάρτηση πολύ πιο μέσα σε συνάρτηση)

Τι εμφανίζει το παρακάτω πρόγραμμα;
Ποια λειτουργία επιτελεί η συνάρτηση;

Κώδικας [Επιλογή]

ΠΡΟΓΡΑΜΜΑ mesa
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: kamia
ΑΡΧΗ
  ΓΡΑΨΕ S(100)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ S(N): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: N
ΑΡΧΗ
  ΑΝ Ν=0 ΤΟΤΕ
      S <- 0
  ΑΛΛΙΩΣ
      S <- N + Σ(Ν-1)
  ΤΕΛΟΣ_ΑΝ 
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΣΥΝΑΡΤΗΣΗ Σ(N): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: N
ΑΡΧΗ
  ΑΝ Ν=0 ΤΟΤΕ
      Σ <- 0
  ΑΛΛΙΩΣ
      Σ = N + S(Ν-1)
  ΤΕΛΟΣ_ΑΝ 
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


η παραπάνω άσκηση δείχνει το βαθμό κατανόησης ενός μαθητή όσον αφορά τη γενικότερη λειτουργία των υποπρογραμμάτων
Νομίζω ότι παρουσιάζει ενδιαφέρον
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: sstergou στις 09 Φεβ 2015, 03:32:00 ΜΜ
Για αμοιβαία αναδρομή μου αρέσει αυτό το παράδειγμα:

Κώδικας [Επιλογή]
Συνάρτηση Άρτιος(ν): Λογική
Μεταβλητές
    Ακέραιες: ν
Αρχή
    Αν ν = 0 τότε
        Άρτιος <- Αληθής
    αλλιώς
        Άρτιος <- Περιττός(ν - 1)
    Τέλος_αν
Τέλος_συνάρτησης

Συνάρτηση Περιττός(ν): Λογική
Μεταβλητές
    Ακέραιες: ν
Αρχή
    Αν ν = 0 τότε
        Περιττός <- Ψευδής
    αλλιώς
        Περιττός <- Άρτιος(ν - 1)
    Τέλος_αν
Τέλος_συνάρτησης
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: programmer στις 09 Φεβ 2015, 08:32:44 ΜΜ
Παράθεση από: evry στις 09 Φεβ 2015, 11:24:57 ΠΜ
(Συνάρτηση πολύ πιο μέσα σε συνάρτηση)

Τι εμφανίζει το παρακάτω πρόγραμμα;
Ποια λειτουργία επιτελεί η συνάρτηση;

Κώδικας [Επιλογή]

ΠΡΟΓΡΑΜΜΑ mesa
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: kamia
ΑΡΧΗ
  ΓΡΑΨΕ S(100)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ S(N): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: N
ΑΡΧΗ
  ΑΝ Ν=0 ΤΟΤΕ
      S <- 0
  ΑΛΛΙΩΣ
      S <- N + Σ(Ν-1)
  ΤΕΛΟΣ_ΑΝ 
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΣΥΝΑΡΤΗΣΗ Σ(N): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: N
ΑΡΧΗ
  ΑΝ Ν=0 ΤΟΤΕ
      Σ <- 0
  ΑΛΛΙΩΣ
      Σ = N + S(Ν-1)
  ΤΕΛΟΣ_ΑΝ 
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


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


το προγραμμα συτο εμφανιζει το αθροισμα της αριθμητικης προοδου 0+1+2+3+..+100
Η συναρτηση S παιζει το ρολο του αθροιστη ξεκιναει απο το τελευταιο στοιχειο(στην περιπτωση μας τον αριθμο 100) και με τη βοηθεια της Σ υπολογιζει
αναποδα το αποτελεσμα δηλαδη:100+99+98+..+1+0
Τίτλος: Απ: συναρτηση μεσα σε συναρτηση?
Αποστολή από: evry στις 09 Φεβ 2015, 09:57:50 ΜΜ
Πραγματικά εξαιρετικό παράδειγμα Στάθη, πολύ έξυπνο, για την αμοιβαία (κρυφή) ή έμμεση όπως τη λέω εγώ αναδρομή

Παράθεση από: sstergou στις 09 Φεβ 2015, 03:32:00 ΜΜ
Για αμοιβαία αναδρομή μου αρέσει αυτό το παράδειγμα: