Τι θα εμφανιστεί στην οθόνη?
Πρόγραμμα ...
...
α <-- 1
Κάλεσε Δ(α,α)
Γράψε α
..
Τέλος_Προγράμματος
Διαδικασία Δ(χ,β)
...
χ<-- χ+1
β<-- β+2
Τέλος_διαδικασίας
3
Το λογικό. (Ποιο λογικό; :D)
Βέβαια ο Διερμηνευτής βγαζει 2 .
Αλλού δεν το έτρεξα.
Το ερώτημα αυτό μπορεί να απαντηθεί, μονο αν μπορούμε αποτυπώσουμε το περιεχόμενο μιας μεταβλητής μετα απο δυο εκχωρήσεις που εκτελούνται ταυτόχρονα....
Θεωρητικά λέμε οτι κατα την επιστροφή απο μια διαδικασία η κάθε μια τυπική παράμετρο επιστρέφει την τιμή της στην αντίστοιχη πραγματική.
Όμως δεν γνωρίζουμε αν αυτό γίνετε με τη σειρα δηλ πρωτα επιστρέφει τιμή η πρωτη παράμετρο μετα η δεύτερη κλπ η αν γίνεται ταυτόχρονη επιστροφη ολων των παραμέτρων..
Οποτε νομιζω οτι δεν μπορούμε να απαντήσουμε..
Στην ADA που χρησιμοποιείται ο ίδιος μηχανισμός μεταβίβασης παραμέτρων αν δοκιμάσει κάποιος το παρακάτω πρόγραμμα :
with Ada.Text_IO; use Ada.Text_IO;
procedure Hello is
procedure ATest (A, B, C: in out Integer) is
begin
C := C + 1;
B := B + 2;
A := A + 3;
end ATest;
X : integer;
begin
Put_Line ("Hello, world!");
X := 5;
ATest(X, X, X);
end Hello;
σε έναν online compiler όπως ο παρακάτω:
http://rextester.com/l/ada_online_compiler (http://rextester.com/l/ada_online_compiler)
θα πάρουμε ένα μεγαλοπρεπές compiler error!!!
Error(s):
source.adb:18:11: writable actual for "A" overlaps with actual for "B"
gnatmake: "source_file.adb" compilation error
Παράθεση από: nikolasmer στις 11 Μαΐου 2017, 01:16:40 ΜΜ
3
Το λογικό. (Ποιο λογικό; :D)
Βέβαια ο Διερμηνευτής βγαζει 2 .
Αλλού δεν το έτρεξα.
Με βάση το βιβλίο, πρέπει να βγάλει 2. Η εξήγηση είναι στη βοήθεια του Διερμηνευτή, στο https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Μεταβίβαση_παραμέτρων/ (https://alkisg.mysch.gr/%CE%93%CE%9B%CE%A9%CE%A3%CE%A3%CE%91/%CE%9C%CE%B5%CF%84%CE%B1%CE%B2%CE%AF%CE%B2%CE%B1%CF%83%CE%B7_%CF%80%CE%B1%CF%81%CE%B1%CE%BC%CE%AD%CF%84%CF%81%CF%89%CE%BD/), τελευταία κουκκίδα.
Παράθεση από: alkisg στις 16 Μαΐου 2017, 11:23:10 ΠΜ
Με βάση το βιβλίο, πρέπει να βγάλει 2. Η εξήγηση είναι στη βοήθεια του Διερμηνευτή, στο https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Μεταβίβαση_παραμέτρων/ (https://alkisg.mysch.gr/%CE%93%CE%9B%CE%A9%CE%A3%CE%A3%CE%91/%CE%9C%CE%B5%CF%84%CE%B1%CE%B2%CE%AF%CE%B2%CE%B1%CF%83%CE%B7_%CF%80%CE%B1%CF%81%CE%B1%CE%BC%CE%AD%CF%84%CF%81%CF%89%CE%BD/), τελευταία κουκκίδα.
Αχα !
Δεν παίζει ρόλο η σειρά με την οποία αντιγράφονται οι τυπικές παραμέτρους στις πραγματικές μετά την ολοκλήρωση της διαδικασίας;
Αν επιστραφούν με τη σειρά που είναι δηλωμένες (χ, β) υποθέτω πως αρχικά θα αντιγραφεί χ (2) και στη συνέχεια το β (3) οπότε τελικά το α του κύριου προγράμματος θα έχει την τιμή 3.
Αν, πάλι, επιστραφούν με ανάποδη σειρά, αρχικά θα αντιγραφεί το β (3) και στη συνέχεια το χ (2) οπότε τελικά το α του κύριου προγράμματος θα έχει την τιμή 2.
Η τελευταία κουκίδα Άλκη, αν την κατάλαβα καλά, δε λέει ποιό από τα 2 θα γίνει..
Άκυρο Άλκη, μόλις είδα το https://alkisg.mysch.gr/steki/index.php?topic=289.msg1877#msg1877 (https://alkisg.mysch.gr/steki/index.php?topic=289.msg1877#msg1877)
Παράθεσηο Διερμηνευτής..κάνει push από αριστερά προς τα δεξιά και pop αντίθετα..