Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Τμηματικός προγραμματισμός => Μήνυμα ξεκίνησε από: ChrisD στις 22 Μαΐου 2025, 04:47:32 ΜΜ

Τίτλος: Τι θα εμφανίσει;
Αποστολή από: ChrisD στις 22 Μαΐου 2025, 04:47:32 ΜΜ
Καλησπέρα σας όλους και ευχαριστώ εκ των προτέρων για το χρόνο σας και για τα φώτα σας!
Χωρίς να εξετάζω την σκοπιμότητα υλοποίησης του παραπάνω προγράμματος, αν καλούσα την διαδικασία και έβαζα στις μεταβλητές που καλώ το Α δύο φορές και μέσα στην διαδικασία στην πρώτη φορά που το έτρεχα άλλαζα την πρώτη μεταβλητή, δηλαδή το Χ και σας δεύτερη περίπτωση αλλάζω την δεύτερη μεταβλητή το Ζ τι θα περίμενα να εμφανιστεί στο πρόγραμμα;   
Σκέφτηκα ότι λογικά την δεύτερη τιμή πάντα αλλά τρέχοντας τον διερμηνευτή διαπίστωσα ότι αυτό δεν ισχύει...
Με την εντολή Χ <- Χ + 1 θα εμφανίσει 2,2,2
Με την εντολή Ζ <- Ζ + 1 θα εμφανίσει 1,1,2
Άρα καταλαβαίνω ότι αυτό που επηρεάζει είναι η πρώτη μεταβλητή. Γιατί;  
 

ΠΡΟΓΡΑΜΜΑ ΑΣΚ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α, Υ
ΑΡΧΗ
  Α <- 1
  ΚΑΛΕΣΕ ΔΙΑΔ(Α, Α, Υ) 
  ΓΡΑΨΕ Α, Α, Υ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ(Χ, Ζ, Ω) 
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ, Ζ, Ω
ΑΡΧΗ
  Ω <- Χ + Ζ
  Ζ <- Ζ + 1
  ! Χ <- Χ + 1
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Τίτλος: Απ: Τι θα εμφανίσει;
Αποστολή από: petrosp13 στις 22 Μαΐου 2025, 10:34:48 ΜΜ
Προφανώς είναι θέμα υλοποίησης του διερμηνευτή και πώς αντιγράφει πίσω τις τιμές
Αλλά γιατί να μπλέξεις με κάτι τέτοιο;
Τίτλος: Απ: Τι θα εμφανίσει;
Αποστολή από: alkisg στις 22 Μαΐου 2025, 10:38:18 ΜΜ
Χρήστο δες τη βοήθεια του Διερμηνευτή, περιγράφει και το πως και το γιατί:

https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Μεταβίβαση_παραμέτρων/
Τίτλος: Απ: Τι θα εμφανίσει;
Αποστολή από: Marfoto2 στις 19 Φεβ 2026, 12:08:56 ΠΜ
Κύριε Άλκη καλησπέρα. 
Διάβασα τη βοήθεια του Διερμηνευτή στο link που παραθέσατε.
Θέλω να κάνω την εξής ερώτηση.
Κλείνει το άρθρο με την ακόλουθη σημείωση:

Αν αντί για  β <- β + 1  είχαμε  β <- β + 2, με το μηχανισμό copy in - copy out ποια θα ήταν η τιμή του α; Θα ήταν αυξημένη κατά ένα ή κατά δύο; Δλδ ποια είναι η σειρά του μηχανισμού αντιγραφής με την εκτέλεση της εντολής ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ; Με τη σειρά που είναι γραμμένες οι τυπικές παράμετροι ή από την τελευταία προς την πρώτη;
Ευχαριστώ εκ των προτέρων.
Τίτλος: Απ: Τι θα εμφανίσει;
Αποστολή από: alkisg στις 19 Φεβ 2026, 08:14:15 ΠΜ
Στον Διερμηνευτή, η ώθηση των παραμέτρων γίνεται από αριστερά προς τα δεξιά, και η απώθηση/εξαγωγή αντίθετα, από δεξιά προς τα αριστερά. Οπότε το παρακάτω πρόγραμμα θα εμφανίσει 1:

Κώδικας (glossa) [Επιλογή]
ΠΡΟΓΡΑΜΜΑ ΜεταβίβασηΠαραμέτρων
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α
ΑΡΧΗ
  α <- 0
  ΚΑΛΕΣΕ Αύξηση(α, α)
  ΓΡΑΨΕ α
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ Αύξηση(α, β)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α, β
ΑΡΧΗ
  α <- α + 1
  β <- β + 2
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Τίτλος: Απ: Τι θα εμφανίσει;
Αποστολή από: Marfoto2 στις 19 Φεβ 2026, 12:07:08 ΜΜ
Παράθεση από: alkisg στις 19 Φεβ 2026, 08:14:15 ΠΜΣτον Διερμηνευτή, η ώθηση των παραμέτρων γίνεται από αριστερά προς τα δεξιά, και η απώθηση/εξαγωγή αντίθετα, από δεξιά προς τα αριστερά. Οπότε το παρακάτω πρόγραμμα θα εμφανίσει 1:
Ευχαριστώ πολύ. Λειτουργία στοίβας λοιπόν και όχι ουράς.
Μια ερώτηση ακόμα.
Σε όλες τις γλώσσες (που ακολουθούν το μηχανισμό copy in - copy out) συμβαίνει αυτό ή σε άλλες έχουμε λειτουργία ουράς;
Τίτλος: Απ: Τι θα εμφανίσει;
Αποστολή από: alkisg στις 20 Φεβ 2026, 10:30:00 ΠΜ
Γενικά δεν υπάρχουν και πολλές με μηχανισμό copy in / out, επειδή είναι πολύ ΜΗ αποδοτικός.
Δες λίγο τα links που δίνω σε αυτό το παλιότερο θέμα:

https://alkisg.mysch.gr/steki/index.php?topic=8141.msg88995#msg88995

Η Ada από το 2013 θεωρεί σφάλμα μεταγλώττισης να περάσεις την ίδια παράμετρο δυο φορές, όταν είναι copy out.

Δες και μια παλιότερη συζήτηση του 2006:

https://alkisg.mysch.gr/steki/index.php?topic=289.0