Τρίτη 4 Ιουνίου 2019

Αντικείμενα στην Μ2000, απλό παράδειγμα.

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

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

Η πιο απλή δομή για αντικείμενα είναι ο πίνακας. Στο παράδειγμα εδώ κάνουμε χρήση πίνακα. Ειδικά η Μ2000 μπορεί να ορίζει ξανά έναν πίνακα χωρίς να διαγράφει στοιχεία, εκτός και αν τα λιγοστέψουμε, οπότε διαγράφει τα επιπλέον. Κάθε στοιχείο πίνακα μπορεί να πάρει οποιαδήποτε τιμή, έναν αριθμό, ένα αλφαριθμητικό, ένα αντικείμενο. Αν το όνομα του πίνακα έχει το $ τότε ένα Α$(3)=1000 θα βγει λάθος, όχι γιατί δεν μπορεί να γραφτεί ο αριθμός αλλά δεν το επιτρέπει αυτός ο συντακτικός τρόπος. Στο παράδειγμα που ακολουθεί φτιάχνουμε πίνακα 10 στοιχείων ως α$(). Αυτό σημαίνει ότι η Τύπωσε α$() θα πρέπει να εμφανίσει αλφαριθμητικό (αν γίνεται). Μια α$(1)="Πέτρος" θα βάλει αλφαριθμητικό στο α$(1). Οι πίνακες έχουν βάση το 0, αλλά μπορούμε να το αλλάξουμε. Πχ Πίνακας Βάση1, α$(10) θα έχουμε από 1 μέχρι 10 στοιχεία. Ενώ Πίνακας α$(2 έως 11) θα έχουμε βάση το 2 και πάλι δέκα στοιχεία (μπορούμε να δώσουμε και αρνητικούς αριθμούς). Μέγιστο διαστάσεων είναι οι δέκα διαστάσεις, ενώ ελάχιστο είναι το 0, δηλαδή καμία διάσταση.

πίνακας α$(10)
μ=α$() ' το μ είναι δείκτης στο α$()
επιστροφή μ, 3:=100
τύπωσε α$(3) ' δίνει 100 ως αλφαριθμητικό
\\ πιο γρήγορος τρόπος
α$(4):=1000
τύπωσε α$(4) ' δίνει 1000 ως αλφαριθμητικό
Ένωσε α$() στο α() ' κάνει το α() αναφορά του α$()
Τύπωσε α(3)+α(4)=1100


Περί διαστάσεων πινάκων και πως τις διαβάζουμε:
Πίνακας α(), β(0)
Τύπωσε μήκος(α())=0, διάσταση(α())=0
Τύπωσε μήκος(β())=0, διάσταση(β())=0
Πίνακας α(5), β(-2 έως 2)
Τύπωσε μήκος(α())=5, διάσταση(α())=1
Τύπωσε μήκος(β())=5, διάσταση(β())=1
Πίνακας α(2, 5), β(-1 έως 0, -2 έως 2)
Τύπωσε μήκος(α())=10, διάσταση(α())=2
Τύπωσε μήκος(β())=10, διάσταση(β())=2

Τύπωσε διάσταση(β(),1)=2, διάσταση(β(),2)=5
Τύπωσε διάσταση(β(),1,0)=-1, διάσταση(β(),1,1)=0
Τύπωσε διάσταση(β(),2,0)=-2, διάσταση(β(),2,1)=2



Περί Ομάδων

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

Σε ένα πίνακα μπορούμε να βάλουμε οτιδήποτε εκτός από Τμήμα και Συνάρτηση (μπορούμε να βάλουμε λάμδα συνάρτηση, που είναι πρώτος πολίτης, δηλαδή σαν τιμή μεταβλητής). Με την χρήση ομάδων μπορούμε τα τμήματα και τις συναρτήσεις να τα έχουμε σε ομάδες και να βάλουμε τις ομάδες στο πίνακα. Στην ουσία μια ομάδα είναι ένα πρόγραμμα με μεταβλητές και τμήματα και συναρτήσεις, αλλά και άλλες ομάδες εσωτερικά. Οι ιδιότητες είναι ομάδες που ή επιστρέφουν τιμή ή δέχονται τιμή ή κάνουν και τα δύο, και μπορούμε να δώσουμε κώδικα τια το πώς επιστρέφουν τιμή ή και πώς παίρνουν τιμή.

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

