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

Γενικό Λύκειο => Γ΄ Λυκείου => Τμηματικός προγραμματισμός => Μήνυμα ξεκίνησε από: Βασίλης Παπαχρήστος στις 06 Ιούν 2020, 01:37:27 μμ

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

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

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

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

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

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


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

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

Θα θεωρηθούν αμφότερες σωστές;
Τίτλος: Απ: Μετατροπή Συνάρτησης σε Διαδικασία
Αποστολή από: Γιαννούλης Γιώργος στις 07 Ιούν 2020, 12:09:10 μμ
Από τις 2 λύσεις θα προτιμούσα τη 2η γιατί δεν αναγκάζει όποιον χρησιμοποιήσει τη διαδικασία να κάνει κάτι διαφορετικό από αυτό που κάνει στη συνάρτηση (απλά να περάσει τις ίδιες μεταβλητές).
Με την εκφώνηση που έδωσες όμως
Παράθεση
Ζητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία και να γραφεί ξανά το κύριο πρόγραμμα.
επειδή ζητάς να ξαναγραφεί και το πρόγραμμα τότε εκτιμώ πως και οι 2 είναι σωστές.

Πιο δύσκολο ερώτημα θα ήταν αν έλεγες 
Παράθεση
Ζητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία.
τότε δεν ξέρω αν θα έπερναν την 1η σωστή.
Τίτλος: Απ: Μετατροπή Συνάρτησης σε Διαδικασία
Αποστολή από: Αποστολάτος Άκης στις 07 Ιούν 2020, 04:52:53 μμ
Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος
Τίτλος: Απ: Μετατροπή Συνάρτησης σε Διαδικασία
Αποστολή από: George Eco στις 07 Ιούν 2020, 05:27:21 μμ
Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος


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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

Η 2η λύση λοιπόν, αφού ΔΕΝ έχει σφάλμα, είναι καλύτερη κιόλας, επειδή ενθυλακώνει την όλη διαδικασία με τις μεταβλητές μέσα της και δε τη διαχέει στο κεντρικό πρόγραμμα!
Τίτλος: Απ: Μετατροπή Συνάρτησης σε Διαδικασία
Αποστολή από: vasilis723 στις 07 Ιούν 2020, 05:58:22 μμ
Γιατί είναι λάθος η 2η λύση; απο τη στιγμη που στη λιστα παραμετρων της διαδικασιας υπαρχουν οι χ και υ των οποιων η τιμη δεν μεταβαλλεται δεν κανει ακριβως την ιδια λειτουργια;
Τίτλος: Απ: Μετατροπή Συνάρτησης σε Διαδικασία
Αποστολή από: George Eco στις 07 Ιούν 2020, 07:04:31 μμ
Ορθή παρατήρηση.
Τα μάτια μου έπαιξαν κακό παιχνίδι και νόμισα πως επηρέασε τις αρχικές παραμέτρους της.
Άρα σωστές κι οι δύο.
Σε αυτή τη περίπτωση, επειδή ενθυλακώνεται η όλη διεργασία με τις έξτρα μεταβλητές ΕΝΤΟΣ της διαδικασίας, τη θεωρώ προτιμότερη της άλλης, αλλά από τη στιγμή που λέει πως μπορείς να ξαναγράψεις και το κεντρικό πρόγραμμα, παίρνεις σωστές και τις δύο.

Συνοψίζουμε:
Σωστή η παρατήρησή σου Βασίλη.
Κι οι δύο σωστές.
Διόρθωσα την ανάρτησή μου, σ' ευχαριστώ πολύ!  :)
Τίτλος: Απ: Μετατροπή Συνάρτησης σε Διαδικασία
Αποστολή από: vasilis723 στις 08 Ιούν 2020, 04:26:40 μμ
Παρακαλώ! Με αγχωσες προς στιγμήν γιατί πριν δύο μέρες έκανα ίδιο παράδειγμα στην τάξη.