Προς το περιεχόμενο

Μικρες αποριουλες για γλωσσα σχολειου 3ης λυκειου :)


Brazzers 1080p

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Νομίζω πως ζήτησε με τον τρόπο του ο Groot, το παρακάτω:

 

 

Δεν το έγραψα σε C ρε συ. Μια ψευδοψευδογλώσσα προσπάθησα να γράψω, όπου το & δηλώνει ότι η μεταβλητή περνάει by reference.

 

Στη Μ2000 τo σύμβολο & δηλώνει το πέρασμα με αναφορά. Στην ουσία είναι πέρασμα με τιμή αλλά η τιμή που δίνεται είναι ο δείκτης της μεταβλητής, και έτσι στην πλευρά της συνάρτησης πρέπει να έχουμε το & που δηλώνει πάρε τον δείκτη και φτιάξε την αναφορά. Η Μ2000 δεν έχει υπογραφές στις συναρτήσεις και τα τμήματα (διαδικασίες). Οι δείκτες στην Μ2000 δεν είναι αριθμοί αλλά το όνομα της μεταβλητής και το όνομα χώρου το όνομα του τμήματος που φτιάχτηκε, έτσι αν το Α φτιάχτηκε στο Α τμήμα θα έχει δείκτη το "Α.Α", Ο δείκτης αυτός λέγεται στην Μ2000 ισχνή αναφορά γιατί μεν αναφέρει την Α αλλά δεν έχει γίνει κανονική αναφορά. Θα γίνει όταν πάει στο Χ με την διάβασε &Χ. Τώρα το Χ δεν μπορεί να πάρει άλλη αναφορά! Ουσιαστικά ο διερμηνευτής βρήκε από την ισχνή αναφορά που είναι η πραγματική διεύθυνση της Α, την πραγματική αναφορά στην τιμή της Α και δημιούργησε την Χ να δείχνει σε αυτήν! Έτσι αλλάζοντας τιμή στη Χ αλλάζουμε αυτόματα στην Α.  (στη ΓΛΩΣΣΑ του σχολείου ΔΕΝ γίνεται αυτό. Η Α δηλαδή δεν θα άλλαζε τιμή παρά μόνο όταν τερμάτιζε το Υποπρόγραμμα, και αυτό γίνεται γιατί η διεύθυνση της Α δεν δίνεται στο υποπρόγραμμα αλλά την κρατάει ο εσωτερικός κώδικας που καλεί το υποπρόγραμμα στην Κάλεσε)

 

Τμήμα Τετράγωνο {
      Διάβασε &Χ
      Χ*=Χ
}
Α=2
Τετράγωνο &Α
Τύπωσε Α


Δείτε εδώ για την ΓΛΩΣΣΑ του σχολείου και την Μεταβίβαση παραμέτρων στον Διερμηνευτή.

 

http://alkisg.mysch.gr/ΓΛΩΣΣΑ/Μεταβίβαση_παραμέτρων/

 

(ακόμα αναρωτιέμαι γιατί βλέπει ο Groot τη Μ2000  ως εφαρμογή και όχι γλώσσα..δηλαδή γιατί μπερδεύει το application με το programming language implementation)

Επεξ/σία από M2000
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 66
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Να πω την αληθεια ο 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ο Θεμα.....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Brazzers 1080p

Καλή τύχη σου είπε με το Break a leg...

 

Εντάξει το κατάλαβες το by Reference απλά πρέπει σε κάθε γλώσσα να διαβάζεις τι γίνεται εξ ορισμού. Άλλες γλώσσες περνούν εξορισμού με αναφορά και άλλες με τιμή. Το "εξ ορισμού" ή by default, στον τρόπο περάσματος, σημαίνει με απλά λόγια ότι  όταν δεν μπαίνουν κάποια σημάδια για να δηλώσουν κάτι ειδικά, τότε ακολουθούμε αυτόν τον τρόπο.

 

Στη ΓΛΩΣΣΑ του σχολείου αν θες να περάσεις με τιμή μια μεταβλητή πρέπει να την βάλεις σε παρενθέσεις ώστε να εξαχθεί η τιμή ως τιμή έκφρασης (παράστασης). Πρόσεξε όμως..στις συναρτήσεις της ΓΛΩΣΣΑΣ δεν υπάρχει πέρασμα με αναφορά! Άρα αν εκεί βάλεις μια μεταβλητή χωρίς παρενθέσεις τότε σίγουρα είναι πέρασμα με τιμή!

 

