Δευτέρα 1 Φεβρουαρίου 2021

Αναθεώρηση 20, έκδοση 10.

Έγιναν διορθώσεις στις Group.Count() και Member.Type$(), όταν χρησιμοποιείται το AYTO ή THIS. Είχα αλλάξει στον κώδικα της Μ2000 μια εσωτερική GetVar() με συνέπεια να μην ελέγχεται η AYTO ή THIS (δεν ήταν απαραίτητο), αλλά είχα μια ακόμα GetVar2() που έκανε τον έλεγχο, οπότε η διόρθωση ήταν να μπει η GetVar2() σε αυτές τις δυο εντολές. Αυτές οι συναρτήσεις χρησιμεύουν για να ελέγχουμε τα στοιχεία ομάδων (αντικειμένων χρήστη). Σπάνια θέλουμε κάτι τέτοιο και για το λόγο αυτό δεν είχε ελεγχθεί στις τελευταίες εκδόσεις 9 και 10 ένα πρόγραμμα από το 2015 που έχει αναρτηθεί στο blog εδώ. Όμως χθες κάποιος διάβασε την ανάρτηση του 2015 και συνήθως όταν γίνεται κάποια "σπάνια" σελίδα να διαβαστεί ελέγχω το πρόγραμμα και έτσι βρίσκω πιθανές παραλήψεις.

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

Παρασκευή 8 Ιανουαρίου 2021

Νέο κεφαλαιο στο βιβλίο Μαθαίνω Προγραμματισμό

Το βιβλίο Μαθαίνω Προγραμματισμό συμπλήρωσε 9 κεφάλαια. 

Τα κεφάλαια που έχουν γραφτεί:

1. Το πρώτο μου πρόγραμμα!

2. Παιχνίδι: Μάντεψε έναν Αριθμό

3. Το κόσκινο του Ερατοσθένη

4. Το δένδρο του Πυθαγόρα

5. Παραγγελία Αυγών

6. Απόσταση Λιβενστέϊν

7. Ακολουθία Φιμπονάτσι με πολύ μεγάλους αριθμούς

8. Δυαδικός Αθροιστής

9. Ψηφιοποίηση Δεδομένων (Ελεύθερο Σχέδιο)

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

Κατεβάστε το βιβλίο εδώ!


Πέμπτη 7 Ιανουαρίου 2021

Αναθεώρηση 19, Έκδοση 10

 Βρήκα ένα Bug, μυστήριο! Ξεκίνησα σήμερα τον υπολογιστή και δουλεύοντας με τη Μ2000 βγήκε ένα πρόβλημα που κανονικά δεν έπρεπε να υπήρχε! Δηλαδή ο Timecount έδειχνε ότι είχαν περάσει 26 μέρες από την εκκίνηση. Λογικά όταν ξεκινάει ο υπολογιστής ο βασικός μετρητής του ξεκινάει από το μηδέν. Έτσι θα έπρεπε να είχε δείξει το πολύ μισή ώρα (σε χιλιοστά του δευτερολέπτου). Με την υψηλή τιμή η τιμή πήγαινε για καταχώρηση σε έναν Long (32bit) πράγμα που έβγαζε Overflow. To περιβάλλον της Μ2000 το έλεγε αλλά ήταν αδύνατο να συμβαίνει. Οπότε το εκτέλεσα μέσα από το περιβάλλον της VB6 και το διόρθωσα βάζοντας αντί για long τύπο Currency που δεν έχει ανάγκη (έχει μεγάλη ακρίβεια 21 ψηφίων όπου τα τέσσερα είναι δεκαδικά).

Πιθανόν το πρόβλημα να προέρχεται από αναβάθμιση των Windows. Αν και η τελευταία αναβάθμιση όπως θυμάμαι ήταν του Defender την προηγούμενη μέρα. Οπότε λογικά υπήρχε εδώ και 26 μέρες. Πιθανόν τότε έγινε και η αναβάθμιση των Windows 10. Έκανα κράτηση του υπολογιστή και επανεκκίνηση και διορθώθηκε και ο μετρητής Timecount. (αν δεν χρησιμοποιήσουμε το Profiler δεν μηδενίζει και δείχνει την διάρκεια που εκτελείται το λειτουργικό, δηλαδή από την εκκίνηση).