Όταν φτιάχνουμε το αντικείμενο Σκύλος τότε στην Σκύλος() φτιάχνεται μια ομάδα και στον κατασκευαστή της (Τμήμα Σκύλος) κάνουμε συγχώνευση την ομάδα Ζώο που επιστρέφει η Ζώο(). Η συγχώνευση δημιουργεί ότι νέο έρχεται από το Ζώο, και αντιγράφει ότι ήδη υπάρχει στη Σκύλος εκτός και αν αυτό έχει δηλωθεί ως τελικό.

Αν δώσουμε σαν τελευταία γραμμή το Μ=Κ τότε το Μ θα γίνει ένα αντίγραφο του Κ. Σε κάποιες γλώσσες δεν έχουμε αντιγραφή αντικειμένου, αλλά αντιγραφή δεικτών. Η Μ2000 έχει και δείκτες σε αντικείμενα ομάδα, αλλά αν δεν είναι απαραίτητοι δεν τους χρησιμοποιούμε.

Μια ομάδα μπορεί να περάσει με τιμή σε μια συνάρτηση ή ένα τμήμα, ή με αναφορά. Εδώ έχουμε μια περίπτωση με ανφορά της Κ εκεί που καλούμε το τμήμα Προσωρινό.με το &Κ. Το &Α θα είναι ένα νέο αντικείμενο με μέλη που είναι αναφορές στα μέλη του Κ.

Στη Μ2000 μπορούμε να περάσουμε επίσης δείκτη σε ομάδα και αναφορά σε δείκτη σε ομάδα. Στην πρώτη περίπτωση όλες οι αλλαγές εκτός της αλλαγής του δείκτη θα περάσουν στην ομάδα που δίνουμε στην κλήση, ενώ στη δεύτερη περίπτωση ακόμα και η αλλαγή δείκτη θα περάστεί στην ομάδα που περάσαμε στη κλήση. Περί δεικτών δεν θα γίνει άλλη αναφορά εδώ. Η χρήση δεικτών βοηθάει όταν έχουμε δομές με ομάδες (αντικείμενα) που κρατάνε με δείκτες άλλα αντικείμενα.

Η ζωή ενός αντικειμένου παίζει ανάλογα αν είναι επώνυμο ή ανώνυμο. Επώνυμο για παράδειγμα είναι το Κ. Όταν το τμήμα (εδώ το Α) που το δημιούργησε τερματίσει θα διαγραφεί και το αντικείμενο. Ανώνυμο είναι το αντικείμενο που έχει θέση αντί για όνομα. Τα αντικείμενα στο πίνακα α() είναι ανώνυμα. Σε ένα επώνυμο αντικείμενο μπορούμε να συγχωνεύσουμε ένα άλλο αντικείμενο. Σε ένα πίνακα δεν έχουμε συγχώνευση αλλά μπαίνει το νέο αντικείμενο στη θέση και το παλιό διαγράφεται. Αυτό αν το αντικείμενο δεν είναι δείκτης. Αν είναι δείκτης τότε διαγράφεται αν είναι ο τελευταίος δείκτης. Στην ουσία όταν δεν χρησιμοποιούμε δείκτες, κάθε αντικείμενο έχει έναν "Τελικό" δείκτη, άρα στο πίνακα θα διαγραφεί αν δώσουμε νέα τιμή στη θέση του.

Τα επώνυμα αντικείμενα σε κάποιες γλώσσες λέγονται στατικά. Επειδή η Μ2000 έχει τμήματα μέσα σε τμήματα, τα οποία υπάρχουν μόνο όταν εκτελεστεί το τμήμα που τα περιέχει και εκτελεστεί ο ορισμός τους, δεν μπορούμε να μιλάμε για "στατικά" αντικείμενα. Αν όμως περάσουμε στο σωρό τιμών ένα αντικείμενο (θα μπει ως ανύνυμο) ή ως επιστροφή τιμής σε μια συνάρτηση, τότε μπορούμε να δώσουμε ζωή περισσότερη από αυτή ενός επώνυμου αντικειμένου. Πράγματι τα ανώνυμα αντικείμενα υπάρχουν όσο υπάρχει αυτό που τα περιέχει, και εδώ δεν είναι το τμήμα ή η συνάρτηση όπως τα επώνυμα, αλλά οι δομές καταχώρησης, όπως πίνακες, καταστάσεις και σωροί.

