Μέγεθος πίνακα στην ψευδογλώσσα

Ξεκίνησε από Michael, 15 Ιαν 2008, 09:36:37 ΜΜ

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

Michael

Edit από gpapargi:
Το συγκεκριμένο θέμα προέκυψε μετά από διαχωρισμό του θέματος
https://alkisg.mysch.gr/steki/index.php?topic=1185.0
Αυτό κρίθηκε αναγκαίο για την καλύτερη οργάνωση λόγω του ότι τέθηκε ερώτημα διαφορετικού περιεχομένου από το αρχικό.
Ακολουθεί το μήνυμα του Michael

------------------------------------------------------------------------------------------------------------

Υποθέτω, η παρακάτω λύση θα έπαιρνε 10/10?

Αλγόριθμος κώδικας_1_παραλλαγή
  μ<-0    ! μετρητής μαθητών
  Διάβασε όνομα
  Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης
!Στη συνέχεια, αφού έχουμε αποθηκευμένα τα δεδομένα, μπορούμε να βρούμε παπάδες, όχι μόνο μέσους όρους.
  S<-0
  Για i από 1 μέχρι μ   !αν μ=0 δεν παραβιάζεται η καθοριστικότητα, αφού ο αλγόριθμος δεν θα προσπαθήσει να προσπελάσει τυχόν μηδενική θέση.
    S<-S+ Β[ i ]
  Τέλος_επανάληψης
  Αν μ>0 τότε
    μο<-S/μ
    Εμφάνισε μο
  Αλλιώς
    Εμφάνισε "Δεν πρόκειται για μήνυμα λάθους, διότι δεν ζητείται από την εκφώνηση. Όμως, σαν αλγόριθμος, το κάνω μόνο και μόνο για να ικανοποιήσω το κριτήριο της εξόδου."
  Τέλος_αν
Τέλος κώδικας_1_παραλλαγή


Γενικότερα: Υπάρχει κάποια βαθμολογική συνέπεια για δημιουργία περιττών πινάκων? Τον Μάιο στις εξετάσεις πρέπει να χρησιμοποιήσουμε όσους πίνακες μας δίνονται αρχικά από την εκφώνηση και μόνο αυτούς (για να πάρουμε το 100/100 και όχι το 99/100)?

Χάρης Τσιαΐρης

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

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

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

Χάρης Τσιαΐρης

gpapargi

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

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

Αναλυτική συζήτηση για την απόδοση αλγορίθμων και τη βαθμολόγηση βαθμολογία είχαμε κάνει παρακάτω

https://alkisg.mysch.gr/steki/index.php?topic=988.0


Michael

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

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

Σε κάθε περίπτωση, πόσο θα κόβατε από την προηγούμενη λύση? (Δεν ρωτάω πόσο θα έπρεπε να κοπεί, ρωτάω πόσο θα κόβατε αν τη βλέπατε μπροστά σας σε γραπτό Πανελλαδικών.)

gpapargi

Υπάρχουν 2 διαφορετικά πράγματα:
Το ένα είναι το να λύνεται πλήρως η άσκηση με πίνακα αλλά και χωρίς πίνακα και ο εξεταζόμενος να κάνει περιττή χρήση πινάκων και σπατάλη μνήμης. Σε αυτή την περίπτωση πιστεύω πως με βάση το καθεστώς δεν μπορείς να κόψεις βαθμό (δυστυχώς).
Το άλλο είναι να μην λύνεται η άσκηση με πίνακα και κάποιος να κάνει χρήση περιορίζοντας το πρόβλημα σε πλήθος στοιχείων ίσο με το μέγεθος του πίνακα. Εδώ μπορείς να κόψεις βαθμούς με την αιτιολογία ότι δε λύνεται το πρόβλημα σε κάθε περίπτωση.

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

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

Θυμίζει λίγο Αλ Καπόνε η περίπτωση… που δεν κατάφεραν να τον καταδικάσουν για ότι έκανε πραγματικά και τον καταδίκασαν για αυτό που μπορούσαν… φοροδιαφυγή.

Τι να κάνουμε… αφού το μάθημα έχει πάρει αυτή τη στραβή κατεύθυνση (δίκαια ή άδικα) βάζω θέματα μεταβλητού πλήθους δεδομένων για να κόψω τη χρήση πινάκων με πλάγιο τρόπο.  Όπως καταλαβαίνεις δεν πρόκειται να κάνω ούτε βήμα πίσω διότι έτσι μόνο έχω τρόπο να τους κλείσω το παράθυρο  >:D

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

pgrontas

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

Αυτό με το μεταβλητό πλήθος στοιχείων νομίζω ότι στην ψευδογλώσσα είναι λίγο προβληματικό, γιατί υπάρχουν παραδείγματα στο βιβλίο που χρησιμοποιούν πίνακα χωρίς το μέγεθος του (πχ. το πρώτο με το ελάχιστο - εκτός αν πρόκειται για τυπογραφικό).
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Michael

Δηλαδή πόσες μονάδες θα κόβονταν από τα 10/10?

gpapargi

#7
Σε αυτό το θέμα οι πιο αρμόδιοι να απαντήσουν είναι οι έμπειροι βαθμολογητές της παρέας (Αντρέας, Νικολακάκης, Ευριπίδης κλπ), αν και νομίζω ότι θα γίνει συζήτηση και θα δοθεί οδηγία για κάτι τέτοιο.

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

Νομίζω 2 στα 10 θα πρέπει να κοπεί. Δίνω μεγάλη σημασία στο ότι το συγκεκριμένο λάθος διορθώνεται εύκολα με μια σύσταση να μην ξαναγίνει.

sstergou

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

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

  • Στο παράδειγμα 2 σελ. 58 του βιβλίου του μαθητή οι διαστάσεις του πίνακα είναι άγνωστες
  • Στη σειριακή αναζήτηση σελ. 64 ψάχνουμε σε πίνακα ν στοιχείων
  • Στη σελίδα 68 ταξινομούμε πίνακα ν στοιχείων
είμαι σίγουρος ότι αν ψάξω και στο τετράδιο θα βρω και άλλα παραδείγματα.

Προσωπικά δεν θα έκοβα βαθμούς.

Όσον αφορά την σπατάλη της μνήμης δεν νομίζω ότι είναι το πιο σημαντικό πράγμα (εξαιρούνται οι υπερβολές) σε μία λύση η οποία δείχνει ότι ο μαθητής έχει αναπτύξει αλγοριθμική σκέψη. Προσωπικά διαφωνώ με αυτούς που τους έχει γίνει ψύχωση η μνήμη και όταν μια άσκηση λύνεται ευκολότερα με πίνακες επιλέγουν τον "δύσκολο" τρόπο με σκοπό τη βελτιστοποίηση της διαχείρισης μνήμης.
Είμαι σίγουρος ότι κάποιες από τις ασκήσεις που λύνουμε λύνονται και με τη χρήση δύο - τριών μεταβλητών.
Γιατί πχ να γράφουμε :
Κόστος <- sum * 15
Εμφάνισε Κόστος

και όχι αμέσως:
Εμφάνισε sum*15

τραβηγμένο αλλά ενδεικτικό παράδειγμα.

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

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

Και πάλι έχουμε να κάνουμε με μια αναντιστοιχία βιβλίου - εξετάσεων αφού το βιβλίο αναφέρει άλλα στο κεφ. 9.

evry

έχω να κάνω 1-2 παρατηρήσεις

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

Παράθεση από: Χάρης Τσιαΐρης στις 16 Ιαν 2008, 07:10:07 ΠΜ
Πριν μπούμε στη λογική των μονάδων, αν παραβιαστεί το κριτήριο της εξόδου είναι λάθος. (Αλήθεια σκεφτείτε πως θα αντιμετωπίζαμε ένα πρόγραμμα που θα τελείωνε χωρίς να μας έχει βγάλει έστω ένα μήνυμα του τύπου 'Θα έπρεπε να δοθεί τουλάχιστον ένας βαθμός για να υπάρχει ΜΟ'. Μάλλον θα λέγαμε ότι δεν κάνει τίποτα ακόμα και αν εμείς είμαστε οι υπεύθυνοι γιατί τελικά δεν δώσαμε αυτές τις τιμές.) Άλλωστε είναι σύμφωνο με το βιβλίο μας. (Ορισμός αλγορίθμου)

Επίσης σχετικά με τη περιττή χρήση πινάκων, να ξεκαθαρίσουμε κάποια πράγματα. Όταν ο μαθητής ξέρει πόσα στοιχεία θα διαβάσει ή ξέρει ότι τα στοιχεία που θα διαβάσει έχουν άνω όριο, δηλαδή είναι το πολύ 100 ας πούμε, μπορεί κάλλιστα να ορίσει πίνακα. Από εκεί και πέρα από τη στιγμή που ο αλγόριθμός του θα δουλεύει και θα βγάζει σωστό αποτέλεσμα δεν έχουμε δικαίωμα να του κόψουμε ούτε μισό εκατοστό του βαθμού. Όσοι κόβετε από εδώ θα πρέπει να κόβετε και για μη αποδοτικούς αλγορίθμους. Επίσης η περιττή χρήση της μνήμης δεν είναι και κάτι τόσο τραγικό σήμερα που έχουμε άφθονη μνήμη, όπως ήταν την εποχή του Mr "640k should be enough for anyone". Η απόδοση έχει πολύ μεγαλύτερη σημασία.

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

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

Στα υπόλοιπα με κάλυψε ο  sstergou


What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

Παράθεση από: sstergou στις 22 Ιαν 2008, 03:11:36 ΜΜ
Σε κάποιες γλώσσες δεν δηλώνεις μεταβλητές, ούτε πίνακες.

Αν καταλαβαίνω καλά τι λες Στάθη, μιλάς για πίνακες στους οποίους είναι δυνατόν να αλλάζει το μέγεθος κατά την εκτέλεση.

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

Στην λύση που έγραψε ο Μιχάλης γίνεται χειρισμός του πίνακα όπως στην Perl (δυναμικά).

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

Παράθεση από: sstergou στις 22 Ιαν 2008, 03:11:36 ΜΜ
Δεν ξέρω κατά πόσο πρέπει να περιμένουμε από το μαθητή να εφαρμόζει τους περιορισμούς των στατικών δομών στην ψευδογλώσσα από τη στιγμή που αρκετά παραδείγματα στο βιβλίο τους αγνοούν :

  • Στο παράδειγμα 2 σελ. 58 του βιβλίου του μαθητή οι διαστάσεις του πίνακα είναι άγνωστες
  • Στη σειριακή αναζήτηση σελ. 64 ψάχνουμε σε πίνακα ν στοιχείων
  • Στη σελίδα 68 ταξινομούμε πίνακα ν στοιχείων
είμαι σίγουρος ότι αν ψάξω και στο τετράδιο θα βρω και άλλα παραδείγματα.

Προσωπικά δεν θα έκοβα βαθμούς.

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

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

Παράθεση από: sstergou στις 22 Ιαν 2008, 03:11:36 ΜΜ
Όσον αφορά την σπατάλη της μνήμης δεν νομίζω ότι είναι το πιο σημαντικό πράγμα (εξαιρούνται οι υπερβολές) σε μία λύση η οποία δείχνει ότι ο μαθητής έχει αναπτύξει αλγοριθμική σκέψη. Προσωπικά διαφωνώ με αυτούς που τους έχει γίνει ψύχωση η μνήμη και όταν μια άσκηση λύνεται ευκολότερα με πίνακες επιλέγουν τον "δύσκολο" τρόπο με σκοπό τη βελτιστοποίηση της διαχείρισης μνήμης.

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

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

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

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

Παράθεση από: sstergou στις 22 Ιαν 2008, 03:11:36 ΜΜ
Είμαι σίγουρος ότι κάποιες από τις ασκήσεις που λύνουμε λύνονται και με τη χρήση δύο - τριών μεταβλητών.

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

andreas_p

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

Στο παράδειγμα 2 σελ. 58 του βιβλίου του μαθητή οι διαστάσεις του πίνακα είναι άγνωστες
Στη σειριακή αναζήτηση σελ. 64 ψάχνουμε σε πίνακα ν στοιχείων
Στη σελίδα 68 ταξινομούμε πίνακα ν στοιχείων
είμαι σίγουρος ότι αν ψάξω και στο τετράδιο θα βρω και άλλα παραδείγματα.

Προσωπικά δεν θα έκοβα βαθμούς.


ΑΠΑΝΤΗΣΗ.

Ο συνάδελφος  οφείλει  όχι μόνο να  πει αλλά και  να  κάνει  'κτήμα'  για τον μαθητή  τα παρακάτω : 

Εκείνο το  n   στα  συγκεκριμένα παραδείγματα  μπορεί  να είναι   :   

1)  η διάσταση του  πίνακα οπότε  το  n  είναι σταθερά και όχι μεταβλητή  δηλ.

     ΔΕΝ μπορώ να πω  :    Διάβασε   n  ,  εφ 'όσον το  n  είναι σταθερά (πίνακας = στατική δομή δεδομένων  άρα  μέγεθος =σταθερό καθορίζεται κατά τη φάση της συγγραφής του προγράμματος και όχι της εκτέλεσης.

ή

2) το πλήθος των στοιχείων ενός πίνακα (που θα επεξεργαστώ)  με διάσταση συγκεκριμένη(π.χ 100 βλέπε παράδειγμα  Κεφ. 9   Στατιστικά μεγέθη)  Εδώ ο περιορισμός είναι ότι   n>0   και   n <= 100.

Ανδρέας

sstergou

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

Συμφωνώ απόλυτα μαζί σου.

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

Και για να κάνω λίγο τον προβοκάτορα :

Τι κάνει η εντολή  : Δεδομένα //table, n// ;

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

Όποια και αν είναι η απάντηση εγώ δεν την θεωρώ προφανή.

Πιστεύω ότι για άλλη μια φορά το διδακτικό πακέτο αφήνει "σκοτεινά" σημεία. Από τη μια μας λέει ότι απαγορεύονται οι δυναμικοί πίνακες και από την άλλη τα παραδείγματά του :

  • ή Χρησιμοποιούν δυναμικούς πίνακες
  • ή χρησιμοποιούν εντολές των οποίων ο τρόπος χρήσης δεν έχει οριστεί με σαφήνεια (Δεδομένα)

@andreas_p : Στο παράδειγμα του κεφ. 9 η εκφώνηση αναφέρει ότι το Ν μπορεί να είναι από 2 μέχρι 100. Στα παραδείγματα της ψευδογλώσσας δεν υπάρχει τέτοια διευκρίνηση.

gpapargi

Το Δεδομένα //πίνακας, ν// σημαίνει κατά τη γνώμη μου… το πιο απλό πράγμα που θα μπορούσε να σημαίνει. Δηλαδή: «Θεωρήστε τον αριθμό ν δεδομένο (γνωστό) πχ 100 και επίσης θεωρήστε δεδομένα (δηλαδή γνωστά) τα στοιχεία του πίνακα πχ το α[1], το α[2] … και το α[100].»

Όλα δένουν με αυτή την ερμηνεία.

