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

Γενικό Λύκειο => Τμηματικός προγραμματισμός => Γ΄ Λυκείου => Συναρτήσεις => Μήνυμα ξεκίνησε από: Στέλλα στις 17 Μαρ 2006, 07:41:37 ΜΜ

Τίτλος: απορία για συνάρτηση...
Αποστολή από: Στέλλα στις 17 Μαρ 2006, 07:41:37 ΜΜ
Η παρακάτω συνάρτηση είναι αποδεκτή;

ΣΥΝΑΡΤΗΣΗ μικρότερος(Χ,Υ):ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ: Χ,Υ
ΑΡΧΗ
    μικρότερος<-Χ
    ΑΝ Υ<Χ ΤΟΤΕ
         μικρότερος<-Υ
    ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Το πρόβλημα είναι ότι η εντολή εκχώρησης τιμής στο όνομα της συνάρτησης ίσως εκτελεστεί δύο φορές. Στο βιβλίο λέει ότι "στο σώμα της συνάρτησης πρέπει να υπάρχει οπωσδήποτε μία εντολή εκχώρησης τιμής στο όνομα της συνάρτησης"
Δηλαδή αυτή η συνάρτηση θα εκτελείται σωστά αν ο μικρότερος είναι ο Χ και θα βγάζει λάθος αν ο μικρότερος είναι ο Υ; Έχω μπερδευτεί λίγο.. δηλαδή έχουμε πρόβλημα καθοριστικότητας τελικά;;;
Τίτλος: Απ: απορία για συνάρτηση...
Αποστολή από: Wizard στις 17 Μαρ 2006, 08:01:11 ΜΜ
Δεν έχει σημασία αν η εντολή εκχώρησης στο όνομα της συνάρτησης εκτελεστεί παραπάνω από 1 φορές, γιατί η συνάρτηση δεν σταματάει όταν εκτελεστεί αυτή η εντολή, αλλά όταν η ροή εκτέλεσης φτάσει στο ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ. Δηλαδή, αρκεί το όνομα της συνάρτησης να έχει λάβει τιμή πριν η ροή εκτέλεσης φτάσει στο ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ. Το βιβλίο δεν αναφέρει "μία και μόνο μία εντολή εκχώρησης στο όνομα της συνάρτησης". Επίσης, δεν αναφέρει ότι αυτή η εντολή πρέπει να βρίσκεται αμέσως πριν το ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ.

Επίσης, αν αφαιρέσουμε την εντολή "μικρότερος<-Χ" από τη συνάρτηση που έγραψες, τότε η συνάρτηση δε θα είναι σωστή, γιατί θα υπάρχει μια ροή εκτέλεσης που δε θα δίνει τιμή στο όνομα της συνάρτησης (αυτό θα συμβεί αν Υ>=Χ).
Τίτλος: Απ: απορία για συνάρτηση...
Αποστολή από: xaidi στις 18 Μαρ 2006, 11:16:41 ΠΜ
Το θέμα που θέτεις είναι κατανοητό και συμφωνώ με τη Στέλλα (ίσως διάλεξες εσκεμμένα και τέτοιο παράδειγμα)
Παρόλα αυτά αν σε μπερδεύει μπορείς να το κάνεις και κάπως έτσι:

ΣΥΝΑΡΤΗΣΗ μικρότερος(Χ,Υ):ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ: Χ,Υ,Λ
ΑΡΧΗ
    Λ<-Χ
    ΑΝ Υ<Χ ΤΟΤΕ
         Λ<-Υ
    ΤΕΛΟΣ_ΑΝ
Μικρότερος<- Λ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Ή κάπως έτσι:
ΣΥΝΑΡΤΗΣΗ μικρότερος(Χ,Υ):ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ: Χ,Υ,Λ
ΑΡΧΗ   
ΑΝ Υ<Χ ΤΟΤΕ
         Λ<-Υ
ΑΛΛΙΩΣ
    Λ<-Χ
    ΤΕΛΟΣ_ΑΝ
Μικρότερος<- Λ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