Συναρτησιακή Άσκηση

Ξεκίνησε από evry, 07 Απρ 2012, 12:27:20 ΠΜ

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

evry

Γενικά μου αρέσει ο συναρτησιακός τρόπος σκέψης οπότε έφτιαξα την παρακάτω άσκηση

Συναρτησιακή Άσκηση

1.   Να γράψετε υποπρόγραμμα  max  το οποίο θα δέχεται τρεις ακέραιους αριθμούς και θα επιστρέφει τον μεγαλύτερο
2.   Να γράψετε  υποπρόγραμμα  max2 το οποίο με χρήση του max θα δέχεται έναν πίνακα Ν  ακεραίων και θα επιστρέφει το μέγιστο στοιχείο του.
3.   Να γράψετε υποπρόγραμμα το οποίο θα δέχεται έναν πίνακα Ν ακεραίων και θα τον ταξινομεί σε αύξουσα σειρά με χρήση του max.
Σημειώσεις: Θεωρείστε το Ν σταθερά. Δεν μπορείτε να χρησιμοποιήσετε δομή επιλογής! Όλες οι συγκρίσεις θα γίνουν με χρήση της max.




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

ΥΓ. Μην βαράτε έτσι? είναι εκτός πνεύματος μαθήματος και εξετάσεων
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Πανάγος94

#1
στην max όμως μπορούμε να χρησιμοποιήσουμε δομή επιλογής ε???και επίσης δεν πρέπει να θεωρήσουμε ότι Ν >= 3?? η απάντησή μου για το δεύτερο είναι η εξής .... δεν νομίζω να το ζητούσες έτσι αλλά τέσπα....

ΠΡΟΓΡΑΜΜΑ ευρεση_μεγιστου
ΣΤΑΘΕΡΕΣ
  Ν = ...
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Π[Ν], μεγιστο, ι
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΔΙΑΒΑΣΕ Π[ι]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  μεγιστο <- max2(Π)
  ΓΡΑΨΕ μεγιστο
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


ΣΥΝΑΡΤΗΣΗ max2(Π): ΑΚΕΡΑΙΑ
ΣΤΑΘΕΡΕΣ
  Ν = ....
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Π[Ν], ι, αρ, maximum
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ Ν div 3
    ΑΝ ι = 1 ΤΟΤΕ
      αρ <- max(Π[ι], Π[ι + 1], Π[ι + 2])
      maximum <- αρ
    ΑΛΛΙΩΣ
      αρ <- max(Π[2*ι + 1], Π[2*ι + 2], Π[2*ι + 3])
      ΑΝ αρ > maximum ΤΟΤΕ
        maximum <- αρ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΝ Ν mod 3 <> 0 ΤΟΤΕ
    αρ <- max(Π[Ν - 2], Π[Ν - 1], Π[Ν])
    ΑΝ αρ > maximum ΤΟΤΕ
      maximum <- αρ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΑΝ
  max2 <- maximum
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΣΥΝΑΡΤΗΣΗ max(α, β, γ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α, β, γ, αρ
ΑΡΧΗ
  αρ <- α
  ΑΝ β > αρ ΤΟΤΕ
    αρ <- β
  ΤΕΛΟΣ_ΑΝ
  ΑΝ γ > αρ ΤΟΤΕ
    αρ <- γ
  ΤΕΛΟΣ_ΑΝ
  max <- αρ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

sstergou

Γιατί η max συγκρίνει 3 ακεραίους και όχι 2 ;

Πάντως το θέμα είναι να μην χρησιμοποιήσεις δομή επανάληψης και όχι επιλογής  :P
Επίσης καλό είναι το αποτέλεσμα να είναι νέος πίνακας και όχι τροποποίηση του παλιού. Αυτό βέβαια σκοντάφτει στον περιορισμό που ορίσαμε μόνοι μας αλλά χωρίς να φταίμε (ότι δηλαδή μια συνάρτηση δεν μπορεί να επιστρέψει πίνακα).


evry

@Πανάγος

τώρα που το βλέπω η εκφώνησή μου δεν είναι κατανοητή όπως ήθελα.
Μπορείς να χρησιμοποιήσεις Αν μόνο στην πρώτη max και σε καμία άλλη περίπτωση.
Ούτε στην max του πίνακα ούτε στην ταξινόμηση οκ?
Δηλαδή στην max2 δεν μπορείς να χρησιμοποίησεις Αν...Τότε όπως έχεις κάνει

Επίσης θέλω να χρησιμοποιήσεις την max για να συγκρίνεις τους αριθμούς ανά δύο και όχι ανά 3  ;)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

Θέλω ο μαθητής να σκεφτεί πως θα βρει το μέγιστο 2 αριθμών με τη χρήση μιας συνάρτησης μεγίστου 3.
Παράθεση από: sstergou στις 07 Απρ 2012, 11:25:31 ΠΜ
Γιατί η max συγκρίνει 3 ακεραίους και όχι 2 ;