Στο κεφάλαιο 3 (που δεν έχει καμία σχέση με ΓΛΩΣΣΑ αλλά με δομές δεδομένων και ψευδογλώσσα δηλώνεται ρητά ότι ο πίνακας είναι στατική δομή δεδομένων. Όλα τα παραδείγματα του βιβλίου χειρίζονται τον πίνακα για γνωστό πλήθος στοιχείων.
Για να καταλάβεις αυτό που λέω φαντάσου κάθε παράδειγμα να μεταφέρεται σε ΓΛΩΣΣΑ με την προσθήκη της δήλωσης σταθεράς στην αρχή. Πχ
Σταθερές
ν=100
Μεταβλητές
Πραγματικές: α[ν]
…

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

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

pgrontas

Παράθεση από: gpapargi στις 24 Ιαν 2008, 02:06:01 ΜΜ
Το Δεδομένα //πίνακας, ν// σημαίνει κατά τη γνώμη μου… το πιο απλό πράγμα που θα μπορούσε να σημαίνει. Δηλαδή: «Θεωρήστε τον αριθμό ν δεδομένο (γνωστό) πχ 100 και επίσης θεωρήστε δεδομένα (δηλαδή γνωστά) τα στοιχεία του πίνακα πχ το α[1], το α[2] … και το α[100].»


Αυτή η ερμηνεία είναι εύλογη, αλλά για να προκύψει πρέπει να έχεις δεί τον αλγόριθμο - δηλαδή  να κοιτάξεις πώς χρησιμοποιείται ο πίνακας σε σχέση με το ν μέσα στον αλγόριθμο και όχι ΜΟΝΟ από την γραμμή ΔΕΔΟΜΕΝΑ.
Για να μην υπάρχουν αμφιβολίες (που έμενα μου προέκυψαν από την σύντομη ενασχόληση μου με τον διερμηνευτή της ψευδογλώσσας) δεν θα έπρεπε να έχει επιλεγεί μια σύνταξη όπως
Δεδομένα //πίνακας[ν]// αντί για Δεδομένα //πίνακας, ν//;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

#15
Έχω την εντύπωση ότι η ΓΛΩΣΣΑ είναι επηρεασμένη από Pascal/Basic, η ψευδογλώσσα από Fortran.
Η Fortran μας επιτρέπει να δηλώνουμε πίνακες και να βάζουμε μια παράμετρο για να προσδιορίσει το μέγεθος του πίνακα.
Αυτό έχει το καλό να μπορούμε να ξαναχρησιμοποιήσουμε ένα υποπρόγραμμα (αλγόριθμο) πιο αποδοτικά από ότι επιτρέπει η ΓΛΩΣΣΑ, π.χ. φτιάχνουμε έναν αλγόριθμο που τυπώνει έναν πίνακα και τον καλούμε είτε για πίνακα 10 θέσεων είτε για 5 θέσεων.

Το παράδειγμα αυτό σε Fortran:
Κώδικας: Fortran
      PROGRAM TEST
      INTEGER A(10), B(5)

      DO I=1,10
        A(I) = I
      END DO
      DO I=1,5
        B(I) = I**2
      END DO
      CALL PRINT_TABLE(A, 10)
      CALL PRINT_TABLE(B, 5)
      
      END PROGRAM TEST
      
      SUBROUTINE PRINT_TABLE(T, N)
      INTEGER T(N)
      
      DO I=1,N
        PRINT *, T(I)
      END DO
      END SUBROUTINE PRINT_TABLE



Από την άλλη όμως στην ψευδογλώσσα δεν είναι υποχρεωτική η δήλωση του μεγέθους ενός πίνακα όπως είναι στη Fortran... (οι μεταβλητές μπορούν όμως και στη Fortran να μην δηλώνονται).
Έτσι, δε νομίζω ότι είναι σωστό να επιτρέπεται το
Κώδικας: Ψευδογλώσσα
Αλγόριθμος Μέσος_Όρος
!σελ. 31 τετραδίου μαθητή
S <- 0
Για i από 1 μέχρι 105
  Διάβασε M[i]
  κτλ


και να μην επιτρέπεται το
Κώδικας: Ψευδογλώσσα
Αλγόριθμος Μέσος_Όρος
S <- 0
Διάβασε Ν
Για i από 1 μέχρι Ν
  Διάβασε M[i]
  κτλ


απλά και μόνο επειδή στην πρώτη περίπτωση μπορούμε να καταλάβουμε από την εκφώνηση ότι ο πίνακας θα έχει 105 θέσεις... Δηλαδή ο εκτελεστής του αλγορίθμου (είτε άνθρωπος είτε Η/Υ) θα πρέπει να κοιτάζει την εκφώνηση για να αποφασίσει πόσες θέσεις έχει ο πίνακας; Δεν υποτίθεται ότι οι εντολές θα πρέπει να είναι σαφείς; Ποια ακριβώς από τις εντολές του δεύτερου αλγόριθμου είναι λιγότερο σαφής από του πρώτου;

Νομίζω ότι είμαστε υποχρεωμένοι να δεχτούμε ένα από τα δύο,
1) "ένας πίνακας στην ψευδογλώσσα έχει τόσα στοιχεία όσα καταλαβαίνουμε από την εκφώνηση"
2) "ένας πίνακας στην ψευδογλώσσα έχει τόσα στοιχεία όσα και η μεγαλύτερη τιμή των δεικτών που θα βάλουμε μέσα του κατά την εκτέλεση"

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

P.Tsiotakis

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

bagelis

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

andreas_p

Όταν μπουν η κουβέντα θα πάρει φωτιά ...

pgrontas

Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

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

(Ελπίζω ʼλκη να μην κατάλαβα κάτι διαφορετικό από αυτό που λες. Στη περίπτωση 2 υπονοείται ότι το Ν είναι μικρότερο ή ίσο από το δηλωμένο μέγεθος του πίνακα).

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

alkisg

#21
Κι εγώ συμφωνώ ότι είναι στατική δομή (εννοείται, εξ' ορισμού). Ακόμα κι αν η ψευδογλώσσα υποστήριζε επαναπροσδιορισμό του μεγέθους ενός πίνακα (redim) όπως άλλες γλώσσες, πάλι στατική θα ήταν.
Επίσης στατική δομή θα ήταν αν το μέγεθος του πίνακα οριζόταν στη μέση της εκτέλεσης, π.χ.
Διάβασε Ν
Α[Ν] <- 5 !Εδώ αποφασίσαμε μια και καλή ότι ο πίνακας έχει Ν στοιχεία
Αυτό το υποστηρίζουν αρκετές γλώσσες, δεν είναι κάτι περίεργο. Δηλαδή μπορεί να μπει μεταβλητή για να δηλώσει το μέγεθος ενός πίνακα στη μέση της εκτέλεσης. Ο πίνακας θεωρείται ότι δηλώνεται ακριβώς σε αυτήν τη γραμμή (όχι από την αρχή της εκτέλεσης), και το μέγεθός του δεν μπορεί να αλλάξει στη συνέχεια.

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

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

Michael

ΠαράθεσηΣτη λύση που παρουσιάζει ο Μιχάλης το μέγεθος πρέπει να αλλάζει κατά τη διάρκεια εκτέλεσης και άρα παραβιάζει τη στατικότητα της δομής.

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

gpapargi

Η τεράστια λευκή κόλλα χωράει ένα πολύ μεγάλο αλλά πεπερασμένο πλήθος αριθμών. Ούτε με τη λευκή κόλλα αλλά ούτε με πολλές τέτοιες λύνεται το πρόβλημα στη γενική του περίπτωση. Ο αλγόριθμος δεν είναι μόνο κάτι πρακτικής σημασίας. Έχει και θεωρητικό υπόβαθρο από πίσω του. Σα μαθηματικός νομίζω ότι θα με καταλάβεις.  Θέλω τη γενική λύση του προβλήματος.

Δεν ξέρω αν είναι εύστοχο το παράδειγμα που θα δώσω.

Στα μαθηματικά μπορεί με τη βοήθεια υπολογιστή να ελέγξουμε ότι μια πρόταση ισχύει για ένα τεράστιο πλήθος αριθμών (πχ εικασία Goldbach). Αλλά δε μας αρκεί. Θέλουμε την απόδειξη ότι ισχύει στη γενική περίπτωση. Γι αυτό δαπανήθηκε τόσο κόπος για την απόδειξη του τελευταίου θεωρήματος του Fermat. Καμία εφαρμογή δεν έχει σήμερα το ότι αποδείχτηκε το θεώρημα του Fermat. Αλλά τη θέλαμε την απόδειξη γιατί τότε μόνο θα πούμε ότι λύσαμε το πρόβλημα. Κάπως έτσι…

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

alkisg

Μιας και είμαστε στο θέμα, να παραθέσω κι ένα παράδειγμα που είναι αποδεκτό σε C:
Κώδικας: C
#include <stdio.h>

int main()
{
  int N;

  scanf("%d", &N); //Διαβάζουμε το μέγεθος του πίνακα από το χρήστη
  {
    int A[N]; //Και έτσι το μέγεθος του πίνακα ορίζεται κατά την εκτέλεση
    
    for (int i = 0; i < N; i++)
      scanf("%d", A[i]); //Διάβασμα των Ν στοιχείων του πίνακα
  }
  return 0;
}


Είναι το παραπάνω αποδεκτό σε ψευδογλώσσα; (προφανώς χωρίς τις δηλώσεις)
Κι αν όχι, γιατί; Ποια είναι η ειδοποιός διαφορά;


Εντωμεταξύ προφανώς το
Αλγόριθμος Δοκιμή
Δεδομένα // table, N //

είναι αποδεκτό, οπότε και στην ψευδογλώσσα δεν έχουμε πρόβλημα να ορίζεται το μέγεθος του πίνακα κατά το runtime χωρίς να το ξέρουμε κατά την ανάλυση.

pgrontas

#25
Εγώ νομίζω ότι μπερδεύτηκα λίγο:

Τι διαφορά έχει το

μ<-μ+1
Β[ μ ]<-βαθμός
ΟΝ[ μ ]<-όνομα


από το

Διάβασε Ν
Α[Ν] <- 5 !Εδώ αποφασίσαμε μια και καλή ότι ο πίνακας έχει Ν στοιχεία


Θα μπορούσε δηλαδή και στην αρχική εκδοχή του Μιχάλη σε κάθε επανάληψη να ξαναδημιουργείται ο πίνακας με μέγεθος το καινούριο μ. Δηλαδή στατική δομή,  αλλά με νέο μέγεθος σε κάθε επανάληψη (όπως το redim preserve της VB - δεν ξέρω πώς υλοποιείται αλλά δίνει αίσθηση στατικής δομής).
Γιατί η ερμηνεία του ότι το μέγεθος του πίνακα προσδιορίζεται από την μέγιστη τιμή του πλήθους είναι ασύμβατη με αυτό;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Michael

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

Το ουσιαστικό θέμα για μένα είναι η ατιμωρησία στην άσκοπη χρήση πινάκων. Φυσικά είναι δικαίωμα του κάθε υποψήφιου να χρησιμοποιήσει όλα τα όπλα που έχει στη διάθεσή του, αλλά νομίζω πως η περίφημη οδηγία "Κάθε απάντηση επιστημονικά τεκμηριωμένη είναι αποδεκτή", εδώ αποκτά ένα ιδιαίτερο νόημα. Ενώ ο σκοπός είναι να προστατεύσει βαθμολογικά τον σκεπτόμενο εξεταζόμενο που θα δώσει την αναπάντεχη λύση, εδώ έχουμε μια ειδική περίπτωση που επιτρέπει σε όλους να οχυρωθούν στην κυριολεξία βαθμολογικά πίσω απ’ αυτήν την οδηγία.

sstergou

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

Εάν η εντολή Δεδομένα // table, N // ορίζει το μέγεθος του πίνακα κατά τη διάρκεια της εκτέλεσης τότε πως γίνεται οι πίνακες της ψευδογλώσσας να είναι συμβατοί με τον ορισμό της στατικής δομής;


Το παράδειγμα σε C επιτρέπεται σε compilers που υλοποποιούν το πρότυπο C99 δηλαδή εμφανίστηκε μετά το 1999. Φαντάζομαι πάντως πως αν και το μέγεθος καθορίζεται κατά τη διάρκεια της εκτέλεσης,αυτό δεν σημαίνει ότι μπορεί και να αλλάξει. Δεν μπορείς δηλαδή να πεις Α[Ν+1]=1.

edit: http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=215
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/variable_length_arrays.htm

Η διαφορά με την ψευδογλώσσα είναι ότι δεν δηλώνεις το μέγεθος του πίνακα. Οπότε το

Διάβασε μ
Α[μ]=1;
Α[μ+1]=2;


Όχι μόνο καθορίζει το μέγεθος του πίνακα κατά τη διάρκεια της εκτέλεσης αλλά και το αλλάζει ταυτόχρονα.

Νομίζω ότι έχουμε 3 περιπτώσεις:

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

ΠαράθεσηΔηλαδή στατική δομή,  αλλά με νέο μέγεθος σε κάθε επανάληψη.
Νομίζω πως το νόημα της στατικής δομής είναι ακριβώς το αντίθετο. Ότι δηλαδή δεν αλλάζει. Εάν άλλαζε τότε τι σόι στατική δομή είναι (!!).

Ελπίζω στο επόμενο βιβλίο να εφεύρουν μια γλώσσα που να μπορεί να εκτελεστεί έτσι όπως την περιγράφουν.

pgrontas

ΠαράθεσηΝομίζω πως το νόημα της στατικής δομής είναι ακριβώς το αντίθετο. Ότι δηλαδή δεν αλλάζει. Εάν άλλαζε τότε τι σόι στατική δομή είναι (!!).
Μάλλον δεν εξέφρασα σωστά αυτό που σκεφτόμουν (μου συμβαίνει συχνά)
Το μέγεθος δεν αλλάζει μέσα στην επανάληψη. Στο επόμενο loop θα χρησιμοποιηθεί μία ΚΑΙΝΟΥΡΙΑ δομή με μέγεθος +1 και σταθερό μέγεθος για όλη την διάρκεια ζωής της κόκ.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

#29
Είναι λίγο δύσκολο να εκφράσουμε με παραδείγματα όλες τις διαφορετικές περιπτώσεις.

Το
Διάβασε μ
Α[μ] <- κάτι
δε σημαίνει απαραίτητα ότι αποφάσισα ότι ο πίνακας Α έχει μ στοιχεία, μπορεί να αποφάσισα ότι έχει 2*μ στοιχεία και να χρησιμοποιώ τα υπόλοιπα παρακάτω.

Το
Δεδομένα // table, N //
αναγκαστικά αφορά την εκτέλεση και όχι τη μεταγλώττιση. Εκτός από την προφανή εξήγηση, ότι τα table και Ν είναι δεδομένα και άρα όχι γνωστά κατά τη μεταγλώττιση, μπορούμε να το δούμε και πιο αναλυτικά σε παράδειγμα:
Κώδικας: Ψευδογλώσσα
Αλγόριθμος ΔιαβάζωΈνανΠίνακαΚαιΕπιστρέφωΤηΔιασπορά
Δεδομένα // Ν //
Για ι από 1 μέχρι Ν
  Διάβασε Α[ι]
  υπολόγισε τη διασπορά κτλ
Αποτελέσματα // διασπορά //
Τέλος ΔιαβάζωΈνανΠίνακαΚαιΕπιστρέφωΤηΔιασπορά


Στη συνέχεια τον καλώ από άλλο αλγόριθμο (υπάρχουν κάμποσα σχετικά παραδείγματα στο βιβλίο, π.χ. Αλγόριθμος Δύναμη από τη σελίδα 84 του βιβλίου καθηγητή):
Κώδικας: Ψευδογλώσσα
Αλγόριθμος ΒρεςΚάμποσεςΔιασπορές
Διάβασε Ν
διασπορά1 <- ΔιαβάζωΈνανΠίνακαΚαιΕπιστρέφωΤηΔιασπορά(Ν)
!Δημιουργείται (και καταστρέφεται στο τέλος της κλήσης) πίνακας Ν στοιχείων
διασπορά2 <- ΔιαβάζωΈνανΠίνακαΚαιΕπιστρέφωΤηΔιασπορά(2*Ν)
!Δημιουργείται (και καταστρέφεται στο τέλος της κλήσης) πίνακας 2*Ν στοιχείων
Τέλος ΒρεςΚάμποσεςΔιασπορές


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


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

Παράθεση από: sstergou στις 25 Ιαν 2008, 04:42:40 ΜΜ
Ελπίζω στο επόμενο βιβλίο να εφεύρουν μια γλώσσα που να μπορεί να εκτελεστεί έτσι όπως την περιγράφουν.
Αμήν! :)

gpapargi

Μιχάλη αν βρεις χρόνο διάβασε τη συζήτηση
https://alkisg.mysch.gr/steki/index.php?topic=988.0
περί αλγοριθμικής ποιότητας. Στην τρίτη σελίδα, τέταρτο μήνυμα από το τέλος γράφω και για το "Κάθε απάντηση επιστημονικά τεκμηριωμένη είναι αποδεκτή".

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


pgrontas

