Κλήση αλγορίθμου από άλλο αλγόριθμο

Ξεκίνησε από gpapargi, 20 Μαρ 2006, 09:04:13 ΠΜ

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

gpapargi

Τετράδιο μαθητή, κεφάλαιο 3, παράδειγμα 2.

Σε αυτόν τον αλγόριθμο καλεί άλλο αλγόριθμο.

a <- Παραγοντικό (n)

Μπορεί να ενταχθεί αυτό το πολύ ισχυρό όπλο στο οπλοστάσιό μας;

filippos

Κατά πάσα πιθανότητα η "κλήση αλγόριθμου" που περιγράφεις Γιώργο, αναφέρεται στον αλγόριθμο Παραγοντικό της σελίδας 69 του βιβλίου μαθητή.

Παρατηρώντας τα δύο παραδείγματα, δηλαδή αυτό της κλήσης του αλγόριθμου (σελ.30-31 Τ.Μ.) και ορισμού του καλούμενου αλγόριθμου (σελ.69 Β.Μ.) πιστεύω μπορούμε να συμπεράνουμε εύκολα ότι η δηλωτική εντολή Δεδομένα //ν// μπορεί να θεωρηθεί αντίστοιχη της δήλωσης των τυπικών παραμέτρων στα υποπρογράμματα.

Αντίστοιχα, η δηλωτική εντολή Αποτελέσματα //product// μπορεί να θεωρηθεί αντίστοιχη της, συχνά χρησιμοποιούμενης, εντολής απόδοσης τιμής στη συνάρτηση σε προγραμματιστικό περιβάλλον (παραγοντικό <- product)

Σε αυτή την κατεύθυνση κινούνται και οι προσεγγίσεις του κου Χρήστου Κοίλια σε άρθρο / πρότασή του σχετικά με τη γενίκευση της ψευδογλώσσας ώστε να μπορεί να χρησιμοποιηθεί και για τη διδασκαλία των αρχών του τμηματικού προγραμματισμού σε επίπεδο αλγοριθμικής ψευδογλώσσας.

Έτσι θα μπορούσαμε να θεωρήσουμε τα δεδομένα ως τις παραμέτρους εισόδου ενός υποπρογράμματος και τα αποτελέσματα ως τις παραμέτρου εξόδου του.

Η παραπάνω παραδοχή, αν και λογική, απέχει πολύ από το να θεωρείτια σαφώς ορισμένη στο διδακτικό πακέτο οπότε, προσωπικά, πιστεύω ότι δε μπορούμε να εντάξουμε τέτοιο "όπλο" στο οπλοστάσιό μας.

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

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

gpapargi

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

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

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

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

Οι παλιοί (Άλκης, Σέργιος, Παναγιώτης) έχουν κάποια σχηματισμένη άποψη;

Φίλιππε θα μπορούσες να μου στείλεις το άρθρο του Κοίλια;

ΥΓ

Έχω την υποψία ότι διαφορετικά κομμάτια του διδακτικού πακέτου έχουν γραφτεί από διαφορετικούς συγγραφείς με αποτέλεσμα κάποια πράγματα που φαίνεται να χρησιμοποιούνται σε ένα κεφάλαιο να φαίνεται σαν να αποφεύγονται σε κάποιο άλλο. Το ίδιο μου φαίνεται ότι έχει συμβεί και στην αναδρομική διαδικασία των πύργων του Ανόι.
 

Sergio

Γιώργο,

φαντάζομαι ότι ο Φίλιππος αναφέρεται στο άρθρο του Χ.Κοίλια, με τίτλο "Αναπαράσταση Αλγορίθμων με Ψευδογλώσσα" που παρουσιάστηκε στο 2ο Συνέδριο της ΕΤΠΕ, το2003 στη Σύρο.

Εκεί γίνεται αναφορά στη δυνατότητα χρήσης των δηλωτικών εντολών Δεδομένα - Αποτελέσματα για την επικοινωνία τιμών από - προς αλγόριθμο με τρόπους ανάλογους αυτών που ακολουθούνται για την επικοινωνία τιμών στα υποπρογράμματα.

Ανέβασα το σχετικό άρθρο με τίτλο Κοίλιας - Αναπαράσταση Αλγορίθμων με Ψευδογλώσσα.pdf στην αρχειοθήκη μας στο briefcase οπότε μπορείς να το κατεβάσεις από εκεί.

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

Προσωπικά συμφωνώ και με τις δύο απόψεις και προσπαθώ να χρησιμοποιώ με συνέπεια τις δηλώσεις αυτές στους μαθητές μου από την αρχή της χρονιάς, στην κατεύθυνση της δημιουργίας των απαραίτητων νοητικών μηχανισμών που θα τους βοηθήσουν τόσο στη διαδικασία κατανόησης και ανάλυσης του προβλήματος (αναγνώριση δεδομένων – αποτελεσμάτων) αλλά και στην υιοθέτηση (κατοπινά) των αρχών του τμηματικού προγραμματισμού μέσα από την αναγνώριση των δεδομένων (παραμέτρων εισόδου) και αποτελεσμάτων (τιμή συνάρτησης ή παραμέτρων εξόδου) των αλγοριθμικών ενοτήτων (υποπρογραμμάτων)

Σε αυτή την κατεύθυνση, η άποψή μου είναι ότι με κατάλληλο χειρισμό, και στο πλαίσιο που τίθεται στο διδακτικό πακέτο, οι δηλώσεις μπορούν να χρησιμοποιηθούν για να «προετοιμάσουν» τους μαθητές για τον τμηματικό προγραμματισμό.  Έχω την αίσθηση ότι το πλαίσιο που περιγράφεται σε επίπεδο αλγοριθμικής ψευδογλώσσας δεν είναι απόλυτα ασφαλές για την εφαρμογή των κανόνων του τμηματικού προγραμματισμού σε επίπεδο αλγοριθμικής ψευδογλώσσας.  Για το σκοπό αυτό, νομίζω ότι το μόνο «ασφαλές» πλαίσιο στο οποίο μπορούμε να κινηθούμε είναι αυτό του προγραμματιστικού περιβάλλοντος που ορίζει πιό αυστηρά (και με σχετική συνέπεια) τους κανόνες για τη δημιουργία και τη λειτουργία των υποπρογραμμάτων.

Αν, όμως, έχουμε λειτουργήσει με συνέπεια στα πλαίσια της αλγοριθμικής προσέγγισης στις πρώτες «σπείρες» διδασκαλίας του μαθήματος, έχω την αίσθηση ότι διευκολυνόμαστε αρκετά στη συνέχεια όταν διδάσκουμε προγραμματισμό, δηλαδή τη μεταφορά του αλγόριθμου σε προγραμματιστικό περιβάλλον. 

Εκεί «εισπράττουμε» και τα αποτελέσματα της πρότερης «ορθής» χρήσης των δηλωτικών εντολών σε επίπεδο αλγοριθμικής ψευδογλώσσας προσέγγιση η οποία έχω σοβαρές ενδείξεις ότι διευκολύνει αρκετά τους μαθητές στα πρώτα βήματά τους στον τμηματικό προγραμματισμό.

Θα ήθελα όμως να άκουγα και τις απόψεις άλλων συναδέλφων στο θέμα.
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

gpapargi

Ευχαριστώ πολύ Σέργιο

Είδα το άρθρο στην παράγραφο «Κλήση αλγορίθμου από άλλο αλγόριθμο».

Ενδιαφέροντα πράγματα αναφέρονται εκεί. Έχω βέβαια απορίες (δε σκέφτηκα αναλυτικά τα όσα διάβασα) ως προς το πως γυρίζουν οι πίνακες και το αν μπορούμε να χρησιμοποιήσουμε τον ίδιο καλούμενο αλγόριθμο για την ίδια δουλειά σε πίνακες διαφορετικών μεγεθών (αυτά θα μας δώσει την πραγματική ανεξαρτησία καλούντος και καλούμενου αλγόριθμου). Αλλά αυτό είναι άλλο θέμα. Τα όσα περιγράφονται εκεί μέσα δεν έχουν σχέση με το παρόν διδακτικό πακέτο. Εκεί πχ τους καλεί με την «κάλεσε», χωρίζει τις παραμέτρους σε εισόδου και εξόδου κλπ. Γενικά το άρθρο είναι ένα θέμα που αφορά το μέλλον της ψευδογλώσσας.

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

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

Υπάρχουν περιπτώσεις που χρειάζεται μέσα σε ένα αλγόριθμο να εκτελέσεις πολλές φορές την ίδια διαδικασία (πχ εύρεση μεγαλύτερου κάποιου σταθερού πλήθους αριθμών, ή εύρεση παραγοντικού αν παίζεις με πιθανότητες, ή εύρεση ΜΚΔ αν παίζεις με κλάσματα και θέλεις απλοποιήσεις, μετατροπή σε ομώνυμα κλπ). Είναι άκομψο το να γράφεις συνέχεια τα ίδια και τα ίδια. Και δεν είναι και ωραίο να αφήνεις τέτοια προβλήματα για αντιμετώπιση μόνο μέσα από ΓΛΩΣΣΑ. 

Βέβαια ισχύουν οι κλασσικές ενστάσεις του ότι δεν υπάρχουν αρκετά παραδείγματα μέσα στο ΔΠ και ότι γενικότερα δεν έχουμε δει κανέναν να το χρησιμοποιεί.

Ουσιαστικά θα ήθελα γνώμες όχι για όλες τις περιπτώσεις γενικά, αλλά μόνο για αυτές που αναφέρω ότι δείχνουν να υποστηρίζονται. Είναι δύσκολη τοποθέτηση...

P.Tsiotakis

