Κλήση διαδικασίας με σταθερά χωρίς μήνυμα λάθους

Ξεκίνησε από nikolasmer, 21 Μαρ 2013, 02:53:51 ΜΜ

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

nikolasmer

Μπορεί κάποιος σας παρακαλώ να μου εξηγήσει γιατί δεν βγάζει μήνυμα λάθους (συντακτικό) ο Διερμηνευτής στην κλήση της παρακάτω Διαδικασίας;
ΠΡΟΓΡΑΜΜΑ ΑΣΚ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: 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

Αν εννοείς για ποιο λόγο δέχεται έκφραση ως παράμετρο, νομίζω ότι ακριβώς εδώ είναι δύο μηνύματα που θα σου δώσουν την απάντηση.
https://alkisg.mysch.gr/steki/index.php?topic=2700.msg24221#msg24221
Φιλικά,
Γιώργος Θαλασσινός


nikolasmer

Παράθεση από: Νίκος Αδαμόπουλος στις 20 Μαρ 2010, 05:12:30 ΜΜ
... είναι απλό ο μεταγλωττιστής να έχει υλοποιηθεί έτσι ώστε αν η πραγματική παράμετρος είναι σταθερά ή έκφραση τότε η μεταβίβαση των τιμών να γίνεται προς την μία κατεύθυνση μονάχα, όπως στις συναρτήσεις...

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

Κύριοι ευχαριστώ για τις διευκρινήσεις σας.
Μερεντίτης Νικόλαος
Πληροφορικός

gthal

Συνάδελφε, όταν προσπαθεί κάποιος να γίνει καλύτερος σ' αυτό που κάνει, καμία ερώτηση δεν είναι αφελής.
Ίσα ίσα, είναι προς τιμήν του. Και αυτό είναι που βρίσκω σπουδαίο εδώ στο Στέκι, τόσο σ' αυτούς που ρωτάνε όσο και σ' αυτούς που απαντάνε.
Για άλλη μια φορά μπράβο σ' αυτό που γίνεται εδώ και σ' όσους συμμετέχουν.

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

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

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

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

nikolasmer

Μερεντίτης Νικόλαος
Πληροφορικός