Γενικό Λύκειο > Συναρτήσεις

Άθροισμα κατά γραμμές και κατά στήλες σε πίνακα με Συναρτηση

<< < (6/6)

pgrontas:
Άλκη το γνωρίζω για τον Διερμηνευτή και είναι μια διαφωνία που έχω σε αυτό το σημείο.

Η οπτική μου δεν έχει σχέση με ανακάτεμα συμβολισμών από γλώσσες προγραμματισμού. Μάλλον το αντίθετο.
Δεν βλέπω κανένα λόγο το όνομα της συνάρτησης να μην μπορεί να είναι μία ειδική μεταβλητή μέσα σε αυτή, την οποία να μπορείς να κάνεις ό,τι θέλεις και να την έχεις είτε δεξιά είτε αριστερά από την εκχώρηση. Είναι εύκολο να το εξηγήσεις και δεν χαλάει τίποτα. Βέβαια δεν υπάρχει σχετική ρητή πρόβλεψη στο βιβλίο, αλλά ούτε και σχετική απαγόρευση.
Οπότε αν απαγορεύσεις να μπει στα δεξιά, τότε εισάγεις έναν αδικαιολόγητο για μένα περιορισμό μόνο και μόνο για να μοιάσεις στην Pascal (δεν βλέπω άλλο λόγο). Θεωρώ επίσης ότι αυτό το σημείο, δεν είναι και από τα καλύτερα της Pascal (οπότε γιατί να πρέπει να της μοιάσουμε;), αφού το όνομα του υποπρογράμματος είναι διαφορετική έννοια από την κλήση του και κατά συνέπεια πρέπει να συμβολίζονται διαφορετικά.
Αν κάποιτε μπει αναδρομή στην ύλη, τότε η υποχρεωτική παρένθεση στην κλήση θα σε βοηθήσει να τα ξεχωρίζεις.

alkisg:
> Το όνομα του υποπρογράμματος είναι διαφορετική έννοια από την κλήση του και κατά συνέπεια πρέπει να συμβολίζονται διαφορετικά.

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

> μόνο και μόνο για να μοιάσεις στην Pascal

Όντως εγώ είχα το σκεπτικό "τι να εννοούσαν άραγε οι συγγραφείς". Αν ήταν να μπούμε στη διαδικασία του "τι θα ήταν καλύτερο", τότε εγώ θα προτιμούσα αυτό που κάνουν οι μοντέρνες γλώσσες, όπου το όνομα της συνάρτησης είναι pointer, οπότε `x = function1; x = function2;` και μετά `x()` καλεί την function2.

> Δεν βλέπω κανένα λόγο το όνομα της συνάρτησης να μην μπορεί να είναι μία ειδική μεταβλητή

Αρκετά πράγματα στις γλώσσες προγραμματισμού έχουν υλοποιηθεί έτσι για λόγους βελτιστοποιήσεων, κι ας μας φαίνονται άβολα στην εκπαίδευση. Π.χ. σε κάποιες γλώσσες η ΕΠΙΛΕΞΕ δεν αντιστοιχεί με πολλαπλές ΑΝ για να μπορεί να γίνει μια φορά αποτίμηση της αρχικής έκφρασης. Σε άλλες, η ΓΙΑ δεν αντιστοιχεί με ΟΣΟ για να μπορεί να αποτιμηθεί μια φορά η τελική τιμή και το βήμα.
Αντίστοιχα νομίζω ότι στην Pascal πάρθηκε αυτή η απόφαση για να μην χρειάζεται να σπαταληθεί χώρος για τοπική μεταβλητή. Π.χ. στην Pascal είναι δυνατή η επιστροφή ενός πίνακα με χιλιάδες στοιχεία, το να δημιουργηθεί αυτόματα μια τέτοια μεταβλητή χωρίς να είναι σίγουρο ότι χρειάζεται, κοστίζει. Ενώ στις γλώσσες που χρησιμοποιούν την εντολή `return value`, δεν υπάρχει τέτοιο ζήτημα. Και βέβαια ούτε και στη ΓΛΩΣΣΑ αφού δεν επιτρέπεται συνάρτηση να επιστρέφει πίνακα...

pgrontas:

