Μετατροπή Δομών Επανάληψης

Ξεκίνησε από evry, 12 Απρ 2011, 09:08:12 ΜΜ

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

evry

Άραγε τι θα απαντούσε η πλειοψηφία των μαθητών αν το παρακάτω θέμα έμπαινε στις εξετάσεις?

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

i <- 1
Όσο i <= 100 Επανάλαβε
     Γράψε i
     Αν i > 50 Τότε
         i <- 999
     Τέλος_Αν
     i <- i + 1
Τέλος_Επανάληψης
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Σπύρος Δουκάκης

και να προσθέσω...

άραγε ποια θα ήταν η προτεινόμενη σωστή λύση που θα έδιναν τα μέλη της επιτροπής εξετάσεων; :D

P.Tsiotakis

το ερώτημα έχει νόημα αν θα υπήρχε επιτροπή που θα έβαζε ένα τέτοιο θέμα

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

pgrontas

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

evry

Χμμ, το θέμα είχε σκοπό να ανοίξει συζήτηση για τον τρόπο που σκέφτονται οι μαθητές και για το κατά πόσο η σκέψη τους έχει μπει σε ένα καλούπι. Μάλλον δεν έπρεπε να βάλω τη λέξη "εξετάσεις" , διότι θα αποπροσανατολιστεί η συζήτηση αν μείνουμε σε επίπεδο εξετάσεων, ασκήσεων, μεθοδολογιών κλπ.
Ας πούμε ότι βάζουμε την άσκηση σε επίπεδο τάξης, τι θα συνέβαινε? και γιατί?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

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

Παράθεση από: pgrontas στις 12 Απρ 2011, 10:48:50 ΜΜ
Ευριπίδη κάτι πονηρό έχεις στο μυαλό σου, που μάλλον δεν καταλαβαίνω:
Εφόσον ζητάει ισοδυναμία σε επίπεδο αποτελεσμάτων και όχι σε επίπεδο διαδικασίας γιατί δεν είναι αποδεκτό το παρακάτω:
για ι απο 1 μεχρι 51
	γραψε ι
τελος_επαναληψης

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

Αθανάσιος Πέρδος

Πρώτον, ο σκεπτόμενος μαθητής θα πρέπει να γνωρίζει από τη διδασκαλία ότι το συντακτικό της Γλώσσας και της Ψευδογλώσσας όπως έχουν οριστεί στο διδακτικό πακέτο και στα έγγραφα που έχει στείλει το Παιδαγωγικό Ινστιτούτο, δεν επιτρέπει την αλλαγή του μετρητή μέσα στο σώμα των εντολών της ΓΙΑ. Το διδακτικό πακέτο έχει μέσα Pascal και Basic. Η μία δεν επιτρέπει αλλαγή της τιμής της μεταβλητής ενώ η άλλη επιτρέπει. Άρα όλα είναι θέμα συντακτικού και επομένως δεν έχει νόημα η ερώτηση.

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

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

i<- 1
Όσο i <= 51 Επανάλαβε
   Γράψε i
   i <- i + 1
Τέλος_Επανάληψης

Μετά από αυτό, η μετατροπή είναι προφανής.

Με εκτίμηση
Αθανάσιος Πέρδος

pgrontas

Παράθεση από: aperdos στις 13 Απρ 2011, 01:21:52 ΜΜ
Πρώτον, ο σκεπτόμενος μαθητής θα πρέπει να γνωρίζει από τη διδασκαλία ότι το συντακτικό της Γλώσσας και της Ψευδογλώσσας όπως έχουν οριστεί στο διδακτικό πακέτο και στα έγγραφα που έχει στείλει το Παιδαγωγικό Ινστιτούτο, δεν επιτρέπει την αλλαγή του μετρητή μέσα στο σώμα των εντολών της ΓΙΑ. Το διδακτικό πακέτο έχει μέσα Pascal και Basic. Η μία δεν επιτρέπει αλλαγή της τιμής της μεταβλητής ενώ η άλλη επιτρέπει. Άρα όλα είναι θέμα συντακτικού και επομένως δεν έχει νόημα η ερώτηση.
Νομίζω ότι για να είμαστε ακριβείς θα πρέπει να πούμε ότι το Παιδαγωγικό Ινστιτούτο δεν επιτρέπει την αλλαγή του μετρητή και όχι το συντακτικό.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

evry