Πέμπτη 24 Δεκεμβρίου 2020

Ανανέωση του βιβλίου Μαθαίνω Προγραμματισμό

Το βιβλίο Μαθαίνω Προγραμματισμό συμπλήρωσε 8 κεφάλαια. Θα συνεχιστεί η προσθήκη. Απαιτείται η τελευταία έκδοση 10 με την τελευταία αναθεώρηση 18 (ειδικά για το 8ο κεφάλαιο, γιατί βρήκα bug και το διόρθωσα).

Τα κεφάλαια που έχουν γραφτεί:

1. Το πρώτο μου πρόγραμμα!

2. Παιχνίδι: Μάντεψε έναν Αριθμό

3. Το κόσκινο του Ερατοσθένη

4. Το δένδρο του Πυθαγόρα

5. Παραγγελία Αυγών

6. Απόσταση Λιβενστέϊν

7. Ακολουθία Φιμπονάτσι με πολύ μεγάλους αριθμούς

8. Δυαδικός Αθροιστής

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

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

Υπάρχουν πολλά ιστορικά θέματα που σχετίζονται με τα κεφάλαια. Ειδικά στο κεφάλαιο 8 υπάρχουν τέσσερις σελίδες με την Ιστορία των Υπολογιστικών Μηχανών.

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

Κατεβάστε το βιβλίο εδώ!


Τετάρτη 23 Δεκεμβρίου 2020

Revision 18, Version 10

 A Bug removed so a Boolean type now written as boolean and not as string when push to stack of values, like in a multi assignment as in this example:

def k(a, b)=(a<10, b<5)
(a, b)=k(1, 20)
Print a, b

Σάββατο 19 Δεκεμβρίου 2020

Μαθαίνω Προγραμματισμό - Τα πρώτα κεφάλαια!

Ξεκίνησα ένα βιβλίο εκπαιδευτικό για τον προγραμματισμό. Προς το παρόν έχει 7 κεφάλαια. Κάθε κεφάλαιο είναι ένα πρόγραμμα λίγων γραμμών. (22-12-20 μπήκαν τα κεφάλαια 6ο και 7ο, και αφιέρωση στην εγγονή μου Κατερίνα που έχει σήμερα γενέθλια)

Χρειάζεται να χρησιμοποιήσει ο εκπαιδευόμενος το περιβάλλον της Μ2000 και να ακολουθήσει τις οδηγίες. Υπάρχουν και ασκήσεις.

Όποιος τελειώσει το τέταρτο κεφάλαιο θα μπορεί με λίγη τύχη να φτιάξει αυτό εδώ:



Κατεβάστε το βιβλίο εδώ!

Τρίτη 8 Δεκεμβρίου 2020

Καμπύλη Πεάνο

 

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

Το πρόγραμμα που δημιούργησε τηνjpg εικόνα αυτή είναι αυτό:

move 0,0
image "g1.emf"
a$=""
copy scale.x, scale.y to a$
image a$ export "g1.jpg", 80

Πήρε την εξαγωγή του επόμενου προγράμματος, που ήταν σε emf (σχέδιο, είναι μέγεθος 32MB, γιατί έχει όλες τις εντολές γραμμών, και εδώ το σχέδιο γίνεται με πάρα πολλές γραμμές), το εμφάνισε στην κονσόλα της Μ2000, το αντέγραψε ως Bitmap, και το έσωσε ως jpg.


Και αυτό εδώ είναι ο Εξερευνητής Πεάνο. Λογικά όλοι δημιουργούν μια καμπύλη Πεάνο με χρήση ακεραίων. Εδώ γίνεται χρήση διπλής ακρίβειας πραγματικών. Το σχέδιο γίνεται μέσα σε ένα μπλοκ Drawing (Σχέδιο) το οποίο παραδίδει μια διάρθρωση μνήμης, εδώ το B. Με μια Len(B) η Μήκος() μπορούμε να δούμε το μήκος σε Bytes. Εδώ έχει 32 εκατομμύρια Bytes. Στο τέλος την γράφουμε ως δυαδικό αρχείο, με τρεις εντολές Open, Put, Close. Η διάρθρωση B έχει φτιαχτεί ως emf, από την εντολή Drawing, δηλαδή σαν ένα αρχείο στη μνήμη. Έτσι η  εντολή εικόνα ή Image μπορεί να την διαχειριστεί.

