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

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

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

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