Αποστολέας Θέμα: Μετατροπή Συνάρτησης σε Διαδικασία  (Αναγνώστηκε 1231 φορές)

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

  • Θαμώνας
  • ***
  • Μηνύματα: 43
Μετατροπή Συνάρτησης σε Διαδικασία
« στις: 06 Ιούν 2020, 01:37:27 μμ »
Ζητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία και να γραφεί ξανά το κύριο πρόγραμμα.

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

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

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

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

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


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

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

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

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

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

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

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

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 87
Απ: Μετατροπή Συνάρτησης σε Διαδικασία
« Απάντηση #2 στις: 07 Ιούν 2020, 04:52:53 μμ »
Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος

George Eco

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 332
Απ: Μετατροπή Συνάρτησης σε Διαδικασία
« Απάντηση #3 στις: 07 Ιούν 2020, 05:27:21 μμ »
Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος


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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

Η 2η λύση λοιπόν, αφού ΔΕΝ έχει σφάλμα, είναι καλύτερη κιόλας, επειδή ενθυλακώνει την όλη διαδικασία με τις μεταβλητές μέσα της και δε τη διαχέει στο κεντρικό πρόγραμμα!
« Τελευταία τροποποίηση: 07 Ιούν 2020, 07:10:20 μμ από George Eco »

vasilis723

  • Οπαδός
  • **
  • Μηνύματα: 13
Απ: Μετατροπή Συνάρτησης σε Διαδικασία
« Απάντηση #4 στις: 07 Ιούν 2020, 05:58:22 μμ »
Γιατί είναι λάθος η 2η λύση; απο τη στιγμη που στη λιστα παραμετρων της διαδικασιας υπαρχουν οι χ και υ των οποιων η τιμη δεν μεταβαλλεται δεν κανει ακριβως την ιδια λειτουργια;

George Eco

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 332
Απ: Μετατροπή Συνάρτησης σε Διαδικασία
« Απάντηση #5 στις: 07 Ιούν 2020, 07:04:31 μμ »
Ορθή παρατήρηση.
Τα μάτια μου έπαιξαν κακό παιχνίδι και νόμισα πως επηρέασε τις αρχικές παραμέτρους της.
Άρα σωστές κι οι δύο.
Σε αυτή τη περίπτωση, επειδή ενθυλακώνεται η όλη διεργασία με τις έξτρα μεταβλητές ΕΝΤΟΣ της διαδικασίας, τη θεωρώ προτιμότερη της άλλης, αλλά από τη στιγμή που λέει πως μπορείς να ξαναγράψεις και το κεντρικό πρόγραμμα, παίρνεις σωστές και τις δύο.

Συνοψίζουμε:
Σωστή η παρατήρησή σου Βασίλη.
Κι οι δύο σωστές.
Διόρθωσα την ανάρτησή μου, σ' ευχαριστώ πολύ!  :)
« Τελευταία τροποποίηση: 07 Ιούν 2020, 07:14:46 μμ από George Eco »

vasilis723

  • Οπαδός
  • **
  • Μηνύματα: 13
Απ: Μετατροπή Συνάρτησης σε Διαδικασία
« Απάντηση #6 στις: 08 Ιούν 2020, 04:26:40 μμ »
Παρακαλώ! Με αγχωσες προς στιγμήν γιατί πριν δύο μέρες έκανα ίδιο παράδειγμα στην τάξη.