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

Ξεκίνησε από 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