#31
Θα ήθελα να επανέρθουμε λίγο σε αυτό το θέμα γιατί πραγματικά δεν έχω βγάλει ένα συμπέρασμα για το τι είναι σωστό και τι όχι.

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

Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης


Στην άσκηση που πρότεινα για το διαγώνισμα των πινάκων (1δ - δηλαδή σειριακή αναζήτηση σε πίνακα με μη ταξινομημένα και επαναλαμβανόμενα στοιχεία) υπάρχει ο κώδικας


ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗ
ΔΕΔΟΜΕΝΑ //Α, Ν, ΣΤΟΙΧΕΙΟ//
ΒΡΕΘΗΚΕ <- ΨΕΥΔΗΣ
Κ<-0
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ Α[Ι] = ΣΤΟΙΧΕΙΟ ΤΟΤΕ
Κ<-Κ+1
Β[Κ] <- Ι
ΒΡΕΘΗΚΕ <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΠΟΤΕΛΕΣΜΑΤΑ //Β, ΒΡΕΘΗΚΕ//
ΤΕΛΟΣ ΑΝΑΖΗΤΗΣΗ


Η χρήση του πίνακα είναι ίδια με την διαφορά ότι στην δεύτερη περίπτωση ΠΡΙΝ την εκτέλεση του αλγορίθμου υπάρχει ένα άνω όριο (Ν) στα στοιχεία του πίνακα Β, ενώ στην πρώτη ΠΡΙΝ την εκτέλεση δεν υπάρχει τέτοιο όριο (στην δεύτερη περίπτωση χρειάζεται πίνακας επειδή ο αλγόριθμος επιστρέφει περισσότερα από ένα στοιχεία)

Τελικά το άνω όριο είναι που δικαιολογεί την χρήση πίνακα ή τελικά και τα δύο είναι λάθος ή και τα δύο είναι σωστά στην χρήση του πίνακα στην ψευδογλώσσα;

Update: Επισημαίνω ότι το άνω όριο είναι το worst case scenario και οδηγεί στην δέσμευση περισσότερων θέσεων μνήμης από ότι τελικά θα χρειαστούν
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

P.Tsiotakis

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

Επομένως, είναι σαφέστατα ΛΑΘΟΣ η επίλυση της άσκησης με τη χρήση πίνακα.

Στο θέμα 3, ενιαίων 2007 (το θέμα με τα γραμματόσημα - ένα βήμα πριν) στα βαθμολογικά κέντρα κόπηκαν τουλάχιστον 2 μόρια σε όσουν το επίλυσαν με πίνακες. Ίσως κάποιοι βαθμολογητές να έκοψαν και περισσότερα. Εγώ ΔΕΝ ήμουν βαθμολογητής.

Δε μιλάμε για βέλτιστη λύση αλλά για λανθασμένη επίλυση.

pgrontas

Παράθεση από: Τσιωτάκης Παναγιώτης στις 31 Ιαν 2008, 04:07:39 ΜΜ
Επομένως, είναι σαφέστατα ΛΑΘΟΣ η επίλυση της άσκησης με τη χρήση πίνακα.

Όπως προανέφερα στο μήνυμα δεν εξετάζω το αν πρέπει να χρησιμοποιήσουμε πίνακα. Ρωτάω για τον αν είναι σωστός ο τρόπος που χρησιμοποιείται και ποια η διαφορά των δύο λύσεων.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

Συγνώμη, αλλά εγώ γιατί μπερδεύομαι; Ελπίζω να με διαφωτίσετε!

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

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

δεν θα έπρεπε αντί για Ν στους αλγορίθμους να υπάρχει αριθμός;

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

Υπάρχει ένα άνω όριο στο Ν ή όχι. Αν ναι ποιο είναι αυτό;

Το εκτελέσιμο αρχείο που θα παράγει θα έχει την ικανότητα να αναζητεί σε πίνακες. Γενικά σε πίνακες ή υπάρχει ένα όριο;

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

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

Michael

ΠαράθεσηΤελικά το άνω όριο είναι που δικαιολογεί την χρήση πίνακα ή τελικά και τα δύο είναι λάθος ή και τα δύο είναι σωστά στην χρήση του πίνακα στην ψευδογλώσσα;

Update: Επισημαίνω ότι το άνω όριο είναι το worst case scenario και οδηγεί στην δέσμευση περισσότερων θέσεων μνήμης από ότι τελικά θα χρειαστούν

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

P.Tsiotakis

- Σελ. 76: "Η πρώτη δομή που εξετάστηκε είναι η δομή του πίνακα μια στατική δομή με μέγεθος που δε μεταβάλλεται χρονικά"

- Σελ. 57: "Δίδεται ο δισδιάστατος πίνακας table με m γραμμές και n στήλες. Να βρεθεί ..."

- Σελ. 68: "Στον αλγόριθμο αυτό ως είσοδος δίνεται η μεταβλητή table με n ακεραίους που πρέπει να ταξινομηθούν"

Η ψευδογλώσσα είναι ένα περιβάλλον ΧΑΡΑΞΗΣ και ΠΕΡΙΓΡΑΦΗΣ της λύσης ενός προβλήματος, χωρίς τις τυπικότητες και την αυστηρότητα ενός προγραμματιστικού περιβάλλοντος. Ο στόχος είναι να περιγραφούν με σχετική σαφήνεια και εκπληρώνοντας κάποια κριτήρια τα βήματα, όχι να προσέχουμε αν θα μπουν μονά ή διπλά εισαγωγικά.

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

Το αρνητικό είναι πως η μεγάλη ελευθερία που παρέχει παρεξηγείται.

Στην αναφορά σου προηγουμένως αγαπητέ φίλε μιλάς συνεχώς για προγραμματιστικό περιβάλλον. Εγώ όμως αναφέρομαι στην ψευδογλώσσα. Στην ψευδογλώσσα που παρουσιάζει το διδακτικό μας πακέτο.

Η οποία λέει: "Σου δίνω έναν πίνακα με κάποιες θέσεις, περιέγραψε μου τα βήματα ώστε να βρεις αυτό κι αυτό.... Μη ασχολείσαι με το πόσες θέσεις έχει ο πίνακας. Έστω Ν (που φυσικά εισάγεται στον αλγόριθμο), αφού όσες θέσεις και να έχει, τα βήματα είναι τα ίδια. Να ασχοληθείς με την ουσία που δεν είναι άλλη από αυτή καθ' αυτή την επεξεργασία".

Γι' αυτό κατά τη γνώμη μου η ΓΛΩΣΣΑ είναι τελείως περιττή....

P.Tsiotakis

Πως μπορεί να είναι σωστό, το:

Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης

αφού δεν είναι γνωστό το πλήθος των στοιχείων που εισάγονται?

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

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

sstergou

#38
Συμφωνώ με όσα λέτε κύριε Τσιωτάκη.

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

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

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

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

Συμφωνώ αλλά δεν πρέπει και να οριστεί κατάλληλα η ψευδογλώσσα ώστε να μπορεί να εκτελεστεί από υπολογιστή; Καλή είναι η χάραξη και η περιγραφή και αυτή πρέπει να βαθμολογείται και όχι το μονό ή διπλό εισαγωγικό.

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

alkisg

Εμένα θα μου επιτρέψετε να επιμείνω, κι ας με πάρετε με τις ντομάτες, ότι δεν πρέπει να διαβάζουμε το βιβλίο σαν να είναι η Βίβλος.

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

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

Από την άλλη, ένας πίνακας var A[1000] στη Javascript δεν είναι στατική δομή, ακόμα κι αν το μέγεθός του είναι γνωστό κατά τη μεταγλώττιση, αφού εσωτερικά υλοποιείται με δυναμικό hash table και δεν έχει τις ιδιότητες των στατικών δομών. Μπορώ ακριβώς στην επόμενη γραμμή να πω A[2000] = 1.


Εγώ θα ήθελα να συμφωνούσαμε τουλάχιστον στις παρακάτω προτάσεις:
1) Στην ψευδογλώσσα και στη ΓΛΩΣΣΑ οι πίνακες είναι στατικές δομές.
2) Το μέγεθος ενός πίνακα στη ΓΛΩΣΣΑ θα πρέπει να είναι γνωστό κατά τη μεταγλώττιση.
3) Το μέγεθος ενός πίνακα στην ψευδογλώσσα δε χρειάζεται να είναι γνωστό κατά τη μεταγλώττιση. Μπορεί να οριστεί κατά την εκτέλεση (δηλαδή μέσω της εντολής Δεδομένα table, N).
4) Το αν οι πίνακες είναι στατικές δομές ή όχι δεν εξαρτάται από το αν το μέγεθός τους είναι γνωστό κατά τη μεταγλώττιση.

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

P.Tsiotakis

γιατί μιλάμε για μεταγλώττιση στην ψευδογλώσσα;

Άλκη το βλέπεις απο τη σκοπια της υλοποιησης για την προσπάθεια που κάνετε για διερμηνευτή εκτέλεσης ψευδογλώσσας;

alkisg

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

Π.χ. σε αυτό
Παράθεση από: Τσιωτάκης Παναγιώτης στις 31 Ιαν 2008, 04:07:39 ΜΜ
Είναι σαφές και αδιαπραγμάτευτο οτι και στην ψευδογλώσσα, οι πίνακες έχουν σταθερό μέγεθος, προκαθορισμένο κατά τη στιγμή του προγραμματισμού τους = της συγγραφής του κώδικα.

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

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

pgrontas

Παράθεση από: Τσιωτάκης Παναγιώτης στις 31 Ιαν 2008, 09:30:27 ΜΜ
Πως μπορεί να είναι σωστό, το:

Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης

αφού δεν είναι γνωστό το πλήθος των στοιχείων που εισάγονται?

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

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

Παράθεση από: Τσιωτάκης Παναγιώτης στις 01 Φεβ 2008, 12:57:19 ΜΜ
γιατί μιλάμε για μεταγλώττιση στην ψευδογλώσσα;
Νομίζω ότι μιλάμε για το αν η ψευδογλώσσα είναι σαφώς ορισμένη ή όχι. Αν κάτι είναι σαφώς ορισμένο μπορεί να εκτελεστεί από άνθρωπο χωρίς αμφιβολίες και κατά συνέπεια και από υπολογιστή (μέσω μεταγλώττισης) κόκ.


Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

Παράθεση από: alkisg στις 01 Φεβ 2008, 09:33:15 ΠΜ
Εμένα θα μου επιτρέψετε να επιμείνω, κι ας με πάρετε με τις ντομάτες, ότι δεν πρέπει να διαβάζουμε το βιβλίο σαν να είναι η Βίβλος.

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

Θα γράψω πως έχω τα πράγματα στο κεφάλι μου, χωρίς αυτό να σημαίνει ότι είναι και σωστά.

Υπάρχουν 2 διαφορετικά πράγματα:
Το ένα είναι η αφηρημένη δομή δεδομένων που λέγεται πίνακας
Το άλλο είναι η υλοποίησή του πίνακα σε κάποιο προγραμματιστικό περιβάλλον

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

Με βάση αυτά καταλαβαίνω τα εξής:

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

Επίσης δεν έχει νόημα να λέμε αν η ΑΔΔ είναι στατική ή δυναμική. Το αν μια δομή είναι στατική ή δυναμική αφορά την υλοποίηση.
Στατικός είναι ένας πίνακας όταν δεν αλλάζει ο χώρος που καταλαμβάνει στη μνήμη του υπολογιστή. Δυναμικός είναι όταν αλλάζει.

Σε ένα στατικό πίνακα δεν έχει σημασία αν αυτό το μέγεθος αυτό καθορίζεται στη μεταγλώττιση ή κατά την εκτέλεση του προγράμματος. Όπου κι αν καθορίζεται, αν δεν αλλάζει μετά είναι στατικός.
Στην ψευδογλώσσα δεν υπάρχει μεταγλώττιση. Υπάρχει μόνο εκτέλεση. Και πιστεύω πως στην ψευδογλώσσα ασχολούμαστε με την ΑΔΔ του πίνακα και γι αυτό δεν έχει νόημα να μιλάμε για στατική ή δυναμική δομή.

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

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

Και πιστεύω πως πρέπει να μη δεχόμαστε σαν σωστές λύσεις στις οποίες δουλεύουν καλά σε επίπεδο ΑΔΔ αλλά δεν έχουν ελπίδα να περάσουν σε κάποιο αληθινό περιβάλλον.

Το τελευταίο είναι λίγο λεπτό. Μπορεί κάποιος να το παρεξηγήσει και να πει ότι «στην ψευδογλώσσα θεωρώ ότι το μέγεθος του πίνακα είναι άπειρο γιατί δουλεύω σε ΑΔΔ».
Δεν είναι όμως έτσι. Σε ΑΔΔ απλά δεν ασχολούμαστε με τα μεγέθη αλλά μόνο με τις λειτουργίες των δομών. Η ψευδογλώσσα δεν είναι ολοκληρωμένο περιβάλλον ανάπτυξης αλγορίθμων. Έχει πληρότητα στους αλγορίθμους αλλά δεν έχει πληρότητα στο χειρισμό των δομών. Είναι καλό εργαλείο για την αλγοριθμική επίλυση προβλημάτων γιατί βοηθάει στο πάρει ο μαθητής τον τρόπο σκέψης. Αλλά όταν τελικά πάει ο μαθητής να υλοποιήσει κάτι σε μηχανή τότε αυτό θα είναι αναγκαστικά σε κάποιο αληθινό υπαρκτό περιβάλλον και θα υπόκειται σε περιορισμούς υλοποίησης. Όταν λύνεις ένα πρόβλημα δεν είναι μόνο ο αλγόριθμος στο παιχνίδι. Είναι υποχρεωτικά και οι δομές δεδομένων. Αν η ψευδογλώσσα κάνει χρήση των ΑΔΔ τότε είναι άριστη για ανάπτυξη αλγορίθμων αλλά δεν έχει πληρότητα στο χειρισμό των δομών. Για να μη χάσουμε αυτό το εργαλείο πρέπει σιωπηλά να εφαρμόζουμε τους περιορισμούς του περιβάλλοντος που είναι «δίπλα»… στην προκειμένη περίπτωση της ΓΛΩΣΣΑΣ. 

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

Κάπως έτσι τα καταλαβαίνω τα πράγματα, χωρίς να είμαι απόλυτος βέβαια.   

sstergou

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

Αυτό όμως πιστεύω ότι δεν είναι το θέμα.

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

Είναι ο ορισμός των στατικών δομών σωστός από την άποψη της πληροφορικής;

προφανώς το


Κώδικας: Ψευδογλώσσα
Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης



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

Πόσο πρέπει να κοπεί;

Το

Κώδικας: Ψευδογλώσσα
Διάβασε ν

Για ι από 1 μέχρι ν
  Διάβασε Α[ι]
Τέλος_επανάληψης

Κάνε_κάποια_επεξεργασία_χωρίς_να_αλλάξεις_το_μέγεθος_του_Α

Για ι από 1 μέχρι ν
   Εμφάνισε Α[ι]
Τέλος_επανάληψης


Όμως δεν βρίσκω λόγο να είναι λάθος.
Ποια είναι η γνώμη σου;

pgrontas

Εμένα αυτό που δεν μου αρέσει είναι το εξής:
Λέμε ότι το

Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης


δεν είναι σωστό γιατί δεν υπάρχει άνω όριο στοιχείων στον πίνακα.
Δεν θα μπορούσαμε να πούμε όμως ότι δεν μπορεί να αποτελέσει και αλγόριθμο γιατί υπάρχει περίπτωση αν δεν δωθεί τέλος να μην τερματίσει ποτέ;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

#46
Αυτό δεν έχει σχέση με τη δομή και τον τρόπο χρησιμοποίησης. Το ίδιο θα μπορούσε να συμβεί με

....
Κώδικας: Ψευδογλώσσα
Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    Σ <- Σ + βαθμός
    Μ <- Μ + 1
    Διάβασε όνομα
Τέλος_επανάληψης

....

edit:Είχα ξεχάσει το Διάβασε όνομα  :-X

O Κnuth στον ορισμό της περατότητας αναφέρει ως παράδειγμα της υπολογιστικής διαδικασίας (computational process) την "διαδραστική διαδικασία" (reactive process) ως μια διαδικασία η οποία επικοινωνεί με το περιβάλλον της. Αυτό μας καλύπτει;

Αν κάποιος έχει να προτείνει καλύτερο όρο.. .

Michael

Πραγματικά... ακόμη κι αν θεωρήσουμε μια σωστή λύση της άσκησης, πώς εξασφαλίζεται η περατότητα του αλγορίθμου ????

Είχα σκεφτεί ότι σε τέτοιου είδους ασκήσεις η περατότητα προκύπτει από τη φυσική του προβλήματος (γι' αυτό και σε προηγούμενο post θεώρησα δεδομένο ότι η υπομονή του χρήστη είναι πεπερασμένη). Το θεωρούσα τόσο προφανές που ποτέ δεν είχα δει με προσοχή τους ίδιους τους αλγόριθμους.
Το πνεύμα του pgrontas (αν ερμηνεύω σωστά τη σκέψη του, αν όχι ζητώ συγνώμη), είναι:

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

Αν από την άλλη η εκφώνηση δεν επιτρέπει στο χρήστη την εισαγωγή δεδομένων απείρου πλήθους (και καλό θα ήταν η εκφώνηση να το κάνει αυτό και να μην περιμένει από το λύτη να το θεωρήσει προφανές), τότε, δεν είναι απαραίτητη η θεώρηση απειρο-πινάκων από τη μεριά του λύτη. Οι πίνακες που θα χρησιμοποιήσει θα είναι εξ' ορισμού πεπερασμένου μεγέθους, ακόμη κι αν η εκφώνηση δεν θέτει ένα ακριβές άνω όριο στην εισαγωγή δεδομένων από το χρήστη (κάτι που θα μπορούσε να γίνει π.χ. με μια φράση όπως: "ο κατάσκοπος έχει μόνο ένα λεπτό στη διάθεσή του για να εισάγει όσα δεδομένα προλαβαίνει"). Πόσα δεδομένα? Δεν ξέρουμε, σίγουρα όμως θα είναι πεπερασμένα. Ποιο είναι το ακριβές πλήθος των θέσεων που θα έχει ο πίνακάς μας? Δεν ξέρουμε, όμως ούτε τον εξεταστή τον ενδιαφέρει. Διότι αν τον ενδιέφερε, θα μπορούσε πολύ εύκολα να μας αναγκάσει να δηλώσουμε εξ’ αρχής το πλήθος των θέσεων μνήμης που θα δεσμεύσουμε, ζητώντας μας πρόγραμμα σε ΓΛΩΣΣΑ. Υποθέτω ότι το τμήμα δηλώσεων της ΓΛΩΣΣΑΣ δεν βρίσκεται εκεί για διακόσμηση.

Συγνώμη για το μακροσκελές post, η βασική μου ερώτηση είναι η πρώτη: "Ακόμη κι αν θεωρήσουμε μια σωστή λύση της άσκησης, πώς εξασφαλίζεται η περατότητα του αλγορίθμου?"

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

pgrontas

Μιχάλη με κάλυψες πλήρως δεν θα μπορούσα να το είχα πει καλύτερα.
Να προσθέσω και το εξής:
Εφόσον με την ψευδογλώσσα μπορούμε να περιγράψουμε υπολογιστικές διαδικασίες - αλγορίθμους που δεν τερματίζουν ποτέ, σύμφωνα με το βιβλίο - και εφόσον δεν πρόκειται να εκτελεστούν σε κάποιον υπολογιστή οπότε δεν έχουμε φυσικούς περιορισμούς όπως η μνήμη, γιατί να μην θεωρήσουμε πίνακες με άπειρο μέγεθος. Προφανώς αυτοί οι πίνακες δεν θα είναι οι γνωστές μας περιορισμένες δομές των γλωσσών προγραμματισμού.
Επίσης προσυπογράφω και το παρακάτω:
Παράθεση από: Michael στις 05 Φεβ 2008, 11:53:24 ΜΜ
ΠαράθεσηΤο αρνητικό είναι πως η μεγάλη ελευθερία που παρέχει παρεξηγείται.
Νομίζω πως γι' αυτό ακριβώς συζητάμε κατά βάθος. Ποια είναι τα ακριβή όρια (και ακόμη πιο συγκεκριμένα, τα βαθμολογικά όρια) αυτής της ελευθερίας.
Η ουσία της συζήτησης αυτής είναι τι μπορούμε και τι δεν μπορούμε να κάνουμε στην ψευδογλώσσα.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

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

Για μένα θα πρέπει να ξεκαθαρίσουμε κάτι:
Σε καμία περίπτωση δεν πρέπει τα διάφορα μαθηματικά και φιλοσοφικά έξυπνα τεχνάσματα να μας οδηγήσουν σε αδιέξοδο. Υπήρξαν άνθρωποι που θεώρησαν ότι πάμε σε τέλμα λόγω του παραδόξων του Ζήνωνα. Σήμερα ξέρουμε ότι ο Ζήνωνας απλά δεν είχε στη διάθεσή του τη θεωρία για εύρεση αθροίσματος απείρων όρων γεωμετρική προόδου με λ<1.

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

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

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

Ένα κομμάτι κώδικα που δεν τερματίζει είναι διαφορετικό από έναν πίνακα που δεν τερματίζει. Ένας κώδικας που δεν τερματίζει υλοποιείται μια χαρά σε ένα προγραμματιστικό περιβάλλον (πχ ένας mail server). Αντίθετα ένας πίνακας που έχει άπειρα στοιχεία είναι μη πραγματοποιήσιμος σε αληθινό περιβάλλον.

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

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

sstergou

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

Μιλάμε για πραγματικά προβλήματα. Στα πραγματικά προβλήματα δεν ξέρεις πάντα κατά την διάρκεια της μεταγλώττισης το ακριβές μέγεθος του πίνακα που πρέπει να χρησιμοποιήσεις. Οπότε έχεις 3 λύσεις

  • Χρησιμοποιείς πίνακες των οποίων το μέγεθος είναι σταθερό ορίζοντας ένα μέγιστο αριθμό θέσεων που καταλαμβάνουν
  • Δηλώνεις μεταβλητό μέγεθος πίνακα όπως το παράδειγμα του 'Αλκη στη C
  • Κάθε φορά που χρειάζεσαι μνήμη την ζητάς και εφόσον υπάρχει διαθέσιμη την παίρνεις. Όταν δεν την χρειάζεσαι την αποδεσμεύεις ή την αποδεσμεύει για σένα ο garbage collector

Ποια είναι η περισσότερο αποδοτική λύση; Ποια λύση "περιορίζει τις δυνατότητες του προγράμματος"; Ποια είναι πιο ρεαλιστική;
Οι πίνακες στην ψευδογλώσσα, από τη στιγμή που δεν δηλώνεις το μέγεθός τους, αναγκαστικά ανήκουν στην τρίτη κατηγορία, όπως ανήκουν και οι πίνακες στην php, την perl και άλλες γλώσσες.

Η δυναμική παραχώρηση μνήμης έχει χρησιμοποιηθεί στους πίνακες χωρίς ο προγραμματιστής να χρειάζεται να ασχοληθεί με pointers, malloc και τα λοιπά.

Είναι δηλαδή καλύτερα να δεσμεύουμε 100000 θέσεις μνήμης για να χρησιμοποιήσουμε μόνο 10;

Στο πρόβλημα : "Να διαβαστούν Ν αριθμοί και να εμφανιστεί το πόσοι είναι μεγαλύτεροι και μικρότεροι από τον μέσο όρο τους " Ποια θα πρέπει να είναι η λύση; Πως θα το λύνατε σε ΓΛΩΣΣΑ; Δεν βλέπω την ψευδογλώσσα σαν το κουτσό αδερφάκι της ΓΛΩΣΣΑΣ. Μάλλον το αντίθετο βλέπω ότι συμβαίνει. Αν μία άσκηση λύνεται και με τα δύο, ποια θα επιλέγατε; Το μόνο που σώνει τη ΓΛΩΣΣΑ είναι τα υποπρογράμματα.


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

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

Πιστεύω ότι αυτό είναι μέσα στο πνεύμα της ψευδογλώσσας και της πληροφορικής γενικότερα. Όταν βγήκε ο πρώτος compiler σε fortran, κάποιοι δεν ήθελαν να τον χρησιμοποιήσουν γιατί παρήγαγε χειρότερο κώδικα assembly από τον αντίστοιχο άνθρωπο assembler. Προφανώς είχαν δίκιο.



pgrontas

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

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

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

Διευκρίνηση: Δεν συσχετίζω την ψευδογλώσσα με καμία μηχανή ούτε με κάποιο περιβάλλον εκτέλεσης. Την  θεωρώ ως ένα συστηματικό τρόπο συγγραφής οδηγιών.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Άσχετο αλλά σχετικό:
Τους αλγόριθμους Εισαγωγή_σε_Ουρά και Εξαγωγή_από_Ουρά στη σελίδα 87 του βιβλίου καθηγητή τους έχετε δει;
Με τις ωθήσεις / εξωθήσεις οι δείκτες πηγαίνουν πάντα προς τα δεξιά, δεν γίνεται κύκλος. Έτσι αν βάζουμε/βγάζουμε ένα στοιχείο τη φορά, και κάνουμε πολλές επαναλήψεις, θέλουμε άπειρο πίνακα, ακόμα κι αν στην ουρά βρίσκεται ένα μόνο δεδομένο.

Είναι λάθος του βιβλίου ή όντως στην ψευδογλώσσα αδιαφορούμε για το μέγεθος και λέμε "οκ, κάθε φορά που θέλω να βάλω/βγάλω κάτι μπορώ να ζητήσω μια ακόμα θέση στον πίνακά μου, δε με νοιάζει καθόλου η μνήμη, θεωρώ ότι είναι άπειρη" ;;;

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

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

sstergou

 :D
Τα queue και stack απλά φυτρώνουν εκεί μέσα. Οι εκφωνήσεις πάντως προσπαθούν να μαζέψουν τα ασυμάζευτα. "Η στοίβα αντιπροσωπεύεται από έναν πίνακα μέχρι 100 θέσεων".
Έτσι απλά επειδή το λέει η εκφώνηση ο αλγόριθμος υποχρεούται να το τηρήσει χωρίς εντολές, από μόνος του!!!!

edit:Λες και γράφτηκε πρώτα η λύση και μετά η εκφώνηση.

alkisg

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

Αλεξόπουλος Ανδρέας

Παράθεση από: alkisg στις 06 Φεβ 2008, 11:41:28 ΜΜ
Το κακό είναι ότι και στη θεωρία δεν αναφέρεται το γεγονός ότι οι ουρές πρέπει υποχρεωτικά να είναι κυκλικές, δεν είναι μόνο η λύση προβληματική... Γενικά υπάρχει μια τάση για άπειρους πίνακες!!! :)

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

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

alkisg

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

gpapargi

Παράθεση από: sstergou στις 06 Φεβ 2008, 04:10:57 ΜΜ
Μιλάμε για πραγματικά προβλήματα. Στα πραγματικά προβλήματα δεν ξέρεις πάντα κατά την διάρκεια της μεταγλώττισης το ακριβές μέγεθος του πίνακα που πρέπει να χρησιμοποιήσεις. Οπότε έχεις δύο λύσεις

  • Χρησιμοποιείς πίνακες των οποίων το μέγεθος είναι σταθερό ορίζοντας ένα μέγιστο αριθμό θέσεων που καταλαμβάνουν
  • Δηλώνεις μεταβλητό μέγεθος πίνακα όπως το παράδειγμα του 'Αλκη στη C
  • Κάθε φορά που χρειάζεσαι μνήμη την ζητάς και εφόσον υπάρχει διαθέσιμη την παίρνεις. Όταν δεν την χρειάζεσαι την αποδεσμεύεις ή την αποδεσμεύει για σένα ο garbage collector

Ποια είναι η περισσότερο αποδοτική λύση; Ποια λύση "περιορίζει τις δυνατότητες του προγράμματος"; Ποια είναι πιο ρεαλιστική;
Οι πίνακες στην ψευδογλώσσα, από τη στιγμή που δεν δηλώνεις το μέγεθός τους, αναγκαστικά ανήκουν στην τρίτη κατηγορία, όπως ανήκουν και οι πίνακες στην php, την perl και άλλες γλώσσες.

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

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

Για μένα η πρώτη λύση που αναφέρεις είναι αυτή που πρέπει να υιοθετήσουμε γιατί αυτή ακριβώς υπάρχει και στη ΓΛΩΣΣΑ.

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

sstergou

#58
Παράθεση από: gpapargi στις 07 Φεβ 2008, 10:22:20 ΠΜ
Δεν είναι δυνατόν να έχεις άλλα πράγματα να ισχύουν στην ψευδογλώσσα και άλλα πράγματα στη ΓΛΩΣΣΑ. Αυτό θα μπερδέψει τους μαθητές.
Συμφωνώ.   :)

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

Παράθεση από: gpapargi στις 07 Φεβ 2008, 10:22:20 ΠΜ
Δεν είχαν τη δυναμική παραχώρηση μνήμης στο νου τους οι συγγραφείς όταν έφτιαχναν την ψευδογλώσσα
Πολλά δεν είχαν στο μυαλό τους οι συγγραφείς όπως αποδεικνύεται μετά από τόσα χρόνια.Και δεν θέλω να κάνω τον μάντη για το τι είχε στο νου του ο τάδε συγγραφέας. "Τι θέλει να πει ο ποιητής;"

Παράθεση από: gpapargi στις 07 Φεβ 2008, 10:22:20 ΠΜ
Για μένα η πρώτη λύση που αναφέρεις είναι αυτή που πρέπει να υιοθετήσουμε γιατί αυτή ακριβώς υπάρχει και στη ΓΛΩΣΣΑ.
Να το δούμε σαν οδηγία, και να σταματήσουν να βάζουν θέματα στις πανελλήνιες τα οποία λύνονται μόνο με αλγορίθμους και όχι και με γλώσσα.

π.χ. Θέμα 3 ημερήσια 2005 : "∆ίνεται πίνακας Α[Ν] ακέραιων και θετικών αριθμών..." ,πως θα το λύσω αυτό σε ΓΛΩΣΣΑ;
Αν και αμφιβάλλω αν αυτό μπορεί να γίνει από τη στιγμή που δεν δηλώνεις μέγεθος.

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

Παράθεση από: gpapargi στις 07 Φεβ 2008, 10:22:20 ΠΜ
Επίσης δε μας ενδιαφέρει το αν κάποια από τις 3 λύσεις είναι πιο αποδοτική από τις άλλες γιατί αυτές οι λύσεις αφορούν τεχνικές λεπτομέρειες και όχι αλγόριθμο (που είναι ο σκοπός του μαθήματος).
Εδώ και αν συμφωνώ... Πρέπει να διδάξουμε αλγοριθμική σκέψη και όχι στατικές-δυναμικές δομές, η java είναι για applets, η lisp για τεχνητή νοημοσύνη. Ο βασικός κορμός του μαθήματος για μένα πρέπει να είναι : πρόβλημα-ανάλυση-αλγόριθμος (σωστός αλγόριθμος, με ότι αυτό συνεπάγεται). Τελικά δεν μπορώ να καταλάβω γιατί πρέπει οι μαθητές να διδάσκονται Ψευδογλώσσα, ΓΛΩΣΣΑ, διαγράμματα ροής, και να έχει το βιβλίο παραδείγματα από BASIC και PASCAL. Λες και πια και είμαστε τόσο χαζοί που πρέπει να να δούμε το ίδιο πράγμα 10 φορές για να το καταλάβουμε. Και κάθε χρόνο οι ίδιες οδηγίες "Οι μαθητές μπορούν να εκφράσουν τη λύση....".

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


edit :
Παράθεση από: gpapargi στις 07 Φεβ 2008, 10:22:20 ΠΜ
Δηλαδή στο αν θα υιοθετήσουμε δυναμική ή στατική υλοποίηση πίνακα στην ψευδογλώσσα δεν πρέπει να μας ενδιαφέρει ποια είναι πιο αποδοτική υλοποίηση, αλλά ποια μοιάζει στη ΓΛΩΣΣΑ

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

