M2000 Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 (επεξεργασμένο) Νομίζω πως ζήτησε με τον τρόπο του ο Groot, το παρακάτω: Δεν το έγραψα σε C ρε συ. Μια ψευδοψευδογλώσσα προσπάθησα να γράψω, όπου το & δηλώνει ότι η μεταβλητή περνάει by reference. Στη Μ2000 τo σύμβολο & δηλώνει το πέρασμα με αναφορά. Στην ουσία είναι πέρασμα με τιμή αλλά η τιμή που δίνεται είναι ο δείκτης της μεταβλητής, και έτσι στην πλευρά της συνάρτησης πρέπει να έχουμε το & που δηλώνει πάρε τον δείκτη και φτιάξε την αναφορά. Η Μ2000 δεν έχει υπογραφές στις συναρτήσεις και τα τμήματα (διαδικασίες). Οι δείκτες στην Μ2000 δεν είναι αριθμοί αλλά το όνομα της μεταβλητής και το όνομα χώρου το όνομα του τμήματος που φτιάχτηκε, έτσι αν το Α φτιάχτηκε στο Α τμήμα θα έχει δείκτη το "Α.Α", Ο δείκτης αυτός λέγεται στην Μ2000 ισχνή αναφορά γιατί μεν αναφέρει την Α αλλά δεν έχει γίνει κανονική αναφορά. Θα γίνει όταν πάει στο Χ με την διάβασε &Χ. Τώρα το Χ δεν μπορεί να πάρει άλλη αναφορά! Ουσιαστικά ο διερμηνευτής βρήκε από την ισχνή αναφορά που είναι η πραγματική διεύθυνση της Α, την πραγματική αναφορά στην τιμή της Α και δημιούργησε την Χ να δείχνει σε αυτήν! Έτσι αλλάζοντας τιμή στη Χ αλλάζουμε αυτόματα στην Α. (στη ΓΛΩΣΣΑ του σχολείου ΔΕΝ γίνεται αυτό. Η Α δηλαδή δεν θα άλλαζε τιμή παρά μόνο όταν τερμάτιζε το Υποπρόγραμμα, και αυτό γίνεται γιατί η διεύθυνση της Α δεν δίνεται στο υποπρόγραμμα αλλά την κρατάει ο εσωτερικός κώδικας που καλεί το υποπρόγραμμα στην Κάλεσε) Τμήμα Τετράγωνο { Διάβασε &Χ Χ*=Χ}Α=2Τετράγωνο &ΑΤύπωσε Α Δείτε εδώ για την ΓΛΩΣΣΑ του σχολείου και την Μεταβίβαση παραμέτρων στον Διερμηνευτή. http://alkisg.mysch.gr/ΓΛΩΣΣΑ/Μεταβίβαση_παραμέτρων/ (ακόμα αναρωτιέμαι γιατί βλέπει ο Groot τη Μ2000 ως εφαρμογή και όχι γλώσσα..δηλαδή γιατί μπερδεύει το application με το programming language implementation) Επεξ/σία 25 Μαρτίου 2016 από M2000
Brazzers 1080p Δημοσ. 25 Μαρτίου 2016 Μέλος Δημοσ. 25 Μαρτίου 2016 Να πω την αληθεια ο kercyn με βοηθησε να καταλαβω απλα και κατανοητα τις διαφορες.M200 & defacer με ψιλομπερδεψατε αλλα ολα καλα αφου το "καταλαβα".Μαλλον δλδ.Αρα εαν κατανοησα σωστα τα λεγομενα σας την μεταβλητη α οταν την περνας by value δημιουργειται μια καινουρια μεταβλητη β η οποια εχει την τιμη της α.Αυτο που γινεται στη ΓΛΩΣΣΑ του σχολειου δλδ οπου η παραμετρος ειναι καινουρια μεταβλητη και "δουλευει για την συναρτηση",ενω by reference "μπακαλικα" ειναι σαν να περνας την ιδια την μεταβλητη μεσα εχοντας την δυνατοτητα να την κανεις οτι θες? ΥΓ:Νομιζω σε προηγουμενο ποστ μου ειπα οτι δεν ξερω να φτιαχνω τριλιζα η και φιδακι η καποιο παρομοιο παιχνιδι οταν καποιος απο εσας με ρωτησε.Αμ δε.....http://www.kelafas.gr/themata.html?filename=2009/epanaliptikes/anef_epan_09.pdf Ασκηση για το σπιτι ολο το επαναληπτικο του 2009.Wish me luck για το 4ο Θεμα.....
gon1332 Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Break a leg. Φτιάξε και μία ναυμαχία στο τέλος.
Brazzers 1080p Δημοσ. 25 Μαρτίου 2016 Μέλος Δημοσ. 25 Μαρτίου 2016 Break a leg. Φτιάξε και μία ναυμαχία στο τέλος. Δεν νομιζω οτι σε πιανω...ΤΙ εννοεις?
M2000 Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Brazzers 1080p Καλή τύχη σου είπε με το Break a leg... Εντάξει το κατάλαβες το by Reference απλά πρέπει σε κάθε γλώσσα να διαβάζεις τι γίνεται εξ ορισμού. Άλλες γλώσσες περνούν εξορισμού με αναφορά και άλλες με τιμή. Το "εξ ορισμού" ή by default, στον τρόπο περάσματος, σημαίνει με απλά λόγια ότι όταν δεν μπαίνουν κάποια σημάδια για να δηλώσουν κάτι ειδικά, τότε ακολουθούμε αυτόν τον τρόπο. Στη ΓΛΩΣΣΑ του σχολείου αν θες να περάσεις με τιμή μια μεταβλητή πρέπει να την βάλεις σε παρενθέσεις ώστε να εξαχθεί η τιμή ως τιμή έκφρασης (παράστασης). Πρόσεξε όμως..στις συναρτήσεις της ΓΛΩΣΣΑΣ δεν υπάρχει πέρασμα με αναφορά! Άρα αν εκεί βάλεις μια μεταβλητή χωρίς παρενθέσεις τότε σίγουρα είναι πέρασμα με τιμή! Να προσθέσω εδώ ότι η ΓΛΩΣΣΑ δεν δέχεται κλήση διαδικασιών μέσα σε συναρτήσεις! 1
defacer Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Μάλλον το παράδειγμά μου δεν ήταν το σωστό. Αν περάσουμε Α, Α με αναφορά, και το πρώτο πάει στο Χ και το δεύτερο στο Υ, τότε αν το Χ γίνει Χ+1, η Υ δεν θα γίνει Υ+1, έτσι αν βάλουμε τιμή 5 στην Α, η Α που θα γυρίσει θα έχει το 5 και όχι το 6. Αν η αναφορά περνάει με διεύθυνσεις,τότε θα πάρουμε το 6 Στη πρώτη περίπτωση αντιγράφεται το 5 στα Χ και Υ και μετά η τιμή του Χ που έχει γίνει 6 πάει στο Α, και μετά η τιμή του Υ που είναι 5 πάει στο Α. Υποθέτω μιλάς συγκεκριμένα για το τί γίνεται στη γλώσσα. Αν όντως αυτό το πράγμα γίνεται τότε δε μιλάμε για αναφορές αλλά για κάποιο μπαστάρδεμα που είπα νωρίτερα και κακώς χρησιμοποιείται ο όρος αναφορά. Το "αν η αναφορά περνάει με διευθύνσεις" που λες είναι λάθος τρόπος σκέψης. Η αναφορά είναι αναφορά και πρέπει να λειτουργεί σαν αναφορά, end of story. Αν ο compiler το κάνει αυτό με pointers ή με registers ή με νεραϊδόσκονη στο επίπεδο που μιλάμε δεν πρέπει να μας απασχολεί καθόλου.
M2000 Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Ίσως η σωστή έκφρασή να είναι η αναφορά στην μεταβλητή σκέτο. Μου έτυχε να το βρω μπροστά μου, το copy in-copy out, όταν προγραμμάτιζα τα παράθυρα στην γλώσσα Μ2000, και έπρεπε το μήνυμα του γεγονότος να σταλθεί με αναφορά. Έπρεπε ο κώδικας της VB6 να αντιγράψει μια δική του μεταβλητή να καλέσει την αγνωστη σε αυτό το σημείο ρουτίνα (γίνεται με έναν έμμεσο τρόπο) που εξυπηρετεί το γεγονός και η οποία είναι γραμμένη σε Μ2000, και αυτή η ρουτίνα να παρέχει την τιμή με αναφορά, αφού την δώσει με αναφορά μεταβλητής σε Μ2000 που φτιάχνει αυτόματα και στο τέλος, στην επιστροφή, η τιμή να φύγει από την αυτόματη αυτή μεταβλητή και να γυρίσει στην αρχική ρουτίνα που κλήθηκε στην VB για το γεγονός. Η VB παίζει το ρόλο της χαμηλού επιπέδου γλώσσας, και η Μ2000, το ρόλο της υψηλού επιπέδου.Αυτά γίνονται εκεί που έχουμε διερμηνευτή. Προφανώς Defacer αναφέρεσαι εκεί που έχουμε μεταγλώττιση, άρα όλα τρέχουν σε ένα επίπεδο.Προσπάθησα να γίνω κατανοητός..Συγνώμη αν δημιουργώ θέμα.
DDevil Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Δεν το έγραψα σε C ρε συ. Μια ψευδοψευδογλώσσα προσπάθησα να γράψω, όπου το & δηλώνει ότι η μεταβλητή περνάει by reference. Νομιζα ηταν σε C Intelligent
Brazzers 1080p Δημοσ. 25 Μαρτίου 2016 Μέλος Δημοσ. 25 Μαρτίου 2016 @M2000 Επισης στο μακροσκελες ποστ σου τι εννοεις με τις ρουτινες?Στα αγγλικα τι σημαινει?Class εννοεις μηπως? ΥΓ:Η γλωσσα δεν παιζει με τιποτα να χρησιμοποιει global variables αλλα ουτε και locals(Εκτος απο τις συναρτησεις φυσικα).Αρα τι χρησιμοποιει ξερει κανεις? Thanks.
Moderators Kercyn Δημοσ. 25 Μαρτίου 2016 Moderators Δημοσ. 25 Μαρτίου 2016 Και τα δύο. Στην αρχή του προγράμματος δεν πρέπει να δηλώσεις τις globals σου; Και μέσα στις συναρτήσεις δε μπορείς να ορίσεις locals; Εκτός αν θυμάμαι λάθος... 1
M2000 Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 1. Η ΓΛΩΣΣΑ δεν έχει Globals. Άρα ότι φτιάχνει κανείς είναι τοπικό και σε διαδικασία θα το περάσει με αναφορά. Οι διαδικασίες εξ ορισμού περνούν με αναφορά (εκτός αν βάλουμε παρενθέσεις, ή έχουμε έκφραση με συνήθη σύμβολα). Στις συναρτήσεις μόνο με τιμή περνάμε κάτι. 2. Σε ορισμένες γλώσσες μια "Στατική" κλάση φαίνεται σαν "υποδοχέας" ρουτινών. Όταν λέμε κλήση ρουτίνας στην πιο απλή μορφή της είναι η κλήση ενός μέρος κώδικα του προγράμματος που τρέχει, και όταν βρεθεί μια εντολή π.χ. return επιστρέφει η ροή στην αμέσως επόμενη εντολή από αυτή που κάλεσε τη ρουτίνα. Σε αυτή τη περίπτωση οι μεταβλητές είναι παντού θεατές (συνήθως δεν υπάρχουν καν τοπικές). Όταν λέμε ρουτίνα που δέχεται παραμέτρους, τότε μιλάμε για ξεχωριστό "υποπρόγραμμα". Υπάρχουν γλώσσες που τα υποπρογράμματα τα χαρακτηρίζουν private ή public. Αυτό σημαίνει ότι βρίσκονται σε έναν χώρο που μπορούν να καλέσουν η μία την άλλη, αλλά έξω από το χώρο αυτό φαίνονται μόνο οι Public. Τέτοια δεν έχει η ΓΛΩΣΣΑ. 3. Η ΓΛΩΣΣΑ δεν έχει φωλιασμένες διαδικασίες ή συναρτήσεις. Έτσι όλες οι διαδικασίες και οι συναρτήσεις είναι φανερές παντού. Γράφονται δε στο τέλος του προγράμματος. Οι μεταβλητές του κύριου προγράμματος όμως δεν είναι θεατές από τις συναρτήσεις και τις διαδικασίες (Αλλιώς θα τις λέγαμε global) 4. Διαδικασία και ρουτίνα σε μερικές γλώσσες είναι το ίδιο. 5. Δυναμική διαχείριση μνήμης και Κλάσεις. Αν εξαιρέσουμε Interpreted γλώσσες όπου η εκτέλεση γίνεται με ένα πέρασμα, όλες οι άλλες καθορίζουν στο κύριο πρόγραμμα στατικές μεταβλητές, και σε διαδικασίες και συναρτήσεις χρήστη, δυναμικές. Τα αντικείμενα είναι τοπικά προγράμματα κατ' ουσίαν, και η κλάση τα περιγράφει απλά (όπως το πρόγραμμα περιγράφει τι θέλουμε ο compiler να φτιάξει, άλλο η περιγραφή και άλλο η εκτέλεση). Όταν φτιάχνουμε ένα αντικείμενο τότε κάνουμε ότι και σε ένα πρόγραμμα, στατικές μεταβλητές για αυτά που θεωρούμε "του αντικειμένου" και για τις μεθόδους του δυναμικές. Υπάρχουν περιπτώσεις που μπορούμε να ορίσουμε στατικές σε μεθόδους. ή υπάρχει περίπτωση όλα τα αντικείμενα να βλέπουν κοινές μεταβλητές, όχι "του αντικειμένου" αλλά όλων των ίδιων αντικειμένων. Για οτιδήποτε "δυναμικό", σε μια μέθοδο, υπάρχει ένας μηχανισμός που σε κάθε κλήση της θα φτιάξει τις δυναμικές μεταβλητές, με αρχικές τιμές που έχουμε δώσει. 6.Όπου υπάρχει το στοιχείο του "δυναμικού" υπάρχει η έννοια της "ζωής" ή lifetime μιας οντότητας, έτσι και οι κλάσεις (τα αντικείμενα που φτιάχνουμε με αυτές) και οι τοπικές μεταβλητές σε μια μέθοδο ενός αντικειμένου, έχουν προκαθορισμένη "ζωή". Η ΓΛΩΣΣΑ του σχολείου φτιάχνει τις τοπικές μεταβλητές στις συναρτήσεις και τις διαδικασίες. Μπορούμε να καλέσουμε την τρέχουσα διαδικασία, και αυτό λέγεται αναδρομή. Κάθε φορά, σε κάθε νέα κλήση σε φάση αναδρομής θα φτιάχνονται νέες τοπικές μεταβλητές. Η ΓΛΩΣΣΑ δεν υποστηρίζει Στατικές μεταβλητές σε Υποπρογράμματα-Συναρτήσεις. Στατική μεταβλητή θα σήμαινε ότι κάθε φορά που καλούμε τη συνάρτηση που την έχει, η τιμή της θα έχει την τελευταία τιμή που είχε από την προηγούμενη κλήση. Όπως αναφέρθηκε παραπάνω, οι μεταβλητές του κυρίως προγράμματος είναι στατικές, παραμένουν μέχρι να τερματίσει το πρόγραμμα. 7. Σε γλώσσες που λένε Static κλάσεις, δεν σημαίνει υπάρχει ένα αντικείμενο που ετοιμάζεται πριν τρέξει το πρόγραμμα και το πρόγραμμα τρέχει πάνω σε αυτό! Σε αυτές τις περιπτώσεις δεν υπάρχει δεν υπάρχει ορισμός αντικειμένου (έχει γίνει ήδη στον κώδικα). Να σημειώσω εδώ ότι ο κώδικας ενός προγράμματος δεν έχει μόνο το μέρος που εκτελείται αλλά έχει και ένα άλλο το μέρος με δεδομένα. Η C δεν έχει αντικείμενα αλλά αν θέλει κανείς μπορεί να φτιάξει, φτιάχνοντας ρουτίνες να τα υποστηρίξει), αλλά δεν θα μπορέσει να έχει static αντικείμενα αφού οι ρουτίνες του θα ξεκινούν με την εκκίνηση του προγράμματος! Η C# όμως φτιάχνει στατικές κλάσεις. 1
Brazzers 1080p Δημοσ. 25 Μαρτίου 2016 Μέλος Δημοσ. 25 Μαρτίου 2016 Και τα δύο. Στην αρχή του προγράμματος δεν πρέπει να δηλώσεις τις globals σου; Και μέσα στις συναρτήσεις δε μπορείς να ορίσεις locals; Εκτός αν θυμάμαι λάθος... Ειμαι αρκετα σιγουρος πως δεν υπαρχουν global μεταβλητες στη γλωσσα...
defacer Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Ίσως η σωστή έκφρασή να είναι η αναφορά στην μεταβλητή σκέτο. Μου έτυχε να το βρω μπροστά μου, το copy in-copy out, όταν προγραμμάτιζα τα παράθυρα στην γλώσσα Μ2000, και έπρεπε το μήνυμα του γεγονότος να σταλθεί με αναφορά. Έπρεπε ο κώδικας της VB6 να αντιγράψει μια δική του μεταβλητή να καλέσει την αγνωστη σε αυτό το σημείο ρουτίνα (γίνεται με έναν έμμεσο τρόπο) που εξυπηρετεί το γεγονός και η οποία είναι γραμμένη σε Μ2000, και αυτή η ρουτίνα να παρέχει την τιμή με αναφορά, αφού την δώσει με αναφορά μεταβλητής σε Μ2000 που φτιάχνει αυτόματα και στο τέλος, στην επιστροφή, η τιμή να φύγει από την αυτόματη αυτή μεταβλητή και να γυρίσει στην αρχική ρουτίνα που κλήθηκε στην VB για το γεγονός. Η VB παίζει το ρόλο της χαμηλού επιπέδου γλώσσας, και η Μ2000, το ρόλο της υψηλού επιπέδου. Αυτά γίνονται εκεί που έχουμε διερμηνευτή. Προφανώς Defacer αναφέρεσαι εκεί που έχουμε μεταγλώττιση, άρα όλα τρέχουν σε ένα επίπεδο. Διόρθωση, αυτά γίνονται όχι "εκεί που έχουμε διερμηνευτή" αλλά εκεί που έχουμε ένα runtime περιβάλλον μέρος της υλοποίησης του οποίου βασίζεται σε άλλο, ασύμβατο runtime περιβάλλον. Τα υπόλοιπα του παρακάτω post δεν έχω ούτε διάθεση ούτε κουράγιο να τα σχολιάσω.
M2000 Δημοσ. 25 Μαρτίου 2016 Δημοσ. 25 Μαρτίου 2016 Ναι συμφωνώ..Πώς θα έχεις διερμηνευτή χωρίς να υπάρχει το πρόγραμμα που θα το τρέχει; Δηλαδή το Runtime! Καλά έκανες και το διευκρίνισες!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα