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

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

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

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

#15
Παράθεση από: Τσιωτάκης Παναγιώτης στις 08 Σεπ 2009, 04:02:59 ΜΜ
Κατά τη γνώμη μου "λανθασμένη" σημαίνει πως πραγματοποιεί λάθος ενέργειες ή οδηγεί σε λάθος έξοδο.
Αν δε συμβαίνουν αυτά, ακόμα και αν φαίνεται πως ο μαθητής έχει παρανόηση, πως θα στερηθούν μονάδες;

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

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

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

Από την αρχή δεν έθεσα το ζήτημα της στέρησης μονάδων - εντάξει ανάλογα και με την εικόνα της υπόλοιπης λύσης μάλλον δεν θα έκοβα. Ωστόσο στο παράδειγμα που παραθέτεις, για να πούμε αν έχει λάθος θα πρέπει να έχουμε τη διατύπωση του προβλήματος. Αν και για λάθος το βλέπω...  ::)

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

Σνάδελφοι, παραθέτω εκ νέου τις τρεις ασκήσεις, ώστε να σχολιάσουμε τις τρεις αυτές εκφωνήσεις και αν υπάρχει κίνδυνος παρανόησης για τους μαθητές και τις μαθήτριες, στα ζητήματα που έθεσε ο Νίκος!

Παράθεση από: sdoukakis στις 07 Σεπ 2009, 11:12:39 ΜΜ
Δείτε τρία παραδείγματα ασκήσεων:

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


ΚωδικόςΈκπτωση
1 - 10012%
101 - 20010%
201 - 3008%
301 - 4005%

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

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

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

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

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

ΣΔ

Λίτσα

