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

Ξεκίνησε από Νίκος Αδαμόπουλος, 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 τότε
   Εμφάνισε "Ωραία"
Αλλιώς
   Εμφάνισε "Άσχημα"
Τέλος_αν

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

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

#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

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