Μετατροπές σε υποπρογράμματα

Ξεκίνησε από Νίκος Αδαμόπουλος, 05 Μαΐου 2009, 07:24:07 ΜΜ

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

alkisg

Το const δεν είναι μόνο για όταν περνιούνται με αναφορά, είναι και για όταν περνιούνται με τιμή:
Κώδικας: C
int f(const int p)
{
	p = 2;

	return p;
}

int main(void)
{
	return f(1);
}


Προσπάθεια για μεταγλώττισή του βγάζει:
Κώδικας: shell
alkisg@alkis:~/tmp/test-const.c$ gcc test-const.c -o test-const
test-const.c: In function ‘f’:
test-const.c:3: σφάλμα: assignment of read-only location ‘p’


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


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

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

Παράθεση από: evry στις 06 Μαΐου 2009, 07:55:15 ΜΜ
για να μην έχει παρέμβει ακόμα ο Άλκης ή δεν το έχει δει ή δεν υπάρχει
;D Τρέχω με τον οδηγό εγκατάστασης Ubuntu 9.04 / LTSP  :-\

klitos

Παράθεση από: evry στις 06 Μαΐου 2009, 01:32:00 ΜΜ
  Θα διαφωνήσω με την κατηγοριοποίηση που κάνεις. Αν θεωρείς λάθος το Διάβασε μέσα σε συνάρτηση τότε για τον ίδιο ακριβώς λόγο πρέπει να θεωρήσεις λάθος και την απόδοση τιμής σε μια παράμετρο μέσα στη συνάρτηση και εξηγώ το σκεπτικό μου.
  Το βιβλίο δε λέει πουθενά ούτε απαγορεύεται να διαβάζεις ή να γράφεις σε μια συνάρτηση ρητά. Αυτό το εξάγουμε από τα συμφραζόμενα αφού στη σελίδα 210 λέει ότι
Επειδη θεωρω οτι το εχουμε εξαντλησει αλλα και για να βαλουμε ενα τελος επιτελους δειτε τα παρακατω
Σελιδα 212 ..εφοσον απαιτειται απο αυτο η εκτελεσης της λειτουργιας της εκτυπωσης πρεπει να υλοποιηθεί με διαδικασία.
Επισης σελιδα 211 ... αφου το υποπρογραμμα πρεπει να διαβάζει δεδομενα υλοποιειται με διαδικασία

Το οτι υπολογιζει μια μονο τιμη η συναρτηση ( την οποια επιστρεφει) σημαινει προφανως οτι ο τελικος στοχος ειναι ο υπολογισμος μιας τιμης που θα επιστραφει και οχι αποκλειστικα υπολογισμος μονο μιας τιμης... δηλαδη για να υπολογισει την τιμη που θα επιστρεψει η συναρτηση μπορουν σαφως να γινουν και αλλοι υπολογισμοι
κλητος χατζηγεωργιου

evry

  Ξαναλέω ότι γενικά δεν χρησιμοποιούμε εντολές εισόδου/εξόδου μέσα σε συνάρτηση, από τη στιγμή που το λέει το βιβλίο. Επειδή όμως δεν κάνουμε Θρησκευτικά, στα οποία πιστεύουμε σε κάποιο δόγμα και δεν μπορούμε να το αμφισβητήσουμε, αλλά πληροφορική στην οποία πρέπει να μπορούμε να εξηγήσουμε στους μαθητές το αντικείμενο και να μπορούμε να τους αιτιολογήσουμε πλήρως γιατί δεν πρέπει να κάνουν κάποια πράγματα, απαντήσεις του στυλ "επειδή έτσι το λέει το βιβλίο" ΄ή επειδή "έτσι πρέπει" δε νομίζω ότι έχουν καμία θέση στο σχολείο.
    Το βιβλίο λέει ότι  πρέπει να υλοποιηθεί με διαδικασία και εγώ σαν ένας σκεπτόμενος μαθητής ρωτάω "Γιατί?". Απαντάει το βιβλίο σε αυτή την ερώτηση? Μπορεί κάποιος καθηγητής να δώσει στον μαθητή αυτόν μια πειστική απάντηση?
     Και κάνω την ίδια ερώτηση που έχω κάνει πολλές φορές στο στέκι. Αν κάποιος χρησιμοποιήσει Διάβασε μέσα σε συνάρτηση τι λάθος κάνει? Είναι συντακτικό? είναι λογικό? Ξέρει κανείς τι λάθος είναι?
