Αποστολέας Θέμα: απορία για συνάρτηση...  (Αναγνώστηκε 2043 φορές)

Στέλλα

  • Επισκέπτης
απορία για συνάρτηση...
« στις: 17 Μάρ 2006, 07:41:37 μμ »
Η παρακάτω συνάρτηση είναι αποδεκτή;

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

Το πρόβλημα είναι ότι η εντολή εκχώρησης τιμής στο όνομα της συνάρτησης ίσως εκτελεστεί δύο φορές. Στο βιβλίο λέει ότι "στο σώμα της συνάρτησης πρέπει να υπάρχει οπωσδήποτε μία εντολή εκχώρησης τιμής στο όνομα της συνάρτησης"
Δηλαδή αυτή η συνάρτηση θα εκτελείται σωστά αν ο μικρότερος είναι ο Χ και θα βγάζει λάθος αν ο μικρότερος είναι ο Υ; Έχω μπερδευτεί λίγο.. δηλαδή έχουμε πρόβλημα καθοριστικότητας τελικά;;;

Wizard

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

Επίσης, αν αφαιρέσουμε την εντολή "μικρότερος<-Χ" από τη συνάρτηση που έγραψες, τότε η συνάρτηση δε θα είναι σωστή, γιατί θα υπάρχει μια ροή εκτέλεσης που δε θα δίνει τιμή στο όνομα της συνάρτησης (αυτό θα συμβεί αν Υ>=Χ).
« Τελευταία τροποποίηση: 17 Μάρ 2006, 08:04:10 μμ από Wizard »

xaidi

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 111
  • who is WHO!!!!!!
Απ: απορία για συνάρτηση...
« Απάντηση #2 στις: 18 Μάρ 2006, 11:16:41 πμ »
Το θέμα που θέτεις είναι κατανοητό και συμφωνώ με τη Στέλλα (ίσως διάλεξες εσκεμμένα και τέτοιο παράδειγμα)
Παρόλα αυτά αν σε μπερδεύει μπορείς να το κάνεις και κάπως έτσι:

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

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

Ευχαριστώ,