Επιστροφή τιμών σε διαδικασία

Ξεκίνησε από Neo, 27 Απρ 2006, 01:46:01 ΜΜ

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

Neo

Συνάδελφοι Χριστός Ανέστη και χρόνια πολλά.
:)

Ήθελα τη γνώμη σας στο ακόλουθο ζήτημα :

αν έχω το ακόλουθο τμήμα κυρίως προγράμματος
.
.
.
Κάλεσε Αθροισμα(Α[10,10],2,αποτέλεσμα)
Γράψε αποτέλεσμα
.
.
.
και τη διαδικασία
Διαδικασία Άθροισμα (Α[10,10],χ,αποτέλεσμα)
δηλώσεις
Αρχή
αποτέλεσμα <-- 0
  Για ι απο 1 μεχρι 10

     αποτέλεσμα <-- αποτέλεσμα + a[χ,ι]

τέλος_επανάληψης
Τέλος_διαδικασίας
με το Τέλος_διαδικασίας υπάρχει πρόβλημα κατά τη γνώμη σας; δηλαδή τι θα συμβεί μιας και θα γίνει ¨"επιστροφή" του χ στο 2 ?
Ελπίζω να είμουνα σαφής.
Ζητώ προκαταβολικά συγνώμη αν το έχετε καλύψει αλλά έψαξα αλλά δε το βρήκα.
Περιμένω τα σχόλια σας.
Ευχαριστώ πολύ.

Μανώλης Σταματάκης
Σταματάκης Μανώλης

andreas_p

Καλημέρα Μανώλη και Χρόνια Πολλά.
Το θέμα το έχουμε καλύψει.  Το παρουσιάζω πάλι.
1.  Ο πίνακας στη λίστα των πραγματικών παραμέτρων στο σημείο κλήσης  ΔΕΝ γράφεται Α[10,10] αλλά μόνο Α και δηλώνεται κανονικά στο τμήμα δηλώσεων.
2.  Στη λίστα των πραγματικών παραμέτρων στο σημείο κλήσης , ΔΕΝ μπορώ να έχω σταθερά.

Συνεπώς   το σωστό
κ <- 2
Κάλεσε  Άθροισμα(Α, κ, αποτέλεσμα)

Αληθώς Ανέστη

filippos

Στο (1) θα συμφωνήσω απόλυτα με τον Ανδρέα.  Όταν η παράμετρος είναι πίνακας, δηλώνεται απλά το όνομά του τόσο ως πραγματική όσο και ως τυπική παράμετρος.  Ας προσέξουμε όμως το εξής.  Εάν ένα υποπρόγραμμα (συνάρτηση ή διαδικασία) περιμένει ως παράμετρο μία ακέραια τιμή, μπορεί κατά την κλήση να οριστεί ένα στοιχείο πίνακα ακεραίων ως πραγματική παράμετρος. 

π.χ.
ΚΥΡΙΟ ΠΡΟΓΡΑΜΜΑ
...
   ΑΚΕΡΑΙΕΣ: Π[10, 10]
...
   ΚΑΛΕΣΕ Διαδ1(Π[1,7])
