Αποστολέας Θέμα: Περιττές συνθήκες  (Αναγνώστηκε 2947 φορές)

gpapargi

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2448
  • I 'm not young enough to know everything
Περιττές συνθήκες
« στις: 26 Οκτ 2006, 11:38:02 πμ »
Σχολικό βιβλίο σελίδα 171:

«Ένα συχνό λάθος που παρατηρείται στα προγράμματα είναι ο έλεγχος περιττών συνθηκών. Οι επιπλέον έλεγχοι αυξάνουν την πολυπλοκότητα του προγράμματος.

Στο προηγούμενο παράδειγμα για το οποίο θεωρούμε ότι η ποσότητα είναι θετικός αριθμός, ένα παράδειγμα περιττών ελέγχων είναι το ακόλουθο:

ΑΝ Ποσότητα =<50 ΤΟΤΕ
   Κόστος <- Ποσότητα * 580
 ΑΛΛΙΩΣ_ΑΝ Ποσότητα > 50 ΚΑΙ Ποσότητα =<100 ΤΟΤΕ
   Κόστος <- Ποσότητα * 520
ΑΛΛΙΩΣ_ΑΝ Ποσότητα > 100 ΚΑΙ Ποσότητα =<200 ΤΟΤΕ
   Κόστος <- Ποσότητα * 470
ΑΛΛΙΩΣ
   Κόστος <- Ποσότητα * 440
ΤΕΛΟΣ_ΑΝ                              »

Νωρίτερα αναφέρει την εκδοχή που δεν έχει περιττούς ελέγχους

ΑΝ Ποσότητα <=50 ΤΟΤΕ
   Κόστος <- Ποσότητα * 580
 ΑΛΛΙΩΣ_ΑΝ  Ποσότητα =<100 ΤΟΤΕ
   Κόστος <- Ποσότητα * 520
ΑΛΛΙΩΣ_ΑΝ  Ποσότητα =<200 ΤΟΤΕ
   Κόστος <- Ποσότητα * 470
ΑΛΛΙΩΣ
   Κόστος <- Ποσότητα * 440
ΤΕΛΟΣ_ΑΝ   

Διαφωνώ με αυτή την άποψη. Οι λόγοι είναι οι εξής:

Λόγος 1 (δυσανάγνωστος κώδικας)

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

Σκεφτείτε τι θα γινόταν αν είχαμε 10-20 περιπτώσεις και σε κάθε μια από αυτές είχε καμιά δεκαριά εντολές. Θα έπρεπε να κοιτάξεις κώδικα 3 σελίδων πριν για να καταλάβεις αν θα μπει μέσα σε αυτή που σε ενδιαφέρει ή όχι. Γενικά αυτό συμβαίνει όταν υπάρχουν επικαλυπτόμενες περιοχές μεταξύ των συνθηκών. Αντίθετα με διπλές συνθήκες χωρίς επικαλυπτόμενες περιοχές ο κώδικας είναι ευανάγνωστος. Κοιτάς μόνο μια γραμμή και καταλαβαίνεις αν μπαίνει μέσα ή όχι.

Λόγος 2 (πιθανότητα λάθους)

Αν κάποιος μαθητής θέλει να ελέγχει την είσοδο εύκολα μπορεί να βάλει σαν πρώτη συνθήκη
ΑΝ Ποσότητα >=0 και Ποσότητα <=50 ΤΟΤΕ
αφήνοντας τις άλλες όπως είναι και βάζοντας στο τέλος ένα
αλλιώς Εμφάνισε «λαθος δεδομένα»

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

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

Λόγος 3 (ταχύτητα)

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

Επίσης τεράστιο παράπτωμα είναι το να αλλάζεις την αλγοριθμική τάξη πχ κάνοντας πλήρη ταξινόμηση για να βρεις 1, 2, 3 πρώτους κλπ.

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

