ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;

Ξεκίνησε από vasiko, 17 Ιαν 2013, 12:01:16 ΠΜ

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

vasiko

Στην περίπτωση μίας άσκησης όπου διαβάζονται επαναληπτικά ονόματα και βάρη μέχρι να δοθεί ως όνομα το "ΤΕΛΟΣ" και ψάχνουμε ας πούμε το μεγαλύτερο βάρος που έχει δοθεί,  οι περισσότεροι μαθητές λύνουν την άσκηση με Μέχρις_ότου ως εξής:
Αρχή_επανάληψης
   Διάβασε ον, β
   Αν β>μαχ τότε
      μαχ<-- β
    Τέλος_αν
Μέχρις_ότου ον="ΤΕΛΟΣ"
Προφανώς η λύση αυτή έχει ένα  λάθος καθώς ο χρήστης μετά την εισαγωγή της λέξης "ΤΕΛΟΣ" είναι υποχρεωμένος να δώσει κι ένα βάρος το οποίο θα μπει και στη σύγκριση με το μαχ. Αν η άσκηση πιάνει 10 μόρια τι θα κόβαμε στις Πανελλήνιες σε αυτή η λύση;
Σε συζητήσεις με συναδέλφους υπάρχουν αρκετοί που έχουν την άποψη ότι δεν κόβουμε τίποτα. Τι λέτε;

petrosp13

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

evry

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

Διάβασε Ον, Β
Όσο Ον <> "ΤΕΛΟΣ"  Επανάλαβε
   ....
Διάβασε Ον, Β
ΤΕ

Η μόνη πιθανότητα όπου θα δικαιούμασταν να κόψουμε είναι αν η εκφώνηση λέει ρητά "Να διαβάζει το όνομα και αν αυτό είναι διάφορο του "ΤΕΛΟΣ" να διαβάζει και το Β, αλλιώς να τερματίζει"

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

Επίσης δεν είναι υποχρεωτικό να χρησιμοποιήσει ο μαθητής Όσο, η να διαβάζει το όνομα έξω από την επανάληψη και στο τέλος.
Με χρήση μέχρις_ότου και Αν..τότε μέσα δουλεύουν όλα μια χαρά.

Όσον αφορά τώρα το βαθμολογικό κόστος αυτού του λάθους, δεδομένου ότι πρόκειται για ένα υποερώτημα που πιάνει 4 μονάδες (από τις 20 του θέματος) το φυσιολογικό είναι να κόψουμε 1 μονάδα και το αυστηρό 2. Εξαρτάται φυσικά και από την επίδραση που έχει αυτό το λάθος στην όλη λογική του αλγορίθμου.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

petrosp13

Παράθεση από: evry στις 17 Ιαν 2013, 04:43:13 ΜΜ
Το πρόβλημα δεν είναι ότι διαβάζει και το βάρος.
Με το σκεπτικό αυτό η παρακάτω λύση θα έπρεπε να είναι λάθος, αλλά δεν νομίζω ότι θα βρεθεί κάποιος βαθμολογητής που θα κόψει

Διάβασε Ον, Β
Όσο Ον <> "ΤΕΛΟΣ"  Επανάλαβε
   ....
Διάβασε Ον, Β
ΤΕ



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

vasiko

#4
θα διαφωνήσω με τον evry. Θεωρώ ότι είναι λογικό λάθος να υποχρεώνεις το χρήστη να εισάγει το βάρος αφού έχει πληκτρολογήσει τη λέξη "ΤΕΛΟΣ" για να ολοκληρωθεί ο αλγόριθμος. Επίσης τις περισσότερες φορές το βάρος ή οποιοδήποτε άλλο δεδομένο εισάγει ο χρήστης ελέγχεται παρακάτω για να μετρηθεί κάποιο πλήθος ή να βρεθεί κάποιο μέγιστο κλπ. Όπότε μάλλον θα υπάρξει πρόβλημα έτσι κι αλλιώς . Το πρόβλημα λύνεται είτε με Αρχή_επανάληψης:
Αρχή_επανάληψης
   Διάβασε ον
    Αν ον<>"ΤΕΛΟΣ" τότε
         Διάβασε β
       Αν β>μαχ τότε
          μαχ<-- β
       Τέλος_αν
   Τέλος_αν
Μέχρις_ότου ον="ΤΕΛΟΣ"

είτε με Όσο:

Διάβασε ον
Όσο ον<>"ΤΕΛΟΣ" επανάλαβε
     Διάβασε β
     Αν β>μαχ τότε
          μαχ<-- β
      Τέλος_αν
     Διάβασε ον
Τέλος_επανάληψης
Ωστόσο από την εμπειρία μου μέχρι τώρα βλέπω ότι στις Πανελλήνιες πολλοί βαθμολογητές δεν κόβουν μόρια από κάτι τέτοιο.
Ξαναθέτω λοιπόν το ερώτημα στους πιο έμπειρους συναδέλφους:
Όταν διδάσκετε το μάθημα επισημαίνετε αυτό το λογικό σφάλμα ή το θεωρείτε κάτι ασήμαντο και το αφήνετε να περάσει;

andreas_p

Προφανώς και το επισημαίνουμε αλλά και επιμένουμε (πολλές φορές με τρόπο ... κουραστικό !) 'τρέχοντας' τον αλγόριθμο με το 'χέρι' με τη βοήθεια πίνακα τιμών !!!

Επίσης το max  ΔΕΝ έχει αρχικοποιηθεί !!!


ΑΠ

vasiko

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

evry

Δεν είπα ότι δεν είναι λάθος, για την ακρίβεια είπα ότι δύσκολα κάποιος θα κόψει για αυτό.
Όταν στη δομή επανάληψης μαζί με συνθήκη, αρχικοποίηση και Διάβασε δίνονται 4 μονάδες συνήθως, είναι λογικό να κοπεί μια μονάδα για αυτό?
Νομίζω ότι είναι πάρα πολύ.
Δεν το θεωρώ τόσο σημαντικό ώστε να κόψει κάποιος από αυτό.
Πιστεύω ότι θα έπρεπε η εκφώνηση με κάποιο τρόπο να δείχνει πως δεν πρέπει να διαβαστεί και το βάρος.
π.χ. όταν η εκρφώνηση λέει "να διαβάζει μέχρι να δοθεί αντί για όνομα το "ΤΕΛΟΣ" " δε νομίζω ότι προκύπτει με ασφάλεια πως η επανάληψη τερματίζει αυτόματα ή ότι δεν δίνει βάρος, ή τουλάχιστον πως οι περισσότεροι μαθητές θα το εκλάβουν έτσι.

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

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

vasiko

Συμφωνώ evry, ευχαριστώ πολύ.

gthal

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