ή μήπως παραβιάζει τους κανόνες του τμηματικού προγραμματισμού? Φαντάζομαι θα απαντήσετε ότι δεν ισχύει τίποτα από όλα αυτά.

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

Όπως κατάλαβες εγώ θεωρώ ότι δεν έχουμε εξαντλήσει καθόλου το θέμα και ότι δεν έχει μπει κανένα τέλος.
Παράθεση από: klitos στις 08 Μαΐου 2009, 10:51:37 ΠΜ

Επειδη θεωρω οτι το εχουμε εξαντλησει αλλα και για να βαλουμε ενα τελος επιτελους δειτε τα παρακατω
Σελιδα 212 ..εφοσον απαιτειται απο αυτο η εκτελεσης της λειτουργιας της εκτυπωσης πρεπει να υλοποιηθεί με διαδικασία.
Επισης σελιδα 211 ... αφου το υποπρογραμμα πρεπει να διαβάζει δεδομενα υλοποιειται με διαδικασία

Το οτι υπολογιζει μια μονο τιμη η συναρτηση ( την οποια επιστρεφει) σημαινει προφανως οτι ο τελικος στοχος ειναι ο υπολογισμος μιας τιμης που θα επιστραφει και οχι αποκλειστικα υπολογισμος μονο μιας τιμης... δηλαδη
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

Η συζήτηση μπορεί να είναι ατέρμονη, αλλά οι συναρτήσεις δε μπορούν να μην έχουν παραμέτρους
επίσης δε μπορούν να περιλαμβάνουν εντολές εσόδου - εξόδου

Νίκος Αδαμόπουλος

Μου χαλάσατε το θέμα  >:(    **&**&^*&^&*%&^$#$#%

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

Νίκος Αδαμόπουλος

Παράθεση από: alkisg στις 06 Μαΐου 2009, 11:55:24 ΜΜ
Επομένως προσωπικά δεν θα το χρησιμοποιούσα σε άσκηση όχι γιατί μπορεί κάποιος να το έπιανε λάθος αλλά για να μη ζαλίζω τους μαθητές με τέτοιες "λεπτομέρειες".

Έλα όμως που όλα τα θέματα που έχουν πέσει ως ασκήσεις σε υποπρογράμματα, είτε ώς Θέμα 1, Θέμα 2, Θέμα 3 & Θέμα 4, αυτό ακριβώς εξέταζαν/αποσκοπούσαν!!! Δηλαδή στις λεπτομέρειες της κλήσης και της μεταβίβασης/επιστροφής των παραμέτρων...

alkisg

Παράθεση από: Νίκος Αδαμόπουλος στις 08 Μαΐου 2009, 03:11:59 ΜΜ
Έλα όμως που όλα τα θέματα που έχουν πέσει ως ασκήσεις σε υποπρογράμματα, είτε ώς Θέμα 1, Θέμα 2, Θέμα 3 & Θέμα 4, αυτό ακριβώς εξέταζαν/αποσκοπούσαν!!! Δηλαδή στις λεπτομέρειες της κλήσης και της μεταβίβασης/επιστροφής των παραμέτρων...

Αυτό το σφάλμα βαρύνει την επιτροπή και κανέναν άλλο.
Εφόσον βλέπουν ότι το συγκεκριμένο σημείο του βιβλίου είναι ασαφές, γιατί το εξετάζουν;
Για να εξετάσουν εάν ο μαθητής είναι διαβασμένος;
Για να εξετάσουν εάν ο καθηγητής του είναι διαβασμένος και του τα εξήγησε σωστά;
Ή για να εξετάσουν εάν ο καθηγητής του "μάντεψε" και δίδαξε την απάντηση που ήθελε η επιτροπή;

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

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

evry

 Ο Άλκης έχει απόλυτο δίκιο. Ο προγραμματισμός είναι ένα δύσκολο αντικείμενο για να το παρουσιάσεις στην δευτεροβάθμια, πόσο μάλλον για να έχεις ένα τέτοιο πανελλαδικώς εξεταζόμενο μάθημα. Το βιβλίο είναι γεμάτο λάθη και ασάφειες. Μπορεί οι συγγραφείς να είχαν πίεση χρόνου, ή μπορεί να μην ήξεραν ότι το μάθημα προορίζεται για πανελλαδικό, ίσως να έχουν κάποιο ελαφρυντικό, δεν ξέρω.
  Αυτό που ξέρω όμως είναι ότι κάθε χρόνο συζητάμε τα ίδια και τα ίδια θέματα και μερικές φορές προκύπτουν και καινούργια, στα οποία διαφωνούμε. Τα θέματα αυτά είναι κάτι σαν γκρίζες ζώνες ας πούμε του βιβλίου. Θα περίμενε κανείς ότι οι θεματοδότες δεν θα άγγιζαν ποτέ τέτοια θέματα. Και όμως, αρκετές φορές έχουν βάλει τέτοια θέματα ειδικά στη θεωρία. Τι να πω, επίτηδες το κάνουν ???
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Νίκος Αδαμόπουλος

#23
Παράθεση από: alkisg στις 08 Μαΐου 2009, 04:58:48 ΜΜ
Αυτό το σφάλμα βαρύνει την επιτροπή και κανέναν άλλο.
Εφόσον βλέπουν ότι το συγκεκριμένο σημείο του βιβλίου είναι ασαφές, γιατί το εξετάζουν;

Εγώ πάντως δεν το βλέπω να είναι ασαφές! Και ενώ αρχικά σοκαρίστηκα με την υποψία ότι μπορεί μόνο εγώ να το πιστεύω αυτό, άρα ότι είμαι τόσο λάθος, τελικά βλέπω ότι υπάρχουν και διαφορετικές απόψεις άλλων συναδέλφων πιο πάνω ή και στην παράλληλη κουβέντα που γίνεται στο https://alkisg.mysch.gr/steki/index.php?topic=1839 - π.χ. του Παναγιώτη - και τώρα άρχισα να ξαναβρίσκω το χρώμα μου!

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

Μα τόσο αιρετική ήταν η άσκησή μου που το κάναμε τόσο θέμα;

Ήταν μια ιδέα που μου ήρθε κατά τη διάρκεια ενός μαθήματος, τη δοκίμασα επιτόπου, μαθητές λίγο άνω του μετρίου επιπέδου βρήκαν μόνοι τους και σχετικά άνετα τη σωστή λύση την οποία διατύπωσαν ολόκληρη προφορικά, σπαταλώντας συνολικό χρόνο <10 λεπτά από το μάθημα. Αποκόμισα την εντύπωση ότι άξιζε τον κόπο και θέλησα να μεταφέρω την εμπειρία μου στο Στέκι. Συνεχίζω να μη νιώθω τύψεις για αυτό που έκανα...  >:D

Αν είναι να πιστεύουμε ότι αναρτώντας κάτι, τότε το νομιμοποιούμε και μπορεί να το πάρει η επιτροπή και να το βάλει ως θέμα, τότε sorry αλλά πιστεύω (προσωπική άποψη) ότι υπάρχουν ήδη πολλά θέματα αναρτημένα, πολύ ωραία μεν, αλλά που δεν κάνουν για εξετάσεις μαθητών 3ης Λυκείου, σε δίωρο (και όχι τετράωρο όπως πολλοί θεωρούν!) μάθημα στην ΑΕΠΠ...