Περιττές ή λανθασμένες συνθήκες

Ξεκίνησε από Νίκος Αδαμόπουλος, 03 Σεπ 2009, 01:14:23 ΜΜ

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

Νίκος Αδαμόπουλος

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

α) >=0 και <=10 ...
β) >=11 και <=20 ...
γ) >=21 και <=30 ...
δ) >=31

....
Η άσκηση δε ζητάει έλεγχο εγκυρότητας των δεδομένων εισόδου. Αρκετά συνηθισμένες είναι οι παρακάτω 2 λύσεις:

Α ΛΥΣΗ

Διάβασε α
Αν α<=10 τότε
  ...
αλλιώς_αν α<=20 τότε
  ...
αλλιώς_αν α<=30 τότε
  ...
αλλιώς
  ...
Τέλος_αν

Β ΛΥΣΗ

Διάβασε α
Αν α>=0 και α<=10 τότε
  ...
αλλιώς_αν α<=20 τότε
  ...
αλλιώς_αν α<=30 τότε
  ...
αλλιώς
  ...
Τέλος_αν


Ποια είναι η σωστή;

ntzios kostas

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

potato

#2
Σωστή είναι η Β.
Τώρα αν θα πάρουν και οι 2 όλους τους βαθμούς ..... νομίζω ότι αν ανοιχτεί κουβέντα με επιχειρήματα θα φτάσουμε για άλλη μια φορά στα αφηρημένα θεμέλια του μαθήματος και κατεπέκταση αδυνατεί να δώσει σαφείς απαντήσεις σε ορισμένα θέματα.


Edit: Ωπ, έχει δίκιο ο κ.Παναγιώτης από κάτω.. είχε διπλή συνθήκη στο πρώτο και νόμιζα ότι είχε βάλει σε όλα :p
Be open source. Knowledge belongs to the world.

P.Tsiotakis

Η β είναι το ίδιο λάθος με την α.

Αν δοθεί αρνητικός αριθμός τότε θα μπει στη δεύτερη περίπτωση.

Θεωρώ όμως πως αφού ΔΕΝ απαιτείται έλεγχοςείναι ΣΩΣΤΕΣ και οι δυο

Laertis

Αποκλείοντας αρνητικούς αριθμούς είναι σωστές και οι δύο, διαφορετικά είναι λάθος και οι δύο
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

Νίκος Αδαμόπουλος

Παράθεση από: Τσιωτάκης Παναγιώτης στις 03 Σεπ 2009, 02:31:30 ΜΜ
Η β είναι το ίδιο λάθος με την α.

Αν δοθεί αρνητικός αριθμός τότε θα μπει στη δεύτερη περίπτωση.

Άρα στη 2η λύση η συνθήκη α>=0 είναι περιττή, αφού έτσι κι αλλιώς (είτε με θετικούς είτε με αρνητικούς αριθμούς) δεν εξυπηρετεί σε τίποτα... Επομένως εγώ θεωρώ την 1η λύση πιο σωστή!

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

Υποστηρίζω την άποψη ότι το α >= 0 είναι περιττή συνθήκη. Εδώ απαιτείται το γνωστό ξεκαθάρισμα. Αφού δεν ζητείται έλεγχος εγκυρότητας, το πλήθος των αυγών (αφού μιλάμε για αυγά) είναι σίγουρα μη αρνητικό.

Μαθητής: "...και αν κύριε δοθεί αρνητικό πλήθος;"
Καθηγητης "...θα το μάθεις στο επόμενο κεφάλαιο! Αμάν με τις ερωτήσεις σου..." Παιδαγωγικά ορθό έτσι;

ΣΔ

ntzios kostas

Ναι είναι περιττή αλλά όχι λάθος.

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

gpapargi

Δεν έχω καταλάβει αν το θέμα είναι το «αν θεωρούμε λάθος τις περιττές συνθήκες» ή το «αν η β λύση έχει περιττή συνθήκη».

Στο ερώτημα «αν θεωρούμε λάθος τις περιττές συνθήκες» έχω γράψει παλαιότερα αυτά:
https://alkisg.mysch.gr/steki/index.php?topic=674.0

Εδώ δεν μπορούμε να κόψουμε βαθμούς στην εύρεση μεγίστου με πλήρη ταξινόμηση (που αν σε μου ξέφυγε κάτι ελέγχει (ν^2-3ν+2)/2 παραπάνω συνθήκες). Θα ασχοληθούμε με τη 1 μόνο παραπάνω συνθήκη;

Στο αν η β λύση έχει περιττή συνθήκη … δεν ξέρω τι σημαίνει περιττή.
ΟΚ… έχει μια παραπάνω από τη λύση α.
Και η λύση α έχει πολλές παραπάνω συνθήκες σε σχέση με το να πετάξεις τα άκρα των διαστημάτων σε πίνακα και να κάνεις δυαδική αναζήτηση ή διάφορα άλλα κόλπα με div/mod που μπορώ να σκεφτώ ανάλογα με το παράδειγμα.

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

https://alkisg.mysch.gr/steki/index.php?topic=988.0

Αλλά η μια συνθήκη παραπάνω για μένα δεν υπάρχει σα θέμα. Διυλίζουμε τον κώνωπα και καταπίνουμε την κάμηλο.

Νίκος Αδαμόπουλος

#9
Προφανώς δεν είναι το θέμα αν μπήκε μια περιττή συνθήκη αλλά αν ο μαθητής καταλαβαίνει γιατί κάνει αυτό που κάνει. Ένας μαθητής βάζοντας το α>=0 μπορεί να πιστεύει ότι έχει εξασφαλιστεί από τους αρνητικούς αριθμούς, πράγμα που όμως δεν συμβαίνει... Το ότι τελικά δεν θα προκύψουν αρνητικοί αριθμοί, και άρα κατά την εκτέλεση ο μαθητής δεν πρόκειται να δει την συνθήκη αυτή να αλλάζει τη ροή του αλγορίθμου (γίνεται αλλά με λάθος τρόπο βέβαια αφού θα τον έριχνε στη 2η περίπτωση: >=11 και <=20) δε σημαίνει ότι δεν υπάρχει και πρόβλημα.

Δηλαδή, εγώ λέω ότι:
α) η 1η λύση είναι σωστή αφού συνειδητά βασίζεται στην (σιωπηλή) υπόθεση ότι δεν θα προκύψουν αρνητικοί αριθμοί, άρα η λύση είναι και τίμια!!!
β) η 2η λύση είναι σωστή μεν, αλλά κατά τύχη, αφού πράγματι τελικά δεν θα προκύψουν αρνητικοί αριθμοί! Όμως ο δημιουργός της είναι φως φανάρι ότι δε βασίζεται στην υπόθεση αυτή. Μάλλον θέλει να μας δείξει ότι εξετάζει και την πιθανότητα των αρνητικών αριθμών, μόνο που ατύχησε!!! Ή ακόμα χειρότερα, μπορεί κάποιος να του είπε ότι σε τέτοια πινακάκια, από την 2η περίπτωση και μετά δεν θα βάζει τον 1ο έλεγχο, και στην τελευταία περίπτωση θα βάζει σκέτο το αλλιώς, αφού ο βαθμολογητής μπορεί και να κόψει, και μπορεί να μην έχει καταλάβει τίποτα!!

Το ότι δυο οδηγοί που έχουν πράσινο φανάρι σε μια διασταύρωση, και ο πρώτος απλά περνάει ψιλοπροσέχοντας μήπως του πεταχτεί κανένας από το κόκκινο, ενώ ο δεύτερος σταματάει ελέγχει κανονικά σαν να είχε στοπ και μετά ξεκινάει ξανά, δε σημαίνει ότι και οι δύο είναι σωστοί οδηγοί αφού τελικά δεν έγινε κανένα τρακάρισμα!

Νίκος Αδαμόπουλος

Παράθεση από: gpapargi στις 04 Σεπ 2009, 10:57:35 ΠΜ
Δεν έχω καταλάβει αν το θέμα είναι το «αν θεωρούμε λάθος τις περιττές συνθήκες» ή το «αν η β λύση έχει περιττή συνθήκη».

Παράθεση από: Νίκος Αδαμόπουλος στις 05 Σεπ 2009, 10:36:11 ΠΜ
Προφανώς δεν είναι το θέμα αν μπήκε μια περιττή συνθήκη αλλά αν ο μαθητής καταλαβαίνει γιατί κάνει αυτό που κάνει.

Και για να είμαι ακόμα πιο σαφής, δεν θεωρώ τη συνθήκη α>=0 περιττή (οπότε λίγο είναι το κακό) αλλά λανθασμένη! Λαμβάνει υπόψη την πιθανότητα ύπαρξης αρνητικών αριθμών για να οδηγήσει τη ροή του αλγορίθμου σε λάθος σημείο! Για αυτό και έβαλα τον συγκεκριμένο τίτλο σε αυτό το θέμα...

gpapargi

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

Το θέμα που θίγεις το έχω εντοπίσει και εγώ. Πρέπει όμως να το εξετάσεις με τρόπο που να μην μπορεί ο μαθητής να πει κάτι. Πέρυσι είχα προτείνει στην ομάδα διαγωνισμάτων το εξής θέμα (το οποίο δεν επιλέχτηκε και μένει στο pool):