#8
Παράθεση από: aperdos στις 13 Απρ 2011, 01:21:52 ΜΜ
Δεύτερον δεν μπορώ να καταλάβω ποιο είναι το πρόβλημα αν η σκέψη των μαθητών μπει σε καλούπι. Γιατί από όσο γνωρίζω, όλα τα τμήματα πληροφορικής διδάσκουν συγκεκριμένους αλγορίθμους στους φοιτητές και στη συνέχεια τους ζητάνε να τους εφαρμόσουν κατάλληλα σε ανάλογα προβλήματα.
!!!!!!!
Με συγχωρείς αλλά αυτό που περιγράφεις δεν συμβαίνει σε κανένα σοβαρό τμήμα πληροφορικής (τουλάχιστον αυτά που ξέρω εγώ).
Έχεις στο νου σου κάποιο συγκεκριμένο τμήμα πληροφορικής;
Δηλαδή η άποψη που έχεις για τα τμήματα πληροφορικής είναι ότι μαθαίνουν στους φοιτητές τους συγκεκριμένους αλγορίθμους και απλά πως να τους εφαρμόζουν?
Μου κάνει εντύπωση που έχεις αυτή την άποψη για τα τμήματα πληροφορικής. Στο δικό σου τμήμα πληροφορικής συνέβαινε κάτι τέτοιο?

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

i<- 1
Όσο i <= 51 Επανάλαβε
   Γράψε i
   i <- i + 1
Τέλος_Επανάληψης

Μετά από αυτό, η μετατροπή είναι προφανής.

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

edit: Παναγιώτη με πρόλαβες πάλι (τι θα γίνει σήμερα :o) Πράγματι η απαγόρευση αλλαγής του μετρητή μέσα στη Για δεν είναι θέμα σύνταξης. Δηλαδή δεν μπορούμε να πούμε ότι είναι συντακτικό λάθος. Έλα όμως που δεν είναι ούτε λογικό, τι είναι τι είναι  ???
Απλά το επιβάλλει το βιβλίο, αυτό είναι όλο
Στην πραγματικότητα δεν πρόκειται για λάθος αλλά απλά για κακή πρακτική
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

#9
Και μια και μιλάμε για την αλλαγή του μετρητή μέσα στη Για, μπορεί να οριστεί αυτό αυστηρά και για όλες τις περιπτώσεις σε επίπεδο συντακτικού? Δηλαδή να γίνεται ο έλεγχος σε compile-time?
Νομίζω ότι δεν μπορεί. Δηλαδή η αλλαγή του μετρητή μέσα στη Για δεν νομίζω ότι μπορεί να θεωρηθεί συντακτικό λάθος όπως για παράδειγμα αν κάποιος ξεχάσει ένα ΤΕΛΟΣ_ΑΝ.
Απλά δεν είμαι τόσο σίγουρος. Σε αυτό το ερώτημα λογικά ο Άλκης θα μπορεί να δώσει μια καλή απάντηση

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

Πάντως ο διερμηνευτής το επιτρέπει μια χαρά >:D
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

(δεν έχω διαβάσει το θέμα, απλά έπεσε το μάτι μου στην ερώτηση του evry)

Θα μπορούσε το συντακτικό της ΓΛΩΣΣΑΣ να απαγορεύει τη μεταβολή του μετρητή μιας ΓΙΑ. Εντός του βρόχου, θα μπορούσε να θεωρηθεί r-value (δηλαδή χωρίς διεύθυνση, μη assignable), οπότε και να μην μπορεί να χρησιμοποιηθεί σε εκχωρήσεις τιμής. Σαν να πας να κάνεις "π <- 3.15" με το π δηλωμένο στις ΣΤΑΘΕΡΕΣ, που είναι κι αυτό συντακτικό λάθος. Επίσης, εάν ο μετρητής έμπαινε ως παράμετρος σε διαδικασίες, θα συμπεριφερόταν σαν τις σταθερές στο παράδειγμα των πύργων του ανόι, πάλι δηλαδή δεν θα άλλαζε η τιμή του.

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

evry

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

Τώρα με το συντακτικό που λες είχα την εντύπωση ότι ένας τέτοιος περιορισμός ταιριάζει ποιο πολύ σε αυτό που λέμε semantic και όχι syntax μιας γλώσσας προγραμματισμού. Δηλαδή όταν λέμε συντακτικό δεν εννοούμε και τη σημασία των συμβόλων. Με αυτό έχει να κάνει η σημασιολογία της γλώσσας. Στην περίπτωση του μετρητή της επανάληψης η μεταβλητή i έχει αυτή τη σημασία οπότε είναι πιο πολύ θέμα σημασιολογίας και όχι συντακτικού. Τι λες?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

pgrontas

Παράθεση από: evry στις 13 Απρ 2011, 11:35:27 ΜΜ
Τώρα με το συντακτικό που λες είχα την εντύπωση ότι ένας τέτοιος περιορισμός ταιριάζει ποιο πολύ σε αυτό που λέμε semantic και όχι syntax μιας γλώσσας προγραμματισμού. Δηλαδή όταν λέμε συντακτικό δεν εννοούμε και τη σημασία των συμβόλων. Με αυτό έχει να κάνει η σημασιολογία της γλώσσας. Στην περίπτωση του μετρητή της επανάληψης η μεταβλητή i έχει αυτή τη σημασία οπότε είναι πιο πολύ θέμα σημασιολογίας και όχι συντακτικού. Τι λες?
Ευριπίδη τώρα με πρόλαβες εσύ! :D
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Εγώ στο μυαλό μου τα έχω τοποθετήσει έτσι:

  • λεκτικός έλεγχος: ελέγχει για ανοικτά αλφαριθμητικά, άκυρα αναγνωριστικά κτλ
  • συντακτικός έλεγχος: καθορίζει αν οι εντολές είναι έγκυρες ή όχι
  • σημασιολογία: ορίζει τι θα κάνουν οι εντολές όταν εκτελεστούν
  • καλές πρακτικές: είναι οδηγίες προς τον προγραμματιστή, όχι μέρος του compiler/interpreter της γλώσσας
Νομίζω ότι μόνο τα δύο πρώτα μπορούν να αποφανθούν ότι κάποιο πρόγραμμα δεν είναι αποδεκτό. Δηλαδή το "η μεταβολή του μετρητή της ΓΙΑ δεν επιτρέπεται" θα το τοποθετούσα στο συντακτικό της ΓΛΩΣΣΑΣ. Το "η μεταβολή του μετρητή της ΓΙΑ δεν προτείνεται" θα το τοποθετούσα στις καλές πρακτικές. Στη σημασιολογία θα έβαζα το "τι θα συμβεί (στο πρόγραμμα όχι στο βαθμό :)) αν μεταβάλλουμε την τιμή του μετρητή, εφόσον το συντακτικό το επιτρέπει";

Αθανάσιος Πέρδος

Παράθεση από: evry στις 13 Απρ 2011, 01:49:36 ΜΜ
!!!!!!!
Με συγχωρείς αλλά αυτό που περιγράφεις δεν συμβαίνει σε κανένα σοβαρό τμήμα πληροφορικής (τουλάχιστον αυτά που ξέρω εγώ).
Έχεις στο νου σου κάποιο συγκεκριμένο τμήμα πληροφορικής;
Δηλαδή η άποψη που έχεις για τα τμήματα πληροφορικής είναι ότι μαθαίνουν στους φοιτητές τους συγκεκριμένους αλγορίθμους και απλά πως να τους εφαρμόζουν?
Μου κάνει εντύπωση που έχεις αυτή την άποψη για τα τμήματα πληροφορικής. Στο δικό σου τμήμα πληροφορικής συνέβαινε κάτι τέτοιο?
Στο δικό μου τμήμα της Εφαρμοσμένης Πληροφορικής του Πανεπιστημίου Μακεδονίας, τόσο στο μάθημα της Ανάλυσης Αλγορίθμων, του Δικτυακού Προγραμματισμού, των Δομών Δεδομένων , των Αλγόριθμων Γραμμικής Βελτιστοποίησης, των Υπολογιστικών Μαθηματικών και άλλων μαθημάτων, έπρεπε στις εξετάσεις να γνωρίζουμε συγκεκριμένους αλγόριθμους είτε για να τους εφαρμόσουμε απευθείας είτε για να τους τροποποιήσουμε κατάλληλα ώστε να επιλύσουμε κάποια προβλήματα. Ας δεχτούμε λοιπόν ότι η δικιά μου σχολή δεν είναι σοβαρή. Πιστεύω όμως ότι θα διαφωνήσουν αρκετοί εδώ μέσα στο στέκι, οι οποίοι είναι απόφοιτοι του τμήματος και μάλιστα συμμετέχουν ενεργά στα διάφορα θέματα που ανοίγουν.
Δες όμως τα μαθήματα Εισαγωγή στους Αλγορίθμους και Δομές Δεδομένων του τμήματος Μηχανικών Η/Υ και Πληροφορικής της Πάτρας (εξετάσεις και εργαστηριακές ασκήσεις). Από ότι βλέπω εγώ υπάρχει απαίτηση να γνωρίζουν οι φοιτητές συγκεκριμένους αλγόριθμους και να τους εφαρμόσουν ή να τους τροποποιήσουν κατάλληλα. Άρα με τη δικιά σου λογική, ούτε αυτό είναι σοβαρό τμήμα.
Δεν ξέρω σε τι ακριβώς θέματα εξεταζόσασταν στο τμήμα που τελείωσες εσύ και τι σπουδαίους καθηγητές είχες αλλά μάλλον άστοχη είναι η παρατήρηση σου σχετικά με σοβαρά και μη τμήματα. Φαίνεται ότι οι φυσικοί (που είναι και οι περισσότεροι) και οι μαθηματικοί που διδάσκουνε στο δικό σου τμήμα είναι καλύτεροι και πιο σοβαροί από τους αντίστοιχους που διδάσκουνε στο δικό μου (κατά βάση μαθηματικοί). Ας προσέχουμε λοιπόν τι γράφουμε.

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

Να είστε όλοι καλά.