Βιβλίο καθηγητή:
1. Στο κεφ. 2 (σελ. 58), έχει την εντολή "deval <- 1 - Δύναμη(prosfora/arxiki, 1/xronos)"
2. Στο κεφ. 2 (σελ. 63), αναφέρει για τα Δεδομένα και Ζητούμενα "Δεν είναι εκτελεστέες εντολές, αλλά τυποποιήσεις που οριοθετούν την αρχή και το τέλος του αλγορίθμου και περιγράφουν σαφώς τα δεδομένα και τα αποτελέσματα."
3. Στο κεφ. 3 (σελ. 86), έχει την εντολή "Αντιμετάθεσε (table[i+1], table)"  !!!
4. Στο κεφ. 3 (σελ. 90), έχει τις εντολές "Δεδομένα \\ table \\" και "Αποτελέσματα \\ table \\" !!!!
5. Στο κεφ. 3 (σελ. 94), έχει τις εντολές "Δεδομένα // Χ(), Y(), n, m //" και "Αποτελέσματα // Χ() //" !!!!
6. Στο κεφ. 3 (σελ. 95), έχει την εντολή "Δεδομένα // ρ: δείκτης ... //"
7. Στο κεφ. 3 (σελ. 102), έχει τις εντολές "Αλγόριθμος Preorder_Traversal(R), Δεδομένα // R: δείκτης ρίζας //", μέσα στον αλγόριθμο λέει "Preorder_Traversal(Α)" και στο τέλος "Αποτελέσματα // Λίστα κόμβων //" !!!!
8. Στο κεφ. 4 (σελ. 123), αναφέρει τις εντολές "Αλγόριθμος Γρήγορη_Ταξινόμηση, Δεδομένα // table, left, right //", μέσα στον αλγόριθμο λέει "Γρήγορη_Ταξινόμηση (table, left, j-1), Γρήγορη_Ταξινόμηση (table, j+1, right)"

Τετράδιο μαθητή
1. Στο κεφ. 3 (σελ. 30), αναφέρει τις εντολές "α <- Παραγοντικό (n), β <- Παραγοντικό (k),  c <- Παραγοντικό (n-k)"
2. Στο κεφ. 5 (σελ. 52), αναφέρει τις εντολές "Αλγόριθμος Fibonacci", πιο κάτω στον αλγόριθμο αναφέρει "Fib <- Fib (n-1) + Fib (n-2)"
3. Στο κεφ. 5 (σελ. 53), αναφέρει την εντολή "m <- Ρίζα (l)  ! τετραγωνική ρίζα"

Βιβλίο μαθητή:
1. Στο κεφ. 3 (σελ. 47), αναφέρει "Τα δεδομένα εισόδου (αν υπάρχουν) περιγράφονται στη δεύτερη γραμμή του αλγορίθμου εντός των συμβόλων //...//. Αντίστοιχα τα αποτελέσματα εξόδου δίνονται στην προτελευταία γραμμή του αλγορίθμου εντός των συμβόλων"
2. Στο κεφ. 3 (σελ. 69), αναφέρει την εντολή "product <- n * Παραγοντικό (n-1)"
3. Στο κεφ 3 (σελ. 71), αναφέρει την εντολή "z <- Ευκλείδης (y, x mod y)"
4. Στο κεφ 3 (σελ. 72), αναφέρει την εντολή "Fib <- Fib (n-1) + Fib (n-2)" με όνομα αλγορίθμου Fibonacci2

Είναι φανερό οτι ούτε η πολυμελής συγγραφική ομάδα έχει κοινή γραμμή για το χειρισμό των εντολών Δεδομένα και Αποτελέσματα στα πλαίσια της ψευδογλώσσας (αν και φαίνεται μια τάση).
Και είναι ανεπίτρεπτο να υπάρχει τέτοια ανομοιογένεια μεταξύ των βιβλίων του διδακτικού πακέτου για ένα σχολικό βιβλίο που κυκλοφορεί για 7η χρονιά (για οποιοδήποτε βιβλίο που κυκλοφορεί 7 χρόνια θα ήταν ανεπίτρεπτο)

Θεωρώ οτι έχουμε μια ξεκάθαρη κλήση αλγορίθμων από άλλους αλγορίθμους (έτσι κάθε αλγόριθμος ουσιαστικά αποτελεί ένα υποπρόγραμμα) και οι παράμετροι εισόδου δηλώνονται στην εντολή Δεδομένα ενώ οι παράμετροι εξόδου δηλώνονται στην εντολή αποτελέσματα (δε χρειάζεται να είναι μόνο μια η επιστραφείσα τιμή). Παραδείγματα υπάρχουν αρκετά, αλλά είναι διαφορετικά μεταξύ τους!!! Άλλοτε χρησιμοποιούνται συναρτήσεις (Fib) άλλωστε διαδικασίες (Αντιμετάθεσε)

Προσωπικά θεωρώ πολύ τολμηρό, να συζητάμε για τμηματικό προγραμματισμό στην ψευδογλώσσα, με αυτό το διδακτικό πακέτο. ʼλλωστε όλα αυτά θα ήταν μια πραγματικά χρήσιμη συζήτηση αν στη ύλη υπήρχε και η αναδρομή

Εδώ οι περισσότεροι καθηγητές δεν παρουσιάζουν ορθά τις εντολές Δεδομένα και Ζητούμενα, πάμε και στο επόμενο επίπεδο;

Ας αφήσουμε και κάτι στη ΓΛΩΣΣΑ !!! Θα παραπονεθεί οτι είναι τελείως άχρηστη

Με εκτίμηση,