snaker1 Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Καλησπέρα, η παρούσα άσκηση είναι θέμα που έπεσε στην πρώτη εξεταστική και την οποία δεν κατάφερα να επιλύσω.Θα ήμουν πραγματικά ευγνώμων αν κάποιος μπορέσει να μου εξηγήσει πως λύνεται ώστε σε περίπτωση που πέσει παρόμοιο θέμα στην δεύτερη εξεταστική να μπορέσω να ανταπεξέλθω. Ευχαριστώ πολύ Έστω δύο συναρτήσεις F και G. Η F καλεί τη συνάρτηση G όπως φαίνεται στον παρακάτω ψευδοκώδικα: F(){ int x=l; ......... G(x); ......... } G(int y){ int x=2; .......... y=5x+y; .......... } Ποια είναι η τελική τιμή της μεταβλητής χ στη συνάρτηση F, αν το πέρασμα της παραμέτρου γίνεται α) με τιμή, β) με αναφορά και γ) με αντιγραφή και επαναφορά;
Timonkaipumpa Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Είναι τόσο απλό, που πραγματικά εάν δεν το ξέρεις τότε (προσωπικά) νομίζω πως δεν πρέπει να περάσεις το μάθημα. Εάν θες να το μάθεις, μπορείς, εκτός από το να διαβάσεις την θεωρία σου, να κάνεις ένα test εσύ με δικό σου κώδικα σε C
snaker1 Δημοσ. 23 Ιανουαρίου 2011 Μέλος Δημοσ. 23 Ιανουαρίου 2011 Timonkaipumpa εγώ δεν σου ζήτησα να με κρίνεις εγώ απλά ζήτησα αν μπορεί κάποιος να με βοηθήσει και να μου εξηγήσει πως λύνεται.Το post σου είναι πραγματικά άσκοπο,δεν με βοήθησε καθόλου και απορώ γιατί το έκανες.
fotis4u Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Όντως το σχόλιο του Timonkaipumpa δεν ήταν σωστό, απλά θέλει να σου πει ότι το ζήτημα που έθεσες είναι εύκολο ωστόσο θα σου εξηγήσω εν μέρη την λειτουργία και των δυο συναρτήσεων και από εκεί και πέρα συνεχίζεις και όπου αντιμετωπίσεις πρόβλημα εδώ είμαστε εμείς. Λοιπόν, λες "Ποια είναι η τελική τιμή της μεταβλητής χ στη συνάρτηση F", η μεταβλητή χ δέχεται μια τιμή στην συνάρτηση F και αμέσως μετά καλείτε η συνάρτηση G, οπότε η τιμή της θα αλλάξει μέσα στην συνάρτηση G. Αυτό που δεν θα πρέπει να σε μπερδεύει είναι ότι στην συνάρτηση G υπάρχει και εκεί μια μεταβλητή ονόματι χ. Αυτή είναι τοπική μεταβλητή της G και σε καμία περίπτωση δεν έχει σχέση με την μεταβλητή της συνάρτησης F. Πρόσεξε ότι όταν καλείτε η G μέσα στην F δέχεται σαν όρισμα την χ, αλλά όταν εκτελείτε η F η μεταβλητή της είναι η y, οπότε και εκεί γίνονται οι αλλαγές που θέλεις. Ελπίζω να σε βοήθησα, για οποιαδήποτε απορία σου post-αρε
snaker1 Δημοσ. 23 Ιανουαρίου 2011 Μέλος Δημοσ. 23 Ιανουαρίου 2011 Ευχαριστώ πολύ fotis4u για την βοήθεια.Έψαξα επίσης στην wikipedia και νομίζω οτι έβγαλα μια άκρη.Με βάση αυτών που διάβασα εδώ http://en.wikipedia.org/wiki/Evaluation_strategy νομίζω οτι τα αποτελέσματα της άσκησης είναι α)1 β)11 και γ)1. Η τελευτέα περίπτωση με μπερδεύει και δεν μπορώ να την καταλάβω καλά όμως.
fotis4u Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Πρόσεξε πάλι το κώδικα σου, στην συνάρτηση F το x παίρνει την τιμή 1 (εάν μπορώ να καταλάβω, γιατί μου κάνει και για l), μετά καλείτε η συνάρτηση G, και γίνονται οι εξής διαδικασίες, το x παίρνει την τιμή 2 (όπου το x εδώ είναι τοπική μεταβλητή, δλδ μόνο η G μπορεί να το δεί) και στην συνέχεια γίνετε η παρακάτω πράξη y=5x+y, όπου στο y παίρνει το αποτέλεσμα 5*2+1(εδώ είναι η τιμή του x από την F), οπότε το αποτέλεσμα είναι y=11
snaker1 Δημοσ. 23 Ιανουαρίου 2011 Μέλος Δημοσ. 23 Ιανουαρίου 2011 Ναι έχεις δίκιο.Το χ είναι 1 όχι l.Αφου το y λοιπόν είναι 11, όταν έχουμε το πέρασμα της παραμέτρου με τιμή το χ δεν θα παραμήνει όπως ήταν στην αρχική συναρτηση F,άρα δεν θα παραμήνει 1; Αν δεν κάνω λάθος στο πέρασμα της τιμής με αναφορά δεν μεταφέρετε η τιμή του χ που υπάρχει μέσα στη συνάρτηση G και στη συνάρτηση F;
fotis4u Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Όχι στην δεύτερη συνάρτηση το y είναι το x της πρώτης, δοκίμασε να τρέξεις κάτι παρόμοιο στο PC σου ώστε να καταλάβεις την διαφορά.
snaker1 Δημοσ. 23 Ιανουαρίου 2011 Μέλος Δημοσ. 23 Ιανουαρίου 2011 Καταλαβένω οτι θές να μου εξηγήσεις οτι στο y της G είναι περασμένο το χ της F και ότι το χ της G είναι μια ανεξάρτητη τοπική μεταβλητή μέσα στην G.Αυτο που δεν μπορώ να καταλάβω παρότι το διάβασα και στην wikipedia είναι η διαφορά μεταξύ περάσματος τιμής,αναφοράς και αντιγραφής και επαναφοράς.Αφου το y=11 στην G τοτε το χ=11 στην F ενώ το χ=2 στην G δεν μας ενδιαφέρει καθόλου.Αλλά πια η διαφορά στις 3 περιπτώσεις.Δηλαδή το χ και στισ 3 περιπτώσεις θα είναι πάντα 11(μέσα στην F ενοώ);
Timonkaipumpa Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Timonkaipumpa εγώ δεν σου ζήτησα να με κρίνεις εγώ απλά ζήτησα αν μπορεί κάποιος να με βοηθήσει και να μου εξηγήσει πως λύνεται.Το post σου είναι πραγματικά άσκοπο,δεν με βοήθησε καθόλου και απορώ γιατί το έκανες. Δεν σε έκρινα. Δεν είπα ότι είσαι έτσι και αλλιώς. Αυτό που σου είπα είναι ότι είναι τόσο βασικό που (εάν έχω καταλάβει σωστά ότι είσαι φοιτητής σε τμήμα/σχολή/ιεκ πληροφορικής) θα πρέπει να το ξέρεις και όχι να ξέρεις πώς λύνεται μία συγκεκριμένη άσκηση. Το σχόλιο το είπα γιατί, και πάλι προσωπικά, θεωρώ πολύ ουσιαστικότερη κίνηση να δίνεις σε κάποιον το πώς παρά έτοιμα πράγματα, ειδικά όταν πρόκειται για βασικότατες γνώσεις (και όχι κάτι άκρως εξειδικευμένο). Ελπίζω να σου έλυσα την απορία.
fotis4u Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Όταν λέμε πέρασμα κατά τιμή (by Value) εννοούμε ότι περνάμε την τιμή του άμεσα, ενώ όταν λέμε κατά αναφορά (by Reference) εννοόυμε ότι περνάμε το σημείο το οποίο δείχνει την τιμή, οι λεγόμενοι Pointers
snaker1 Δημοσ. 23 Ιανουαρίου 2011 Μέλος Δημοσ. 23 Ιανουαρίου 2011 Όταν λέμε πέρασμα κατά τιμή (by Value) εννοούμε ότι περνάμε την τιμή του άμεσα, ενώ όταν λέμε κατά αναφορά (by Reference) εννοόυμε ότι περνάμε το σημείο το οποίο δείχνει την τιμή, οι λεγόμενοι Pointers Οποτε με βάση αυτό δεν εχουμε οτι στο a ερώτημα θα έχουμε χ=1 εφόσων δεν έχουμε pointer, στο b ερώτημα x=11 εφόσων έχουμε pointer; Δεν σε έκρινα. Δεν είπα ότι είσαι έτσι και αλλιώς. Αυτό που σου είπα είναι ότι είναι τόσο βασικό που (εάν έχω καταλάβει σωστά ότι είσαι φοιτητής σε τμήμα/σχολή/ιεκ πληροφορικής) θα πρέπει να το ξέρεις και όχι να ξέρεις πώς λύνεται μία συγκεκριμένη άσκηση. Το σχόλιο το είπα γιατί, και πάλι προσωπικά, θεωρώ πολύ ουσιαστικότερη κίνηση να δίνεις σε κάποιον το πώς παρά έτοιμα πράγματα, ειδικά όταν πρόκειται για βασικότατες γνώσεις (και όχι κάτι άκρως εξειδικευμένο). Ελπίζω να σου έλυσα την απορία. Εάν με το "πως" ενοείς το post που έκανες, δηλαδή αυτό εδώ : Εάν θες να το μάθεις, μπορείς, εκτός από το να διαβάσεις την θεωρία σου, να κάνεις ένα test εσύ με δικό σου κώδικα σε C (ασχολίαστη η πρώτη πρόταση που έγραψες) τότε εγώ είμαι χαζός και σε ευχαριστώ πάρα πολύ για την συμβουλή που μου έδωσες. Με την σειρά μου λοιπόν αφήνω τον κόσμο να κρίνει και σε πληροφορώ δεν θα κάνουν άσκοπα posts για να εκφράσουν την προσωπική κρίση τους. Αυτο ξεκαθάρισε και το γ ερώτημα : call-by-value-result - An argument passing convention where the actual argument is a variable V whose value is copied to a local variable L inside the called function or procedure. If the procedure modifies L, these changes will not affect V, which may also be in scope inside the procedure, until the procedure returns when the final value of L is copied to V. Under call-by-reference changes to L would affect V immediately. Used, for example, by BBC BASIC V on the Acorn Archimedes. Eυχαριστώ πολύ fotis4u για την βοηθειά σου.
fotis4u Δημοσ. 23 Ιανουαρίου 2011 Δημοσ. 23 Ιανουαρίου 2011 Συμβουλή μου θα ήταν να κοιτάξεις εκ νέου το συγκεκριμένο κεφάλαιο και να προσπαθήσεις να τρέξεις παρόμοια προβλήματα μέσα από πρόγραμμα. Πιστεύω θα σε κάνει να καταλάβεις τις 3 αυτές διαφορές και φυσικά να πειραματιστείς στην λογική των Pointers που θα σου χρειαστούν και στα παρακάτω κεφάλαια. Καλή συνέχεια στην εξεταστική σου
Timonkaipumpa Δημοσ. 24 Ιανουαρίου 2011 Δημοσ. 24 Ιανουαρίου 2011 Συμβουλή μου θα ήταν να κοιτάξεις εκ νέου το συγκεκριμένο κεφάλαιο και να προσπαθήσεις να τρέξεις παρόμοια προβλήματα μέσα από πρόγραμμα. Πιστεύω θα σε κάνει να καταλάβεις τις 3 αυτές διαφορές και φυσικά να πειραματιστείς στην λογική των Pointers που θα σου χρειαστούν και στα παρακάτω κεφάλαια. Εάν θες να το μάθεις, μπορείς, εκτός από το να διαβάσεις την θεωρία σου, να κάνεις ένα test εσύ με δικό σου κώδικα σε C Δεν νομίζω ότι σου είπα κάτι διαφορετικό. Εάν σου είναι εύκολο να ενοχλείσαι από γνώμες άλλων.. suite your self. Αλλά, και όπως βλέπεις, ο δρόμος είναι ένας, η αλήθεια είναι μία, τα φύλλα κάνουν 4ς και ο μπακλαβάς γωνία. Και όντως, κάποιος που δεν θέλει να μάθει (αλλά θέλει απλά να περάσει το μάθημα) την διαφορά μεταβίβασης κατά τιμή και κατά αναφορά... δεν νομίζω ότι αξίζει να περάσει κάποιο μάθημα που έχει αυτό το θέμα σαν ύλη. Εάν πάλι θέλεις να μάθεις (αλλά δυσκολεύεσαι)... τότε, και όπως ήδη σου είπαν δύο άτομα, θα πρέπει να κάνεις παραδείγματα μόνος σου και να διαβάσεις την θεωρία. Σε αυτά είναι η καλύτερη βοήθεια που θα βρεις. Αυτά... cheers!
Evgenios1 Δημοσ. 24 Ιανουαρίου 2011 Δημοσ. 24 Ιανουαρίου 2011 Δεν νομίζω ότι σου είπα κάτι διαφορετικό. Εάν σου είναι εύκολο να ενοχλείσαι από γνώμες άλλων.. suite your self. Αλλά, και όπως βλέπεις, ο δρόμος είναι ένας, η αλήθεια είναι μία, τα φύλλα κάνουν 4ς και ο μπακλαβάς γωνία. Και όντως, κάποιος που δεν θέλει να μάθει (αλλά θέλει απλά να περάσει το μάθημα) την διαφορά μεταβίβασης κατά τιμή και κατά αναφορά... δεν νομίζω ότι αξίζει να περάσει κάποιο μάθημα που έχει αυτό το θέμα σαν ύλη. Εάν πάλι θέλεις να μάθεις (αλλά δυσκολεύεσαι)... τότε, και όπως ήδη σου είπαν δύο άτομα, θα πρέπει να κάνεις παραδείγματα μόνος σου και να διαβάσεις την θεωρία. Σε αυτά είναι η καλύτερη βοήθεια που θα βρεις. Αυτά... cheers! λολ
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.