Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή επανάληψης => Μήνυμα ξεκίνησε από: vasiko στις 17 Ιαν 2013, 12:01:16 ΠΜ

Τίτλος: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: vasiko στις 17 Ιαν 2013, 12:01:16 ΠΜ
Στην περίπτωση μίας άσκησης όπου διαβάζονται επαναληπτικά ονόματα και βάρη μέχρι να δοθεί ως όνομα το "ΤΕΛΟΣ" και ψάχνουμε ας πούμε το μεγαλύτερο βάρος που έχει δοθεί,  οι περισσότεροι μαθητές λύνουν την άσκηση με Μέχρις_ότου ως εξής:
Αρχή_επανάληψης
   Διάβασε ον, β
   Αν β>μαχ τότε
      μαχ<-- β
    Τέλος_αν
Μέχρις_ότου ον="ΤΕΛΟΣ"
Προφανώς η λύση αυτή έχει ένα  λάθος καθώς ο χρήστης μετά την εισαγωγή της λέξης "ΤΕΛΟΣ" είναι υποχρεωμένος να δώσει κι ένα βάρος το οποίο θα μπει και στη σύγκριση με το μαχ. Αν η άσκηση πιάνει 10 μόρια τι θα κόβαμε στις Πανελλήνιες σε αυτή η λύση;
Σε συζητήσεις με συναδέλφους υπάρχουν αρκετοί που έχουν την άποψη ότι δεν κόβουμε τίποτα. Τι λέτε;
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: petrosp13 στις 17 Ιαν 2013, 11:41:15 ΠΜ
Υπάρχει λάθος και σίγουρα πρέπει να κοπούν μονάδες
Προφανώς διδάσκουμε στην συγκεκριμένη περίπτωση ότι το όνομα πρέπει να διαβάζεται πριν την επανάληψη και ξανά πριν το τέλος της, ούτως ώστε να δίνεται βάρος μόνο όταν πρέπει από τον χρήστη
Οι μαθητές πρέπει να το κατανοήσουν και να το ακολουθήσουν, αλλιώς υποπίπτουν σε λογικό λάθος
Τώρα, οι μονάδες που πρέπει να κοπούν είναι μάλλον υποκειμενικές
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: evry στις 17 Ιαν 2013, 04:43:13 ΜΜ
Το πρόβλημα δεν είναι ότι διαβάζει και το βάρος.
Με το σκεπτικό αυτό η παρακάτω λύση θα έπρεπε να είναι λάθος, αλλά δεν νομίζω ότι θα βρεθεί κάποιος βαθμολογητής που θα κόψει

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

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

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

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

Όσον αφορά τώρα το βαθμολογικό κόστος αυτού του λάθους, δεδομένου ότι πρόκειται για ένα υποερώτημα που πιάνει 4 μονάδες (από τις 20 του θέματος) το φυσιολογικό είναι να κόψουμε 1 μονάδα και το αυστηρό 2. Εξαρτάται φυσικά και από την επίδραση που έχει αυτό το λάθος στην όλη λογική του αλγορίθμου.
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: petrosp13 στις 17 Ιαν 2013, 10:10:21 ΜΜ
Παράθεση από: evry στις 17 Ιαν 2013, 04:43:13 ΜΜ
Το πρόβλημα δεν είναι ότι διαβάζει και το βάρος.
Με το σκεπτικό αυτό η παρακάτω λύση θα έπρεπε να είναι λάθος, αλλά δεν νομίζω ότι θα βρεθεί κάποιος βαθμολογητής που θα κόψει

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



Εφόσον έχεις συμφωνήσει με τον χρήστη ότι μόλις θα δόσει "ΤΕΛΟΣ", θα τερματίσει ο αλγόριθμος, δεν είναι λάθος να τον βάλεις να δώσει και ένα βάρος;;;
Ενώ μπορεί να λυθεί εύκολα αν το βάρος διαβάζεται σε μια εντολή μόνο ακριβώς με την αρχή της επανάληψης;;;
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: vasiko στις 18 Ιαν 2013, 03:19:48 ΜΜ
θα διαφωνήσω με τον evry. Θεωρώ ότι είναι λογικό λάθος να υποχρεώνεις το χρήστη να εισάγει το βάρος αφού έχει πληκτρολογήσει τη λέξη "ΤΕΛΟΣ" για να ολοκληρωθεί ο αλγόριθμος. Επίσης τις περισσότερες φορές το βάρος ή οποιοδήποτε άλλο δεδομένο εισάγει ο χρήστης ελέγχεται παρακάτω για να μετρηθεί κάποιο πλήθος ή να βρεθεί κάποιο μέγιστο κλπ. Όπότε μάλλον θα υπάρξει πρόβλημα έτσι κι αλλιώς . Το πρόβλημα λύνεται είτε με Αρχή_επανάληψης:
Αρχή_επανάληψης
   Διάβασε ον
    Αν ον<>"ΤΕΛΟΣ" τότε
         Διάβασε β
       Αν β>μαχ τότε
          μαχ<-- β
       Τέλος_αν
   Τέλος_αν
