Αποστολέας Θέμα: Λογικά λάθη και λάθη κατά την εκτέλεση  (Αναγνώστηκε 6635 φορές)

Wizard

  • Επισκέπτης
Λογικά λάθη και λάθη κατά την εκτέλεση
« στις: 10 Μάρ 2006, 05:38:45 μμ »
Γεια σας!
Από καιρό έψαχνα ένα τέτοιο forum και το βρήκα τώρα. Κάλλιο αργά παρά ποτέ λοιπόν!

Το βιβλίο στο 6ο κεφάλαιο αναφέρει 2 κατηγορίες λαθών, τα συντακτικά και τα λογικά λάθη. Δεν αναφέρει καθόλου τα λάθη κατά την εκτέλεση, που αναφέρονται στη σελ. 281, που είναι όμως εκτός ύλης.

Δηλαδή, αν έχουμε τις εντολές "ΔΙΑΒΑΣΕ x" και μετά "α <-- β / x" και ο χρήστης δώσει x=0, τι λέμε στα παιδιά, ότι είναι λογικό λάθος;


Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #1 στις: 10 Μάρ 2006, 09:26:48 μμ »

Παραβιάζεται η καθοριστικότητα, δεν έχουμε αλγόριθμο

Wizard

  • Επισκέπτης
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #2 στις: 10 Μάρ 2006, 11:08:54 μμ »
Ναι, αλλά στα πλαίσια ενός προγράμματος αυτό θεωρείται λάθος κατά την εκτέλεση, όπως αναφέρει και το βιβλίο στη σελ. 282 για τα λάθη κατά την εκτέλεση ("... η προσπάθεια διαίρεσης ενός αριθμού με το μηδέν,..."). Μήπως στην παράγραφο 6.7 τα λογικά λάθη περιλαμβάνουν και τα λάθη κατά την εκτέλεση;

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3059
  • to Iterate is human to Recurse divine
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #3 στις: 11 Μάρ 2006, 10:33:30 πμ »

   Αν θέλουμε να μιλήσουμε για λάθη κατά την εκτέλεση τότε θα πρέπει να μιλήσουμε και για λάθη κατά τη μεταγλώττιση, και για λάθη κατά τη σύνδεση. Δεν χρειάζεται να περιπλέκουμε τα πράγματα. Ούτε πρέπει να αντιμετωπίζουμε το βιβλίο σαν ευαγγέλιο και να πιστεύουμε κατά γράμμα ότι λέει.
     Τα λάθη που συμβαίνουν κατά την εκτέλεση προφανώς είναι λογικά. Αυτό πρέπει να ξέρουν οι μαθητές και τίποτα περισσότερο.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Wizard

  • Επισκέπτης
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #4 στις: 11 Μάρ 2006, 02:08:35 μμ »
Κι εγώ έτσι πιστεύω, απλώς ένας μαθητής το είχε διαβάσει από μόνος του στο 13ο κεφάλαιο και με ρώτησε. Ευχαριστώ!

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #5 στις: 11 Μάρ 2006, 10:01:24 μμ »

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

παραβιάζεται η καθοριστικότητα, άρα δεν υφίσταται αλγόριθμος


Πετροσ

  • Επισκέπτης
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #6 στις: 12 Μάρ 2006, 02:09:22 μμ »
Προφανώς και υφίσταται ο αλγόριθμος! Απλώς του δίνουμε λάθος δεδομένα ως είσοδο. Αυτό μπορεί να οφείλεται είτε σε λάθος του προγραμματιστή (που δεν ξεκαθαρίζει τι ζητά από τον χρήστη) είτε σε λάθος του χρήστη. Ειναι σαφέστατα λάθος κατα την εκτέλεση και αυτός είναι ο ρόλος του ελέγχου δεδομένων... Σε αυτές τις περιπτώσεις νόμίζω γίνετε σαφής ο διαχωρισμός του αλγορίθμου και της υλοποίησης του με τη μορφή προγράμματος υπολογιστή

vasiko

  • Βετεράνος
  • ****
  • Μηνύματα: 82
  • !!!!...!!!
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #7 στις: 12 Μάρ 2006, 05:22:15 μμ »
Θα συμφωνήσω με τον Παναγιώτη.
Σϋμφωνα με το βιβλίο που διδλασκουμε όταν παραβιάζεται η καθοριστικότητα δεν υφίσταται αλγόριθμος.

Πετρος

  • Επισκέπτης
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #8 στις: 12 Μάρ 2006, 06:38:49 μμ »
Αλγόριθμος α1
εμφάνισε 'δώσε ακέραιο διαφορο του 0:'
διαβασε Χ
Υ<--1/Χ
εμφάνισε Υ
Τελος α1

Για πείτε μου ποιο κριτήριο δεν πληροί ο παραπάνω αλγόριθμος? Η γνώμη μου είναι οτι πληρεί όλα τα αλγοριθμικά κριτήρια.

Βέβαια αν ο χρήστης δώσει 0 τότε θα δημιουργηθεί ενα σφάλμα κατα την εκτέλεση του προγράμματος. Αυτό δε σημαίνει ότι ο αλγόριθμος δεν εχει καθοριστικότητα.



Vangelis

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 784
  • Για ακούτε και κανένα μεγαλύτερο!!!
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #9 στις: 13 Μάρ 2006, 12:04:05 πμ »
Και  εγώ με την σειρά μου συμφωνώ με τον Πέτρο.  Σαφώς και υφίσταται  αλγόριθμος και απλά είναι λάθος η εισαγωγή δεδομένων.  Διαφορετικά θα έπρεπε σε κάθε πράξη να ελέγχουμε ένα σωρό πράγματα.  Σύμφωνα με τα λεγόμενα του Παναγιώτη και του/της vasiko  (δηλώστε φύλο βρε παιδιά να μην τα γράφουμε διπλά) η παρακάτω σειρά εντολών είναι αλγόριθμος
Διάβασε Χ
Αν Χ<> 0  τοτε
Υ <-- 1/Χ
Τέλος_αν

