Απορια συντακτικου-λογικου λαθους

Ξεκίνησε από soutan, 23 Μαΐου 2018, 01:22:41 ΠΜ

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

soutan

Καλησπερα σε ολους,
Θα ηθελα να με βοηθησετε στο εξης:

Για Ι απο 1 μεχρι 10
   Διαβασε Χ
   Σ <- Σ+Χ
Τελος_επαναληψης

Η μη αρχικοποιηση του αθροιστη αποτελει συντακτικο ή λογικο λαθος και γιατι;
Ποιο κριτηριο παραβιαζεται;

Ευχαριστω εκ των προτερων,
Γιωργος

pvs

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

Κωστας τζιαννης

καθαρα συντακτικο λαθος αφου οταν μια μεταβλητη δεν αρχικοποιειται το προγραμμα δεν μπορει να τρεξει και μαλιστα θα επισημανει και το λαθος.

Λαμπράκης Μανώλης

Καλημέρα σε όλους

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

pgrontas

Είναι ξεκάθαρα λογικό λάθος αφού παραβιάζεται το κριτήριο της καθοριστικότητας.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Κωστας τζιαννης

λογικο λαθος ειναι κατι που δεν εμποδιζει το προγραμμα να τρεξει αλλα δεν λυνει σωστα το προβλημα που εχεις.πχ αν μου ζηταει ενα ερωτημα να βρω το μεσο ορο των βαθμων σε 10 μαθηματα και εγω κανω μο<-αθροισμα*10 αντι για μο<-αθροισμα/10 τοτε αυτο ειναι λογικο λαθος.το προγραμμα θα τρεξει κανονικα αλλα δεν θα μου βγαλει τη λυση που θελω.οταν δεν αρχικοποιειται μια μεταβλητη ειναι σαν να ξεχασω να την δηλωσω η σαν να κανω διαιρεση με το 0.δεν δινω δηλαδη τα σωστα εργαλεια στο προγραμμα μου για να τρεξει .οποτε ειναι ξεκαθαρα συντακτικο λαθος

Κωστας τζιαννης

Παράθεση από: pgrontas στις 23 Μαΐου 2018, 09:04:31 ΠΜ
Είναι ξεκάθαρα λογικό λάθος αφού παραβιάζεται το κριτήριο της καθοριστικότητας.
συντακτικο εννοεις

pgrontas

Παράθεση από: Κωστας τζιαννης στις 23 Μαΐου 2018, 09:22:59 ΠΜ
συντακτικο εννοεις
Εννοώ λογικό.
Ποιος συντακτικός κανόνας παραβιάζεται;

Παράθεση από: Κωστας τζιαννης στις 23 Μαΐου 2018, 09:17:23 ΠΜ
λογικο λαθος ειναι κατι που δεν εμποδιζει το προγραμμα να τρεξει αλλα δεν λυνει σωστα το προβλημα που εχεις.πχ αν μου ζηταει ενα ερωτημα να βρω το μεσο ορο των βαθμων σε 10 μαθηματα και εγω κανω μο<-αθροισμα*10 αντι για μο<-αθροισμα/10 τοτε αυτο ειναι λογικο λαθος.το προγραμμα θα τρεξει κανονικα αλλα δεν θα μου βγαλει τη λυση που θελω.οταν δεν αρχικοποιειται μια μεταβλητη ειναι σαν να ξεχασω να την δηλωσω η σαν να κανω διαιρεση με το 0.δεν δινω δηλαδη τα σωστα εργαλεια στο προγραμμα μου για να τρεξει .οποτε ειναι ξεκαθαρα συντακτικο λαθος
Με βαση την σκέψη σου η διαιρεση με το μηδεν ειναι συνταντικό λάθος;;;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Κωστας τζιαννης

αντιγραφω απο το βιβλιο
Λογικά λάθη

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

Η ανίχνευση τέτοιων λαθών δεν είναι δυνατό να πραγματοποιηθεί από κάποιο εργαλείο του υπολογιστή και διαπιστώνονται μόνο με τη διαδικασία ελέγχου (testing) και την ανάλυση των αποτελεσμάτων των προγραμμάτων.

οταν δεν εχεις αρχικοποιησει μια μεταβλητη το προγραμμα διακοπτεται και επισημαινει το λαθος μπορεις να το δοκιμασεις ακομα και στη γλωσσομαθεια.η διαιρεση με το 0 φυσικα και ειναι συντακτικο λαθος

pgrontas

Κατά την εκτέλεση δεν γίνεται η διακοπή και στις δύο περιπτώσεις;

Δηλαδή μου λες ότι ο μεταγλωττιστής μπορεί να εντοπίσει αν υπάρχει διαιρεση με το 0 ή μη αρχικοποίηση μεταβλητής πριν τρέξει το πρόγραμμα.
Συγχαρητήρια έλυσες το πρόβλημα του τερματισμού.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Κωστας τζιαννης

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

Λάθη κατά την υλοποίηση

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

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

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

Λάθη κατά την εκτέλεση

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

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

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

Λογικά λάθη

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

Η ανίχνευση τέτοιων λαθών δεν είναι δυνατό να πραγματοποιηθεί από κάποιο εργαλείο του υπολογιστή και διαπιστώνονται μόνο με τη διαδικασία ελέγχου (testing) και την ανάλυση των αποτελεσμάτων των προγραμμάτων.

στα λογικα ξεκαθαρα λεει"δεν ανιχνευει κανενα συντακτικο λαθος ΚΑΙ κατα την εκτελεση του προγραμματος ΔΕΝ παρουσιαζονται ανεπιθυμητες καταστασεις σφαλματων".την ωρα που παει να διαιρεσει με το 0 η να προσθεσει κατι χωρις να εχει αρχικοποιηθει βαραει σφαλμα αρα ΔΕΝ ΕΙΝΑΙ ΛΟΓΙΚΟ ΛΑΘΟΣ.

Κωστας τζιαννης

Παράθεση από: Κωστας τζιαννης στις 23 Μαΐου 2018, 09:41:23 ΠΜ
δεν νομιζω οτι ειρωνευτικα καποιον για να δεχομαι αυτη την ειρωνια αλλα το προσπερνω.δεν το αναγνωριζει απο πριν αλλα το αναγνωριζει κατα την εκτελεση.οταν υπαρχει λογικο λαθος δεν το αναγνωριζει ουτε κατα την εκτελεση ουτε ποτε.στελνω ολο το αποσπασμα
Σε ένα πρόγραμμα είναι δυνατό να παρουσιαστούν διαφορετικής μορφής λάθη, τα οποία μπορούν να χωριστούν σε τρεις βασικές κατηγορίες.

Λάθη κατά την υλοποίηση

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

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

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

Λάθη κατά την εκτέλεση

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

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

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

Λογικά λάθη

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

Η ανίχνευση τέτοιων λαθών δεν είναι δυνατό να πραγματοποιηθεί από κάποιο εργαλείο του υπολογιστή και διαπιστώνονται μόνο με τη διαδικασία ελέγχου (testing) και την ανάλυση των αποτελεσμάτων των προγραμμάτων.

στα λογικα ξεκαθαρα λεει"δεν ανιχνευει κανενα συντακτικο λαθος ΚΑΙ κατα την εκτελεση του προγραμματος ΔΕΝ παρουσιαζονται ανεπιθυμητες καταστασεις σφαλματων".την ωρα που παει να διαιρεσει με το 0 η να προσθεσει κατι χωρις να εχει αρχικοποιηθει βαραει σφαλμα αρα ΔΕΝ ΕΙΝΑΙ ΛΟΓΙΚΟ ΛΑΘΟΣ.οταν παραβιαζεται καποιο κριτηριο τοτε ειναι προφανες οτι ειναι συντακτικο λαθος γιατι κανουμε κατι που απαγορευεται!!!οταν ομως καποιος αντι για διαιρεση που πρεπει να κανει για να βρει το μεσο ορο  κανει πολλαπλασιασμο δεν απαγορευεται απλα ειναι λαθος

pgrontas

Αν δεν κάνω λάθος το απόσπασμα είναι εκτός ύλης. Επίσης δεν βλέπω να ορίζει τα συντακτικά λάθη. Άρα σύμφωνα με αυτό δεν υπάρχουν ( ; )

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

Από τα λάθη λοιπόν που αναφέρονται στο Κεφ. 6 είναι ξεκάθαρα λογικό λάθος.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Κωστας τζιαννης

εγω θυμαμαι οταν τα εκανα αυτα που πανε χρονια αναφερομασταν μονο σε συντακτικα και λογικα λαθη βαζοντας της 2 πρωτες κατηγοριες στα συντακτικα.το κριτηριο που παραβιαζεται ειναι αυτο της καθοριστικοτητας μιας και το Σ δεν εχει οριστει.μαλιστα ο διερμηνευτης που εκτελει και ελεγχει σειρα σειρα μπορει να το βρει.απο τη στιγμη λοιπον που ο υπολογιστης μας μπορει να βρει καποιο λαθος αυτο δεν ειναι λογικο και μπαινει στην κατηγορια των συντακτικων λαθων.ο υπολογιστης το πρωτο πραγμα που εμαθα απο το σχολειο μεχρι το πανεπιστημιο που εβγαλα ειναι οτι ειναι"χαζος" και δεν μπορει να αναγνωρισει λογικα λαθη.μη αναμενομενα αποτελεσματα ειναι πχ αν ο μεσος ορος οταν το αριστα ειναι το 20 να βγει 80 πχ.με τη μεθοδο της ατοπου απαγωγης λοιπον και αν υποθεσουμε οτι εχουμε μονο τις κατηγοριες λογικο,συντακτικο συμπεραινουμε πανευκολα οτι οταν κατι παραβιαζεται,οταν για κατι μας ενημερωνει ο υπολογιστης μας το οποιο ειναι συγκεκριμενο τοτε αυτο δεν ειναι λογικο λαθος.διαιρεση με το 0 δεν οριζεται και ακομα δεν μπορεις να αυξησεις κατι που δεν εχει οριστει που δεν εχει καθοριστει δηλαδη.αρα το κριτηριο της καθοριστικοτητας παραβιαζεται.τα λογικα λαθη δεν παραβιαζουν κριτηρια παρα μονο την κοινη λογικη.η διαιρεση με το 0 θα ηταν λογικο λαθος ισως 50 χρονια πριν που οι υπολογιστες δεν μπορουσαν να μας προειδοποιησουν για αυτο και επρεπε να το βρουμε μονοι μας.οτι βρισκει ο υπολογιστης δεν ανηκει στην κατηγορια του λογικου λαθους γιατι τοτε δεν θα μπορουσε να το βρει.

pgrontas

Μα δεν το βρίσκει ούτε το αναγνωρίζει!!! Το λάθος προκύπτει από αδυναμία εκτέλεσης της εντολής.
Άλλωστε τα κριτήρια των αλγορίθμων προκύπτουν από την κοινη λογική...
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson