Απορίες σε Πίνακες και Υποπρογράμματα

Ξεκίνησε από manpap, 01 Μαρ 2007, 11:50:55 ΠΜ

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

manpap

Εύχομαι καλό μήνα σε όλο το στέκι και παράλληλα υποβάλω τις παρακάτω απορίες
1)
Πιο κριτήριο παραβιάζεται στο παρακάτω παράδειγμα σε ΓΛΩΣΣΑ; Προσωπική άποψη: Καθοριστικότητα, μήπως όμως είναι αποτελεσματικότητα;

...
ΠΡΑΓΜΑΤΙΚΕΣ: κ
...
ΑΡΧΗ
...
κ<-1
Α[κ]<-10
...

2)
Είναι αποδεκτό το παρακάτω? Αν ναι τότε δεν υπάρχει ξεκάθαρα μία εντολή εκχώρησης κάποια τιμής στο όνομα της συνάρτησης, όπως συνήθως γίνεται. Τι λέτε;
ΣΥΝΑΡΤΗΣΗ ΜΙΝ(Χ,Υ):ΑΚΕΡΑΙΑ
...
ΑΡΧΗ
ΚΑΛΕΣΕ ΥΠΟΛΟΓΙΣΜΟΣ_ΜΙΝ(Χ,Υ,ΜΙΝ)
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Όπου ΥΠΟΛΟΓΙΣΜΟΣ_ΜΙΝ(Χ,Υ,ΜΙΝ) διαδικασία που δέχεται 2 αριθμούς και επιστρέφει τον μικρότερό τους

3)
Η συνάρτηση Α_Τ(χ) επιστρέφει πραγματική τιμή. Επομένως το παρακάτω είναι λάθος στη ΓΛΩΣΣΑ αλλά σωστό αν ήταν αλγόριθμος;
...
ΠΡΑΓΜΑΤΙΚΕΣ: κ
ΑΚΕΡΑΙΕΣ: α,β
...
ΑΡΧΗ
ΔΙΑΒΑΣΕ α
β<-Α_Τ(α)   ! εκχώρηση πραγματικής έκφρασης σε ακέραια μεταβλητή
...

Περιμένω τη γνώμη σας...  :)

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

evry

Ξεκινάω ανάποδα

Το 3 προφανώς είναι λάθος σε Γλώσσα και σωστό σε αλγόριθμο, δεν νομίζω ότι υπάρχει κάποια ασάφεια εδώ

Το 2 επίσης είναι λάθος. Ο ορισμός της συνάρτησης είναι σαφέστατος, πρέπει στο τέλος να υπάρχει αντίστοιχη εντολή εκχώρησης.
Κάτι αντίστοιχο υπάρχει και στις C, C++, Java όπου πρέπει να υπάρχει η εντολή return <επιστρεφόμενος τύπος>

Τώρα το 1 δε νομίζω ότι παραβιάζει κανένα κριτήριο. Το λάθος θα το πιάσει ο compiler κατά τη μεταγλώττιση. Είναι καθαρά θέμα της Γλώσσας.
Το αν είναι όμως αλγόριθμος είναι άλλη ιστορία. Αν έγραφες ακριβώς το ίδιο πρόγραμμα σε μια γλώσσα όπως η C θα δούλευε μια χαρά γιατί ο πραγματικός θα μετατρεπόταν κατευθείαν σε ακέραιο (θα πέταγε ένα warning φυσικά). Σε αυτή την περίπτωση το πρόγραμμα θα δούλευε κανονικά και κανείς δεν θα μίλαγε για θέμα καθοριστικότητας.
   Άρα το παράδειγμα που ανέφερες είναι καθαρά θέμα υλοποίησης της γλώσσας προγραμματισμού. Σε επίπεδο αλγορίθμου δεν έχει πρόβλημα.

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

johnny_xp

Η δήλωση του σχολικού βιβλίου ότι οι μεταβλητές πρέπει να είναι του ίδιου τύπου είναι αρκετα περιοριστική και πολλές φορές μας δένει τα χέρια. Το παράδειγμα που αναφέρθηκε παραπάνω είναι χαρακτηριστικό. Ενω στον αλγόριθμο δεν έχουμε τέτοιο πρόβλημα στη ΓΛΩΣΣΑ δεν μπορούμε να προσθέσουμε έναν π.χ. πραγματικό με έναν ακέραιο !
Θεωρώ πως το βιβλίο θα έπερεπε να έχει θέσει το θέμα κάπως γενικότερα στο σημείο αυτό. Δοθέντως ότι δεν έχουμε και δα τόσους πολούς τύπους δεδομένων στη ΓΛΩΣΣΑ δεν θα ήταν δύσκολο να λέει πως ένας ακέραιος μπορεί να μετατραπεί σε πραγματικό και το αντίθετο (με στρογγύλευση).

manpap

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

Αντίστοιχα τι θα λέγατε για το
χ<- α DIV β
με α και β δηλωμένους πραγματικούς....
θα έπρεπε να λέει
ΑΝ α=Α_Μ(α) και β=Α_Μ(β) ΚΑΙ b<>0 ΤΟΤΕ
χ<- Α_Μ(α) DIV Α_Μ(β)
ΤΕΛΟΣ_ΑΝ
Δηλαδή πρόβλημα καθοριστικότητας έτσι;
Συντηρώ το μυαλό μου ακοίμητο, λαγαρό, ανήλεο. Το αμολώ να παλεύει ακατάλυτα. Άλλο αργαστήρι να κάνω το σκοτάδι φως δεν έχω.
Ν. Καζαντζάκης

evry


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

Επίσης ένας αλγόριθμος μπορεί να κωδικοποιηθεί σε πρόγραμμα αλλα ένα πρόγραμμα ΔΕΝ ΕΙΝΑΙ αλγόριθμος.

Για παράδειγμα το παρακάτω είναι τμήμα προγράμματος αλλά όχι αλγορίθμου
π.χ.
      i <-- 0
      ΟΣΟ (1<2) ΕΠΑΝΑΛΑΒΕ 
             i <-- i + 1
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


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