evry


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

Παράθεση από: sstergou στις 07 Φεβ 2008, 02:39:57 ΜΜ
π.χ. Θέμα 3 ημερήσια 2005 : "∆ίνεται πίνακας Α[Ν] ακέραιων και θετικών αριθμών..." ,πως θα το λύσω αυτό σε ΓΛΩΣΣΑ;
Αν και αμφιβάλλω αν αυτό μπορεί να γίνει από τη στιγμή που δεν δηλώνεις μέγεθος.

Υπερασπίζομαι το παραπάνω θέμα γιατί νομίζω ότι είναι ίσως το καλύτερο που έχει μπει ποτέ σε αυτό το μάθημα.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

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

Στον παρακάτω αλγόριθμο κόβονται βαθμοί ή όχι;

Αλγόριθμος κώδικας_1_παραλλαγή
  μ<-0    ! μετρητής μαθητών
  Διάβασε όνομα
  Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Β[ μ ]<-βαθμός
    ΟΝ[ μ ]<-όνομα
    Διάβασε όνομα
  Τέλος_επανάληψης

Σύμφωνα με το βιβλίο οι πίνακες είναι στατική δομή. Άρα κάποια στιγμή καθορίζεται το μέγεθος (οπουδήποτε κι αν γίνεται αυτό) και μετά δεν αλλάζει.

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

Η παραπάνω περίπτωση είναι τελείως διαφορετική από το

Δεδομένα //α, ν//
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης

Η τελευταία περιπτώση δεν έρχεται σε αντίθεση με ότι λέει το βιβλίο. Είναι σα να σου λέει «θεώρησε ότι το μέγεθος του πίνακα είναι δεδομένο». Μπορείς να φανταστείς σαν ισοδύναμο σε ΓΛΩΣΣΑ το εξής:
Σταθερές
ν=1000
Μεταβλητές
Ακέραιες: α[ν]

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

sstergou

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

Το θέμα είναι για ποιο λόγο θα κοπούν αυτοί οι βαθμοί. Θα κοπούν επειδή οι πίνακες είναι στατικοί;

Αν στο ίδιο παράδειγμα κάποιος έγραφε
Κώδικας: ΓΛΩΣΣΑ
Σταθερές
ν=100000000000000000
Μεταβλητές
Ακέραιες: Α[ν] 
Αρχή
   μ<-0    ! μετρητής μαθητών
  Διάβασε όνομα
  Όσο όνομα<>"τέλος" επανάλαβε
    Διάβασε βαθμός
    μ<-μ+1
    Α[ μ ]<-βαθμός
....
...

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

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

Το κύριο σημείο της διαφωνίας μου και εδώ θέλω να μου πείτε τη γνώμη σας είναι εξής:
Γιατί αυτό να είναι σωστό;
Κώδικας: Ψευδογλώσσα
Δεδομένα //α, ν//


ενώ αυτό είναι λάθος

Κώδικας: Ψευδογλώσσα
Διάβασε ν
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης


Φαντάζομαι και στις δύο περιπτώσεις μπορείς αργότερα να πεις :
Κώδικας: Ψευδογλώσσα
  ν <- ν+1
  α[ν] <- κάτι


Η φράση στο προηγούμενο post "Αν και αμφιβάλλω αν αυτό μπορεί να γίνει από τη στιγμή που δεν δηλώνεις μέγεθος" πήγαινε όχι στη λύση με ΓΛΩΣΣΑ αλλά στην εγγενή αδυναμία που πιστεύω ότι υπάρχει (αν κάποιος έχει άλλη γνώμη και ξέρει παραπάνω ας το πει) που έχει οποιαδήποτε γλώσσα να χειριστεί τους πίνακες σαν στατική δομή από τη στιγμή που δεν δηλώνεται το μέγεθός τους. Απλά το έγραψα σε λάθος σημείο.

@evry : Και εμένα μου άρεσε πάρα πολύ το θέμα...!

Με εκτίμηση

gpapargi

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

Το
Δεδομένα //α, ν//
Υπάρχει στην ψευδογλώσσα και είναι σωστό γιατί σου λέει ότι θεώρησε τα α και ν γνωστά. Δηλαδή το ν είναι 100 ή 1000 ή 10000000. Είναι κάτι πολύ συγκεκριμένο. Μη σε απασχολεί τι είναι ακριβώς. Είναι κάτι συγκεκριμένο. Εσύ δείξε μου ότι μπορείς να το λύσεις για το συγκεκριμένο ν. Το ν είναι σταθερός και γνωστός αριθμός.

Το
Διάβασε ν
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης

Δεν είναι λάθος αν υπάρχει παραπάνω μια δήλωση πίνακα μεγέθους μεγαλύτερο ή ίσο με ν.
Δηλαδή είναι σωστό σε ΓΛΩΣΣΑ το
Σταθερές
Μ=100000
Μεταβλητές
Ακέραιες α[Μ]
Διάβασε ν  ! για κάποιο ν <=Μ
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης

Επίσης είναι σωστό σε ψευδογλώσσα το
Δεδομένα //α, Μ//
Διάβασε ν  ! για κάποιο ν<=Μ
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης

Στο θέμα του 2005 προφανώς είναι ολόσωστο το
Δεδομένα //α, Β, Ν//

Το πρόβλημα σου ζητάει να αντιμετωπίσεις το ζήτημα για κάθε συγκεκριμένο και σταθερό αριθμό Ν. Αυτό η ψευδογλώσσα το κάνει. Η ΓΛΩΣΣΑ δεν μπορεί να το κάνει γιατί δεν επιτρέπει τέτοιο επίπεδο αφαίρεσης. Δηλαδή στα μαθηματικά μπορούμε να ξεχωρίζουμε μεταξύ της μεταβλητής x και της σταθεράς c και να τα χειριζόμαστε όπως πρέπει (πχ το x έχει παράγωγο ως προς x  το 1 ενώ το c έχει παράγωγο ως προς x το 0). Η ψευδογλώσσα επιτρέπει τέτοιο συμβολικό χειρισμό (δηλαδή να κουβαλάμε παντού το N ως σταθερά).

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

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

Δεν ξέρω αν εξέφρασα σωστά αυτά που έχω στο κεφάλι μου. Είναι λίγο λεπτό το θέμα.  Ίσως σε καλύπτει το ότι το θέμα του 2005 δεν μπορεί να λυθεί σε ΓΛΩΣΣΑ. Αν κάποιος δεν το πιστεύει ας δοκιμάσει να γράψει τη λύση σε ΓΛΩΣΣΑ. Θα δει ότι αποκλείεται να τρέξει στο Διερμηνευτή. Για να τρέξει θα πρέπει να βάλει μια συγκεκριμένη τιμή στο Ν πχ 10000.

alkisg

Μπορεί κάποιος να μου πει σε ποια γραμμή ακριβώς θα μου έκοβε μονάδες στα παρακάτω;

1) Η ψευδογλώσσα επιτρέπει Αποτελέσματα //table//. Έτσι μπορώ να έχω
Κώδικας: Ψευδογλώσσα
Αλγόριθμος ΔιάβασεΈναΠίνακα
Δεδομένα //Ν//
Για ι από 1 μέχρι Ν
  Διάβασε table[ι]
τέλος_επανάληψης
Αποτελέσματα //table//
Τέλος ΔιάβασεΈναΠίνακα


2) Η ψευδογλώσσα επιτρέπει να καλέσουμε έναν αλγόριθμο από άλλο αλγόριθμο (π.χ. Αλγόριθμος Δύναμη από τη σελίδα 84 του βιβλίου καθηγητή). Επομένως μπορώ να κάνω
Κώδικας: Ψευδογλώσσα
Αλγόριθμος ΔυναμικοίΠίνακες
ΔιάβασεΈναΠίνακα(10, A) !Εδώ διάβασα ένα πίνακα Α με 10 στοιχεία
Διάβασε Ν
ΔιάβασεΈναΠίνακα(Ν, Β) !Εδώ διάβασα ένα πίνακα Β με Ν στοιχεία
ΔιάβασεΈναΠίνακα(N mod 2, Β) !Εδώ άλλαξα το μέγεθος του Β ώστε να έχει μόνο Ν/2 στοιχεία
Τέλος ΔυναμικοίΠίνακες


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

Πού είναι το λάθος;

sstergou

#64
Άλκη δεν νομίζω ότι υπάρχει λάθος. Δεν γίνεται από τη στιγμή που δεν υπάρχουν δηλώσεις...

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

Κώδικας: Ψευδογλώσσα
Δεδομένα //α, ν//
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης


Παράθεση από: gpapargi στις 08 Φεβ 2008, 10:12:38 ΠΜ

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

Ποιός πρέπει να θεωρήσει το μέγεθος του πίνακα γνωστό, αυτός που εκτελεί ή αυτός που φτιάχνει τη λύση;

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

Εμείς τη χρησιμοποιούμε για να περιγράψουμε τις παραδοχές του προγραμματιστή.

Απευθύνεται στον εκτελεστή του αλγορίθμου ή στον προγραμματιστή;

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

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

Οι σταθερές, είτε είναι μαθηματικά, είτε γλώσσα έχουν κάποια τιμή που την ξέρουμε...
Παράθεση από: gpapargi στις 08 Φεβ 2008, 12:32:36 ΜΜΤο ν είναι σταθερός και γνωστός αριθμός

Αν το ν είναι σταθερά ποιά είναι η τιμή της; Εδώ νομίζω μπορείς να μου εξηγήσεις το
ΠαράθεσηΚάποιος καινούργιος στα μαθηματικά σίγουρα μπερδεύει το Ν σταθερά με το Ν μεταβλητή και αναρωτιέται γιατί το Ν να το λέμε σταθερά ενώ είναι γράμμα και δεν ξέρουμε ποιος είναι.

edit:Γιατί πρέπει να βλέπουμε τα μαθηματικά; Oι σταθερές στην επιστήμη των υπολογιστών είναι κάτι άλλο.

Παράθεση από: gpapargi στις 08 Φεβ 2008, 12:32:36 ΜΜ
Ίσως σε καλύπτει το ότι το θέμα του 2005 δεν μπορεί να λυθεί σε ΓΛΩΣΣΑ.

Δεν θα έπρεπε ο μαθητής να είναι ικανός να λύσει την άσκηση άμα ήθελε και σε ΓΛΩΣΣΑ; Από αυτή την άποψη "κατηγόρησα" το θέμα γιατί κατά τα άλλα είναι μια χαρά θέμα.

gpapargi

Στάθη θα διαβάσω το μήνυμά σου και θα απαντήσω (μάλλον Δευτέρα). Για την ώρα θέλω να στείλω 2 γρήγορα σχόλια.

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

Το δεύτερο που θέλω να πω είναι ότι δεν έχω αντίρρηση να δούμε που οδηγεί αυτό τα σκεπτικό από περιέργεια (όχι ως προς τα τι πιστεύω ότι πρέπει να γίνει).