Όπως βλέπουμε η καμπύλη δημιουργείται από μια ρουτίνα (υποπρόγραμμα), που καλεί τον εαυτό του (recursion, αναδρομή).

Την ρουτίνα την πήρα από εδώ: http://rosettacode.org/wiki/Peano_curve στην οποία έχω αναρτήσει και ένα πιο απλό πρόγραμμα!


Module Peano_Explorer {
      cls 1, 0
      once=true
      Flush
      data 3.9, 3
      for i= 3.4 to 4 step 0.018
            data i
      next i
      Drawing scale.x, scale.y {
            while not empty
                  read k
                  wi=k^4
                  n=twipsX*int(K/3*12)
                  wi2=wi*(3/k)^1.5
                  (dx, dy)=((scale.x-wi2*n)/2, (scale.y-wi2*n)/2)
                  move dx , dy
                  if once then fill wi2*n, wi2*n, 0
                  dx+=k*1.2*twipsX
                  dy+=k*1.2*twipsY
                  move dx, dy
                  if not once then Pen 15-int((k mod 0.7)*8+2) {Peano(0,0,wi,0, 0)}
                  once=false
                  next
            end while
      } as B
      Move 0,0
      image B
      open "g1.emf" for output as #f
      put #f, B
      close #f

      Sub Peano(x, y, lg, i1, i2)
            If lg ==1 Then
                  Draw to x*n+dx , y*n+dy
                  Exit sub
            end if
            lg/=k
            Peano(x+2*i1*lg, y+2*i1*lg, lg, i1, i2)
            Peano(x+(i1-i2+1)*lg, y+(i1+i2)*lg, lg, i1, 1-i2)
            Peano(x+lg, y+lg, lg, i1, 1-i2)
            Peano(x+(i1+i2)*lg, y+(i1-i2+1)*lg, lg, 1-i1, 1-i2)
            Peano(x+2*i2*lg, y+2*(1-i2)*lg, lg, i1, i2)
            Peano(x+(1+i2-i1)*lg, y+(2-i1-i2)*lg, lg, i1, i2)
            Peano(x+2*(1-i1)*lg, y+2*(1-i1)*lg, lg, i1, i2)
            Peano(x+(2-i1-i2)*lg, y+(1+i2-i1)*lg, lg, 1-i1, i2)
            Peano(x+2*(1-i2)*lg, y+2*i2*lg, lg, 1-i1, i2)
      End Sub
}


Αν μπει σε ένα τμήμα έστω Α για να τρέξει πρέπει να έχει και την εντολή που ξεκινάει το εσωτερικό πια τμήμα Peano_Explorer. Η εντολή είναι το όνομα του τμήματος!
Το αρχείο emf εξάγεται στο φάκελο του χρήστη. Μπορούμε με την παρακάτω εντολή να τον γράψουμε στο πρόχειρο:

Clipboard Dir$

ή

Πρόχειρο Κατ$

Δείτε και αυτές τις εντολές:
Τύπωσε Κατ$
ή
Κατάλογος

ειδικά για τμήματα το:
Τμήματα
μας δείχνει τι υπάρχει ήδη στο περιβάλλον της Μ2000, και τι έχει ο δίσκος (ο κατάλογος του χρήστη)
Το Τμήματα ? μας δείχνει τι έχει μόνο το περιβάλλον φορτωμένα. Βγαίνει με Ctrl+N, ενώ με το Ctrl+M  βγαίνει η εντολή Τμήματα.
Αν σώσουμε το πρόγραμμα με τη Σώσε ένα_όνομα, τότε όταν κάνουμε αλλαγή στο πρόγραμμα, βγαίνουμε στη κονσόλα και με Ctrl+A σώνουμε ξανά. (υπάρχει και αρχείο bck το αμέσως προηγούμενο από αυτό που σώσαμε).