Αυτό που δεν υπάρχει άμεσα στη Μ2000 για τα αντικείμενα είναι ο τρόπος εξαγωγής μόνο των δεδομένων, σε ένα αλφαριθμητικό για καταχώρηση σε ένα αρχείο, και αργότερα για ανάγνωση από αυτό. Πρέπει να φτιάξουμε τρόπο εγγραφής και ανάγνωσης μέσα στο αντικείμενο. Απλά θα παρέχουμε τον αριθμό του αρχείου (file handler) και όλα θα γίνονται εντός του αντικειμένου.

Ένα πρόγραμμα το διαβάζουμε είτε από την αρχή προς το τέλος, είτε αφήνοντας τους ορισμούς για όταν κάτι το χρησιμοποιήσουμε πρώτη φορά. Πχ το παρακάτω το διαβάζουμε αφήνοντας το Τμήμα ΔοκιμήΑ { } και πάμε αμέσως μετά. Στη γραμμή που καλούμε το ΔοκιμήΑ γυρνάμε στον ορισμό.

Τα τμήματα δέχονται στη κλήση έναν σωρό τιμών και τον επιστρέφουν στην επιστροφή. Σε αυτόν γράφονται και τυχόν ορίσματα που δίνουμε, είτε με αντιγραφή είτε με αναφορά (και η αναφορά είναι μια τιμή που αντιγράφεται, και ειδικά στη Μ2000 είναι αλφαριθμητικό και περιέχει αυτό που αναφέρεται, και λέγεται ισχνή αναφορά, γιατί δεν έχει "συνδεθεί" όσο είναι στο σωρό τιμών).. Το ίδιο ισχύει αν κληθούν συναρτήσεις με την Κάλεσε.

Οι συναρτήσεις που φτιάχνουμε και καλούμε σε εκφράσεις δημιουργούν δικό τους σωρό τιμών, και αυτός δεν επιστρέφεται. Έτσι αν περάσουμε περισσότερα ορίσματα και αυτά δεν χρησιμοποιηθούν τότε χάνονται μαζί με το σωρό τιμών. Για το λόγο αυτό η Μ2000 στη κλήση συναρτήσεων δεν κάνει έλεγχο ορισμάτων, τα βάζει όπως τα δίνουμε. Ο έλεγχος γίνεται στη συνάρτηση. Αν ζητάμε αριθμό και έχουμε αλφαριθμητικό θα βγει λάθος.

Ε'ιτε γράψουμε Συνάρτηση Αλφα {=Αριθμός**2}  (όπου το ** είναι η ύψωση σε δύναμη, όπως και το ^ είναι επίσης η ύψωση σε δύναμη), είτε Συνάρτηση Αλφα(χ) {=χ**2} είτε:
Συνάρτηση Αλφα {
Διάβασε χ : =χ**2
}
Είναι το ίδιο πράγμα (με τη διαφορά ότι στην πρώτη δεν θα φτιαχτεί μεταβλητή, θα διαβαστεί άμεσα ο αριθμός από το σωρό τιμών).

Αρχικοποίηση
Δεν μπορούμε να χρησιμοποιήσουμε μια μεταβλητή αν δεν έχουμε δώσει αρχική τιμή. Δεν ισχύει αυτό στους πίνακες, γιατί η αρχική τιμή τους "Empty" μεταφράζεται αυτόματα σε 0 ή "" ανάλογα με το όνομα του πίνακα (αν έχει $ στο τέλος του ονόματος είναι αλφαριθμητικό)

Περί θεάσης μεταβλητών
Αν ένα όνομα δεν ορίζεται τοπικά τότε το αναζητεί ο διερμηνευτής ως γενική. Η διαφορά τοπικής Α με γενική Α είναι ότι η τοπική έχει ένα πρόθεμα που δεν βλέπουμε, ενώ η γενική δεν έχει πρόθεμα. Γενικές μπορούμε να φτιάξουμε οπουδήποτε, αλλά θα διαγραφούν μαζί με τις τοπικές. Μια τοπική Α και μια γενική Α μπορούν να υπάρχουν μαζί, αλλά η τοπική θα σκιάσει τη γενική. Για να αλλάξουμε τιμή σε μια γενική θα πρέπει να δώσουμε το <= αντί του =. Το απλό = δημιουργεί τοπική ακόμα και αν υπάρχει γενική με το ίδιο όνομα.