Η ερώτηση μου είναι τι θα γίνει αν ο χρήστης στο Διάβασε Χ δώσει όχι αριθμητική τιμή αλλα αλφαριθμητική π.χ το αβ
αυτόματα η εντολή 1/χ δεν ορίζεται άρα και το παραπάνω δεν είναι αλγόριθμος !


evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3059
  • to Iterate is human to Recurse divine
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #10 στις: 13 Μάρ 2006, 11:57:12 πμ »
Το τμήμα αλγορίθμου  που έδωσε ο vangelis δεν παραβιάζει την καθοριστικότητα

Κώδικας: [Επιλογή]
Διάβασε Χ
Αν Χ<> 0  τοτε
Υ <-- 1/Χ
Τέλος_αν

αλλά η παρακάτω υπολογιστική διαδικασία που έδωσε ο Πέτρος

Κώδικας: [Επιλογή]
εμφάνισε 'δώσε ακέραιο διαφορο του 0:'
διαβασε Χ
Υ<--1/Χ
εμφάνισε Υ

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

Όσον αφορά το πρόβλημα που είπε ο Βαγγέλης με τα αλφαριθμητικά μου θύμησε όταν μάθαινα προγραμματισμό σε pascal που όταν έδινες αντί για αριθμό κάποιο χαρακτήρα σου πέταγε ένα μεγαλοπρεπές runtime error.
   Αυτό όμως πιστεύω ότι είναι θέμα της γλώσσας προγραμματισμού. Για παράδειγμα στη C που όλοι οι χαρακτήρες μετατρέπονται στον αντίστοιχο ASCII κωδικό δεν θα είχαμε κανένα πρόβλημα.

Φυσικά το πρόβλημα είναι στη σημασιολογία.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4835
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #11 στις: 13 Μάρ 2006, 03:08:15 μμ »
Χωρίς να κάνω ερμηνεία, να προσθέσω στη συζήτηση το παράδειγμα της σελίδας 189 (ΠΡΟΓΡΑΜΜΑ Στατιστική), το οποίο δεν κάνει έλεγχο για μηδενική τιμή του Ν ενώ διαιρεί με το Ν. Στο πλάι της σελίδας αναφέρει απλά ότι δε γίνεται έλεγχος.

Vangelis

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 784
  • Για ακούτε και κανένα μεγαλύτερο!!!
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #12 στις: 13 Μάρ 2006, 03:59:23 μμ »
envy γράφεις
"Άλλο να δώσεις ένα μήνυμα και άλλο να εξασφαλίζεις ότι για όλες τις εισόδους ο αλγόριθμος τερματίζει. Είναι εντελώς  διαφορετικό πράγμα."   Μα και το δικό μου τμήμα αλγορίθμου δεν τερματίζει για όλες τις τιμές εισόδου.  ʼλλωστε το αναφέρεις παρακάτω με το runtime error!!
Πιστεύω ότι πρόβλημα καθοριστικότητας θα είχαμε αν ορίζαμε μια πράξη που δεν είναι καθορισμένο τι αποτέλεσμα έχει π.χ μια διάιρεση αλφαριθμητικών. Για παράδειγμα το τμήμα εντολών 

Διάβασε Χ
Υ <-- 1//Χ   
Εμφάνισε Χ

Σαφώς δεν αποτελεί αλγόριθμο αφού δεν υπάρχει πράξη // (ή τουλάχιτον δεν ξέρουμε τι αποτέλεσμα έχει).


Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #13 στις: 13 Μάρ 2006, 05:28:28 μμ »
Το οτι αναφέρει στη σελίδα 189 οτι δεν κάνει έλεγχο, σημαίνει οτι ΠΡΕΠΕΙ να κάνει έλεγχο και δεν κάνει γιατί η εστίαση της άσκησης είναι αλλού (μερικές φορές και το βιβλίο είναι αλλού).

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

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

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

Με εκτίμηση,

graeep

  • Νέος
  • *
  • Μηνύματα: 4
Απ: Λογικά λάθη και λάθη κατά την εκτέλεση
« Απάντηση #14 στις: 13 Μάρ 2006, 07:29:24 μμ »
Συμφωνώ με evry. Μην ορίζοντας τι θα συμβεί αν χ=0 δεν παραβιάζουμε απλά το κριτήριο της καθοριστικότητας, αλλα τον ίδιο τον ορισμό της διαίρεσης.
Μην ξεχνάμε επίσης ότι η διαίρεση είναι η πιο ελλειπώς υλοποιημένη βασική μαθηματική πράξη στους υπολογιστές.
Βέβαια δεν μπορώ να ισχυριστώ ότι ένας αλγόριθμος εκτελεί απαραίτητα επιστημονικά ορθές διαδικασίες. Είναι όμως απαραίτητο να καθορίζεται΄πλήρως η απόκρισή στις αναμενόμενες εισόδους.

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

Οι χαρακτήρες είναι μη αναμενόμενες είσοδοι για τη διαίρεση. Άρα αυτός ο έλεγχος ορθότητας δεδομένων δεν αφορά τον αλγόριθμο αλλά την προγραμματιστική του υλοποίηση.
Μήπως οι αλγόριθμοι που στηρίζονται στη μηχανή Turing, μας εγκλωβίζουν σε τοπικό μέγιστο στη συνάρτηση της εξέλιξης της Πληροφορικής; ;)