Έλεγχοι περιττών συνθηκών στη δομή ΑΝ

Ξεκίνησε από Wizard, 14 Οκτ 2008, 05:30:47 ΜΜ

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

Wizard

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

Laertis

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

P.Tsiotakis


nikosx

και εγώ ρε παιδιά δεν έχω ακούσει να κόβουν για τους περιττούς ελέγχους
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

bagelis


dkotanid

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

tsak

Θα ήταν απαράδεκτο να έκοβε κάποιος μονάδες γι' αυτό το ζήτημα.Από τη στιγμή που δεν υπάρχει κανένα συντακτικό λάθος δεν καταλαβαίνω το λόγο που έχει κάποιος να κόψει μονάδες.Διαφωνώ δηλαδή ακόμη και με την πρόταση του βιβλίου (ένα συχνό λάθος είναι...) και δημιουργεί σύγχυση και στα παιδιά. Περιττοί είναι οι αυτοί οι έλεγχοι αλλά όχι και λανθασμένοι.

andreas_p

Διακρίνω μια άκαμπτη , απόλυτη στάση.

Δηλαδή  διαφωνείτε και με το σχετικό θέμα (Επαναληπτικές)

για την εύρεση και απαλοιφή των περιττών συνθηκών;

Αν δεν βρείτε ποιο έτος είναι τα θέματα , απαντήστε μου.

Ανδρέας

nikosx

καλο είναι κάποιος να έχει καταλάβει πλήρως τον τρόπο λειτουργίας της πολλαπλής επιλογής και έτσι να ξέρει γιατί αυτές οι περιττές συνθήκες είναι περιττές, δηλαδή δε διαφωνώ τελείως με εκείνο το θέμα (αλλά οχι και οτι μου άρεσε ιδιαίτερα). Το να κόψεις μονάδες όμως στην περίπτωση που κάποιος τις χρησιμοποιήσει φαίνεται βαρύ.
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

tsak

Το θέμα των επαναληπτικών του 2006 (φαντάζομαι αυτό εννοείτε) είναι ένα αξιολογότατο θέμα που θέλει μετατροπή του τμήματος αυτού χωρίς την ύπαρξη των περιττών ελέγχων. Δεν λέει διορθώστε τα λάθη που υπάρχουν στο τμήμα που σας δίνεται. Και δεν αντιλαμβάνομαι τι σχέση μπορεί να έχει το θέμα αυτό με το αν είναι ΛΑΘΟΣ και θα ΚΟΠΟΥΝ μονάδες από ένα μαθητή που κάνει χρήση περιττών ελέγχων.
Γνώμη δικιά μου είναι ότι το βιβλίο θα έπρεπε να διατυπώσει την πρόταση του κεφαλαίου 8 που συζητάμε λίγο διαφορετικά. Δηλαδή να δώσει στο μαθητή να καταλάβει ποιος είναι ο πιο δόκιμος, συντομότερος, κομψότερος, ορθότερος (ή όπως θέλετε χαρακτηρίστε το) τρόπος, αλλά όχι ότι είναι ΛΑΘΟΣ. Ας μου εξηγήσει κάποιος αν υπάρχει κάποιο συντακτικό ή λογικό λάθος σε ένα περιττό έλεγχο. Ή μήπως αυξάνεται η πολυπλοκότητα της λύσης; Ούτε αυτό μου φαίνεται λογικό.

Διότι τότε κάτι ανάλογο θα έπρεπε τότε να ισχύει και στην περίπτωση των εμφωλευμένων Αν, για τα οποία λέει το βιβλίο στη σελίδα 177:

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

Τώρα σας πάω σε άλλο θέμα, αλλά θέλω να εξηγήσω μ' αυτό τον τρόπο ότι άλλο το εναλλακτικό και άλλο το λανθασμένο.

dkotanid

Να το ξαναγράψετε παραλείποντας τους περιττούς ελέγχους.

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

evry


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

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

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

Κώδικας: ΓΛΩΣΣΑ
ΑΝ Χ < 0 ΤΟΤΕ
   ΓΡΑΨΕ 'ΑΡΝΗΤΙΚΟΣ'
ΑΛΛΙΩΣ_ΑΝ Χ>=0 ΚΑΙ Χ<10 ΤΟΤΕ
   ΓΡΑΨΕ 'ΜΟΝΑΔΕΣ'
ΑΛΛΙΩΣ_ΑΝ Χ>=10 ΚΑΙ Χ<100 ΤΟΤΕ
   ΓΡΑΨΕ 'ΔΕΚΑΔΕΣ'
ΑΛΛΙΩΣ_ΑΝ Χ>=100
   ΓΡΑΨΕ 'ΜΕΓΑΛΟΣ ΑΡΙΘΜΟΣ'
ΤΕΛΟΣ_ΑΝ


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

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

Κώδικας: ΓΛΩΣΣΑ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
   ΔΙΑΒΑΣΕ Α
   Σ <- Σ + Α
   ΑΝ Σ > 1000 ΤΟΤΕ
       i <- 101
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Η αντιμετώπιση και των 2 παραπάνω θεμάτων που θεωρώ πολύ σοβαρά πρέπει να γίνεται με ενιαία λογική. Όποιος πιστεύει ότι οι περιττοί έλεγχοι δεν είναι λάθος είναι υποχρεωμένος να συμφωνήσει ότι και το παραπάνω τμήμα αλγορίθμου με τη Για δεν είναι λάθος. Δηλαδή αν επιτρέπουμε "κακή" χρήση της Αλλιώς_Αν είμαστε υποχρεωμένοι να επιτρέψουμε και την κακή χρήση της  "Για..Από..Μέχρι"
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

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

Η δομή Για δημιουργήθηκε για την εκτέλεση βρόχων με γνωστό πλήθος επαναλήψεων. Πλήθος που μπορεί να φανεί από την πρώτη γραμμή του Για. Αν το πλήθος των επαναλήψεων είναι άγνωστο, τότε δεν μπορεί να χρησιμοποιηθεί η δομή Για.

evry


Με το ίδιο σκεπτικό και η δομή Αλλιώς_Αν έχει δημιουργηθεί για να διερευνά συνθήκες έτσι ώστε να μην χρειαστεί να ελέγχει όλες τις περιπτώσεις και να μην κάνει περιττούς ελέγχους. Άρα δε μπορείς να χρησιμοποιείς την Αλλιώς_Αν και να έχεις περιττούς ελέγχους.
Το ίδιο σκεπτικό ισχύει και για τη Για. Επίσης η αλλαγή του μετρητή μέσα στη Για δεν έχω καταλάβει ακόμα σε τι κατηγορία λάθους εμπίπτει, δηλαδή είναι συντακτικό ή λογικό?
   Σε περίπτωση λογικού λάθους σημαίνει ότι ο αλγόριθμος θα πρέπει να βγάζει κάποιο λάθος αποτέλεσμα, το οποίο δεν ισχύει.
Να είναι συντακτικό λάθος δε νομίζω γιατί δεν παραβιάζει τη σύνταξη της Για. Επίσης δε νομίζω ότι είναι λάθος που μπορεί εύκολα να το πιάσει κάποιος σε compile-time.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ntzios kostas

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

s:=0
for i:=1 to 10 do begin
   read(x);
   s:=s+x;
   if s>10 then
       i:=11;
end

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

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