Στο μικρό παράδειγμα έχουμε μια ομάδα με δυο μέλη, τα χ και κ, και ένα τμήμα το Κάππα. Σε αυτό το τμήμα ορίζουμε μια γενική το κ (θα υπάρχει μέχρι το τμήμα να διαγραφεί), και μια ομάδα το Άλφα, με μέλος το χ και δυο μεθόδους, τη συνάρτηση Βήτα και το τμήμα ΆλλαξεΧ.
Καλούμε το Δέλτα.Καππα και στην επιστροφή εκτελούμε τη Λίστα και μας δείχνει ότι υπάρχουν σαν μεταβλητές τρια πράγματα, το Δέλτα, το Δέλτα.χ και το Δέλτα.κ. Ό,τι κάναμε στην Δέλτα.Κάππα έχουν διαγραφεί. Αν γυρνάγαμε την ομάδα Άλφα τότε θα είχαμε το πρόβλημα στην συνάρτηση Βήτα() με το κ που είναι γενικό και δεν υπάρχει πια. Για το λόγο αυτό δεν χρησιμοποιούμε γενικές που φτιάχνονται προσωρινά σε μεθόδους ομάδων. Εδώ απλά δεν έχουμε πρόβλημα γιατί δεν κάνουμε χρήση της ομάδας ως επιστρεφόμενη τιμή.

Ομάδα Δέλτα {
      χ=5000
      κ=2
      Τμήμα Κάππα {
            Γενική κ=100
            Τμήμα Εσωτερικό {
                  Ομάδα Αλφα {
                        χ=2
                        Συνάρτηση Βήτα (μ){
                              =**μ+κ
                        }
                        Τμήμα ΆλλαξεΧ (μ) {
                              \\ χρειάζεται το .χ είναι της ομάδας
                              <=μ
                        }
                  }
                  Τύπωσε Αλφα.Βήτα(4)=116
                  Τύπωσε Αλφα.χ=2
                  \\ γίνεται να αλλάξει γιατί το Αλφα.χ είναι μια εταβλητή τοπική στο Εσωτερικό
                  Αλφα.χ=3
                  Τύπωσε Αλφα.Βήτα(4)=181
                  Αλφα.ΆλλαξεΧ 5
                  Τύπωσε Αλφα.Βήτα(4)=725
            }
            \\ απλή κλήση
            Εσωτερικό
            \\ μέσω της Κάλεσε
            Κάλεσε Εσωτερικό
      }
}
Δέλτα.Κάππα
\\ υπάρχουν μόνο τρεις, η Δέλτα,  Δέλτα.χ και Δέλτα.κ
Λίστα 





Το παράδειγμα