Να προσθέσω εδώ ότι η ΓΛΩΣΣΑ δεν δέχεται κλήση διαδικασιών μέσα σε συναρτήσεις!

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μάλλον το παράδειγμά μου δεν ήταν το σωστό. Αν περάσουμε Α, Α με αναφορά, και το πρώτο πάει στο Χ και το δεύτερο στο Υ, τότε αν το Χ γίνει Χ+1, η Υ δεν θα γίνει Υ+1, έτσι αν βάλουμε τιμή 5 στην Α, η Α που θα γυρίσει θα έχει το 5 και όχι το 6. Αν η αναφορά περνάει με διεύθυνσεις,τότε θα πάρουμε το 6

Στη πρώτη περίπτωση αντιγράφεται το 5 στα Χ και Υ και μετά η τιμή του Χ που έχει γίνει 6 πάει στο Α, και μετά η τιμή του Υ που είναι 5 πάει στο Α.

 

Υποθέτω μιλάς συγκεκριμένα για το τί γίνεται στη γλώσσα. Αν όντως αυτό το πράγμα γίνεται τότε δε μιλάμε για αναφορές αλλά για κάποιο μπαστάρδεμα που είπα νωρίτερα και κακώς χρησιμοποιείται ο όρος αναφορά.

 

Το "αν η αναφορά περνάει με διευθύνσεις" που λες είναι λάθος τρόπος σκέψης. Η αναφορά είναι αναφορά και πρέπει να λειτουργεί σαν αναφορά, end of story. Αν ο compiler το κάνει αυτό με pointers ή με registers ή με νεραϊδόσκονη στο επίπεδο που μιλάμε δεν πρέπει να μας απασχολεί καθόλου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ίσως η σωστή έκφρασή να είναι η αναφορά στην μεταβλητή σκέτο. Μου έτυχε να το βρω μπροστά μου, το copy in-copy out, όταν προγραμμάτιζα τα παράθυρα στην γλώσσα Μ2000, και έπρεπε το μήνυμα του γεγονότος να σταλθεί με αναφορά. Έπρεπε ο κώδικας της VB6 να αντιγράψει μια δική του μεταβλητή να καλέσει την αγνωστη σε αυτό το σημείο ρουτίνα (γίνεται με έναν έμμεσο τρόπο) που εξυπηρετεί το γεγονός και η οποία είναι γραμμένη σε Μ2000, και αυτή η ρουτίνα να παρέχει την τιμή με αναφορά, αφού την δώσει με αναφορά μεταβλητής σε Μ2000 που φτιάχνει αυτόματα και στο τέλος, στην επιστροφή, η τιμή να φύγει από την αυτόματη αυτή μεταβλητή και να γυρίσει στην αρχική ρουτίνα που κλήθηκε στην VB για το γεγονός. Η VB παίζει το ρόλο της χαμηλού επιπέδου γλώσσας, και η Μ2000, το ρόλο της υψηλού επιπέδου.

Αυτά γίνονται εκεί που έχουμε διερμηνευτή. Προφανώς Defacer αναφέρεσαι εκεί που έχουμε μεταγλώττιση, άρα όλα τρέχουν σε ένα επίπεδο.

Προσπάθησα να γίνω κατανοητός..Συγνώμη αν δημιουργώ θέμα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν το έγραψα σε C ρε συ. Μια ψευδοψευδογλώσσα προσπάθησα να γράψω, όπου το & δηλώνει ότι η μεταβλητή περνάει by reference.

 

Νομιζα ηταν σε C Intelligent :-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@M2000

 

Επισης στο μακροσκελες ποστ σου τι εννοεις με τις ρουτινες?Στα αγγλικα τι σημαινει?Class εννοεις μηπως?

 

ΥΓ:Η γλωσσα δεν παιζει με τιποτα να χρησιμοποιει global variables αλλα ουτε και locals(Εκτος απο τις συναρτησεις φυσικα).Αρα τι χρησιμοποιει ξερει κανεις?

Thanks.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Και τα δύο. Στην αρχή του προγράμματος δεν πρέπει να δηλώσεις τις globals σου; Και μέσα στις συναρτήσεις δε μπορείς να ορίσεις locals; Εκτός αν θυμάμαι λάθος...

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1. Η ΓΛΩΣΣΑ δεν έχει Globals. Άρα ότι φτιάχνει κανείς είναι τοπικό και σε διαδικασία θα το περάσει με αναφορά. Οι διαδικασίες εξ ορισμού περνούν με αναφορά (εκτός αν βάλουμε παρενθέσεις, ή  έχουμε έκφραση με συνήθη σύμβολα). Στις συναρτήσεις μόνο με τιμή περνάμε κάτι.

2. Σε ορισμένες γλώσσες μια "Στατική" κλάση φαίνεται σαν "υποδοχέας" ρουτινών. Όταν λέμε κλήση ρουτίνας στην πιο απλή μορφή της είναι η κλήση ενός μέρος κώδικα του προγράμματος που τρέχει, και όταν βρεθεί μια εντολή π.χ. return επιστρέφει η ροή στην αμέσως επόμενη εντολή από αυτή που κάλεσε τη ρουτίνα. Σε αυτή τη περίπτωση οι μεταβλητές είναι παντού θεατές (συνήθως δεν υπάρχουν καν τοπικές). Όταν λέμε ρουτίνα που δέχεται παραμέτρους, τότε μιλάμε για ξεχωριστό "υποπρόγραμμα". Υπάρχουν γλώσσες που τα υποπρογράμματα τα χαρακτηρίζουν private ή public. Αυτό σημαίνει ότι βρίσκονται σε έναν χώρο που μπορούν να καλέσουν η μία την άλλη, αλλά έξω από το χώρο αυτό φαίνονται μόνο οι Public. Τέτοια δεν έχει η ΓΛΩΣΣΑ.

3. Η ΓΛΩΣΣΑ δεν έχει φωλιασμένες διαδικασίες ή συναρτήσεις. Έτσι όλες οι διαδικασίες και οι συναρτήσεις είναι φανερές παντού. Γράφονται δε στο τέλος του προγράμματος. Οι μεταβλητές του κύριου προγράμματος όμως δεν είναι θεατές από τις συναρτήσεις και τις διαδικασίες (Αλλιώς θα τις λέγαμε global)

 

4. Διαδικασία και ρουτίνα σε μερικές γλώσσες είναι το ίδιο.

5. Δυναμική διαχείριση μνήμης και Κλάσεις. Αν εξαιρέσουμε Interpreted γλώσσες όπου η εκτέλεση γίνεται με ένα πέρασμα, όλες οι άλλες καθορίζουν στο κύριο πρόγραμμα στατικές μεταβλητές, και σε διαδικασίες και συναρτήσεις χρήστη, δυναμικές. Τα αντικείμενα είναι τοπικά προγράμματα κατ' ουσίαν, και η κλάση τα περιγράφει απλά (όπως το πρόγραμμα περιγράφει τι θέλουμε ο compiler να φτιάξει, άλλο η περιγραφή και άλλο η εκτέλεση). Όταν φτιάχνουμε ένα αντικείμενο τότε κάνουμε ότι και σε ένα πρόγραμμα, στατικές μεταβλητές για αυτά που θεωρούμε "του αντικειμένου" και για τις μεθόδους του δυναμικές. Υπάρχουν περιπτώσεις που μπορούμε να ορίσουμε στατικές σε μεθόδους. ή υπάρχει περίπτωση όλα τα αντικείμενα να βλέπουν κοινές μεταβλητές, όχι "του αντικειμένου" αλλά όλων των ίδιων αντικειμένων. Για οτιδήποτε "δυναμικό", σε μια μέθοδο,  υπάρχει ένας μηχανισμός που σε κάθε κλήση της θα φτιάξει τις δυναμικές μεταβλητές, με αρχικές τιμές που έχουμε δώσει.

