Πέμπτη 27 Απριλίου 2017

Αναθεώρηση 14 (Έκδοση 8.7)

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

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

Γράψτε το παράδειγμα σε ένα τμήμα Α (με σ α θα ανοίξει ο διορθωτής και απλά αντιγράφεται το πρόγραμμα στο τμήμα Α - το εμφανίζει ο διορθωτής με κεφαλαία γράμματα).
Μπορεί κανείς να τρέξει μόνο το πρώτο μέρος αν βάλει τις εντολές στην Σημ 1 και 2 σε δικές τους γραμμές.
Φτιάχνω μια φόρμα 70 χαρακτήρων επί 50 γραμμές, με πράσινο περιθώριο και πράσινο φόντο στο τίτλο (τυπώνεται με την Αναφορά στο κέντρο - επιλογή 2). Η εντολή Αναφορά δίνεται μεταξύ Διπλά και Κανονικά, και έτσι εμφανίζεται με διπλάσιου ύψους-πλάτους γράμματα. Αμέσως μετά με την Οθόνη 5,2 αλλάζω το χρώμα στο ματζέντα και ορίζω ότι από την τρίτη γραμμή (το 2 είναι η τρίτη γραμμή) να έχει ολίσθηση, οπότε το χρώμα φόντου αλλάζει από την τρίτη γραμμή και κάτω (και η εντολή Οθόνη χωρίς ορίσματα θα σβήσει αυτό μόνο το τμήμα οθόνης). Μπορεί κανείς με την εντολή Πένα να αλλάξει το χρώμα γραμμάτων. Πχ Πένα 15 θα τα κάνει άσπρα. Μπορούμε με Πένα 15 { } να βάλουμε εντολές εντός ενός μπλοκ εντολών όπου το χρώμα θα είναι άσπρο και γυρνάει μετά αυτόματα στο χρώμα γραμμάτων που ήταν πριν.
Στο δικό μου διερμηνευτή χρησιμοποιώ το 14 (κίτρινο) για τα γράμματα. Τα χρώματα μπορούν να δωθούνμε και έτσι #FFFFFF για άσπρο (όπως στην Html) ή με τιμές RGB με την Χρώμα(255,255,255)




Φόρμα 70,50
Οθόνη 2
Περιθώριο {Οθόνη 2}
Τύπωσε $(4),  \\ αναλογική γραφή
Διπλά
Αναφορά 2, Μορφή$("Μ2000 έκδοση {0} αναθ. {1}", Έκδοση,Αναθεώρηση)
Κανονικά
Οθόνη 5,2
\\Καθαρό 
\\ ουσιαστικά εδώ καθαρίζει τα "σκουπίδια"
\\ θα σβήσει τυχόν δείκτες στη Κατάσταση που έμειναν από λάθος στο κώδικα
\\ δηλαδή ενδέχεται να πάρει το παλιό Άλφα, σε νέα εκκίνηση,
\\ οπότε θα βγάλει λάθος επειδή δεν δέχεται ίδια κλειδιά.
\\ Με την Δες στο τέλος καθαρίζουμε και δεν χρειάζεται η Καθαρό


\\********* Μέρος Πρώτο ***************
\\ εδώ φαίνεται πως φτιάχνουμε μια κατάσταση
\\ κοινή σε όλα τα στοιχεία του Μ$() πίνακα
\\ η οποία μόνο μια φορά φτιάχνεται, και όλα τα στοιχεία την βλέπουν
\\ αλλά ενώ μπορούμε να προσθέσουμε στοιχεία, δεν μπορούμε να αλλάξουμε
\\ τον δείκτη σε μια νέα κατάσταση
Κατάσταση Αλφα ="ένα","δύο","τρία","τέσσερα"
Κλάση Βήτα$ {
Ιδιωτικό:
      Δικόμου$
Δημόσιο:
      Ιδιότητα Κατάσταση {Αξία}
      Ιδιότητα Στοιχεία {
            Αξία {
              Ένωσε Γονικό [Κατάσταση] Στο Κ
              Αξία=Μήκος(Κ)
            }
      }
      Συνάρτηση Δείκτης$ (κ) {
            κ--
            =.[Κατάσταση]$(κ!)
      }
      Τμήμα ΆλλαξεΤιμή (κ$) {
            Αν .Δικόμου$="" Τότε ="" : Έξοδος
            Επιστροφή .[Κατάσταση], .Δικόμου$:=κ$
      }
      Αξία (κ$) {
            Αν κ$="" Τότε {
                  Αν .Δικόμου$="" Τότε ="" : Έξοδος
                  =.[Κατάσταση]$(.Δικόμου$)
            } Αλλιώς {
                  =.[Κατάσταση]$(κ$)
                  .Δικόμου$<=κ$
            }
      }

Κλάση:
      Τμήμα Βήτα {
            Διάβασε ΚΚ
                  .[Κατάσταση]<=ΚΚ
      }
}
Πίνακας Μ$(10)=Βήτα$(Αλφα)
Τύπωσε Μ$(3)("δύο")
\\ για να δώσουμε πρόσβαση σε άλλες ιδιότητες
\\ επειδή δεν μπορούν να καλεστούν με όνομα με $ στην αρχή
Ένωσε Μ$() Στο Μ()
\\ ο δείκτης μπορεί να περαστεί
Τύπωσε Μ$(3)("δύο")
\\ όχι όμως τα Στοιχεία/Δείκτης$()
Για Μ(3) {
      Για ι=1 έως .Στοιχεία {
            Τύπωσε .Δείκτης$(ι),
      }
      Τύπωσε
}
Τύπωσε Μ(3).Κατάσταση
Τύπωσε Μ(3).Στοιχεία


