Αποστολέας Θέμα: συναρτηση μεσα σε συναρτηση?  (Αναγνώστηκε 4677 φορές)

thanosgn

  • Νέος
  • *
  • Μηνύματα: 7
συναρτηση μεσα σε συναρτηση?
« στις: 08 Μάι 2012, 12:21:46 μμ »
Καλημέρα, έχω δει αρκετές συζητήσεις για χρήση σταθερών τιμών στισ παραμέτρους. Θα μπορούσαμε να χρησιμοποιήσουμε μια συνάρτηση σαν παράμετρο π.χ.
Κώδικας: [Επιλογή]
f(f(x))  ή
Κώδικας: [Επιλογή]
synart(Α_Μ(χ)) ? Φαντάζομαι σε διαδικασία σιγουρα όχι...

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2219
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #1 στις: 08 Μάι 2012, 01:06:58 μμ »
Φυσικά και γίνεται

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

thanosgn

  • Νέος
  • *
  • Μηνύματα: 7
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #2 στις: 08 Μάι 2012, 01:27:58 μμ »
και εγώ αυτό πιστεύω. απλά το  :angel:βιβλίο:angel: λεει πως οι παράμετροι πρέπει να είναι μεταβλητές...   :-\

Stefevan

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 274
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #3 στις: 08 Μάι 2012, 07:57:12 μμ »
Τι να πει το βιβλίο... ειδικά για τις συναρτήσεις που δεν είναι έτοιμες  :P Τρομάζει κάποιος να μάθει τι είναι η παράμετρος, φαντάσου να του πουν και ότι δέχεται και συνάρτηση σαν παράμετρο  ;D Και να το δούμε στις εξετάσεις  :o

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3147
  • to Iterate is human to Recurse divine
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #4 στις: 08 Μάι 2012, 10:08:02 μμ »
Για να είμαστε ακριβείς στις εκφράσεις μας, δεν δέχεται συνάρτηση σαν παράμετρο αλλά κάποια τιμή που προκύπτει ως αποτέλεσμα μιας συνάρτησης.
Αφού μπορούμε να δώσουμε ως όρισμα εκφράσεις τότε μπορούμε να γράψουμε και το παρακάτω

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

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

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

Γράψε 2+3+5

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2450
  • I 'm not young enough to know everything
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #5 στις: 09 Μάι 2012, 09:18:19 πμ »
Η συνάρτηση μέσα σε συνάρτηση είναι η σύνθεση των συναρτήσεων. Γίνεται υπολογισμός της "μέσα" και η τιμή χρησιμοποιείται στην κλήση της έξω. Ένα ενδιαφέρον ζήτημα που μπορεί να εξηγηθεί με αυτόν τον τροπο είναι το γιατί το 234 υπολογίζεται από αριστερά προς τα δεξιά αν το γράψεις σαν 2^3^4 ενώ υπολογίζεται από δεξιά προς τα αριστερά στα μαθηματικά. Είναι γιατί το θεωρούν σαν την τιμή που παίρνει η σύνθεση της 2x και της 3x στο 4.

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

programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #6 στις: 08 Φεβ 2015, 11:44:58 μμ »
σε γλωσσα τρεχει κανονικα αν πχ κανεις κληση τετοια: ΚΑΛΕΣΕ Δ1(1,2)
ΔΙΑΔΙΚΑΣΙΑ Δ1(Α,Β)
μεταβλητες
ακεραιες:Α,Β,χ
ΑΡΧΗ
χ<-Α*Β
ΓΡΑΨΕ χ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2219
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #7 στις: 08 Φεβ 2015, 11:46:52 μμ »
Τι σημαίνει "τρέχει κανονικά";
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #8 στις: 09 Φεβ 2015, 12:36:56 πμ »
εννοω οτι το δεχεται και δεν σου εμφανιζει μυνημα λαθους.

programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #9 στις: 09 Φεβ 2015, 12:40:51 πμ »
Τι σημαίνει "τρέχει κανονικά";
εννοω οτι δεν σου εμφανιζει μυνημα λαθους και σου βγαζει τα σωστα αποτελεσματα.μην ξεχνας πως η διαδικασια δεν επιστρεφει παντα τιμες. στη διαδικασια πρεπει να περιλαμβανει στις παραμετρους τις 2 ειδων πραγματα.1)οτι πρεπει να ξερει για να κανει πραξεις.2)οτι 8ελουμε να μας δωσει πισω.στην προκειμενη περιπτωση 8ελουμε απλα να κανει εναν πολλαπλασιασμο μεταξυ 2 αρι8μων και να εμφανισει το αποτελεσμα. άρα τετοιου ειδους κλήση οχι μονο επιτρέπεται αλλα ειναι η ουσια της διαδικασιας.παιρνει τιμες.είτε μεσω μεταβλητων είτε απευ8είας

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








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


programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #10 στις: 09 Φεβ 2015, 01:02:12 πμ »
ενα ακομα παραδειγμα
η διαδικασια λειτουργει ως εξης:αν τις δωσουμε μεταβλητες παιρνει την τιμη τους και επειτα αν αλλαξουν οι αντιστοιχοι παραμετροι στη διαδικασια αλλαζουν και οι αντιστοιχες μεταβλητες στο κυριο προγραμμα.αν ομως δεν τις δωσουμε μεταβλητες αλλα απευθειας σταθερες τοτε απλα κανει τις πραξεις που θελουμε και δεν επιστρεφει τιποτα.ή επιστρεφει μονο οτι της εχουμε δωσει σε μορφη μεταβλητης.πχ ΚΑΛΕΣΕ Δ2(3,2,Χ)
ΔΙΑΔΙΚΑΣΙΑ Δ2(Α,Β,Ε)


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








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

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


programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #11 στις: 09 Φεβ 2015, 03:33:01 πμ »
ΠΡΟΓΡΑΜΜΑ ΑΣΚΗΣΑΡΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ))
  ΓΡΑΨΕ Γ(Χ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

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

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


ΓΡΑΨΕ Γ(Χ) ΤΙΜΗ 64
ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ)) ΤΙΜΗ 66

programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #12 στις: 09 Φεβ 2015, 03:47:11 πμ »
Στο καλεσε ασκ(γ(χ)) εκτελειται πρωτα οτι βρισκεται στη συναρτηση γ(χ).επιστρεφεται μια τιμη=64.επειτα καλειται η διαδικασια ασκ(64)ουσιαστικα τωρα πια
αφου η γ(χ) εχει τιμη 64.το 64 μπαινει στο φ και το φ αλλαζει και γινεται 66.ομως δεν επιστρεφει καμια τιμη πισω στη γ(χ)!!!!!αρα στην εντολη του κυρίως προγραμματος ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ)) εμφανιζεται στην ο8ονη η τιμη 66.αντιθέτως στην εντολή γραψε γ(χ) εμφανιζει 64 αφου η γ(χ) δεν εχει αλλαξει!!!
αυτα τα ολίγα για να γνωρίζουμε τι κανουμε με τις συναρτήσεις και τι με τις διαδικασίες γιατι ξέρω αρκετους που είναι λιγο μπερδεμένοι σχετικά με αυτο το θέμα.ελπίζω να βοήθησα κάπως



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

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

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


ΓΡΑΨΕ Γ(Χ) ΤΙΜΗ 64
ΚΑΛΕΣΕ ΑΣΚ(Γ(Χ)) ΤΙΜΗ 66

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3147
  • to Iterate is human to Recurse divine
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #13 στις: 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)
  ΤΕΛΟΣ_ΑΝ 
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

η παραπάνω άσκηση δείχνει το βαθμό κατανόησης ενός μαθητή όσον αφορά τη γενικότερη λειτουργία των υποπρογραμμάτων
Νομίζω ότι παρουσιάζει ενδιαφέρον
« Τελευταία τροποποίηση: 09 Φεβ 2015, 01:38:21 μμ από evry »
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: συναρτηση μεσα σε συναρτηση?
« Απάντηση #14 στις: 09 Φεβ 2015, 03:32:00 μμ »
Για αμοιβαία αναδρομή μου αρέσει αυτό το παράδειγμα:

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

Συνάρτηση Περιττός(ν): Λογική
Μεταβλητές
    Ακέραιες: ν
Αρχή
    Αν ν = 0 τότε
        Περιττός <- Ψευδής
    αλλιώς
        Περιττός <- Άρτιος(ν - 1)
    Τέλος_αν
Τέλος_συνάρτησης
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr