Αποστολέας Θέμα: Κλήση διαδικασίας με σταθερά χωρίς μήνυμα λάθους  (Αναγνώστηκε 1576 φορές)

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 481
  • There can be only one...may it be AEPP.
Μπορεί κάποιος σας παρακαλώ να μου εξηγήσει γιατί δεν βγάζει μήνυμα λάθους (συντακτικό) ο Διερμηνευτής στην κλήση της παρακάτω Διαδικασίας;
Κώδικας: [Επιλογή]
ΠΡΟΓΡΑΜΜΑ ΑΣΚ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, Α[5, 5], Μ
ΑΡΧΗ
  Μ <- 0
  ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 5
    ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 5
      ΔΙΑΒΑΣΕ Α[I, J]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΚΑΛΕΣΕ ΔΙΑΔ(Α, Μ - 1)
  ΓΡΑΨΕ Μ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ(Π, Κ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Κ, I, J, Π[5, 5]
ΑΡΧΗ
  Κ <- 0
  ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 5
    ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 5
      Κ <- Κ + Π[I, J]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Απ' τα τσακάλια δεν γλυτώνεις μ'ευχές ή παρακάλια
(Κ. Βάρναλης)

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

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 836
Απ: Κλήση διαδικασίας με σταθερά χωρίς μήνυμα λάθους
« Απάντηση #1 στις: 27 Μάρ 2013, 04:00:00 πμ »
Αν εννοείς για ποιο λόγο δέχεται έκφραση ως παράμετρο, νομίζω ότι ακριβώς εδώ είναι δύο μηνύματα που θα σου δώσουν την απάντηση.
http://alkisg.mysch.gr/steki/index.php?topic=2700.msg24221#msg24221
Φιλικά,
Γιώργος Θαλασσινός


nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 481
  • There can be only one...may it be AEPP.
Απ: Κλήση διαδικασίας με σταθερά χωρίς μήνυμα λάθους
« Απάντηση #3 στις: 27 Μάρ 2013, 12:02:11 μμ »
... είναι απλό ο μεταγλωττιστής να έχει υλοποιηθεί έτσι ώστε αν η πραγματική παράμετρος είναι σταθερά ή έκφραση τότε η μεταβίβαση των τιμών να γίνεται προς την μία κατεύθυνση μονάχα, όπως στις συναρτήσεις...

Απ΄οτι καταλαβαίνω δεν έχει νόημα να το αναλύσω περισσότερο στα παιδιά. Δεν μεταβιβάζεται πίσω στο πρόγραμμα η τιμή της μεταβλητής Μ που περιέχει η έκφραση. Όλα τρέχουν κανονικά να φανταστώ, απλά όπως την παίρνει την τιμή την επιστρέφει κιόλας. Αν άλλαζε ο πίνακας Α που μεταβιβάζεται μέσα στη διαδικασία, τα στοιχεία επιστρέφουν αλλαγμένα στο ίδιο παράδειγμα; (Ελπίζω να μην είναι αφελής η ερώτησή μου. :-[)

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

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

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 836
Απ: Κλήση διαδικασίας με σταθερά χωρίς μήνυμα λάθους
« Απάντηση #4 στις: 27 Μάρ 2013, 10:40:10 μμ »
Συνάδελφε, όταν προσπαθεί κάποιος να γίνει καλύτερος σ' αυτό που κάνει, καμία ερώτηση δεν είναι αφελής.
Ίσα ίσα, είναι προς τιμήν του. Και αυτό είναι που βρίσκω σπουδαίο εδώ στο Στέκι, τόσο σ' αυτούς που ρωτάνε όσο και σ' αυτούς που απαντάνε.
Για άλλη μια φορά μπράβο σ' αυτό που γίνεται εδώ και σ' όσους συμμετέχουν.

Λοιπόν, στην ερώτησή σου...
Δεν μεταβιβάζεται πίσω στο πρόγραμμα η τιμή της μεταβλητής Μ που περιέχει η έκφραση. Όλα τρέχουν κανονικά να φανταστώ, απλά όπως την παίρνει την τιμή την επιστρέφει κιόλας.
... θα πρέπει να καταλάβεις ότι στη συγκεκριμένη κλήση που κάνεις ΔΙΑΔ(Α, Μ -1) η διαδικασία δεν "παραλαμβάνει" καθόλου τη μεταβλητή Μ
Κατά την κλήση αυτή, η διαδικασία, στη μεταβλητή Κ παραλαμβάνει το αποτέλεσμα της έκφρασης Μ -1 , που εν προκειμένω είναι ο αριθμός -1. Αφού λοιπόν δεν την παραλαμβάνει, δεν έχει και πρόσβαση σε αυτή, οπότε η Μ μένει άθικτη. Η τιμή της Κ στο τέλος της διαδικασίας, δεν μπορεί φυσικά να επιστραφεί στην τιμή -1 (ούτε στην έκφραση Μ-1) και απλά "χάνεται".

Να το σπρώξω λίγο ακόμα:  έστω ότι αλλάζω την κλήση που κάνεις σε  ΚΑΛΕΣΕ ΔΙΑΔ(Α, Μ-1+i+j)
τώρα, η μεταβλητή Κ της διαδικασίας θα πάρει σαν αρχική τιμή το αποτέλεσμα της έκφρασης Μ-1+i+j=0-1+6+6 δηλαδή το 11. Και εδώ, η Κ δεν "ξέρει" ότι οφείλει την τιμή της σε μια έκφραση που συμμετείχαν τρεις μεταβλητές (γιατί κι αν το "ήξερε"  :laugh:, σε ποια απ' όλες θα αντέγραφε την τιμή της?)

Φυσικά, αν η πρόθεση είναι (που απ' ότι καταλαβαίνω, αυτή είναι) να πάρεις στην Μ το άθροισμα των στοιχείων του πίνακα, τότε η κλήση θα πρέπει να γίνει με τη Μ μόνη της :  ΚΑΛΕΣΕ ΔΙΑΔ(Α, Μ).   Τότε, (επειδή η Μ είναι μεταβλητή και όχι έκφραση ή σταθερή), στο τέλος της διαδικασίας, η τιμή της Κ πράγματι θα αντιγραφεί στην Μ.

Και ναι, στην τελευταία σου ερώτηση, ο πίνακας Α, σαν μεταβλητή που είναι, στο τέλος θα παραλάβει τα περιεχόμενα του Π και αν ο Π είχε αλλάξει μέσα στη διαδικασία, θα άλλαζαν και τα περιεχόμενα του Α.
Φιλικά,
Γιώργος Θαλασσινός

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 481
  • There can be only one...may it be AEPP.
Απ: Κλήση διαδικασίας με σταθερά χωρίς μήνυμα λάθους
« Απάντηση #5 στις: 27 Μάρ 2013, 11:05:41 μμ »
Το κατάλαβα. Σας ευχαριστώ πολύ όλους.
 :)
Απ' τα τσακάλια δεν γλυτώνεις μ'ευχές ή παρακάλια
(Κ. Βάρναλης)

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