Για Μ(3) {
      Προσθήκη .Κατάσταση, "πέντε"
}
Τύπωσε Μ(3).Κατάσταση
Τύπωσε Μ(3).Στοιχεία
Κατάσταση ΑΑΑ=1,2,3,4,5,6
Δες οκ {
      Μ(3).Κατάσταση=ΑΑΑ
}
Αν όχι οκ Τότε Τύπωσε Λάθος$
Τύπωσε Μ(4).Στοιχεία
\\ για να πάρουμε το Μ(8) επειδή γυρνάει τιμή και όχι ομάδα
\\ πρέπει να το εξάγουμε στο σωρό
Για Μ(8) { Βάλε Αυτό}
\\ και το διαβάζουμε σε νέα μεταβλητή
Διάβασε ΜΜ$


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


\\ Ομοίως για να αλλάξουμε το Μ(4) πρέπει να κάνουμε αυτό:
\\ Για Μ(4) { Βάλε Ομάδα(ΜΜ) : Διάβασε Αυτό}
\\ Που είναι όμοιο με αυτό:
\\ Η Στη/Στο ή Let κάνει ακριβώς μια Βάλε και μια Διάβασε
\\ εδώ χρειάζεται γιατί το Μ(4) γυρνάει τιμή, ενώ δεν δέχεται (δεν έχουμε το Θέσε { })
Για Μ(4) { Στο Αυτό = Ομάδα(ΜΜ) }
Τύπωσε Μ$(4)("") \\ δίνει τρια γιατί πήρε την τιμή της Δικόμου$


\\ Αν θέλουμε να χαλάσουμε το πρόγραμμα:
\\ στην αντιγραφή η ΜΜ$ θα πάρει νέα Κατάσταση
\\ πράγμα που δεν θα θέλαμε (αλλά μπορεί να γίνει)
\\ Απλά δεν γίνεται εύκολα, με μια απλή εκχώρηση
Στη ΜΜ$=Βήτα$(ΑΑΑ)


\\ Και εδώ την δίνουμε στην Μ(4)
Για Μ(4) { Στο Αυτό = Ομάδα(ΜΜ) }
Τύπωσε Μ$(4)("3") \\ δίνει 3
Τύπωσε Μ$(3)(""), Μ$(4)("")


\\ Μπορούμε να αλλάξουμε τιμές σε δυο θέσεις Στο πίνακα
Άλλαξε Μ(4),Μ(3)
Τύπωσε Μ$(3)(""), Μ$(4)("")


\\ Για να αλλάξουμε τιμή ώστε το 3 να έχει ό,τι και το 4
\\ δεν είναι εύκολο γιατί δεν έχουμε ορίσει το Θέσε { } ως τρόπο εκχώρησης
\\ αν δεν είχαμε ορίσει την Αξία {} θα ήταν εύκολο, γιατί θα έβλεπε απευθείας την ομάδα
\\ Υπάρχει η αντιγραφή στοιχείων πίνακα που μπορεί να το κάνει όμως
\\ χρησιμοποιείται για μαζικές μεταφορές από πίνακα σε πίνακα, ίδιο ή άλλο
Στοκ Μ(4) για 1, Μ(3)
Τύπωσε Μ$(3)(""), Μ$(4)("")


\\ Δημιουργούμε το Ν$() και μεταφέρουμε από το Μ() (που δείχνει ό,τι και το Μ$())
\\ γενικά στις μεταφορές δεν κοιτάει ο διερμηνευτής για τύπο πίνακα από το όνομα
\\ μπορούμε να μετακινούμε κατά ένα μια περιοχή στοιχείων, και η εργασία γίνεται χωρίς πρόβλημα.
\\ Οι μετακινήσεις γίνονται θεωρώντας τους πίνακες (ή έναν όπως εδώ) ως μιας διάστασης
\\ ο διερμηνευτής βρίσκει ακριβώς ποιο στοιχείο του ζητάμε, γιατί όπως και να έχει εσωτερικά
\\ όλοι οι πίνακες είναι σε μια διάσταση.
Πίνακας Ν$(2)
Στοκ Μ(0) για 2, Ν$(0)
Τύπωσε Ν$(0)("ένα"), Μ$(1)("δύο")
Ένωσε Ν$() Στο ΝΝΝΝΝ() \\ μπορούμε να δίνουμε όποιο όνομα θέλουμε, μια φορά όμως!
Τύπωσε ΝΝΝΝΝ(0).Στοιχεία \\ 6
Τύπωσε Ν$(0)("ένα")
ΝΝΝΝΝ(0).ΆλλαξεΤιμή "νέα τιμή Στο ένα"
Τύπωσε Ν$(0)("ένα")
Τύπωσε Μ$(0)("ένα") \\ άλλαξε και εδώ!
Πίνακας ΚΚ$()