Πάντως το θέμα είναι να μην χρησιμοποιήσεις δομή επανάληψης και όχι επιλογής  :P
Επίσης καλό είναι το αποτέλεσμα να είναι νέος πίνακας και όχι τροποποίηση του παλιού.


Παράθεση
Αυτό βέβαια σκοντάφτει στον περιορισμό που ορίσαμε μόνοι μας αλλά χωρίς να φταίμε (ότι δηλαδή μια συνάρτηση δεν μπορεί να επιστρέψει πίνακα).
Κοίτα ολόκληρο τον πίνακα δεν μπορεί, γιατί είναι πολλές τιμές, αλλά δείκτη σε πίνακα το συζητάμε :D
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Πανάγος94

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

evry

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

Η ταξινόμηση όμως είναι που έχει πραγματικό ενδιαφέρον. Εκεί αν θέλεις χρησιμοποίησε συνάρτηση max(a,b) με 2 παραμέτρους δηλαδή. Η δυσκολία παραμένει η ίδια
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

sstergou

Παράθεση από: evry στις 07 Απρ 2012, 05:16:24 ΜΜ
Θέλω ο μαθητής να σκεφτεί πως θα βρει το μέγιστο 2 αριθμών με τη χρήση μιας συνάρτησης μεγίστου 3.
χεχε, για να δούμε

Παράθεση από: evry στις 07 Απρ 2012, 05:16:24 ΜΜ
Κοίτα ολόκληρο τον πίνακα δεν μπορεί, γιατί είναι πολλές τιμές, αλλά δείκτη σε πίνακα το συζητάμε :D

Κατά την γνώμη μου αυτό το "πρέπει να επιστρέφει μία τιμή" του βιβλίου θα έπρεπε να σήμαινε "μία τιμή από τους διαθέσιμους τύπους δεδομένων".
Για παράδειγμα αν είχαμε εγγραφές στην ΓΛΩΣΣΑ τότε θα ήταν παράλογο μία συνάρτηση να μην μπορούσε να επιστρέψει εγγραφή.

Τώρα όσον αφορά τους πίνακες θα μπορούσαμε στην ΓΛΩΣΣΑ να έχουμε συναρτήσεις που να επιστρέφουν πίνακα.
π.χ.
Κώδικας: ΓΛΩΣΣΑ
Συνάρτηση τάδε....
  α[1] <-1
  α[2] <- 2
  τάδε <-α
Τέλος_συνάρτησης


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

evry

Παράθεση από: sstergou στις 07 Απρ 2012, 06:45:01 ΜΜ
Κατά την γνώμη μου αυτό το "πρέπει να επιστρέφει μία τιμή" του βιβλίου θα έπρεπε να σήμαινε "μία τιμή από τους διαθέσιμους τύπους δεδομένων".
Για παράδειγμα αν είχαμε εγγραφές στην ΓΛΩΣΣΑ τότε θα ήταν παράλογο μία συνάρτηση να μην μπορούσε να επιστρέψει εγγραφή.
κοίτα δεν χρειάζεται να παίρνουμε της μετρητοίς και ότι λέει το βιβλίο. Δηλαδή όταν λέει ότι ένα υποπρόγραμμα δεν πρέπει να είναι πολύ μεγάλο???

Εσύ αν κατάλαβα καλά λες ότι μπορεί να επιστρέφει ένα αντικείμενο, π.χ. πίνακα, εγγραφή, (συνάρτηση !!!  >:D) κλπ.


Παράθεση
Τώρα όσον αφορά τους πίνακες θα μπορούσαμε στην ΓΛΩΣΣΑ να έχουμε συναρτήσεις που να επιστρέφουν πίνακα.
π.χ.
Κώδικας: ΓΛΩΣΣΑ
Συνάρτηση τάδε....
  α[1] <-1
  α[2] <- 2
  τάδε <-α
Τέλος_συνάρτησης


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

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

Πάντως με το void* λύνονται όλα τα προβλήματα τύπων :D

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

dkonetas

έτσι συμμετέχοντας σε μία συζήτηση η οποία είναι προφανές ότι δεν έχει σχέση με τα διδασκόμενα ...

Αλήθεια χωρίς δείκτες το τάδε <-α   δεν απαιτεί ...υπερφόρτωση τελεστών;

ΔΚ :-)

evry

όχι απαραίτητα, αν θεωρηθεί χαρακτηριστικό της γλώσσας.
Για παράδειγμα η Java δεν έχει υπερφόρτωση τελεστών (σε σχέση με την "κακή" C++) αλλά το "+" στα strings δουλεύει μια χαρά  :D
Παράθεση από: dkonetas στις 08 Απρ 2012, 10:10:33 ΠΜ
έτσι συμμετέχοντας σε μία συζήτηση η οποία είναι προφανές ότι δεν έχει σχέση με τα διδασκόμενα ...

Αλήθεια χωρίς δείκτες το τάδε <-α   δεν απαιτεί ...υπερφόρτωση τελεστών;

ΔΚ :-)

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