Τμήμα ΔοκιμήΑ {
      \\ δεν χρειάζεται η παρακάτω, αλλά μπορούμε να την δώσουμε
      Κάνε ι ως ακέραιος, εντάξει ως λογικός
      \\ όσα μέρη μιας κλάσης είναι μετά την ετικέτα Κλάση: δεν περιέχονται στο τελικό αντικείμενο       \\ οι κλάσεις είναι συναρτήσεις (γενικές) που επιστρέφουν αντικείμενο       \\ Μια μέθοδος με το όνομα της κλάσης είναι ο κατασκευαστής, που καλείται αφού πρώτα       \\ φτιαχτεί ένα αντικείμενο με ότι έχουμε στον ορισμό.       \\ η κλήση της Ζώο() μπορεί να γίνει στο κατασκευαστή της Σκύλος() γιατί είναι γενική              \\ Οι ιδιότητες είναι ομάδες (αντικείμενα) που ετοιμάζονται με δυνατότητες όπως:       \\ επιστροφή τιμής αν υπάρχει το πεδίο Αξία. Μπορούμε να ορίσουμε το τρόπο που θα επιστρέφεται η τιμή       \\ αλλαγή τιμής αν υπάρχει το πεδίο Θέσε. Μπορούμε να ορίσουμε το τρόπο που θα διαβάζει μια τιμή       \\ Σε κάθε περίπτωση το $ χρησιμοποιείται όταν η τιμή επιστροφής ή αλλαγής είναι αλφαριθμητικό       \\ μια ιδιότητα μπορεί να έχει μεθόδους και τμήματα όπως όλα τα αντικείμενα, αλλά δεν έχει κατασκευαστή.                     \\ Στο παράδειγμα φτιάχνουμε δυο αντικείμενα τοποθετημένα σε ένα πίνακα       \\ Καλούμε διαδοχικά την τι$() συνάρτηση του κάθε αντικειμένου       \\ και το κάθε αντικείμενο καλεί την δική του συνάρτηση.                     \\ εδώ δεν έχουμε δείκτη σε αντικείμενο. Τα αντικείμενα είναι μοναδικά, και επειδή βρίσκονται σε πίνακα       \\ είναι ανώνυμα. Το κάθε αντικείμενο είναι μια κατασκευή και περιέχει ότι του έχουμε βάλει.       \\ αν δοκιμάσουμε να αλλάξουμε το όνομα$ θα πάρουμε λάθος.              \\ Θέλουμε το κάθε ζώο να έχει έναν αριθμό       \\ θα έχουμε μια γενική μεταβλητή ΑΑ και μια συνάρτηση που θα παράγει την επόμενη ΑΑ       \\ τη γενική συνάρτηση θα την καλούμε στη Ζώο() συνάρτηση (που επιστρέφει αντικείμενο)              Γενική ΑΑ=1              Συνάρτηση Γενική ΝέοςΑριθμός {             =ΑΑ             ΑΑ++       }                            Κλάση Ζώο {       Ιδιωτικό:             \\ η αρίθμηση είναι ιδιωτική, και εδώ είναι και τελική             τελική αρίθμηση=ΝέοςΑριθμός()       Δημόσιο:             \\ όλα τα αντικείμενα χρήστη είναι τύπου Ομάδα (Group)             \\ αν θέλουμε φτιάχνουμε μια μεταβλητή για να μας λέει..             \\ τι τύπος είναι για εμάς.                          \\ η τύπος$ είναι σταθερά για το αντικείμενο             τελικό τύπος$="Ζώο"             \\ ιδιότητα που δίνει μόνο τιμή, δεν δέχεται             Ιδιότητα όνομα$ {Αξία}="χωρίς όνομα"             \\ ιδιότητα που αλλάζει τιμή και δίνει τιμή             \\ το παρακάτω είναι όμοιο με το αμέσως επόμενο             \\ Ιδιότητα Κάνει$ {Αξία, Θέσε} ="Δεν έχει οριστεί"             Ιδιότητα Κάνει$ ="Δεν έχει οριστεί"             \\ αυτή η συνάρτηση δεν είναι τελική και μπορεί να αλλάξει             Συνάρτηση Τελική Ποιο$ {                   =μορφή$("Είμαι το υπ' αριθμόν {0} ζώο",.αρίθμηση)             }             Συνάρτηση Τι$ {                   ="Με λένε "+.όνομα$+" και κάνω "+Κάνει$             }       Κλάση:             Τμήμα Ζώο {                   \\ μπορούμε να θέσουμε στην ιδιωτική της ιδιότητας                   \\ μόνο  μέσα από τμήμα ή συνάρτηση του αντικειμένου                   Διάβασε .[όνομα]$, .[Κάνει]$             }       }       Κλάση Σκύλος {             Συνάρτηση Τελική Τι$ {                   ="Είμαι σκύλος και με λένε "+.όνομα$+" και κάνω "+πεζ$(.Κάνει$)             }       Κλάση:             Τμήμα Σκύλος (ονομα$) {                   \\ ήδη η Σκύλος έχει την τελική Τι$ και δεν θα την αλλάξει                   \\ παρόλο που το Ζώο() του την παρέχει                   Αυτό<=Ζώο(ονομα$,"Γαβ γαβ")             }       }       Κλάση Γάτα {             Συνάρτηση Τελική Τι$ {                   ="Είμαι γάτα και με λένε "+.όνομα$+" και κάνω "+πεζ$(.Κάνει$)       }       Κλάση:             Τμήμα Γάτα (όνομα$) {                   Αυτό<=Ζώο(όνομα$, "Νιάου νιάου")             }       }              \\ δεν δίνουμε αρχική τιμή στα στοιχεία του πίνακα       \\ η αρχική τιμή που γυρνάει η Τύπος$() είναι "Empty"       Πίνακας Βάση 1, α(2)       Τύπωσε τύπος$(α(1))="Empty"   ' Αληθές       \\ βάζουμε στα 1 και 2 από ένα αντικείμενο       α(1)=Σκύλος("Αζόρ"),Γάτα("Ψιψίνα")       \\ Τώρα ο τύπος της α(1) είναι Group (ομάδα)       Τύπωσε τύπος$(α(1))="Group"   ' Αληθές              \\Μπορούμε να καλέσουμε την τι$() από τα δυο στοιχεία του πίνακα       \\ επειδή είναι συνάρτηση βάζουμε τις παρενθέσεις παρόλο που δεν βάζουμε ορίσματα       Για ι=1 έως 2             Τύπωσε α(ι).τι$()       Επόμενο              Δες Εντάξει {             α(1).όνομα$="Μαξ"       }       \\ βγάζει λάθος, λέει ότι χρειάζεται μια ομάδα στη δεξιά έκφραση, επειδή δεν έχει οριστεί πεδίο Θέσε.       Αν όχι Εντάξει τότε Πένα 11 {τύπωσε Λάθος$}              \\ η κάνει$ είναι ιδιότητα που αλλάζει τιμή       α(1).κάνει$="Γαβ γαβ γαβ"              \\ αυξάνουμε το πίνακα κατά 1       Πίνακας α(1 εως 3)       Κλάση ΚάτιΆλλο {             τελική τύπος$="Κάτι Άλλο"       }       α(3)=ΚάτιΆλλο()              Για ι=1 έως 2             Αν α(ι).τύπος$="Ζώο" Τότε                   Τύπωσε α(ι).Ποιο$()                   Τύπωσε α(ι).τι$()             Τέλος Αν       Επόμενο              \\ πιο ωραίος κώδικας, και πιο γρήγορος, γιατί ο διερμηνευτής έχει έτοιμο το α(ι)       \\ για κάθε .κάτι που καλούμε              Για ι=1 έως 2             Για α(ι) {                   Αν .τύπος$="Ζώο" Τότε                         Τύπωσε .Ποιο$()                         Τύπωσε .τι$()                   Τέλος Αν             }       Επόμενο       \\ εδώ τελειώνει ο κώδικας       \\ οι συναρτήσεις, ο πίνακας και οι μεταβλητές Εντάξει και ι θα διαγραφούν       Βάλε α(1) } \\ Δεν χρειάζεται να ορίσουμε το Κ ως ομάδα, αλλά μπορούμε να το κάνουμε Ομάδα Κ \\ καλούμε το τμήμα ΔοκιμήΑ ΔοκιμήΑ \\ Περιμένουμε μια τιμή στο σωρό τιμών, στη κορυφή \\ αν έχουμε ομάδα τότε το ταύτιση("Ο") είναι αληθές Αν ταύτιση("Ο") τότε       Τμήμα Προσωρινό(&α) {             \\ Μπορούμε να προσθέσουμε ένα τμήμα που θα διαβάζει την αρίθμηση             \\ και επειδή η προσθήκη μπήκε στην αναφορά του Κ στο α             \\ δεν θα υπάρχει στο Κ                          \\ αυτό συμβαίνει γιατί το α έχει με αναφορά όλα τα μέλη το Κ,             \\ αλλά το α είναι διαφορετικό αντικείμενο από το Κ             \\ με αυτόν τον τρόπο, ενώ ένα αντικείμενο δεν διαγράφει μέλη             \\ μπορούμε να πάρουμε αντίγραφο με αναφορά στις τιμές             \\ και σε αυτό να φτιάξουμε νέα μέλη             \\ και στην έξοδο από το τμήμα το αντίγραφο θα διαγραφεί             \\ αλλά δεν θα διαγραφούν οι αναφερόμενες τιμές.             Ομάδα α {                   Τμήμα Δείξε_Αρίθμηση {                         Τύπωσε .αρίθμηση                   }             }             α.Δειξε_Αρίθμηση             Τύπωσε Τμήμα(α.Δείξε_Αρίθμηση)=Αληθές       }       \\ και την διαβάζουμε στη Κ (αν η Κ δεν είναι νέα και δεν είναι ομάδα βγαίνει λάθος)       Διάβασε Κ       Τύπωσε Τύπος$(Κ)="Group"       Τύπωσε Κ.τύπος$="Ζώο"  ' Αληθές       Τύπωσε Κ.Κάνει$="Γαβ γαβ γαβ"       Προσωρινό &Κ       Τύπωσε Τμήμα(Κ.Δείξε_Αρίθμηση)=Ψευδές Τέλος Αν

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.