Στο παράδειγμά σου ʼλκη περνάς διαφορετικό πλήθος παραμέτρων στην κλήση και στην υλοποίηση του αλγορίθμου. Μάλλον θέλεις να βάλεις και τον πίνακα στην υλοποίηση του ΔιάβασεΕναΠίνακα (πχ Δεδομένα //N, table//.
Αν ναι τότε ας το γράψουμε στην τελική του μορφή τα επιχείρημα και να το δούμε. Με προβληματίζει τι ακριβώς στέλνει o καλών αλγόριθμος στον καλούμενο όταν η παράμετρος είναι πίνακας.

Τέλος επειδή στο προηγούμενο μήνυμα αναφέρθηκα σε σταθερές από μαθηματική άποψη… μάλλον πιο  πολύ μπλέξιμο προκάλεσα… θέλω να πω ότι το Δεδομένα //Ν// (και με την ορολογία της πληροφορικής) βάζει στη μεταβλητή Ν συγκεκριμένη τιμή. Μπορεί δηλαδή να αλλάξει το Ν (Ν<--10). Στην ΓΛΩΣΣΑ φαντάζομαι τo αντίστοιχο σαν σταθερά δηλωμένη στην αρχή.

Τα υπόλοιπα θα τα πούμε μετά την τελική μορφή του επιχειρήματος με την κλήση αλγορίθμου από άλλο αλγόριθμο, μάλλον Δευτέρα 

alkisg

#66
Παράθεση από: gpapargi στις 08 Φεβ 2008, 11:19:27 ΜΜ
Στο παράδειγμά σου Άλκη περνάς διαφορετικό πλήθος παραμέτρων στην κλήση και στην υλοποίηση του αλγορίθμου. Μάλλον θέλεις να βάλεις και τον πίνακα στην υλοποίηση του ΔιάβασεΕναΠίνακα (πχ Δεδομένα //N, table//.

Δεν μου "ξέφυγε" κάτι, έτσι νομίζω ότι είναι το σωστό. Έχω την εντύπωση ότι τα Δεδομένα είναι το INTENT IN της Fortran και τα Αποτελέσματα το INTENT OUT. Γράφονται σε διαφορετική θέση (αρχή / τέλος αλγορίθμου) αλλά όλα είναι παράμετροι.
Αν ο πίνακας γραφεί και στα δεδομένα και στα αποτελέσματα, τότε είναι INTENT INOUT.

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

Υ.Γ. για το "δυναμικοί": Προσωπικά εννοώ αυτό που το Delphi λέει dynamic tables, δηλαδή πίνακες που υποστηρίζουν resize (πολλές γλώσσες υποστηρίζουν τέτοιους πίνακες). Δεν έχουν όμως καμία σχέση με τις πραγματικά δυναμικές δομές όπως οι λίστες. Πάλι "στατικοί" είναι ως προς τις αλγοριθμικές τους ιδιότητες, δεν αλλάζουν την τάξη ή τις απαιτήσεις μνήμης του αλγορίθμου (εκτός κι αν κάνουμε resize εντός κάποιας επανάληψης).
Δεν είναι κακό να αποδεχτούμε (αν φυσικά βγει σαν συμπέρασμα από το βιβλίο) ότι υποστηρίζει τέτοιους και η ψευδογλώσσα. Το αν το μέγεθος του πίνακα οριστεί κατά τον προγραμματισμό ή κατά την εκτέλεση είναι θέμα συντακτικού της γλώσσας καθώς και της runtime βιβλιοθήκης, δηλαδή καθαρά τεχνικό, και άρα δεν θα πρέπει να μας ενδιαφέρει στο επίπεδο της ψευδογλώσσας.
Σε αυτό το πνεύμα, θα έλεγα ότι η λύση του Μιχάλη δεν μου αρέσει επειδή κάνει resize τον πίνακα εντός της επανάληψης. Το resize χρειάζεται (συνήθως) να μεταφέρει τα στοιχεία του πίνακα σε άλλη θέση στη RAM, και επομένως αυξάνει την τάξη του αλγορίθμου από Ο(Ν) σε Ο(Ν^2). Θα έκοβα λοιπόν τόσες μονάδες όσες και στην εύρεση μεγίστου με ταξινόμηση: καμία.  :-\

Υ.Γ. #2:
Αν στη ΓΛΩΣΣΑ επιτρεπόταν το παρακάτω,
Κώδικας: ΓΛΩΣΣΑ
ΔΙΑΔΙΚΑΣΙΑ ΔυναμικόςΠίνακας(table, N)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν, table[Ν]
κτλ

όπως επιτρέπεται και στη Fortran, θα είχαμε κάτι παρόμοιο με το Δεδομένα // table, N // της ψευδογλώσσας. Θα δημιουργούνταν κανένα πρόβλημα στη διδασκαλία της δομής των πινάκων;

gpapargi

#67
Στάθη νομίζω ότι κατάλαβα τι ρωτάς. Θα εξηγήσω τι εννοώ με 2 παραδείγματα που να δείχνουν το ρόλο του Δεδομένα //ν/ στην ψευδογλώσσα.

Το πρώτο παράδειγμα είναι από τη φυσική. Έστω ότι δίνει ο φυσικός στα παιδιά την εξής άσκηση: «2 σώματα μάζας μ1 και μ2 κινούνται με αντίθετη κατεύθυνση με ταχύτητες υ1 και υ2. Μετά τη σύγκρουσή τους τα σώματα μένουν κολλημένα. Να βρεθεί η ταχύτητα του συσσώματος υ_τελικό. Θεωρείστε γνωστά τα m1, m2, υ1 και υ2».

Ο καθηγητής απλώς θέλει να δει αν ξέρουν τι πρέπει να κάνουν οι μαθητές και όχι να κάνουν τις συγκεκριμένες πράξεις. Τα m1, m2, υ1, υ2 είναι γνωστά υπό την έννοια ότι η λύση μας (δηλαδή το υ_τελικό) θα βρεθεί σα συνάρτηση αυτών. Παρόλα αυτά δεν τους δίνει συγκεκριμένες τιμές για τα  m1, m2, υ1, υ2. Απλά τα θεωρεί δεδομένα. Είναι συγκεκριμένοι αριθμοί που είτε δεν έχουν σημασία είτε δεν έχουμε πρόσβαση σε αυτούς αυτή τη στιγμή. Αυτό που έχει σημασία είναι ο αλγόριθμος που πρέπει να ακολουθήσουν τα παιδιά για να βρούνε τη λύση. Έχει δικαίωμα ο καθηγητής να ελέγξει όχι το τελικό αποτέλεσμα,  αλλά τα βήματα που θα κάνουν προκειμένου να φτάσουν στη λύση (δηλαδή τον αλγόριθμο)

Αυτό ακριβώς γίνεται και στην ψευδογλώσσα με το Δεδομένα //ν//. Το παραπάνω παράδειγμα στην ψευδογλώσσα αυτό μεταφράζεται σε:
Δεδομένα // m1, m2, υ1, υ2//
Εντολές
Αποτελέσματα // υ_τελικό//

Το δεύτερο παράδειγμα είναι από τα μαθηματικά. Ο μαθηματικός ζητάει από τα παιδιά να λυθεί η παραμετρική εξίσωση
(λ^2 -1) * x + λ-1 = 0
για τις διάφορες τιμές του λ. Το λ είναι η παράμετρος.

Μετά τη διερεύνηση η λύση της παραπάνω εξίσωσης (ας μου επιτρέψουν οι μαθηματικοί της παρέας κάποιο τεχνικό λάθος) είναι:

Αν λ = 1 τότε η εξίσωση παίρνει τη μορφή 0*x + 0 = 0 οπότε είναι αόριστη.
Αν λ = -1 τότε η εξίσωση παίρνει τη μορφή 0*x -2 = 0 οπότε είναι αδύνατη.
Αν λ<>-1 και λ <>-2 τότε η εξίσωση έχει μοναδική λύση x=-1/(λ+1)

Ο άγνωστος είναι το x. Τι είναι όμως το λ; Είναι γνωστός ή άγνωστος αριθμός; Ποια η διαφορά του με το x;

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

Και πάλι σε ψευδογλώσσα η επίλυση του παραπάνω προβλήματος θα είχε μια δήλωση Δεδομένα // λ //.

Παράθεση από: sstergou στις 08 Φεβ 2008, 04:15:31 ΜΜ
Παράθεση από: gpapargi στις 08 Φεβ 2008, 10:12:38 ΠΜ

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

Ποιός πρέπει να θεωρήσει το μέγεθος του πίνακα γνωστό, αυτός που εκτελεί ή αυτός που φτιάχνει τη λύση;

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

Εμείς τη χρησιμοποιούμε για να περιγράψουμε τις παραδοχές του προγραμματιστή.

Απευθύνεται στον εκτελεστή του αλγορίθμου ή στον προγραμματιστή;

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

Σε αυτό το ερώτημα απαντάω ότι η συγκεκριμένη τιμή του Ν είναι γνωστή και διαθέσιμη σε αυτόν που θα εκτελέσει τον αλγόριθμο. Σε αυτόν που τον κατασκευάζει τον αλγόριθμο δεν είναι διαθέσιμη η τιμή του Ν. Τη θεωρεί όμως γνωστή υπό την έννοια ότι με βάση αυτή θα βρει τη λύση του προβλήματος.  Δηλαδή δεν διαφέρει σε τίποτα από τα m1, m2, υ1, υ2 στο πρώτο παράδειγμα που γράφω παραπάνω και από το λ στο δεύτερο παράδειγμα της παραμετρικής εξίσωσης. Είναι σα να λέει ο καθηγητής φυσικής: Δίνονται τα m1, m2, υ1, υ2.

Παράθεση από: sstergou στις 08 Φεβ 2008, 04:15:31 ΜΜ
Δεν θα έπρεπε ο μαθητής να είναι ικανός να λύσει την άσκηση άμα ήθελε και σε ΓΛΩΣΣΑ; Από αυτή την άποψη "κατηγόρησα" το θέμα γιατί κατά τα άλλα είναι μια χαρά θέμα.

Αν εννοείς την περίφημη οδηγία: «Οι μαθητές θα μπορούν να διατυπώνουν τις λύσεις των ασκήσεων των εξετάσεων είτε σε οποιαδήποτε μορφή παράστασης αλγορίθμου είτε σε «ΓΛΩΣΣΑ», όπως αυτή ορίζεται και χρησιμοποιείται στο διδακτικό εγχειρίδιο. »
τότε το συμπέρασμα που έχω βγάλει είναι ότι αυτή η οδηγία δεν έχει νόημα. Σκέψου πχ να γράψει κανείς την απάντηση σε φυσική γλώσσα κατά βήματα ή ακόμα χειρότερα σε ελεύθερο κείμενο. Είναι προφανές σε εμένα ότι πρόκειται για μια οδηγία ξεχασμένη από το παρελθόν όταν (αν δεν κάνω λάθος) μπορούσες να γράψεις ακόμα και Pascal. Όπως όταν γίνονται εκλογές, μετά από κάνα χρόνο βλέπεις ακόμα κολλημένες αφίσες υποψηφίων… κάπως έτσι θεωρώ ότι ξεχάστηκε και αυτό. Απλά κανείς δεν αναλαμβάνει την πρωτοβουλία να κάνει αυτό που πρέπει και να πετάξει την οδηγία στα σκουπίδια. Σου λέει: "Έτσι όπως είναι δε δημιουργεί πρόβλημα και αν τη βγάλουμε μπορεί κάτι να σκάσει. Αστη να υπάρχει λοιπόν και δε βαριέσαι. Που να σκεφτόμαστε τώρα τι θα μπορούσε να πάει στραβά αν τυχόν τη βγάζαμε". Κάτι τέτοιο κόβω να έχει γίνει. Σκέψου γέλια που θα κάνουμε αν κάποιος άσχετος μαθητής γράψει τη λύση χύμα σε ελεύθερο κείμενο και μετά απαιτεί τους βαθμούς  :D :D :D

gpapargi

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

Για να στηρίξουμε κάποιο επιχείρημα που θα επιτρέπει κάποια μορφή δυναμικότητας στους πίνακες (εννοώ όχι την τελείως στατική δομή της ΓΛΩΣΣΑΣ αλλά κάτι σαν το resize) θα πρέπει το επιχείρημα να είναι σαφές και να προκύπτει με βάση το βιβλίο. Υποτίθεται ότι πάμε να κατηγορήσουμε την ψευδογλώσσα για ασάφεια. Θα πρέπει λοιπόν το επιχείρημά μας να είναι σαφές. Δηλαδή να φαίνεται από τον τρόπο που καλείται μέσα από το βιβλίο ο αλγόριθμος από άλλο αλγόριθμο ότι επιτρέπεται η ενδιάμεση δυναμικότητα του resizing. Έχω βέβαια κάποιες ενστάσεις και ως προς αυτό… αλλά ας τις αφήσουμε για μετά το επιχείρημα. Όμως δεν μπορούμε να κατηγορήσουμε την ψευδογλώσσα για υποστήριξη πίνακα κάποιας ενδιάμεσης δυναμικότητας στηριζόμενοι σε όχι απόλυτα σαφές επιχείρημα. Θα πρέπει το ίδιο το επιχείρημα να είναι περισσότερο αξιόπιστο από αυτό για το οποίο πάμε να κατηγορήσουμε την ψευδογλώσσα. Αλλιώς δε θα το δεχτούν. 

Με βάση το πώς βλέπω να καλείται αλγόριθμος από άλλο αλγόριθμος μέσα στο βιβλίο (ήδη μπαίνουμε σε γκρίζα/ασαφή ζώνη και δε μου αρέσει αυτό) βλέπω ότι ο αλγόριθμος μπορεί να επιστρέψει κάτι με το όνομά του (τετράδιο μαθητή, σελίδα 30, παράδειγμα 2). Μπορεί επίσης να περάσει πίνακας σαν παράμετρο σε υποπρόγραμμα (σελίδα 86 αναδρομική υλοποίηση της δυαδικής αναζήτησης).

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

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

sstergou


Παράθεση από: gpapargi στις 11 Φεβ 2008, 10:38:56 ΠΜ
Σε αυτό το ερώτημα απαντάω ότι η συγκεκριμένη τιμή του Ν είναι γνωστή και διαθέσιμη σε αυτόν που θα εκτελέσει τον αλγόριθμο.

Γιώργο μια διευκρίνηση πριν απαντήσω, η τιμή του Ν στην εντολή Δεδομένα //Ν// κατά τη γνώμη σου αλλάζει από εκτέλεση σε εκτέλεση ή παραμένει η ίδια για όσες φορές και αν εκτελεστεί;

pgrontas

Παράθεση από: gpapargi στις 11 Φεβ 2008, 11:59:44 ΠΜ
Είναι πολύ πιο σωστό από παιδαγωγική άποψη το να κοιτάμε τη ΓΛΩΣΣΑ όπου αυτό είναι δυνατό.

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

Nομίζω ότι οι παραπάνω προτάσεις είναι ασύμβατες μεταξύ τους. Εγώ σαφώς συμφωνώ με την δεύτερη από τις δύο.
Επιπλέον προσωπική και εντελώς αστήρικτη άποψη (πιο σωστά αίσθηση) μου είναι ότι οι συγγραφείς είχαν στο μυαλό τους την ψευδογλώσσα που χρησιμοποιείται στα (πανεπιστημιακά) βιβλία αλγορίθμων για την περιγραφή αλγορίθμων.
Κάτι τέτοιο δηλαδή (μια τυχαία καταχώρηση από την wikipedia)
def dfs(v):
    process(v)
    mark v as visited
    for all vertices i adjacent to v such that i not visited
        dfs(i)

όπου απλά αρκεί μια συστηματική περιγραφή των βημάτων.  Η συγκεκριμένη περιγραφή των διαφόρων εννοιών (adjacent,visited) θα δωθεί όταν φτιαχτεί το πρόγραμμα.
Για κάποιους λόγους  σύνταξη ΓΛΩΣΣΑΣ ΨΕΥΔΟΓΛΩΣΣΑΣ έχει σχεδόν εξομοιωθεί.
Για το αν αυτό είναι παιδαγωγικά καλύτερο, διατηρώ αμφιβολίες.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

Παράθεση από: sstergou στις 11 Φεβ 2008, 03:39:20 ΜΜ
Γιώργο μια διευκρίνηση πριν απαντήσω, η τιμή του Ν στην εντολή Δεδομένα //Ν// κατά τη γνώμη σου αλλάζει από εκτέλεση σε εκτέλεση ή παραμένει η ίδια για όσες φορές και αν εκτελεστεί;

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

Το αντίστοιχο σε ΓΛΩΣΣΑ αν πχ θέλουμε να εκτελέσουμε τον αλγόριθμο για Ν=100 είναι το Διάβασε Ν όπου θα μπει 100 σαν είσοδος, ή μια εντολή εκχώρησης Ν<-100 στην αρχή, ή μια σταθερά Ν=100 στην αρχή. Εννοείται ότι αν πρέπει να εκτελεστεί ο αλγόριθμος για άλλη τιμή τότε θα δοθεί άλλη είσοδος στην πρώτη περίπτωση ή θα αλλάξει η εντολή εκχώρησης (στη δεύτερη) ή η δήλωση σταθεράς (στην τρίτη). Από αλγοριθμική άποψη δε μας ενδιαφέρει.

gpapargi

Παράθεση από: pgrontas στις 11 Φεβ 2008, 09:24:06 ΜΜ
Παράθεση από: gpapargi στις 11 Φεβ 2008, 11:59:44 ΠΜ
Είναι πολύ πιο σωστό από παιδαγωγική άποψη το να κοιτάμε τη ΓΛΩΣΣΑ όπου αυτό είναι δυνατό.

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

Nομίζω ότι οι παραπάνω προτάσεις είναι ασύμβατες μεταξύ τους. Εγώ σαφώς συμφωνώ με την δεύτερη από τις δύο.

Δε συμφωνώ. Η ψευδογλώσσα και η ΓΛΩΣΣΑ είναι διαφορετικά πράγματα. Για παράδειγμα πες πως θέλουμε να βρούμε τα ψηφία του 123.4 (δηλαδή τριψήφιου αριθμού με 1 δεκαδικό ψηφίο).
Στην ψευδογλώσσα απλά πολλαπλασιάζεις  με 10 (για να γίνει ακέραιος και να μπορεί να χρησιμοποιηθεί το DIV/MOD) και μετά με DIV/MOD παίρνεις τα ψηφία.

Στη ΓΛΩΣΣΑ υπάρχει πρόβλημα. Ακόμα και αν ο αριθμός έγινε ακέραιος μετά από πολλαπλασιασμό με 10 δεν έγινε ακέραια η μεταβλητή που τον περιέχει. Δηλαδή δεν επιτρέπεται να πεις σε ΓΛΩΣΣΑ το ν<-x με το ν να είναι δηλωμένη σαν ακέραια μεταβλητή και το x να είναι πραγματική (ακόμα και αν εκείνη τη στιγμή η x έχει ακέραια τιμή). Αυτό είναι λογικό γιατί υπάρχουν αποθηκευτικοί χώροι κρυμμένοι πίσω από κάθε μεταβλητή. Επιστρέφοντας στο παράδειγμα με τα ψηφία σε ΓΛΩΣΣΑ, πρέπει να χρησιμοποιήσεις τη συνάρτηση ακεραίου μέρους για κάνεις τον ακέραιο που είναι αποθηκευμένο σε πραγματική μεταβλητή ακέραιο που είναι αποθηκευμένος σε ακέραια μεταβλητή για να συνεχίσεις με DIV/MOD.

Η ψευδογλώσσα και η ΓΛΩΣΣΑ λοιπόν είναι διαφορετικά πράγματα. Φαίνεται πως συμφωνούμε στο ότι η ψευδογλώσσα φτιάχτηκε για αναπαράσταση του αλγοριθμικού μέρους και θα μπορούσε να δοθείς στους αρχαίους.
Η άποψή μου είναι ότι η ΓΛΩΣΣΑ φτιάχτηκε για να εξηγηθεί στους μαθητές ότι στην πραγματικότητα το προγραμματιστικό περιβάλλον επιβάλει κάποιους κανόνες αυστηρότητας που δεν ισχύουν σε ένα υποθετικό περιβάλλον που φτιάχτηκε μόνο για την απεικόνιση του αλγοριθμικού μέρους. Έτσι περιέγραψαν ένα προγραμματιστικό περιβάλλον το οποίο θα περιέχει όλους εκείνους τους περιορισμούς που θα συναντήσουν και σε ένα συνηθισμένο προγραμματιστικό περιβάλλον της πιάτσας.
Για λόγους εκπαιδευτικούς (κατά τη γνώμη μου) έφτιαξαν ένα περιβάλλον που να είναι όσο το δυνατό πιο κοντά στην ψευδογλώσσα. Έτσι οι μαθητές θα μάθαιναν τα έξτρα περιοριστικά στοιχεία του προγραμματιστικού περιβάλλοντος χωρίς να έχουν να μάθουν και άλλα πράγματα που ξεφεύγουν από το σκοπό του μαθήματος (πχ το var της Pascal ή το αντίστοιχο τμήμα δηλώσεων σε C).     

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

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

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

pgrontas

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

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

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

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

δεν μπορώ να πω ότι θα αισθανόμουνα άνετα που θα τον διόρθωνα.

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

Αν είναι ΓΛΩΣΣΑ και ΨΕΥΔΟΓΛΩΣΣΑ να είναι ίδια τότε για μένα καλύτερα να καταργηθεί η ΨΕΥΔΟΓΛΩΣΣΑ (ειδικά τώρα που υπάρχει περιβάλλον εκτέλεσης για την ΓΛΩΣΣΑ).

Επαναλαμβάνω ότι αν το δούμε ρεαλιστικά έχεις δίκιο. Ίσως αυτά που λέω, να έχουν νόημα αν διδάσκαμε το μάθημα μια χρονιά ακόμα.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

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

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

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

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

Πολλοί από μας θα βαθμολογούσαμε την προηγούμενη λύση σαν λάθος με το σκεπτικό ότι στην ψευδογλώσσα το μέγεθος του πίνακα δεν είναι γνωστό κατά τη διάρκεια της edit:μεταγλώττισης και ως εκ τούτου παραβιάζεται η στατικότητα της δομής του πίνακα. Θεωρώ ότι αυτή η προσέγγιση είναι εσφαλμένη καθώς είναι προφανές ότι σε πολλά παραδείγματα του βιβλίου το μέγεθος είναι άγνωστο πριν την εκτέλεση του αλγορίθμου. Δηλαδή αν το βιβλίο έλεγε ότι οι μεταβλητές αποθηκεύονται σε μνήμη ROM εμείς δεν θα έπρεπε να το επισημάνουμε;

Όσον αφορά την εντολή Δεδομένα. Πιστεύω ότι δημιουργήθηκε με σκεπτικό

  • την κληση αλγορίθμου από αλγόριθμο
  • Να απαλλαγεί ο μαθητής από την συνεχή ενασχόληση με την είσοδο δεδομένων και τον έλεγχο εγκυρότητάς τους
Επίσης νομίζω ότι οι συγγραφείς κατά την θέσπιση των κριτηρίων εισόδου και εξόδου είχαν κυρίως αυτές τις εντολές στο μυαλό τους. π.χ. Η επαναληπτική είσοδος αριθμών μέχρι να δοθεί η τιμή "ΤΕΛΟΣ" κατά την γνώμη μου δεν αποτελεί είσοδο του αλγορίθμου. Είσοδο αποτελούν οι τιμές που έδωσε ο χρήστης μετά από αυτήν την "διαδικασία".

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

ΠαράθεσηΔεδομένα // m1, m2, υ1, υ2//
Εντολές
Αποτελέσματα // υ_τελικό//

Το δεύτερο παράδειγμα είναι από τα μαθηματικά. Ο μαθηματικός ζητάει από τα παιδιά να λυθεί η παραμετρική εξίσωση
(λ^2 -1) * x + λ-1 = 0
για τις διάφορες τιμές του λ. Το λ είναι η παράμετρος.

Μετά τη διερεύνηση η λύση της παραπάνω εξίσωσης (ας μου επιτρέψουν οι μαθηματικοί της παρέας κάποιο τεχνικό λάθος) είναι:

Αν λ = 1 τότε η εξίσωση παίρνει τη μορφή 0*x + 0 = 0 οπότε είναι αόριστη.
Αν λ = -1 τότε η εξίσωση παίρνει τη μορφή 0*x -2 = 0 οπότε είναι αδύνατη.
Αν λ<>-1 και λ <>-2 τότε η εξίσωση έχει μοναδική λύση x=-1/(λ+1)

Ο άγνωστος είναι το x. Τι είναι όμως το λ; Είναι γνωστός ή άγνωστος αριθμός; Ποια η διαφορά του με το x;

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

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

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

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

Παναγιώτη συμφωνώ μαζί σου για το παιδαγωγικό!
Σκέψου όμως και τις πανελλήνιες, μια τέτοια περιγραφή λύσης στις θα ήταν πραγματικός εφιάλτης  :D

gpapargi

Παράθεση από: pgrontas στις 12 Φεβ 2008, 11:28:02 ΠΜ
Αυτό που θέλω να πω είναι ότι σε αρχικό επίπεδο είναι ίσως παιδαγωγικά καλύτερο να χαλαρώσεις την σύνταξη και να άρεις περιορισμούς προς ώφελος της γνωριμίας με την αλγοριθμική σκέψη. Όταν προχωρήσεις στην ΓΛΩΣΣΑ τότε βάζεις όλους τους πραγματικούς περιορισμούς που ισχύουν στον υπολογιστή.

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

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

gpapargi

Παράθεση από: sstergou στις 12 Φεβ 2008, 04:37:11 ΜΜ
Ο καθένας μπορεί να έχει την δική του προσωπική άποψη σχετικά με την παιδαγωγική χρησιμότητα της ΓΛΩΣΣΑΣ και της Ψευδογλώσσας η οποία είναι σεβαστή.

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

Παράθεση από: sstergou στις 12 Φεβ 2008, 04:37:11 ΜΜ
Όσον αφορά την εντολή Δεδομένα. Πιστεύω ότι δημιουργήθηκε με σκεπτικό

  • την κληση αλγορίθμου από αλγόριθμο
  • Να απαλλαγεί ο μαθητής από την συνεχή ενασχόληση με την είσοδο δεδομένων και τον έλεγχο εγκυρότητάς τους

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

Παράθεση από: sstergou στις 12 Φεβ 2008, 04:37:11 ΜΜ
Η περίφημη οδηγία "κάθε επιστημονικά τεκμηριωμένη λύση ...." είναι ένα παράδειγμα για το που μπορεί να μας οδηγήσει η άκριτη υιοθέτηση εννοιών και τακτικών που αρμόζουν στα μαθηματικά και όχι στην πληροφορική.

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

Αυτό που θέλω να πω (άσχετο με τη συγκεκριμένη κουβέντα) είναι ότι πουθενά τα μαθηματικά δεν λένε ότι οι αλγόριθμοι δε χρειάζεται να είναι ποιοτικοί και ότι πρέπει απλά να τρέχουν. Η ποιότητα είναι πολύ περισσότερο μαθηματικό θέμα παρά κομπιουτερίστικο. Η αλγοριθμική πολυπλοκότητα είναι μια συνάρτηση με ανεξάρτητη μεταβλητή τα στοιχεία προς επεξεργασία και εξαρτημένη μεταβλητή το πλήθος των βημάτων.  Δηλαδή καθαρά μαθηματικές έννοιες. Το να επικαλούμαστε την οδηγία «Κάθε λύση επιστημονικά…» για να λέμε ότι τα μαθηματικά δε ασχολούνται με την αλγοριθμική ποιότητα είναι λάθος. Δε λένε αυτό τα μαθηματικά. Δεν υπάρχει διαφορετική νοοτροπία στα μαθηματικά και στην πληροφορική. Οι αλγόριθμοι είναι μαθηματικές λύσεις που επεκτείνονται σε προβλήματα που δεν επιδέχονται αλγευρική λύση. Οι αλγευρικές λύσεις είναι αλγόριθμοι σταθερής τάξης. Είμαι πολύ κατά των διαχωριστικών γραμμών. Ο Ερατοσθένης και ο Ευκλείδης με τους αλγόρίθμους για πρώτους και ΜΚΔ έκαναν μαθηματικά. Έδιναν καθαρά μαθηματικές λύσεις σε προβλήματα που δεν επιδέχονται αλγεβρική προσέγγιση.  Και που να δεις πόσο ίδια θεωρώ τα μαθηματικά και τη φυσική μεταξύ τους. Είμαι οπαδός της ρωσικής σχολής των θετικών επιστημών (Vladimir  Arnold κλπ). Άλλο αν οι μαθηματικοί σε κάποιες χώρες έχουν τραβήξει άλλο δρόμο. Η θετικές επιστήμες είναι ενιαίο σώμα.

sstergou

#77
Σε κάποιο άλλο θέμα συζητήθηκε η έννοια της αποτελεσματικότητας και της διαφοράς της πληροφορικής από τις άλλες επιστήμες.
Εμένα με καλύπτει πλήρως η άποψη του 'Αλκη : https://alkisg.mysch.gr/steki/index.php?topic=988.msg5415#msg5415

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

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


Να ξέρουμε βρε παιδί μου τι μας περιμένει !!!!!

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

Υ.Γ. Όταν θα τρέχουμε και οι δύο , κάποια στιγμή να συνεννοηθούμε να αλλάξουμε τη σκυτάλη!!

gpapargi

#78
Παράθεση από: sstergou στις 14 Φεβ 2008, 03:01:33 ΜΜ
Σε κάποιο άλλο θέμα συζητήθηκε η έννοια της αποτελεσματικότητας και της διαφοράς της πληροφορικής από τις άλλες επιστήμες.
Εμένα με καλύπτει πλήρως η άποψη του 'Αλκη : https://alkisg.mysch.gr/steki/index.php?topic=988.msg5415#msg5415

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

Τη θυμάμαι καλά εκείνη την κουβέντα. Ήμασταν στην ίδια μεριά με τον Άλκη.
https://alkisg.mysch.gr/steki/index.php?topic=988.msg5506#msg5506

Και το θέμα της φράσης «Κάθε λύση επιστημονικά τεκμηριωμένη το σχολίασα επίσης
https://alkisg.mysch.gr/steki/index.php?topic=988.msg5572#msg5572

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

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

Παράδειγμα:
Θέλω να βρω το άθροισμα 1+2+3+4+ ….+1000
Αφού υπάρχει ο τύπος της αριθμητικής προόδου χρησιμοποιώ τον αλγόριθμο σταθερής τάξης:

Αλγόριθμος ʼθροισμα_1
S<-(1+1000)/2 * 1000
Εμφάνισε αποτέλεσμα
Τέλος ʼθροισμα_1

Αν θέλω να βρω το άθροισμα 1^3 + 2^3 + 3^3 + ..+ 1000^3 δεν έχω αλγόριθμο σταθερής τάξης (αλγεβρική λύση). Ο μόνος αλγόριθμος που ξέρω είναι γραμμικής τάξης

Αλγόριθμος ʼθροισμα_κύβων
S<-0
Για ι από 1 μέχρι 1000
   S<-S+i^3
Τέλος_επανάληψης
Εμφάνισε S
Τέλος ʼθροισμα_κύβων

Αν ήθελα να βρω το άθροισμα 1+2+3+4+ ….+1000 και δεν είχα στη διάθεσή μου τον τύπο της αριθμητικής προόδου θα έκανα

Αλγόριθμος ʼθροισμα_2
S<-0
Για ι από 1 μέχρι 1000
   S<-S+i
Τέλος_επανάληψης
Εμφάνισε S
Τέλος ʼθροισμα_2

Υπάρχει κάποιος λόγος για να ονομάσουμε τον αλγόριθμο_2 λύση πληροφορικής και τον αλγόριθμο_1 λύση των μαθηματικών; Μου απαγορεύει κανένας να χρησιμοποιήσω τον τύπο της αριθμητικής προόδου στην πληροφορική;

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

edit: (Ο μαθητής μου Ηλίας Διαμαντάκος επικοινώνησε μαζί μου και με ενημέρωσε ότι υπάρχει αλγεβρικός τύπος για το άθροισμα των κύβων. Είναι το ((ν(ν+1))/2)^2.
Ασφαλώς δεν πέρασε το πρόβλημα από την πληροφορική στα μαθηματικά. Απλά τώρα που ξέρω τον τύπο θα χρησιμοποιώ αυτόν ενώ το παράδειγμά μου δεν ήταν εύστοχο.
Ψάχνοντας για άλλο παράδειγμα είδα ότι υπάρχει τύπος για το άθροισμα 1^κ + 2^κ +3^ κ … για κάθε κ.
http://mathworld.wolfram.com/FaulhabersFormula.html
Σαν παράδειγμα στο επιχείρημα που γράφω μπορεί να μπει οποιοδήποτε άθροισμα δεν δίνεται ακόμα από κάποιο αλγεβρικό τύπο που παρακάμπτει όλες τις προσθέσεις.) 

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

Πιστεύω πως το μεγάλο λάθος που έκαναν οι μαθηματικοί στην Ελλάδα είναι ότι έβαλαν διαχωριστικές γραμμές μεταξύ μαθηματικών και φυσικής.
Παρένθεση: Καλό θα ήταν οι μαθηματικοί της παρέας να δουν το παρακάτω άρθρο
http://pauli.uni-muenster.de/~munsteg/arnold.html

Παράθεση από: sstergou στις 14 Φεβ 2008, 03:01:33 ΜΜ
Γιώργο, επειδή πιστεύω ότι με την άποψή σου συμφωνούν και άλλοι συνάδελφοι (ίσως οι περισσότεροι), θα ήθελα να μου πεις πόσο θα έκοβες στην περίφημη λύση  ::)
και γιατί; (εννοείται σε γραπτό πανελληνίων).

Να ξέρουμε βρε παιδί μου τι μας περιμένει !!!!!

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

Παράθεση από: sstergou στις 14 Φεβ 2008, 03:01:33 ΜΜ
Α, και κάτι άλλο. Αν πιστεύεις (ή όχι) ότι υπάρχει πρόβλημα το οποίο πρέπει να διορθωθεί π.χ. με σαφέστερους ή διαφορετικούς ορισμούς.

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

sstergou

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

Αυτό που ήθελα εγώ να αναφέρω είναι η χρήση της εντολής δεδομένα όπως περιέγραψες σε αυτό το post
https://alkisg.mysch.gr/steki/index.php?topic=1194.msg8105#msg8105

δηλαδή για το ορισμό σταθερών μαθηματικής λογικής.

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

Σε προηγούμενο post αναφέρθηκε ότι κόπηκαν μόρια στο περσινό θέμα 3 των ημερησίων λόγω της λανθασμένης χρήσης πίνακα. Ξέρουμε για το αν αυτό δόθηκε σαν οδηγία ή αν στο παρελθόν έχει δοθεί κάτι τέτοιο σαν οδηγία;

Βέβαια για κάποιους τέτοια οδηγία δεν είναι απαραίτητη καθώς το βιβλίο είναι ξεκάθαρο. Οι πίνακες είναι στατική δομή και το μέγεθός τους καθορίζεται στη μεταγλώττιση  ???

P.Tsiotakis

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

Για κάποιους δεν είναι ξεκάθαρο ακόμα, οτι οι πίνακες στην ψευδογλώσσα είναι στατική δομή, με σταθερό πλήθος κόμβων.

Για κάποιους είναι δύσκολο, να αντιληφθούν τη φιλοσοφία του αναλυτικού προγράμματος σπουδών και του διδακτικού πακέτου.

Θέλω να ελπίζω και εύχομαι το :huh  ???   να μην εκφράζει ειρωνία



sstergou

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

??? Η φατσούλα δεν εκφράζει καμία ειρωνία, μάλλον λίγο προβληματισμένη τη βλέπω.

evry

  Κοίτα δε διαφωνώ με τη φιλοσοφία σου, όμως το μάθημα είναι αυτό που είναι οπότε θεωρούμε τον πίνακα στατική δομή. Τώρα σχετικά με το θέμα 3 προφανώς και κόπηκαν μόρια και να σου πω την αλήθεια έπρεπε να κοπούν και πολλά μάλιστα. Δυστυχώς οι περισσότεροι μαθητές που βαριούνται να σκεφτούν λένε ας βάλουμε πίνακα για να είμαστε σίγουροι, το έχουν σαν πανάκεια δηλαδή, ενώ ο στόχος θα ήταν να μπορούν να σκεφτούν και να βρουν πότε χρειάζεται πίνακας και πότε όχι.
    Στο συγκεκριμένο παράδειγμα δηλαδή που δε σου λέει πόσα γραμματόσημα θα διαβάσεις, και είναι φανερό ότι όλη η επεξεργασία γίνεται τη στιγμή που διαβάζεις μια πληροφορία, δεν είναι απαραίτητο να χρησιμοποιήσεις πίνακες.
   Επίσης σκέψου ότι με τη χρήση πινάκων ο μαθητής ξεγλιστράει από κάποιες "κακοτοπιές" του θέματος όπως το πότε θα σταματήσει την επανάληψη και στο οποίο εξετάζεται.
   Πάντως οι περισσότεροι που χρησιμοποίησαν πίνακες δεν κρατούσαν καν μετρητή για το πόσα στοιχεία διαβάζουν. Είχαν θεωρήσει ότι είναι Ν από την αρχή. Στα γραπτά που διόρθωσα οι περισσότεροι είχαν κάνει αυτό. Τώρα υπήρχαν και 2 εξαιρέσεις (στους 370) που είχαν κάνει κάτι πιο σωστό από προγραμματιστικής σκοπιάς. Είχαν ορίσει πίνακες πολύ μεγάλους του στυλ Α[999999] και κράταγαν σε μετρητή πόσα γραμματόσημα διαβάζουν. Επίσης οι υπολογισμοί ήταν όλοι σωστοί. Σε αυτούς το σκέφτηκα πολύ να κόψω, τελικά έκοψα 1 μονάδα γιατί ήταν πολύ καλά γραπτά. Δεν ξέρω αν έκανα καλά, αλλά αυτό θεώρησα σωστό, άλλωστε τα παιδιά είχαν εξαρχής ορίσει τον πίνακα σαν στατική δομή   :) και δε νομίζω να μπορούσε να αγοράσει κανένας 999999 γραμματόσημα μόνο με 1500 ευρώ ;)