6.Όπου υπάρχει το στοιχείο του "δυναμικού" υπάρχει η έννοια της "ζωής" ή lifetime μιας οντότητας, έτσι και οι κλάσεις (τα αντικείμενα που φτιάχνουμε με αυτές)  και οι τοπικές μεταβλητές σε μια μέθοδο ενός αντικειμένου, έχουν προκαθορισμένη "ζωή".  Η ΓΛΩΣΣΑ του σχολείου φτιάχνει τις τοπικές μεταβλητές στις συναρτήσεις και τις διαδικασίες. Μπορούμε να καλέσουμε την τρέχουσα διαδικασία, και αυτό λέγεται αναδρομή. Κάθε φορά, σε κάθε νέα κλήση σε φάση αναδρομής θα φτιάχνονται νέες τοπικές μεταβλητές. Η ΓΛΩΣΣΑ δεν υποστηρίζει Στατικές μεταβλητές σε Υποπρογράμματα-Συναρτήσεις. Στατική μεταβλητή θα σήμαινε ότι κάθε φορά που καλούμε τη συνάρτηση που την έχει, η τιμή της θα έχει την τελευταία τιμή που είχε από την προηγούμενη κλήση. Όπως αναφέρθηκε παραπάνω, οι μεταβλητές του κυρίως προγράμματος είναι στατικές, παραμένουν μέχρι να τερματίσει το πρόγραμμα.

7. Σε γλώσσες που λένε Static κλάσεις, δεν σημαίνει υπάρχει ένα αντικείμενο που ετοιμάζεται πριν τρέξει το πρόγραμμα και το πρόγραμμα τρέχει πάνω σε αυτό! Σε αυτές τις περιπτώσεις δεν υπάρχει δεν υπάρχει ορισμός αντικειμένου (έχει γίνει ήδη στον κώδικα). Να σημειώσω εδώ ότι ο κώδικας ενός προγράμματος δεν έχει μόνο το μέρος που εκτελείται αλλά έχει και ένα άλλο το μέρος με δεδομένα. Η C δεν έχει αντικείμενα αλλά αν θέλει κανείς μπορεί να φτιάξει, φτιάχνοντας ρουτίνες να τα υποστηρίξει), αλλά δεν θα μπορέσει να έχει static αντικείμενα αφού οι ρουτίνες του θα ξεκινούν με την εκκίνηση του προγράμματος! Η C# όμως φτιάχνει στατικές κλάσεις.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και τα δύο. Στην αρχή του προγράμματος δεν πρέπει να δηλώσεις τις globals σου; Και μέσα στις συναρτήσεις δε μπορείς να ορίσεις locals; Εκτός αν θυμάμαι λάθος...

 

Ειμαι αρκετα σιγουρος πως δεν υπαρχουν global μεταβλητες στη γλωσσα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ίσως η σωστή έκφρασή να είναι η αναφορά στην μεταβλητή σκέτο. Μου έτυχε να το βρω μπροστά μου, το copy in-copy out, όταν προγραμμάτιζα τα παράθυρα στην γλώσσα Μ2000, και έπρεπε το μήνυμα του γεγονότος να σταλθεί με αναφορά. Έπρεπε ο κώδικας της VB6 να αντιγράψει μια δική του μεταβλητή να καλέσει την αγνωστη σε αυτό το σημείο ρουτίνα (γίνεται με έναν έμμεσο τρόπο) που εξυπηρετεί το γεγονός και η οποία είναι γραμμένη σε Μ2000, και αυτή η ρουτίνα να παρέχει την τιμή με αναφορά, αφού την δώσει με αναφορά μεταβλητής σε Μ2000 που φτιάχνει αυτόματα και στο τέλος, στην επιστροφή, η τιμή να φύγει από την αυτόματη αυτή μεταβλητή και να γυρίσει στην αρχική ρουτίνα που κλήθηκε στην VB για το γεγονός. Η VB παίζει το ρόλο της χαμηλού επιπέδου γλώσσας, και η Μ2000, το ρόλο της υψηλού επιπέδου.

 

Αυτά γίνονται εκεί που έχουμε διερμηνευτή. Προφανώς Defacer αναφέρεσαι εκεί που έχουμε μεταγλώττιση, άρα όλα τρέχουν σε ένα επίπεδο.

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

 

Τα υπόλοιπα του παρακάτω post δεν έχω ούτε διάθεση ούτε κουράγιο να τα σχολιάσω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι συμφωνώ..Πώς θα έχεις διερμηνευτή χωρίς να υπάρχει το πρόγραμμα που θα το τρέχει; Δηλαδή το Runtime! Καλά έκανες και το διευκρίνισες!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...