Πέρα από αυτό, οι διπλές συνθήκες μπορεί να δώσουν και μεγαλύτερη ταχύτητα διότι επιτρέπουν στον προγραμματιστή να αλλάξει τη σειρά των συνθηκών. Πχ αν έχεις να χαρακτηρίσεις τα αποτελέσματα κάποιων ανθρώπων σε ένα τεστ IQ με άριστα το 160, ξέρεις εκ των προτέρων  ότι θα είναι περισσότεροι αυτοί που είναι στο διάστημα 70-90 από ότι στο διάστημα 0-20. ʼρα για να μειώσεις τους ελέγχους συμφέρει να βάλεις στην αρχή τη συνθήκη που είναι πιο πιθανό να ικανοποιηθεί. Και τις πιο απίθανες περιπτώσεις να τις αφήσεις για το τέλος. Στις μονές συνθήκες δεν μπορείς να αλλάξεις σειρά.

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

Θα ήθελα να ακούσω απόψεις πάνω σε αυτά που έγραψα.

nikosx

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 360
  • ___
Απ: Περιττές συνθήκες
« Απάντηση #1 στις: 26 Οκτ 2006, 02:00:06 μμ »
Καλησπέρα σε όλους,

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

Δηλαδή κατά την άποψή μου οι μαθητές πρέπει να θεωρούν σωστούς και τους δύο τρόπους να έχουν κατανοήσει τις διαφορές και τις ομοιότητες και ανάλογα να χρησιμοποιούν ελεύθερα όποιον τρόπο θέλουν.
Νίκος Ξένος
nkxenos@yahoo.gr

ipoulis

  • ΚΕΠΛΗΝΕΤ
  • *
  • Μηνύματα: 56
  • Dum spiro spero
Απ: Περιττές συνθήκες
« Απάντηση #2 στις: 27 Ιαν 2008, 01:05:47 πμ »
Καλησπέρα
συμφωνώ ότι αν μια λύση "τρέχει" έστω και με όχι τόσο ορθόδοξο τρόπο δεν κόβονται μόρια
αλλά μετράει στη συνολική παρουσία.
Στην πράξη και στη διόρθωση τι γίνεται?
Το συναντήσατε και στα πχ πόσο κόψατε.
Πάντως μπορεί οι λύσεις να μην είναι πάντα οι καλύτερες (κατά εμάς που έχουμε προγραμματίσει)
αλλά πρέπει να ομολογήσω ότι πολλές φορές η πρωτοτυπία τους είναι αξιομνημόνευτη
(έστω και αν δεν πάνε όπως θα θέλαμε).
Μην είμαστε τόσο απόλυτοι.
Άλλωστε αυτό δίνει και ένα ενδιαφέρον!!
Θα αναφέρω ένα πχ μαθητή μου πριν χρόνια στην εμφάνιση των 3 πρώτων σε Μον Πίνακα
με θετικά μόνο στοιχεία
(τελευταίο ερώτημα της άσκησης)
Αναζητούμε τον μαξ και μόλις τον βρούμε τον εμφανίζουμε και βάζουμε στη θέση του 0.
Το κάνουμε 3 φορές συνολικά.
Πλάκα είχε. Αν και χαλάει ο πίνακας είναι σαφώς πιο γρήγορος από ταξινόμηση.
(Ας μην μιλήσω για το πόσο έξυπνη και με μη περιττα βήματα είναι η ταξ του Βιβλίου)

Καληνύχτα


gpapargi

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2448
  • I 'm not young enough to know everything
Απ: Περιττές συνθήκες
« Απάντηση #3 στις: 28 Ιαν 2008, 08:33:42 πμ »
Για να μη γράφουμε σε 2 σημεία τα ίδια πράγματα προτίμησα να γράψω σχετικά στο παρακάτω link που είναι η κουβέντα ξεκίνησε πιο πρόσφατα
http://alkisg.mysch.gr/steki/index.php?topic=1199.msg7936#msg7936