Άσκηση με κλήση Υποπρογραμμάτων

Ξεκίνησε από nikolasmer, 20 Ιαν 2013, 02:33:31 ΜΜ

« προηγούμενο - επόμενο »

nikolasmer

Το 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

Παράθεση από: nikolasmer στις 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)
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

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

droopy

Δοκιμάζοντας το πρόγραμμα για την τιμή 22 παρατηρώ ότι πρώτα μπαίνει στο αλλιώς της ΑΝ αφού το 22 δεν είναι μικρότερο ούτε του 10 ούτε του 14. Για έξοδο μου δίνει την τιμή 45592. Για χ=9, για τις άλλες δύο τιμές 10 και 12 δουλεύει κανονικά και εμφανίζει 10 και 108 αντίστοιχα.