Αποστολέας Θέμα: Άσκηση με κλήση Υποπρογραμμάτων  (Αναγνώστηκε 1679 φορές)

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 534
  • There can be only one...may it be AEPP.
Άσκηση με κλήση Υποπρογραμμάτων
« στις: 20 Ιαν 2013, 02:33:31 μμ »
Το 2011 στους Μηχανολόγους Θεσσαλονίκης πήρε το μάτι μου μια άσκηση σε FORTRAN. Τη μετέτρεψα σε ΓΛΩΣΣΑ. Μου άρεσε πάρα πολύ.

Στο παρακάτω πρόγραμμα έχει κατά λάθος διαγραφεί ο αφαιρετέος από τον δεύτερο έλεγχο της διαδικασίας callit. Παρόλα αυτά γνωρίζουμε οτι το πρόγραμμα τρέχει.
1. Αν δώσουμε ως στοιχείο εισόδου τον αριθμό 22 ποιό θα είναι το αποτέλεσμα που θα παράξει το πρόγραμμα;
2. Γνωρίζοντας οτι εαν δώσουμε ως είσοδο τον αριθμό 12 παράγεται ως αποτέλεσμα ο αριθμός 108. Ενώ αν δώσουμε το 10 παράγεται ως αποτέλεσμα ο αριθμός 10. Ποιά είναι η τιμή που έχει διαγραφεί;
Σημειώνεται πως η τιμή που έχει διαγραφεί είναι τέτοια ώστε στη διαδικασία callit όταν i=3 θα ισχύει ο πρώτος λογικός έλεγχος.

ΠΡΟΓΡΑΜΜΑ Ποιά_τιμή_λείπει
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x, y
ΑΡΧΗ
  ΓΡΑΨΕ "Δώσε εναν αριθμό"
  ΔΙΑΒΑΣΕ x
  ΑΝ x >= 0 ΤΟΤΕ
    y <- getit(x)
    ΓΡΑΨΕ y
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ "Λάθος Αριθμός"
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ getit(gx): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: gy, gx, gz
ΑΡΧΗ
  gy <- gx
  ΚΑΛΕΣΕ callit(gy, gz)
  getit <- gy* gz
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΔΙΑΔΙΚΑΣΙΑ callit(cy, cz)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, cz, cy
ΑΡΧΗ
  cz <- cy
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 2
    ΑΝ cz < 10 ΤΟΤΕ
      cz <- cz^2
    ΑΛΛΙΩΣ_ΑΝ cz < 14 ΤΟΤΕ
      cz <- cz - .....
    ΑΛΛΙΩΣ
      cz <- cz*(-2)
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Απ' τα τσακάλια δεν γλυτώνεις μ'ευχές ή παρακάλια
(Κ. Βάρναλης)

Μερεντίτης Νικόλαος
Καθηγητής Πληροφορικής - Φροντιστής

programmer

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: Άσκηση με κλήση Υποπρογραμμάτων
« Απάντηση #1 στις: 12 Φεβ 2015, 05:11:36 πμ »
Το 2011 στους Μηχανολόγους Θεσσαλονίκης πήρε το μάτι μου μια άσκηση σε FORTRAN. Τη μετέτρεψα σε ΓΛΩΣΣΑ. Μου άρεσε πάρα πολύ.

Στο παρακάτω πρόγραμμα έχει κατά λάθος διαγραφεί ο αφαιρετέος από τον δεύτερο έλεγχο της διαδικασίας callit. Παρόλα αυτά γνωρίζουμε οτι το πρόγραμμα τρέχει.
1. Αν δώσουμε ως στοιχείο εισόδου τον αριθμό 22 ποιό θα είναι το αποτέλεσμα που θα παράξει το πρόγραμμα;
2. Γνωρίζοντας οτι εαν δώσουμε ως είσοδο τον αριθμό 12 παράγεται ως αποτέλεσμα ο αριθμός 108. Ενώ αν δώσουμε το 10 παράγεται ως αποτέλεσμα ο αριθμός 10. Ποιά είναι η τιμή που έχει διαγραφεί;
Σημειώνεται πως η τιμή που έχει διαγραφεί είναι τέτοια ώστε στη διαδικασία callit όταν i=3 θα ισχύει ο πρώτος λογικός έλεγχος.

ΠΡΟΓΡΑΜΜΑ Ποιά_τιμή_λείπει
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x, y
ΑΡΧΗ
  ΓΡΑΨΕ "Δώσε εναν αριθμό"
  ΔΙΑΒΑΣΕ x
  ΑΝ x >= 0 ΤΟΤΕ
    y <- getit(x)
    ΓΡΑΨΕ y
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ "Λάθος Αριθμός"
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ getit(gx): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: gy, gx, gz
ΑΡΧΗ
  gy <- gx
  ΚΑΛΕΣΕ callit(gy, gz)
  getit <- gy* gz
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΔΙΑΔΙΚΑΣΙΑ callit(cy, cz)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, cz, cy
ΑΡΧΗ
  cz <- cy
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 2
    ΑΝ cz < 10 ΤΟΤΕ
      cz <- cz^2
    ΑΛΛΙΩΣ_ΑΝ cz < 14 ΤΟΤΕ
      cz <- cz - .....
    ΑΛΛΙΩΣ
      cz <- cz*(-2)
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

θα εμφανιστει η τιμη 3718 αν δωσουμε την τιμη 22 σαν εισοδο.η λυση ειναι η εξης.εστω χ ο αγνωστος αφαιρετεος.αρα στην πρωτη περιπτωση που εισαγουμε το 12
προκυπτει η εξισωση: (12-χ)^2 *12=108 και βρισκω χ=9 ή χ=15
και στη β περιπτωση προκυπτει αντιστοιχα (10-χ)^2 *10=10 και προκυπτει χ=9 ή χ=11 αρα χ=9 αφου πρεπει να ισχυει και η α και η β περιπτωση
αρα για εισοδο το 22 εχω (22-9)^2 *22=3718
ευκολη και καλη ασκησουλα

droopy

  • Θαμώνας
  • ***
  • Μηνύματα: 36
  • you know what... i'm happy
Απ: Άσκηση με κλήση Υποπρογραμμάτων
« Απάντηση #2 στις: 13 Φεβ 2018, 07:56:20 μμ »
Δοκιμάζοντας το πρόγραμμα για την τιμή 22 παρατηρώ ότι πρώτα μπαίνει στο αλλιώς της ΑΝ αφού το 22 δεν είναι μικρότερο ούτε του 10 ούτε του 14. Για έξοδο μου δίνει την τιμή 45592. Για χ=9, για τις άλλες δύο τιμές 10 και 12 δουλεύει κανονικά και εμφανίζει 10 και 108 αντίστοιχα.