Μέχρις_ότου ον="ΤΕΛΟΣ"

είτε με Όσο:

Διάβασε ον
Όσο ον<>"ΤΕΛΟΣ" επανάλαβε
     Διάβασε β
     Αν β>μαχ τότε
          μαχ<-- β
      Τέλος_αν
     Διάβασε ον
Τέλος_επανάληψης
Ωστόσο από την εμπειρία μου μέχρι τώρα βλέπω ότι στις Πανελλήνιες πολλοί βαθμολογητές δεν κόβουν μόρια από κάτι τέτοιο.
Ξαναθέτω λοιπόν το ερώτημα στους πιο έμπειρους συναδέλφους:
Όταν διδάσκετε το μάθημα επισημαίνετε αυτό το λογικό σφάλμα ή το θεωρείτε κάτι ασήμαντο και το αφήνετε να περάσει;
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: andreas_p στις 18 Ιαν 2013, 03:30:21 ΜΜ
Προφανώς και το επισημαίνουμε αλλά και επιμένουμε (πολλές φορές με τρόπο ... κουραστικό !) 'τρέχοντας' τον αλγόριθμο με το 'χέρι' με τη βοήθεια πίνακα τιμών !!!

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


ΑΠ
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: vasiko στις 18 Ιαν 2013, 04:20:36 ΜΜ
Ναι έχεις δίκιο για την αρχικοποίηση του max αλλά δεν ήταν αυτό το θέμα μου.
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: evry στις 19 Ιαν 2013, 09:37:33 ΠΜ
Δεν είπα ότι δεν είναι λάθος, για την ακρίβεια είπα ότι δύσκολα κάποιος θα κόψει για αυτό.
Όταν στη δομή επανάληψης μαζί με συνθήκη, αρχικοποίηση και Διάβασε δίνονται 4 μονάδες συνήθως, είναι λογικό να κοπεί μια μονάδα για αυτό?
Νομίζω ότι είναι πάρα πολύ.
Δεν το θεωρώ τόσο σημαντικό ώστε να κόψει κάποιος από αυτό.
Πιστεύω ότι θα έπρεπε η εκφώνηση με κάποιο τρόπο να δείχνει πως δεν πρέπει να διαβαστεί και το βάρος.
π.χ. όταν η εκρφώνηση λέει "να διαβάζει μέχρι να δοθεί αντί για όνομα το "ΤΕΛΟΣ" " δε νομίζω ότι προκύπτει με ασφάλεια πως η επανάληψη τερματίζει αυτόματα ή ότι δεν δίνει βάρος, ή τουλάχιστον πως οι περισσότεροι μαθητές θα το εκλάβουν έτσι.

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

Τέλος πάντων εκτός του ότι δεν το θεωρώ τόσο σημαντικό θέμα, εφόσον η λογική του αλγορίθμου είναι σωστή, είναι τέτοια η κατανομή της βαθμολογίας που γίνεται που είναι δύσκολο να κόψεις μια ολόκληρη μονάδα από κάτι τέτοιο.
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: vasiko στις 19 Ιαν 2013, 05:25:38 ΜΜ
Συμφωνώ evry, ευχαριστώ πολύ.
Τίτλος: Απ: ΚΟΒΟΥΜΕ Η ΔΕΝ ΚΟΒΟΥΜΕ;
Αποστολή από: gthal στις 20 Ιαν 2013, 10:21:17 ΠΜ
Κι εγώ επισημαίνω στους μαθητές τα δύο αυτά λογικά λάθη αλλά βαθμολογικά τα αντιμετωπίζω όπως ο evry.
Στο ένα χαρίζομαι, στο άλλο όχι.