Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Μονοδιάστατοι πίνακες => Γ΄ Λυκείου => Εισαγωγή στοιχείων, εμφάνιση και υπολογισμοί => Μήνυμα ξεκίνησε από: manpap στις 01 Μαρ 2007, 11:50:55 ΠΜ

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

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

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

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

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

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

Τίτλος: Απ: Απορίες σε Πίνακες και Υποπρογράμματα
Αποστολή από: evry στις 01 Μαρ 2007, 03:18:36 ΜΜ
Ξεκινάω ανάποδα

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

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

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

Γενικά όταν μιλάμε για κριτήρια αλγορίθμου όπως καθοριστικότητα, αποτελεσματικότητα κλπ, καλό θα ήταν να τα εξετάζουμε μόνο σε επίπεδο ψευδογλώσσας, γιατί σε επίπεδο προγράμματος θα γίνει σύγχυση μεταξύ των κριτηρίων αυτών και των συντακτικών, σημασιολογικών, λογικών λαθών από τους μαθητές.
Τίτλος: Απ: Απορίες σε Πίνακες και Υποπρογράμματα
Αποστολή από: johnny_xp στις 02 Μαρ 2007, 12:35:42 ΜΜ
Η δήλωση του σχολικού βιβλίου ότι οι μεταβλητές πρέπει να είναι του ίδιου τύπου είναι αρκετα περιοριστική και πολλές φορές μας δένει τα χέρια. Το παράδειγμα που αναφέρθηκε παραπάνω είναι χαρακτηριστικό. Ενω στον αλγόριθμο δεν έχουμε τέτοιο πρόβλημα στη ΓΛΩΣΣΑ δεν μπορούμε να προσθέσουμε έναν π.χ. πραγματικό με έναν ακέραιο !
Θεωρώ πως το βιβλίο θα έπερεπε να έχει θέσει το θέμα κάπως γενικότερα στο σημείο αυτό. Δοθέντως ότι δεν έχουμε και δα τόσους πολούς τύπους δεδομένων στη ΓΛΩΣΣΑ δεν θα ήταν δύσκολο να λέει πως ένας ακέραιος μπορεί να μετατραπεί σε πραγματικό και το αντίθετο (με στρογγύλευση).
Τίτλος: Απ: Απορίες σε Πίνακες και Υποπρογράμματα
Αποστολή από: manpap στις 02 Μαρ 2007, 01:44:27 ΜΜ
Ευχαριστώ για τις απαντήσεις.
Συμφωνώ ότι θα ήταν καλύτερα να περιορίζουμε τα κριτήρια στους αλγορίθμους και όχι στις Γλώσσες Προγραμματισμού. Αν όμως μας ενδιαφέρει τι γίνεται σε μία Γλώσσα; Άλλωστε και το πρόγραμμα Αλγόριθμος είναι.
Στα δύο τελευταία ερωτήματα καλύφθηκα. Στο 1ο εξακολουθώ και έχω κάποιους ενδοιασμούς... για το αν πληρούνται όλα τα κριτήρια. Αν δεν εκτελείτε (δηλαδή το πιάσει ο compiler) τότε δεν είναι εκτελέσιμη άρα δεν έχει αποτελεσματικότητα.

Αντίστοιχα τι θα λέγατε για το
χ<- α DIV β
με α και β δηλωμένους πραγματικούς....
θα έπρεπε να λέει
ΑΝ α=Α_Μ(α) και β=Α_Μ(β) ΚΑΙ b<>0 ΤΟΤΕ
χ<- Α_Μ(α) DIV Α_Μ(β)
ΤΕΛΟΣ_ΑΝ
Δηλαδή πρόβλημα καθοριστικότητας έτσι;
Τίτλος: Απ: Απορίες σε Πίνακες και Υποπρογράμματα
Αποστολή από: evry στις 02 Μαρ 2007, 03:07:59 ΜΜ

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

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

Για παράδειγμα το παρακάτω είναι τμήμα προγράμματος αλλά όχι αλγορίθμου
π.χ.
Κώδικας [Επιλογή]

      i <-- 0
      ΟΣΟ (1<2) ΕΠΑΝΑΛΑΒΕ
             i <-- i + 1
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


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