...
...
ΔΙΑΔΙΚΑΣΙΑ Διαδ1(Χ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ

Στο 2 η γνώμη μου Ανδρέα είναι ότι κάνεις λάθος.  Τόσο ο διερμηνευτής, όσο και η κοινή λογική συμφωνούν ότι η πραγματική παράμετρος μπορεί να είναι είτε μεταβλητή είτε σταθερά.  Αν είναι μεταβλητή τότε "και δίνει και παίρνει" (στην περίπτωση διαδικασίας).  Αν είναι σταθερά τότε "μόνο δίνει".   Αλλά και το βιβλίο "εννοεί το ίδιο" όταν ταυτίζει (σε λειτουργικό επίπεδο) τις συναρτήσεις που κατασκευάζει ο "προγραμματιστής" με τις "ενσωματωμένες συναρτήσεις της ΓΛΩΣΣΑΣ".  Διαφορετικά θα ήταν λάθος και η έκφραση Ψ<-Τ_Ρ(4) !!  Θα έπρεπε να δωθεί ως:
Χ<- 4
Ψ <- Τ_Ρ(Χ)
που όμως ασφαλώς δεν είναι απαραίτητο.

Εποκένως η απάντηση στο δεύτερο ερώτημα του Μανώλη είναι ότι Επιστροφή τιμών γίνεται μόνο στις πραγματικές παραμέτρους για τις οποίες έχουν δωθεί μεταβlhτές.  Μόνον αυτές μpoρούν να θεωρηθούν παράμετροι εξόδου.  Αν η πραγματική παράμετρος είναι σταθερή τιμή, τότε αποτελεί αποκλειστικά και μόνο είσοδο για το υποπρόγραμμα οπότε δεν τίθεται θέμα επιστροφής τιμής

lsourtzo

Εγώ πάλι δεν θα συμφωνήσω με τον filipo …
Στο σχολικό βιβλίο στην σελίδα 217 έχει το παρακάτω παράδειγμα …

Α<- 5
Β<- 7
ΚΑΛΕΣΕ ΠΡΑΞΕΙΣ ( A, B, Διαφ1, Αθρ1 )

Μπορεί να μην υπάρχει πουθενά στο βιβλίο κάποια άλλη διευκρίνηση σχετικά με το αν μπορούν να μπουν αριθμητικές τιμές ή όχι στο κάλεσμα μας διαδικασίας, αλλά νομίζω ότι το παράδειγμα μας καθοδηγεί σχετικά …

Αν και πιστεύω σφόδρα, ότι είναι ακόμα ένα κακογραμμένο σημείο στο βιβλίο που αφήνει πολλά περιθώρια παρερμηνειών !!

alkisg

#4
Σχετικά θέματα:
https://alkisg.mysch.gr/steki/index.php?topic=289.0
https://alkisg.mysch.gr/steki/index.php?topic=308.0

Υπάρχει και το παράδειγμα της σελίδας 106 του τετραδίου μαθητή στο οποίο χρησιμοποιούνται σταθερές αλλά και εκφράσεις (το Ν-1 στην κλήση της Μετακίνησε) :

Κώδικας: ΓΛΩΣΣΑ
ΠΡΟΓΡΑΜΜΑ ΠύργοιΤουΑνόι
ΣΤΑΘΕΡΕΣ
  Στύλος1 = 'Α'
  Στύλος2 = 'Β'
  Στύλος3 = 'Γ'
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν
ΑΡΧΗ
  ΓΡΑΨΕ 'Δώσε τον αριθμό των δίσκων:  '
  ΔΙΑΒΑΣΕ Ν
  ΚΑΛΕΣΕ Μετακίνησε(Ν, Στύλος1, Στύλος2, Στύλος3)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ Μετακίνησε(Ν, ΣτύλοςΑ, ΣτύλοςΒ, ΣτύλοςΓ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν
  ΧΑΡΑΚΤΗΡΕΣ: ΣτύλοςΑ, ΣτύλοςΒ, ΣτύλοςΓ
ΑΡΧΗ
  ΑΝ Ν = 1 ΤΟΤΕ
    ΓΡΑΨΕ 'Μετακίνησε από τον ', ΣτύλοςΑ, ' στον ', ΣτύλοςΓ
  ΑΛΛΙΩΣ
    ΚΑΛΕΣΕ Μετακίνησε(Ν - 1, ΣτύλοςΑ, ΣτύλοςΓ, ΣτύλοςΒ)
    ΓΡΑΨΕ 'Μετακίνησε από τον ', ΣτύλοςΑ, ' στον ', ΣτύλοςΓ
    ΚΑΛΕΣΕ Μετακίνησε(Ν - 1, ΣτύλοςΒ, ΣτύλοςΑ, ΣτύλοςΓ)
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

lsourtzo

Όσο αναφορά την χρήση σταθεράς σαν παράμετρο δεν υπάρχει διαφωνία …
Όσο αναφορά την απευθείας χρήση αριθμητικής τιμής έχω τις ενστάσεις μου !!

alkisg

Το Ν-1 που είναι έκφραση (σαν να λέμε μπορούμε να βάλουμε οτιδήποτε) δεν καλύπτει και την περίπτωση αριθμητικής τιμής;

lsourtzo

#7
Κοίτα … έτσι όπως το θέτεις …
Γενικά δεν θεωρώ ότι είναι το ίδιο η έκφραση και η αριθμητική τιμή !!!

Παρόλα αυτά συμφωνώ ότι σύμφωνα με την άποψη πάνω στην οποία στήριξα το ότι δεν μπορεί να πάρει αριθμό για παράμετρο, θα έπρεπε να υποστηρίξω το ίδιο και για την αριθμητική έκφραση…

Οπότε, σύμφωνα με το παράδειγμα σου, δέχομαι ότι μπορούμε να βάλουμε και απευθείας αριθμητικές τιμές …

Κρατάω τις επιφυλάξεις μου όμος για το πώς σε μία γλώσσα προγραμματισμού θα μπορούσε να διατυπωθεί κάτι τέτοιο στο κάλεσμα μίας διαδικασίας !!

Σε συναρτήσεις γίνετε … είναι δεδομένο …
Αλλά σε διαδικασία … δεν μπορώ να σκεφτώ κάποια γλώσσα που να το δέχεται …
Μήπως κάποιος που να έχει ασχοληθεί με Pascal ποιο πρόσφατα από ότι εγώ μπορεί να βοηθήσει στην απορεία μας ??

alkisg

#8
Στην Pascal δε γίνεται, η Basic όμως μοιάζει πολύ με τη ΓΛΩΣΣΑ, επιτρέπει και
call Diadikasia(x)
οπότε το x περνιέται αυτόματα με αναφορά αλλά και
call Diadikasia(3)
οπότε φυσικά το 3 περνιέται αυτόματα με τιμή.

Εγώ νομίζω ότι το κύριο ερώτημα είναι αν θεωρούμε το παράδειγμα με τους πύργους του Ανόι αντιπροσωπευτικό, ή αν θεωρούμε ότι υπάρχει λάθος στο συγκεκριμένο παράδειγμα!

lsourtzo

Εγώ καλύφθηκα …
Έτσι και αλλιώς με βάση το παράδειγμα που έδωσες, είπαμε ότι φαίνετε να γίνεται … αν και δεν θα το συνιστούσα στους μαθητές μου.

Παντός νομίζω ότι η φιλοσοφία της ΓΛΩΣΣΑ είναι πιο κοντά στην Pascal από την Basic.

Neo

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


Σταματάκης Μανώλης

ΠΤ

Kαι στην Pascal και στην Basic επιτρέπεται το πέρασμα σταθερής τιμής. Μην ψάχνουμε στην ΓΛΩΣΣΑ για αυστηρούς συντακτικούς κανόνες. Δεν είναι μιά πλήρης γλώσσα προγραμματισμού. Έτσι αν ένας κανόνας ισχύει στις 'μητέρες' γλώσσες νομίζω ότι πρέπει να είναι αποδεκτός και για τη ΓΛΩΣΣΑ μας.