Μπορώ να... (πίνακες..)

Ξεκίνησε από WoCi, 09 Ιαν 2006, 01:22:24 ΜΜ

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

WoCi

Aν Β[ι] Πίνακας ακεραίων που έχει τιμές από 1 έως 12 ( ο Β[ι] )
και ο Α[1:12] . Μπορώ να γράψω κάπου μέσα στον κώδικα..

Β[ Α[ι] ] <-  Β[ Α[ι] ] + 1

ή και το ισοδύναμο

κ <- Α[ι]
Β[κ] <- Β[κ] + 1

ή πρέπει να γίνει με αν - αλλιώς_αν..

Εγώ λέω ότι και ο πρώτος τρόπος μπορεί να γίνει, απλά με προβλημάτισε..

alkisg

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

P.Tsiotakis

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

Για το ερώτημα που θέτεις, μπορούμε να ανατρέξουμε και στο κεφάλαιο 6: λογικά και συντακτικά λάθη

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

Πηγαίνω και σε ένα ακραίο παράδειγμα (πρωτότυπο για μένα):

...
α <- -5
... ! δεν αλλάζει το α εδώ
Εκτύπωσε ΠΙΝΑΚΑΣ[α]

Το παραπάνω είναι λογικό λάθος (δηλαδή μπορεί να γραφτεί αλλά δεν μπορεί να παραμείνει γραμμένο  :o)

Άρα, όπως είπε και ο Άλκης, αρκεί να εξασφαλιστεί (με τις κατάλληλες δομές επιλογής) ότι η τιμή είναι εντός ορίων του πίνακα (1 <= τιμή <= Ν)

Με εκτίμηση,

Sergio

Η ερώτηση της ημέρας ;D
Παραβιάζεται κανένα αλγοριθμικό κριτήριο στον αλγόριθμο που έδωσε ο Παναγιώτης και αν ναι ποιό και γιατί;
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

P.Tsiotakis


Sergio

Γιατί αγαπητέ Παναγιώτη παραβιάζεται η περατότητα;  Δεν απάντησες όλα τα ... σκέλη της ερώτησης !!!

Το ερώτημα είχε και άλλα ... υποερωτήματα (αν ναι ποιό και γιατί...)

Δικαιολόγησε λοιπόν την απάντησή σου  ;D

(μη λες τέτοια, μη μας ακούσει κανένας μαθητής και το πάρει στα σοβαρά !!!  :o)

Σοβαρά τώρα...

Ποιά είναι η γνώμη σας συνάδελφοι;  Μπορούμε να πούμε οτι όντως παραβιάζεται κάποιο από τα 5 αλγοριθμικά κριτήτια όπως αυτά ορίζονται και να το αιτιολογήσουμε ;;  

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

bagelis

Κατά τη γνώμη μου παραβιάζεται η καθοριστικότητα, γιατί έχεις μία εντολή που δεν εκτελείται σωστά για συγκεκριμένες τιμές, ενώ για άλλες τιμές εκτελείται.
Όπως π.χ.
β <-- 0
χ <-- α/β
είναι παραβίαση της καθοριστικότητας, έτσι και λάθος δείκτης σε πίνακα είναι παραβίαση του ίδιου κριτηρίου.

Με εκτίμηση,

P.Tsiotakis

- Καθοριστικότητα: Για κάθε εντολη δεν πρέπει να υπάρχει καμία αμφιβολία ως προς τον τρόπο εκτέλεσής της (π.χ. εντολή διαίρεσης)
- Αποτελεσματικότητα: Κάθε εντολή πρέπει να είναι απλή (ορισμένη) και εκτελέσιμη

- Σχολικό βιβλίο (σελίδα 56) : Το μέγεθος του πίνακα καθορίζεται κατά τη φάση του προγραμματισμού
- Σχολικό βιβλίο (σελίδα 186) : Ο δείκτης μπορεί να είναι οποιαδήποτε ακέραια έκφραση
- Τετράδιο μαθητή (σελίδα 94) : Κοινό λάθος είναι η ανάγνωση ή εκχώρηση τιμής έξω από τα όρια του πίνακα
( - βιβλίο καθηγητή (σελίδα 90): αναφέρεται στη μηδενική θέση του πίνακα   ??? )

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

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

Μπορεί να χαρακτηριστεί και λογικό λάθος ή όχι;

Με εκτίμηση,

EleniK

Θα συμφωνήσω και εγώ με τον Παναγιώτη σχετικά με την παραβίαση κριτηρίων ότι παραβιάζεται η καθοριστικότητα και η αποτελεσματικότητα όχι όμως η περατότητα διότι ο αλγόριθμος κάποια στιγμή θα τελειώσει ή θα κολλήσει  ;)

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

άλλες γνώμες;

Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

alkisg

Τα range errors είναι γενικά λογικά λάθη (και συγχρόνως λάθη χρόνου εκτέλεσης).

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

Sergio

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

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

Μπορεί να σκεφτεί κανένας περίπτωση παραβίασης καθοριστικότητας ή περατότητας που να μη συνιστά λάθος κατά την εκτέλεση;

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

P.Tsiotakis

Μάλλον δεν το εννοούσε η Ελένη και μίλησε γενικά

Οι εντολές είναι εκτελέσιμες υπο προυποθέσεις

Την περατότητα την ανέφερα για αστείο, ως μη υποψήφιο για συμμετοχή στις απαντήσεις

Sergio

Παναγιώτη,

δεν πιστεύω
... να πιστεύεις
... ... ότι πιστεύουμε τα αστεία σου !!!
:)
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

gpapargi

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

Όταν φτάσει σε ένα σημείο που δεν ξέρει τι να κάνει παραβιάζεται η καθοριστικότητα. Έτσι όπως ορίζεται ο πίνακας στην αλγοριθμική (μακριά από υλοποίηση) δεν έχει κάποιο νόημα ο αρνητικός δείκτης. Ο εκτελεστής του αλγορίθμου βλέπει α[-5], δηλαδή κάποιο άγνωστο σύμβολο και δεν ξέρει τι να κάνει.
Άρα παραβιάζει την καθοριστικότητα.

Αν για τον εκτελεστή του αλγορίθμου το α[-5] σημαίνει κάτι (πχ σε κάποιο πραγματικό προγραμματιστικό περιβάλλον που το α[-5] σημαίνει κάτι) τότε προφανώς ο εκτελεστής του αλγορίθμου ξέρει τι να κάνει. Απλά είναι σχεδόν δεδομένο ότι δεν κάνει αυτό που θέλουμε εμείς. Αν όντως ισχύει αυτό τότε μιλάμε για λογικό λάθος.  Αλλά αυτό συμβαίνει στην περίπτωση που το α[-5] σημαίνει κάτι για τον εκτελεστή του αλγορίθμου.
Στην ίδια περίπτωση (δηλ σε αυτή που το α[-5] σημαίνει κάτι) είναι πολύ πιθανό να έχουμε παραβίαση της περατότητας. Πχ αν ο πίνακας σαρώνεται με εντολή επανάληψης που σαρώνει τα στοιχεία από το 1 ως το 100 και η συνθήκη διακοπής βασίζεται στο περιεχόμενο του α[-5] (κατά λάθος) στο οποίο δε γίνεται προσπέλαση, τότε το λουπάρισμα δε θα σταματήσει.

Κακά τα ψέματα. Όταν σε πρόγραμμα εμφανιστεί το α[-5] μάλλον έχουμε στείλει το δείκτη στο γάμο του καραγκιόζη. Πάμε δηλαδή φουλ για λογικό λάθος και πιθανόν και ατέρμονα βρόχο.

Στην αλγοριθμική (που δε σχετίζεται με υλοποίηση) το α[-5] δε σημαίνει τίποτα, οπότε έχουμε παραβίαση της καθοριστικότητας.

Αυτά νομίζω.