«Ο παρακάτω αλγόριθμος φτιάχτηκε για να ελέγχει και να εκτυπώνει αν ένας θετικός ακέραιες αριθμός είναι μονοψήφιος, διψήφιος ή τριψήφιος. Στην περίπτωση που δοθεί αριθμός αρνητικός ή με περισσότερα από 3 ψηφία ο αλγόριθμος πρέπει να εμφανίζει το μήνυμα «Λάθος δεδομένα».

Αλγόριθμος ψηφία
Διάβασε x
Αν x>=0 και x=< 10 τότε
  Εμφάνισε «Μονοψήφιος»
Αλλιώς_αν x<100 τότε
  Εμφάνισε «Διψήφιος»
Αλλιώς_αν x<1000 τότε
  Εμφάνισε «Τριψήφιος»
Αλλιώς
  Εμφάνισε «Λάθος δεδομένα»
Τέλος_αν
Τέλος ψηφία

Ο παραπάνω αλγόριθμος έχει λάθος. Δώστε ένα παράδειγμα εισόδου που θα δώσει καταδείξει το λάθος που υπάρχει στον αλγόριθμο. Στη συνέχεια γράψτε το σωστό αλγόριθμο»

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

Νίκος Αδαμόπουλος


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

Δείτε τρία παραδείγματα ασκήσεων:

* Ένα κατάστημα διαθέτει διαφορετικά προϊόντα κωδικοποιημένα με ακέραιους αριθμούς από το 1 μέχρι το 400. Κατά την περίοδο των εκπτώσεων αποφασίζει να κάνει εκπτώσεις σύμφωνα με τον παρακάτω πίνακα. Να αναπτύξετε αλγόριθμο ο οποίος θα διαβάζει τον ακέραιο κωδικό ενός προϊόντος και την τιμή του και ανάλογα με τον πίνακα θα υπολογίζει και θα εμφανίζει την τιμή με έκπτωση. Θεωρήστε ότι ο κωδικός του προϊόντος μπορεί να λάβει τιμές από το 1 μέχρι το 400.

Κωδικός   Έκπτωση
1 - 100   12%
101 - 200   10%
201 - 300   8%
301 - 400   5%

* Ένα κατάστημα διαθέτει διαφορετικά προϊόντα κωδικοποιημένα με ακέραιους αριθμούς. Κατά την περίοδο των εκπτώσεων αποφασίζει να κάνει εκπτώσεις σύμφωνα με τον παρακάτω πίνακα. Να αναπτύξετε αλγόριθμο ο οποίος θα διαβάζει τον ακέραιο κωδικό ενός προϊόντος και αν υπάρχει θα διαβάζει την τιμή του. Ανάλογα με τον πίνακα θα υπολογίζει και θα εμφανίζει την τιμή με έκπτωση. Αν δοθεί κωδικός άλλος εκτός των αναφερομένων στον πίνακα κωδικών, θα εμφανίζει το μήνυμα: Δεν υπάρχει.

ΚωδικόςΈκπτωση
1 - 10012%
200 - 30010%
400 - 6008%
601 - 9995%

* Ένα κατάστημα διαθέτει διαφορετικά προϊόντα κωδικοποιημένα με ακέραιους αριθμούς. Κατά την περίοδο των εκπτώσεων αποφασίζει να κάνει εκπτώσεις σύμφωνα με τον παρακάτω πίνακα. Να αναπτύξετε αλγόριθμο ο οποίος θα διαβάζει τον ακέραιο κωδικό ενός προϊόντος και την τιμή του προϊόντος. Ανάλογα με τον πίνακα θα υπολογίζει και θα εμφανίζει την τιμή με έκπτωση. Αν δοθεί κωδικός άλλος εκτός των αναφερομένων στον πίνακα κωδικών, θα εμφανίζει το μήνυμα: Δεν υπάρχει.

ΚωδικόςΈκπτωση
1 - 10012%
200 - 30010%
400 - 6008%
601 - 9995%

όπου μάλιστα η τρίτη άσκηση κατά τη γνώμη έχει αμφισβητήσιμη εκφώνηση, αφού προτρέπει τον επίδοξο λύτη να διαβάσει τον ακέραιο κωδικό ενός προϊόντος και την τιμή του προϊόντος, χωρίς να έχει λάβει υπόψη ότι ο κωδικός μπορεί να μην υπάρχει. Σε αυτή την περίπτωση δεν έχει ουσιαστικά νόημα να διαβαστεί τιμή προϊόντος. Αντίθετα μάλιστα η τιμή προϊνότος θα πρέπει να διαβάζεται, αν υπάρχει ο κωδικός (Άσκηση 2).

ΣΔ

P.Tsiotakis

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

Στην κωδικοποίηση:

Αν  α> 1 ή α < 5 τότε
   Εμφάνισε "Ωραία"
Αλλιώς
   Εμφάνισε "Άσχημα"
Τέλος_αν

που προφανώς δε θα μπει ποτέ στο αλλιώς, θα πούμε οτι έχει λάθος;