Παράθεση από: sstergou στις 15 Φεβ 2008, 02:40:18 ΜΜ

Σε προηγούμενο post αναφέρθηκε ότι κόπηκαν μόρια στο περσινό θέμα 3 των ημερησίων λόγω της λανθασμένης χρήσης πίνακα. Ξέρουμε για το αν αυτό δόθηκε σαν οδηγία ή αν στο παρελθόν έχει δοθεί κάτι τέτοιο σαν οδηγία;

Βέβαια για κάποιους τέτοια οδηγία δεν είναι απαραίτητη καθώς το βιβλίο είναι ξεκάθαρο. Οι πίνακες είναι στατική δομή και το μέγεθός τους καθορίζεται στη μεταγλώττιση  ???
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

Παράθεση από: sstergou στις 16 Φεβ 2008, 02:47:55 ΠΜ
Αν δεν υφίσταται μεταγλώττιση, μεταγλωττιστής ή μνήμη τότε δεν πρέπει να υφίσταται και στατική/δυναμική δομή έτσι όπως την αναφέρει το βιβλίο στη σελίδα 56 στην παράγραφο 3.3.

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

Αυτό που έγραψα προηγουμένως είναι ότι στην ψευδογλώσσα δείχνει να γίνεται χρήση της αφηρημένης δομής δεδομένων (ΑΔΔ) πίνακας. Δες προσεκτικά Στάθη το παρακάτω μήνυμά μου.
https://alkisg.mysch.gr/steki/index.php?topic=1194.msg8055#msg8055

Στην τελευταία παράγραφο αναφέρομαι στη διαφορά μεταξύ ΑΔΔ πίνακα και δυναμικού πίνακα. Ίσως σε καλύψει πάνω σε αυτό που γράφεις στον Παναγιώτη.

sstergou

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

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

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

alkisg

Γιώργο σόρρυ γιατί κάπου μπλέχτηκα.

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

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

Θα ήθελα κι εγώ να "ενοποιούσαμε" κάπως τη ΓΛΩΣΣΑ με την ψευδογλώσσα και να επιτρέπουμε περίπου τα ίδια πράγματα, αλλά η ψευδογλώσσα όπως έχει οριστεί είναι πιο ελεύθερη.
Δηλαδή αν ο μαθητής έδινε την ΙΔΙΑ λύση σε C, Basic ή Pascal, όπου επιτρέπεται, θα το δεχόμασταν σωστό, και αν γράφει ψευδογλώσσα το παίρνουμε λάθος;

Δηλαδή η ψευδογλώσσα είναι πιο αυστηρή από τη C, την Basic και την Pascal;

Αμάν επιτέλους να καταργηθεί είτε η ψευδογλώσσα είτε η ΓΛΩΣΣΑ, και αυτή που θα μείνει να οριστεί ΣΩΣΤΑ!

gpapargi

Παράθεση από: alkisg στις 20 Φεβ 2008, 04:06:39 ΜΜ
Καταρχάς συμφωνείς ότι δεν έχει νόημα να μιλάμε για στατικές ή δυναμικές δομές στην ψευδογλώσσα. Επίσης, στη λύση του Μιχάλη θα έκοβες μονάδες επειδή δεν υπάρχει άνω όριο στον πίνακα, όχι επειδή δεν είναι στατικός, αλλά επειδή δεν μεταφέρεται αυτούσιος σε προγραμματιστικό περιβάλλον (αν σε κατάλαβα σωστά).

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

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

Πιστεύω λοιπόν πως πρέπει να επιβάλουμε τους περιορισμούς της  ΓΛΩΣΣΑΣ στην ψευδογλώσσα όπου είναι δυνατόν. Δηλαδή σε επίπεδο αλγορίθμου και σε επίπεδο δομών δεδομένων. Δε ενδιαφέρει αν στην ψευδογλώσσα επιτρέπεται το «Θέσε Χ=0» γιατί δε θα μπερδέψει κανέναν στη ΓΛΩΣΣΑ. Στη ΓΛΩΣΣΑ το αντίστοιχο είναι Χ<-0. Αλλά με ενοχλεί το θέμα των πινάκων απροσδιόριστου μεγέθους γιατί αυτή η προσέγγιση είναι μη αποδεκτή στη ΓΛΩΣΣΑ. Η ΓΛΩΣΣΑ είναι το διπλανό περιβάλλον και πιστεύω πως πρέπει να καταφεύγουμε σε αυτή για να δούμε τι πρέπει να ανεχτούμε στη χαλαρή ψευδογλώσσα και τι όχι. Δε με απασχολούν οι άλλες γλώσσες προγραμματισμού.

Η χαλαρότητα της ψευδογλώσσας είναι ένα θέμα που κατά τη γνώμη μου παρεξηγείται. Το «Θέσε Χ=0» και η χρήση της τετραγωνικής ρίζας ολογράφως επιτρέπονται αλλά δε με χαλάνε (αν και η ανάγκη για ομογενοποίηση τείνει να τα εξαλείψει) γιατί δε θα μου δημιουργήσουν μπελά κατά τη μεταφορά τους στη ΓΛΩΣΣΑ. Με χαλάνε οι διαφορετικές δυνατότητες πάνω στις δομές δεδομένων γιατί αυτές θα μου δημιουργήσουν μπελά.

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

Τα είπα με πολλά λόγια τουλάχιστο για είναι κατανοητή η θέση μου.

Παράθεση από: alkisg στις 20 Φεβ 2008, 04:06:39 ΜΜ
Μα σε προγραμματιστικό περιβάλλον (όχι στη ΓΛΩΣΣΑ, σε άλλες γλώσσες) η λύση του Μιχάλη δουλεύει μια χαρά. Π.χ. συχνά βλέπουμε
Αρχή_επανάληψης
  Διάβασε χαρακτήρα
  κείμενο <- κείμενο + χαρακτήρα
Μέχρις_ότου χαρακτήρα = ' '

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

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

Παράθεση από: alkisg στις 20 Φεβ 2008, 04:06:39 ΜΜ
Δηλαδή αν ο μαθητής έδινε την ΙΔΙΑ λύση σε C, Basic ή Pascal, όπου επιτρέπεται, θα το δεχόμασταν σωστό, και αν γράφει ψευδογλώσσα το παίρνουμε λάθος;

Αν εννοείς στην ψευδογλώσσα το
Διάβασε Ν
Για ι από 1 μέχρι Ν
  Διάβασε α[ι]
Τέλος_επανάληψης

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

sstergou

#87
Μήπως όμως με το να παίρνουμε ιδέες από ένα συγκεκριμένο αυστηρό προγραμματιστικό περιβάλλον και να προσπαθούμε να τις επιβάλλουμε στην ψευδογλώσσα ακυρώνουμε τη φύση της;

Παράθεση από: gpapargi στις 21 Φεβ 2008, 09:45:34 ΠΜΠιστεύω επίσης ότι είναι λάθος από παιδαγωγική σκοπιά να θεωρούμε σωστούς στην ψευδογλώσσα αλγορίθμους που θεωρούμε λάθος στη ΓΛΩΣΣΑ

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

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

Τι είναι πιο σωστό; Είναι λίγο μπερδεμένα τα πράγματα! :(

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

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

pgrontas

Παράθεση από: sstergou στις 21 Φεβ 2008, 11:20:03 ΠΜ
Μήπως όμως με το να παίρνουμε ιδέες από ένα συγκεκριμένο αυστηρό προγραμματιστικό περιβάλλον και να προσπαθούμε να τις επιβάλλουμε στην ψευδογλώσσα ακυρώνουμε τη φύση της;

Σε αυτό συμφωνώ απόλυτα (όπως και στο υπόλοιπο post σου Στάθη, απλά η παραπάνω παράθεση εκφράζει καλύτερα αυτό που σκέφτομαι).

Άλλωστε για μένα δεν είναι παιδαγωγικό σφάλμα στην περίπτωση των πινάκων (ή collections ή ΑΔΔ) απροσδιόριστου μεγέθους, να λέμε ότι στην ψευδογλώσσα επικεντρωνόμαστε στο γενικότερο πρόβλημα (στην κλάση του προβλήματος) και ότι στην ΓΛΩΣΣΑ λύνουμε το πρόβλημα σε μια συγκεκριμένη περίπτωση του - για ένα συγκεκριμένο πλήθος στοιχείων (σε ενα instance). Ίσα ίσα τονίζει την περατότητα του υπολογιστή.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

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

Το λεπτό θέμα είναι αυτό που θέτεις: τελικά πρέπει να υπάρχουν και τα 2 ή μόνο το ένα κι αν ναι ποιο είναι αυτό;

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

Αλλά θέλω να γλιτώσω το ότι αν θέλω να βάλω πραγματική μεταβλητή με ακέραια τιμή σε ακέραια μεταβλητή δεν μπορώ να το κάνω απευθείας αλλά πρέπει να χρησιμοποιήσω τη συνάρτηση ακεραίου μέρους. Δε μου αρέσει για αρχή να τους μπλέξω με τέτοια. Με την ψευδογλώσσα το γλιτώνω. Έχει πλεονεκτήματα η ύπαρξη και των 2. Ίσως είναι καλύτερη λύση το να έχουμε και τα 2 και να κουμαντάρουμε τη χαλαρότητα της ψευδογλώσσας. Αλλιώς θα πρέπει να επιλέξουμε τι από τα 2 θα καταργήσουμε και εκεί θα γίνει χαμός καθώς υπάρχουν απόψεις που προτιμούν την κατάργηση τη ΓΛΩΣΣΑΣ. Τι θα γίνει όμως τότε με τα υποπρογράμματα (super must για την αναλυτική ικανότητα και τον τμηματικό προγραμματισμό) και ειδικά με το πέρασμα παραμέτρων;

sstergou

Κάνω λίγο το δικηγόρο του διαβόλου χωρίς αυτό να σημαίνει ότι συμφωνώ 100% με όλα τα παρακάτω:

α) Τα υποπρογράμματα έτσι όπως παρουσιάζονται σε κάποια σημεία της ύλης είναι σαν να έπεσαν από τον ουρανό. Είναι εύκολο για έναν μαθητή (και όχι προγραμματιστή) να καταλάβει σε τι χρησιμεύει η διαδικασία εκτύπωση στη σελ. 212 ;
β) Γιατί έχουμε συναρτήσεις και διαδικασίες με διαφορετικά στυλ παραμέτρων; Σε τι εξυπηρετεί αυτό;
γ) Εφόσον είναι μέσα τα υποπρογράμματα γιατί είναι έξω η αναδρομή (για μένα must για την χρήση υποπρογραμμάτων);
δ) Μα καλά, υπήρχαν πολύ πιο δύσκολοι τρόποι για την μεταβίβαση παραμέτρων σε διαδικασία, γιατί επέλεξαν τον πιο απλό; :P

Λίγο off-topic :
Άμα στη ψευδογλώσσα είχαμε κλήση αλγορίθμου από αλγόριθμο θα υπήρχε ανάγκη για ΓΛΩΣΣΑ; Γιατί οι μαθητές πρέπει να ασχολούνται με τον έλεγχο εισόδου δεδομένων; Τι εξυπηρετεί αυτό; Γιατί η ΓΛΩΣΣΑ να είναι τόσο αυστηρή και περιοριστική; Γιατί π.χ. οι μεταβλητές να μην είναι πρωτίστως τιμές οι οποίες έχουν την ιδιότητα του τύπου και είναι τύποι με ιδιότητα την τιμή; Τι είναι πιο φυσικό; Γιατί να μπαίνουν θέματα στις εξετάσεις στα οποία ο μαθητής πρέπει να γράψει υποπρόγραμμα επειδή το λέει η εκφώνηση και όχι επειδή αυτό προκύπτει από την φύση της άσκησης; Γιατί είναι τα κεφ.4,6 στη ύλη; Να ζει κανείς ή να μη ζεί .... εμ.... λάθος :)

Τέλος πάντων, το βιβλίο είναι αυτό που είναι : Έχουμε και ψευδογλώσσα και ΓΛΩΣΣΑ το θέμα είναι πως τις αντιμετωπίζουμε.

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

Χάρης Τσιαΐρης

Η αλήθεια είναι ότι όταν απάντησα στο Μιχάλη "πόσες μονάδες θα κόβατε" το απάντησα λίγο βιαστικά και από όσο παρατήρησα η απάντηση που έδωσα τότε ανοιξε καινούργιο topic και με μεγάλο μάλιστα ενδιαφέρον. Δυστυχώς ο χρόνος μου είναι περιορισμένος και από τότε μπόρεσα να δω τις εξελίξεις στο Στέκι πολύ λίγες 3 φορές και αυτές για χρόνο όχι μεγαλύτερο από 5 λεπτά. Άλλωστε εγώ μόλις φέτος ανακάλυψα το Στέκι και ακόμα διαβάζω τις παλαιότερες συζητήσεις (που θα τελειώσω μάλλον κατά τον Ιούλιο ...)

Αναφέρθηκε ότι δεν μπορεί να ισχύουν άλλα σε ψευδογλώσσα και άλλα σε ΓΛΩΣΣΑ.

Αν ίσχυαν τα ίδια δεν θα υπήρχε λόγος ύπαρξης και των δύο. ʼλλωστε η σύνταξη δεν αξιολογείται. Οι διαφορές τους είναι κατά τη γνώμη μου που αξίζουν προσοχής. (πχ. η είσοδος σε ΓΛΩΣΣΑ υλοποιείται με την εντολή ΓΡΑΨΕ-ΔΙΑΒΑΣΕ (ή γραψωδιάβασε όπως το λέω στους μαθητές μου), ενώ στην ψευδογλώσσα με Διάβασε (χωρίς εμφάνισε) ή με Δεδομένα // // [για να βάλω λίγο ακόμα λάδι στη φωτιά]  >:D

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

Για το λόγο αυτό:

  • Στους μαθητές μου: Τους λέω ότι αυτό μπορεί να κοστίσει αρκετές μονάδες και σε τεστ τους κόβω αρκετά (για το συγκεκριμένο σίγουρα 2 μονάδες)
  • Στις πανελλαδικές: έχω μία περισσότερο ελαστική άποψη, και στηρίζεται στο ότι στο διδακτικό πακέτο υπάρχουν σχετικές αναφορές. Φυσικά όλα αυτά πριν ξεκινήσει η βαθμολόγηση καθώς μετά η κοινή γραμμή για την αντικειμενική αξιολόγηση είναι χρυσός. Δηλ. εγώ θα πρότεινα να μην κοπούνε μονάδες για αυτό, αλλά μετά το πρώτο 24ωρο που ξεκινάει η βαθμολόγηση, ακολουθώ την κοινή γραμμή που έχει αποφασιστεί. Όπως όλοι μας.

Χάρης Τσιαΐρης