Γενικό Λύκειο > Τμηματικός προγραμματισμός

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

(1/2) > >>

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

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

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

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

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

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


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

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

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

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

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

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

George Eco:

--- Παράθεση από: Αποστολάτος Άκης στις 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η λύση; απο τη στιγμη που στη λιστα παραμετρων της διαδικασιας υπαρχουν οι χ και υ των οποιων η τιμη δεν μεταβαλλεται δεν κανει ακριβως την ιδια λειτουργια;

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

Μετάβαση στην πλήρη έκδοση