\\ παίρνουμε αντίγραφο του Μ$() Στο ΚΚ$()
ΚΚ$()=Μ$()
Τύπωσε ΚΚ$(0)("ένα") \\ άλλαξε και εδώ!


\\ όμως τα Μ$(0) και ΚΚ$(0) έχουν διαφορετικές μεταβλητές
\\ απλά στην Κατάσταση έχουν το ίδιο αντικείμενο
Τύπωσε Μ$(0)("δύο"), Μ$(0)(""), ΚΚ$(0)("")


\\ ένας πίνακας μπορεί να έχει στοιχείο έναν πίνακα!
Πίνακας ΚΛΜ$(5)
ΚΛΜ$(1)=ΚΚ$()


\\ οπότε εδώ ζητάμε το 1, που είναι πίνακας, και από αυτό ζητάμε το 0 και σε αυτό δίνουμε το δείκτη!
Τύπωσε ΚΛΜ$(1)(0)("")
\\ για να δούμε τα στοιχεία πρέπει το όνομα ΚΛΜ$ να μην έχει το $


Ένωσε ΚΛΜ$() Στο ΚΛΜ()
Τύπωσε ΚΛΜ(1)(0).Στοιχεία \\ 6
Σημ 1 : Διαμέσου Δείξε_Μεταβλητές_Τμήματα
Σημ 2 : Εξοδος   \\ βάλε το Έξοδος σε δική του γραμμή, πάμε πίσω από τη λέξη και πατάμε Enter
\\ *********** Μέρος Δεύτερο ************
\\ ο λόγος που γίνεται αυτό είναι γιατί η Μ2000 έχει δείκτες ως αλφαριθμητικά
ΚΛΜ_Δείκτης$=Ισχνή$(ΚΛΜ(1))
\\ όταν έχουμε δείκτη σε πίνακα σε πίνακα έχουμε μια δυσκολία
Τύπωσε Εκφρ(ΚΛΜ_Δείκτης$+"(0)".Κατάσταση)
Τύπωσε Εκφρ(ΚΛΜ_Δείκτης$+"(0)".Στοιχεία)
\\ ο καλύτερος τρόπος είναι να περάσουμε μια οκνηρή αποτίμηση
ΚΛΜ_Δείκτης$=Οκν$(ΚΛΜ(1)(0).Κατάσταση)
Τύπωσε Συνάρτηση(ΚΛΜ_Δείκτης$)
\\ ή σε μεταβλητή
Μετρητής=0
Συνάρτηση οκν1$ {
      \\ αυτή βλέπει μεταβλητές γιατί θα δοθεί ειδικά για το σκοπό αυτό
      \\ επειδή τρέχει Στο χώρο του τμήματος
      \\ θέλουμε νέες μεταβλητές - θα είναι πρόσκαιρες, μόνο για εδώ
      Διάβασε Νέο τι, ποιός$
      =ΚΛΜ$(1)(τι)(ποιός$)
      Μετρητής++
}
Ένωσε ισχνή Οκν$(&οκν1$()) Στο ΑΑ$()
Τύπωσε ΑΑ$(0,"ένα")
Τμήμα ΣεΒάθος (&οκ$()) {
      Τύπωσε οκ$(0,"ένα")
}
\\ ουσιαστικά θα περάσουμε μέρος του τμήματος σε άλλο τμήμα
ΣεΒάθος Οκν$(&οκν1$())
\\ αυτό φαίνεται στην Μετρητής
\\ η κλήση επιφέρει αλλαγές Στο τμήμα που καλεί
\\
Τύπωσε Μετρητής \\2
Μετρ$=Ισχνή$(Μετρητής)
Μετρ$.+=10
Τύπωσε Μετρητής \\12
Τύπωσε Εκφρ(Μετρ$.) \\ 12
\\ δουλεύει και έτσι
Τύπωσε Εκφρ(Μετρ$) \\ 12
Όνομα$="Γιώργος"
Δεικτ$=Ισχνή$(Όνομα$)
\\ η πρώτη δίνει το δείκτη, η δεύτερη το περιεχόμενο
Τύπωσε Εκφρ$(Δεικτ$), Εκφρ$(Δεικτ$.)
Διαμέσου Δείξε_Μεταβλητές_Τμήματα
Έξοδος
Δείξε_Μεταβλητές_Τμήματα:
      Λίστα !
      Τμήματα ?
Επιστροφή



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

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

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