--- Παράθεση από: alkisg στις 17 Απρ 2021, 04:17:23 μμ ---> Το όνομα του υποπρογράμματος είναι διαφορετική έννοια από την κλήση του και κατά συνέπεια πρέπει να συμβολίζονται διαφορετικά.

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

--- Τέλος παράθεσης ---
Δεν προτείνω τίποτα, απλά λέω ότι αυτές οι τρεις έννοιες ακριβώς επειδή είναι διαφορετικές θα πρέπει να συμβολίζονται και διαφορετικά.
Η δήλωση (ορισμός) πχ. ξεχωρίζει επειδή έχει την λέξη συνάρτηση (ή κάποια άλλη λέξη ανάλογα με τη γλώσσα ή επειδή έχει τον επιστρεφόμενο τύπο ή τύπους στη λίστα παραμέτρων). Το όνομα, όπου χρειάζεται εκτός της δήλωσης, όπως στην περίπτωσή μας μπαίνει μόνο του. Και η κλήση με τις παρενθέσεις για να ξεχωρίζει.

Καταλαβαίνω τι λες για τις βελτιστοποιήσεις. Αρκεί να μην σου χαλάνε το mental model, το οποίο στην εκπαίδευση είναι πιο σημαντικό.

Τέλος πάντων το νόημα της παρέμβασής μου είχε να κάνει με το ό,τι δεν βλέπω λόγο να εισάγουμε εναν περιορισμό - απαγόρευση που δεν αναφέρεται κάπου ρητά, ειδικά μάλιστα όταν αυτός μπορεί να περιπλέξει τα πράγματα (το όνομα της συνάρτησης είναι σαν μεταβλητή αλλά δεν είναι κιολας), δεν συγκρούεται με άλλη έννοια και δεν εξυπηρετεί κανέναν σκοπό τελικά.

alkisg:
Απλά όταν μπαίνουμε σε διαδικασία "πώς να ορίσουμε καλύτερα κάποιες λεπτομέρειες μιας γλώσσας" χωρίς να γράψουμε BNF κλπ... τότε ως αποτέλεσμα έχουμε 20+ χρόνια ασαφειών.
Ενώ αν οι συγγραφείς είχαν δηλώσει εξαρχής ότι "είναι εξελληνισμένη Pascal, τέλος", τότε μπορεί κάποια σημεία όπως αυτό που λες να ήταν ελαφρώς χειρότερα, άλλα όπως η αποφυγή του άθλιου μηχανισμού κλήσεων copy/restore να ήταν πολύ καλύτερα,
...όμως σίγουρα θα είχαμε γλυτώσει χιλιάδες ώρες να διυλίζουμε τον κώνωπα! Σημαντικότατο πλεονέκτημα!

dpa2006:

--- Παράθεση από: alkisg στις 17 Απρ 2021, 04:42:14 μμ ---Απλά όταν μπαίνουμε σε διαδικασία "πώς να ορίσουμε καλύτερα κάποιες λεπτομέρειες μιας γλώσσας" χωρίς να γράψουμε BNF κλπ... τότε ως αποτέλεσμα έχουμε 20+ χρόνια ασαφειών.
Ενώ αν οι συγγραφείς είχαν δηλώσει εξαρχής ότι "είναι εξελληνισμένη Pascal, τέλος", τότε μπορεί κάποια σημεία όπως αυτό που λες να ήταν ελαφρώς χειρότερα, άλλα όπως η αποφυγή του άθλιου μηχανισμού κλήσεων copy/restore να ήταν πολύ καλύτερα,
...όμως σίγουρα θα είχαμε γλυτώσει χιλιάδες ώρες να διυλίζουμε τον κώνωπα! Σημαντικότατο πλεονέκτημα!

--- Τέλος παράθεσης ---

Με μια μικρή διαφωνία ως προς την Εξελληνισμένη Pascal...
Η Pascal δήλωνε τα Υποπρογράμματα πριν το Begin (αν θυμάμαι καλά...πέρασαν 30 χρόνια...) η C όμως δηλώνει υποπρογράμματα μετά το Τέλο Προγράμματος, και εδώ θα ήθελα ενιαία αντιμετώπιση σε Γλώσσα και Ψευδογλώσσα...
τέλος πάντων...
:)

Πλοήγηση

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

[*] Προηγούμενη σελίδα

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