Μετατροπή Συνάρτησης σε Διαδικασία

Ξεκίνησε από Βασίλης Παπαχρήστος, 06 Ιουν 2020, 01:37:27 ΜΜ

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

Βασίλης Παπαχρήστος

Ζητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία και να γραφεί ξανά το κύριο πρόγραμμα.

...
Διάβασε α, β
γ <- Βασίλης (α, β)
Γράψε α, β, γ
...

Συνάρτηση Βασίλης (χ, υ): Ακέραια
...
  χ <- χ + 4
  υ <- υ - 2
  Βασίλης <- (χ + υ)^2
Τέλος_συνάρτησης

Δίνονται οι παρακάτω λύσεις:

1η λύση
...
Διάβασε α, β
κ <- α
λ <- β
Κάλεσε Βασίλης (κ, λ, γ)
Γράψε α, β, γ
...

Διαδικασία Βασίλης (χ, υ, ζ)
...
χ <- χ + 4
υ <- υ - 2
ζ <- (χ + υ)^2
Τέλος_διαδικασίας


2η λύση
...
Διάβασε α, β
Κάλεσε Βασίλης (α, β, γ)
Γράψε α, β, γ
...

Διαδικασία Βασίλης (χ, υ, ζ)
...
κ <- χ
λ <- υ
κ <- κ + 4
λ <- λ - 2
ζ <- (κ + λ)^2
Τέλος_διαδικασίας

Θα θεωρηθούν αμφότερες σωστές;

Γιαννούλης Γιώργος

Από τις 2 λύσεις θα προτιμούσα τη 2η γιατί δεν αναγκάζει όποιον χρησιμοποιήσει τη διαδικασία να κάνει κάτι διαφορετικό από αυτό που κάνει στη συνάρτηση (απλά να περάσει τις ίδιες μεταβλητές).
Με την εκφώνηση που έδωσες όμως
ΠαράθεσηΖητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία και να γραφεί ξανά το κύριο πρόγραμμα.
επειδή ζητάς να ξαναγραφεί και το πρόγραμμα τότε εκτιμώ πως και οι 2 είναι σωστές.

Πιο δύσκολο ερώτημα θα ήταν αν έλεγες 
ΠαράθεσηΖητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία.
τότε δεν ξέρω αν θα έπερναν την 1η σωστή.

Αποστολάτος Άκης

Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος

George Eco

#3
Παράθεση από: Αποστολάτος Άκης στις 07 Ιουν 2020, 04:52:53 ΜΜ
Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος


Παράθεση από: Βασίλης Παπαχρήστος στις 06 Ιουν 2020, 01:37:27 ΜΜ
Ζητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία και να γραφεί ξανά το κύριο πρόγραμμα.

...
Διάβασε α, β
γ <- Βασίλης (α, β)
Γράψε α, β, γ
...

Συνάρτηση Βασίλης (χ, υ): Ακέραια
...
  χ <- χ + 4
  υ <- υ - 2
  Βασίλης <- (χ + υ)^2
Τέλος_συνάρτησης

Δίνονται οι παρακάτω λύσεις:

1η λύση
...
Διάβασε α, β
κ <- α
λ <- β
Κάλεσε Βασίλης (κ, λ, γ)
Γράψε α, β, γ
...

Διαδικασία Βασίλης (χ, υ, ζ)
...
χ <- χ + 4
υ <- υ - 2
ζ <- (χ + υ)^2
Τέλος_διαδικασίας


2η λύση
...
Διάβασε α, β
Κάλεσε Βασίλης (α, β, γ)
Γράψε α, β, γ
...

Διαδικασία Βασίλης (χ, υ, ζ)
...
κ <- χ
λ <- υ
κ <- κ + 4
λ <- λ - 2
ζ <- (κ + λ)^2
Τέλος_διαδικασίας

Θα θεωρηθούν αμφότερες σωστές;


Όταν μετατρέπω από ΣΥΝΑΡΤΗΣΗ σε ΔΙΑΔΙΚΑΣΙΑ, προσέχω η ΔΙΑΔΙΚΑΣΙΑ να είναι ισοδύναμη της ΣΥΝΑΡΤΗΣΕΩΣ.