Συγνώμη που ρωτώ, αλλά εν τέλει τί και πώς πρέπει να το διδάξουμε στα παιδιά; Τί είναι περισσότερο ασφαλές για αυτά, έτσι ώστε να μην αντιμετωπίσουν πρόβλημα στις εξετάσεις σε ένα τέτοιο θέμα; Υπάρχει κάποιος τρόπος απλός και κατανοητός; Γιατί μην ξεχνάμε , όλα τα παιδιά δεν είναι σαϊνια  ??? αλλά έχουν κι αυτά το δικαίωμα να πάρουν που λέμε "μυρωδιά" ;)
Εσείς όλοι που είστε , σίγουρα, πιο έμπειροι από μένα...μπορείτε να μου δώσετε τα φώτα σας; :-[ και επειδή με τα παραδείγματα, τα πράγματα γίνονται περισσότερο κατανοητά, μπορείτε να βρείτε κάποια που να καλύπτουν σωστά αυτό το θέμα; :(

nikolasmer

#18
Παράθεση από: Σπύρος Δουκάκης στις 11 Σεπ 2009, 12:05:57 ΠΜ
Σνάδελφοι, παραθέτω εκ νέου τις τρεις ασκήσεις, ώστε να σχολιάσουμε τις τρεις αυτές εκφωνήσεις και αν υπάρχει κίνδυνος παρανόησης για τους μαθητές και τις μαθήτριες, στα ζητήματα που έθεσε ο Νίκος!

Για να δώ τί κατάλαβα ή έχω παρανοήσει σε κάτι.

Αλγόριθμος Τεστ1
Διάβασε κωδ, τιμή
Αν κωδ ≤ 100 τότε
  εκπτ ← τιμή*0.12
αλλιώς_αν κωδ ≤ 200 τότε
  εκπτ ← τιμή*0.10
αλλιώς_αν κωδ ≤ 300 τότε
  εκπτ ← τιμή*0.08
αλλιώς_αν κωδ ≤ 400 τότε
  εκπτ ← τιμή*0.05
Τέλος_αν
τελική_τιμή ← τιμή - εκπτ
Εμφάνισε τελική_τιμή
Τέλος Τεστ1


Αλγόριθμος Τεστ2
Διάβασε κωδ
Αν κωδ ≥ 1 και κωδ ≤ 400 τότε
  Διάβασε τιμή
  Αν κωδ ≤ 100 τότε
    εκπτ ← τιμή*0.12
  αλλιώς_αν κωδ ≤ 200 τότε
    εκπτ ← τιμή*0.10
  αλλιώς_αν κωδ ≤ 300 τότε
    εκπτ ← τιμή*0.08
  αλλιώς_αν κωδ ≤ 400 τότε
    εκπτ ← τιμή*0.05
  Τέλος_αν
  τελική_τιμή ← τιμή - εκπτ
  Εμφάνισε τελική_τιμή
αλλιώς
  Εμφάνισε "Δεν υπάρχει"
Τέλος_αν
Τέλος Τεστ2

(Με την προϋπόθεση πως οι εμφωλευμένες δομές επιλογής δεν κάνουν πιο δυσνόητο τον κώδικα όπως αναφέρει το βιβλίο)

Για την τρίτη περίπτωση αν και είναι ασαφής εγώ θα έκανα:


Αλγόριθμος Τεστ3
Διάβασε κωδ, τιμή
Αν κωδ < 0 τότε
  Εμφάνισε "Δεν υπάρχει"
αλλιώς_αν κωδ ≤ 100 τότε
  εκπτ ← τιμή*0.12
  τελική_τιμή ← τιμή - εκπτ
  Εμφάνισε τελική_τιμή
αλλιώς_αν κωδ ≤ 200 τότε
  εκπτ ← τιμή*0.10
  τελική_τιμή ← τιμή - εκπτ
  Εμφάνισε τελική_τιμή
αλλιώς_αν κωδ ≤ 300 τότε
  εκπτ ← τιμή*0.08
  τελική_τιμή ← τιμή - εκπτ
  Εμφάνισε τελική_τιμή
αλλιώς_αν κωδ ≤ 400 τότε
  εκπτ ← τιμή*0.05
  τελική_τιμή ← τιμή - εκπτ
  Εμφάνισε τελική_τιμή
αλλιώς
  Εμφάνισε "Δεν υπάρχει"
Τέλος_αν
Τέλος Τεστ3

Βέβαια όπως είχε κάποτε πεί και ο κ. Δουκάκης , διαβάζετε τζάμπα και βερεσέ μια τιμή η οποία σε 2 εκ των περιπτώσεων δεν ζρησιμοποιείτε η τιμή της.
Επίσης εκείνο το διπλό "Δεν Υπάρχει " στη λύση μου μπορεί να μαζευτει σε ενα αλλά καταλήγουμε περισσότερο στην δεύτερη πιο πάνω λύση.
Αυτά 4 χρόνια μετά!! :)
Μερεντίτης Νικόλαος
Πληροφορικός

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

Αναφέρομαι στις 2 πρώτες λύσεις...

Στην 1η λύση, ο τελευταίος έλεγχος "αλλιώς_αν κωδ ≤ 400 τότε" είναι περιττός αφού η άσκηση έτσι κι αλλιώς αναφέρει "ότι ο κωδικός του προϊόντος μπορεί να λάβει τιμές από το 1 μέχρι το 400". Ακόμα κι αν, παρόλα αυτά, ο χρήστης δώσει τιμή μεγαλύτερη τιμή από 400, τότε ναι μεν η εκτέλεση δεν θα μπει καθόλου στην Αν, όμως έτσι θα είχαμε πρόβλημα παρακάτω στην εκτέλεση της εντολής "τελική_τιμή ← τιμή - εκπτ" όπου η μεταβλητή εκπτ θα είναι απροσδιόριστη.

Στην 2η λύση, ο ίδιος έλεγχος "αλλιώς_αν κωδ ≤ 400 τότε" πάλι είναι περιττός αφού πιο πάνω εξασφαλίζεται ότι ο κωδικός θα είναι από 1 έως 400 ("Αν κωδ ≥ 1 και κωδ ≤ 400 τότε")...

Και στις 2 παραπάνω περιπτώσεις μπορεί να μπει απλά ένα "αλλιώς"...

nikolasmer

Παράθεση από: Νίκος Αδαμόπουλος στις 17 Οκτ 2013, 10:22:50 ΜΜ
Αναφέρομαι στις 2 πρώτες λύσεις...

Στην 1η λύση, ο τελευταίος έλεγχος "αλλιώς_αν κωδ ≤ 400 τότε" είναι περιττός αφού η άσκηση έτσι κι αλλιώς αναφέρει "ότι ο κωδικός του προϊόντος μπορεί να λάβει τιμές από το 1 μέχρι το 400". Ακόμα κι αν, παρόλα αυτά, ο χρήστης δώσει τιμή μεγαλύτερη τιμή από 400, τότε ναι μεν η εκτέλεση δεν θα μπει καθόλου στην Αν, όμως έτσι θα είχαμε πρόβλημα παρακάτω στην εκτέλεση της εντολής "τελική_τιμή ← τιμή - εκπτ" όπου η μεταβλητή εκπτ θα είναι απροσδιόριστη.

Στην 2η λύση, ο ίδιος έλεγχος "αλλιώς_αν κωδ ≤ 400 τότε" πάλι είναι περιττός αφού πιο πάνω εξασφαλίζεται ότι ο κωδικός θα είναι από 1 έως 400 ("Αν κωδ ≥ 1 και κωδ ≤ 400 τότε")...

Και στις 2 παραπάνω περιπτώσεις μπορεί να μπει απλά ένα "αλλιώς"...

Ειλικρινά ευχαριστώ πάρα πολύ κ. Αδαμόπουλε για την ανάλυσή σας και τις παρατηρήσεις σας. Να είστε καλά.
Μερεντίτης Νικόλαος
Πληροφορικός

thCnd

Καλησπέρα,
θα ήθελα να ρωτήσω το εξής:πώς βαθμολογούνται στις πανελλήνιες οι περιττές συνθήκες;Στο σχολικό βιβλίο στη σελ.172 αναφέρει ότι είναι ένα συχνό λάθος ο έλεγχος περιττών συνθηκών. Έστω ότι ένας μαθητής στην αντίστοιχη άσκηση πολλαπλής επιλογής γράψει ως λύση το παράδειγμα της σελ.137 με τις περιττές συνθήκες, θα χάσει μονάδες ή όχι; Έχει βγει κάποια σχετική οδηγία/ διευκρίνηση;

programmer

μια απλή ασκηση με φυλακισμένους