Προτού εξηγήσω, να πω κάτι πολύ σημαντικό. Στη ΓΛΩΣΣΑ, η συνάρτηση, η ίδια, επιστρέφει μία τιμή. Γι' αυτό όταν την ορίζεις, θέτεις και τύπο.  Για να ορίσεις ποια τιμή θα επιστρέψει η συνάρτηση, χρησιμοποιείς την ονομασία της. Δεν είναι μεταβλητή αυτό. Απαγορεύεται μεταβλητή με το ίδιο όνομα συνάρτησης και δεν ορίζεις μεταβλητή με τέτοιο όνομα στο Τμήμα Δηλώσεών της ή στο Τμήμα Δηλώσεων του κεντρικού προγράμματος.

Μπορεί να έχει τρεις τελείτσες στο παράδειγμά αντί Τμήμα Δηλώσεων, θέλει όμως πολλή προσοχή.

Η συνάρτηση, το μόνο πράγμα που μπορεί να κάνει στη ΓΛΩΣΣΑ στα πλαίσια του μαθήματος, είναι να επιστρέψει τιμή.
Δεν επηρεάζει τις παραμέτρους που της περνάς. Αντιθέτως μία διαδικασία, έχει τη δυνατότητα να αλλάξει πολλαπλές τιμές σε πολλές μεταβλητές.

Η 2η λύση λοιπόν είναι λάθος!
Κάλεσε Βασίλης (α, β, γ) θα επηρεάσει κατ ευθείαν τις τιμές των α,β και γ, κάτι που η συνάρτηση δε μπορεί να κάνει.

Δεν ισχύουν οι από πάνω δύο γραμμές, είδα λάθος. Και οι δύο λύσεις είναι σωστές, ευχαριστώ τον @vasilis723 που το αμφισβήτησε!

Η συνάρτηση θα επιστρέψει τιμή στη γ μεταβλητή μόνο. Δεν αγγίζει τα α και β.
Για να αποφύγει αυτό, στη 1η λύση έβαλε επιπλέον μεταβλητές.
Η 1η λύση είναι σωστότερη κι αν μη τι άλλο αποδεκτή, ενώ η 2η είναι απαράδεκτη. Στο τέλος της δεύτερης έχουν αλλάξει τιμή τα α,β,γ. Αυτό, πώς θα το κάνεις με συνάρτιση ακριβώς; Αυτό έκανε η αρχική συνάρτηση;

Η 2η λύση λοιπόν, αφού ΔΕΝ έχει σφάλμα, είναι καλύτερη κιόλας, επειδή ενθυλακώνει την όλη διαδικασία με τις μεταβλητές μέσα της και δε τη διαχέει στο κεντρικό πρόγραμμα!

vasilis723

Γιατί είναι λάθος η 2η λύση; απο τη στιγμη που στη λιστα παραμετρων της διαδικασιας υπαρχουν οι χ και υ των οποιων η τιμη δεν μεταβαλλεται δεν κανει ακριβως την ιδια λειτουργια;

George Eco

#5
Ορθή παρατήρηση.
Τα μάτια μου έπαιξαν κακό παιχνίδι και νόμισα πως επηρέασε τις αρχικές παραμέτρους της.
Άρα σωστές κι οι δύο.
Σε αυτή τη περίπτωση, επειδή ενθυλακώνεται η όλη διεργασία με τις έξτρα μεταβλητές ΕΝΤΟΣ της διαδικασίας, τη θεωρώ προτιμότερη της άλλης, αλλά από τη στιγμή που λέει πως μπορείς να ξαναγράψεις και το κεντρικό πρόγραμμα, παίρνεις σωστές και τις δύο.

Συνοψίζουμε:
Σωστή η παρατήρησή σου Βασίλη.
Κι οι δύο σωστές.
Διόρθωσα την ανάρτησή μου, σ' ευχαριστώ πολύ!  :)

vasilis723

Παρακαλώ! Με αγχωσες προς στιγμήν γιατί πριν δύο μέρες έκανα ίδιο παράδειγμα στην τάξη.