M2000 Δημοσ. 6 Ιανουαρίου 2016 Μέλος Δημοσ. 6 Ιανουαρίου 2016 Και ένα παράδειγμα με Site: δυαδικόδένδρο ! 1
DDevil Δημοσ. 6 Ιανουαρίου 2016 Δημοσ. 6 Ιανουαρίου 2016 Φιλε ωραια δουλειά εχεις κάνει και μη μασάς με τα κακοπροαιρετα σχολια ορισμένων που παριστάνουν τους ξερολες και το παιζουν. Συνεχισε τη καλη δουλεια!!! 1
M2000 Δημοσ. 8 Ιανουαρίου 2016 Μέλος Δημοσ. 8 Ιανουαρίου 2016 Να και ένα πρόγραμμα για σταυρόλεξο! Ουσιαστικά ήθελα ένα παράδειγμα να παίζει με την μεσ$(), αρισ$(), δεξι$(), θέση(), μήκος() τα mid$(), left$(), right$(), instr(), len(). Οπότε αντί να φτιάξω κάτι με κλάσεις έφτιαξα έναν πίνακα όπου μπαίνει το γράμμα που αντιστοιχεί σε ένα κουτάκι του σταυρόλεξου, μετά μπορεί να είναι ο αριθμός της ερώτησης (είναι αμερικάνικο), και μετά η επιλογή του χρήστη. Πιο εύκολο θα ήταν με ομάδα (αφού εκεί έχουμε χωριστά "πεδία"). Το αφήνω για να το αλλάξει όποιος θέλει. Αν κάνουμε λάθος στις λέξεις και η "διασταύρωση" δεν είναι σωστή βγαίνει λάθος και σταματάει το πρόγραμμα. Θα μπορούσαμε να περνάμε τον πίνακα με τα γράμματα και το πίνακα ερωτήσεων σε ένα τμήμα, με αναφορά (by reference), και αυτό να έβαζε άλλο σταυρόλεξο, βάσει αριθμού..Το αφήνω αυτό για άσκηση. Site: Σταυρόλεξο
satafaka Δημοσ. 10 Ιανουαρίου 2016 Δημοσ. 10 Ιανουαρίου 2016 Καταρχάς να πω συγχαρητήρια και από την μεριά μου για το κουράγιο και κυρίως την ΟΡΕΞΗ που έχεις και αυτό φαίνεται σε κάθε post σου. Ειλικρινά μπράβο! Ξεκίνησα πριν λίγες μέρες να διαβάζω αυτό το thread αλλά σταμάτησα πολύ σύντομα να εμβαθύνω γιατί τα πάντα είναι γραμμένα στα Ελληνικά! Είναι πάρα πολύ δυσανάγνωστο από όποια μεριά και να το δεις! Προσπάθησα βέβαια αλλά μου βγήκαν τα μάτια κυριολεκτικά. Αυτό είναι απλά η άποψή μου, χαίρομαι που παρόλο το 'flame' των υπολοίπων, δεν πτοείσαι. Καλή συνέχεια.
M2000 Δημοσ. 10 Ιανουαρίου 2016 Μέλος Δημοσ. 10 Ιανουαρίου 2016 (επεξεργασμένο) Ευχαριστώ..Φέτος κλείνω τα 50...και προγραμματίζω από το λύκειο! Άρα είναι δύσκολο να βγει το σαράκι από μέσα. Στο blog ανέβασα και μερικά προγράμματα στα αγγλικά (αφού η Μ2000 έχει διπλό λεξιλόγιο, Ελληνικό και Αγγλικό) Έχω γράψει εγχειρίδιο στα Αγγλικά (δεν έχει τελειώσει ακόμα, θέλει προσθήκες ακόμα, έχουν μπει νέες εντολές).. Site: Εγχειρίδιο Μπορείς δηλαδή να γράφεις στα Αγγλικά. Συγνώμη προκαταβολικά για το Σεντόνι! Κάπως πρόχειρο είναι! Γιατί όμως να χρησιμοποιήσει κανείς τη Μ2000; H γλώσσα παίζει καλά σε Windows (παίζει αλλά όχι γρήγορα σε Wine), αλλά αυτό το κάνουν και άλλες γλώσσες. H Μ2000 είναι γλώσσα τύπου Basic, δηλαδή δεν έχεις θέμα με αλφαριθμητικά και garbage collection. Έχουμε περιβάλλον, κάτι σαν java machine, αλλά χωρίς bytecode. Σε αυτό το περιβάλλον έχουμε δυο πράγματα: Τη κονσόλα και γραφικά με Unicode κείμενο (η M2000 σώνει σε Utf8 το πρόγραμμα), και το περιορισμό της πρόσβασης στο δίσκο (δηλαδή μπορούμε να έχουμε χρήστες με δικό τους χώρο στο δίσκο που δεν μπορούν να γράψουν έξω από αυτόν). Εχουμε λίγους και απλούς τύπους: Πραγματικούς, Ακέραιους και αλφαθριθμητικά και μερικούς τύπους μετατροπής, όπως Μακρύς και Έγγραφο. Αναγνωριστικό με % είναι ακέραιος (εσωτερικά είναι double), με $ είναι αλφαριθμητικό. Ενδέχεται να έχουμε κάνει κάποιο αλφαριθμητικό έγγραφο, ή κάποιο αναγνωριστικό να μην είναι double αλλά αντικείμενο. Μπορούμε να το ξέρουμε με την Type$() ή Τυπος$(). Έχουμε ένα τύπο αντικειμένου την ομάδα. Η Μ2000 δεν έχει χωριστούς τύπους αντικειμένων. Μπορούμε να βγάλουμε ένα αντικείμενο ενώνοντας ένα αντικείμενο σε ένα άλλο. Αν θέλουμε κοινό interface δεν χρειάζεται να το δηλώσουμε αρκεί να το φτιάξουμε, δηλαδή να παρέχουμε στο αντικείμενο ότι χρειάζεται. Μπορούμε να έχουμε αντικείμενα σε αντικείμενα (στατικά ή μη). Οι κλάσεις είναι συναρτήσεις που δίνουν αντικείμενα. Ο κώδικας της Μ2000 γράφεται με τμήματα και συναρτήσεις που αναγράφονται σε μια λίστα, Μπορούν να υπάρχουν τμήματα με τμήματα και συναρτήσεις και συναρτήσεις με τμήματα και συναρτήσεις. Οι ρουτίνες (μέρη τμήματος/συνάρτησης), είναι απλές δομές τοπικές που βλέπουν τις μεταβλητές του τμήματος και δημιουργούν τοπικές στον ίδιο χώρο ονόματος με αυτά. Μια μεταβλητή μπορεί να φανεί μόνο στο χώρο που δημιουργήθηκε. Μπορούμε όμως να φτιάχνουμε γενικές μεταβλητές ακόμα και σε τμήματα, Έτσι κάθε τμήμα βλέπει τις δικές του και τις γενικές. Ειδικά σε τμήματα και συναρτήσεις σε αντικείμενα, κάθε τμήμα μπορεί να βλέπει και τις μεταβλητές, τμήματα, συναρτήσεις του αντικειμένου (ομάδες λέγονται ή groups, και επειδή μια ομάδα μπορεί να έχει και άλλες ομάδες εσωτερικά, η εσωτερική ομάδα δεν μπορεί να δει τις μεταβλητές/συναρτήσεις/τμήματα της εξωτερικής). Ο κώδικας της Μ2000 μπορεί να αλλάζει κατά την εκτέλεση, να φορτώνεται ή να επιλέγεται άλλος ορισμός. Δεύτερος ορισμός μια συνάρτησης αλλάζει τη συνάρτηση. Οι ομάδες, πίνακες, μεταβλητές....αντιγράφονται αλλά μπορούν να περαστούν και με αναφορά. Η Μ2000 δεν έχει δείκτες με διευθύνσεις. Τα αντικείμενα η θα είναι στατικά - στο τμήμα που τα φτιάχνουμε και για όσο το τμήμα τρέχει - και αν είναι ως γενικά τότε θα τα βλέπουν και τμήματα που καλούμε- ή "πτητικά" δηλαδή θα είναι κλειστά σε θέσεις πίνακα, ή στο σωρό (ειδική στοίβα στη Μ2000). Αντί να έχουμε μια malloc έχουμε πίνακα που βάζουμε αντικείμενα στο στοιχεία του. Πίνακες έχουμε μέχρι δέκα διαστάσεων για τους τρεις βασικούς τύπους, αριθμό, ακέραιο και γράμμα (αλφαριθμητικό). Μπορούμε να ορίσουμε πίνακα κατά μια κλάση, ώστε να γεμίσει με αντικείμενα αυτής της κλάσης, και οι συναρτήσεις και τα τμήματα να γίνουν κοινά και να μην αλλάζονται μόνιμα! Ενώ έχουμε αναφορές δεν έχουμε δείκτες εκτός από ισχνούς δείκτες. Μια αναφορά έχει δυο στάδια, μια παραγωγή ισχνού δείκτη και μια ανάθεση αναγνωριστικού σε αυτόν τον δείκτη. Όταν καλούμε τμήμα με μια μεταβλητή με αναφορά αυτόματα η Μ2000 περνάει την ισχνή αναφορά και σε μια Διάβασε στο τμήμα συνδέεται η ισχνή με ένα νέο αναγνωριστικό. Επειδή οι ισχνές αναφορές είναι αλφαριθμητικά στη Μ2000 μπορούμε να τις πάρουμε και να τις χρησιμοποιήσουμε σε άλλο χρόνο, εφόσον πράγματι "υπάρχει" αυτό που δείχνει. Αν η Α$ έχει μια ισχνή αναφορά σε ένα αντικείμενο τότε το EVAL(Α$.Α) θα επιστρέψει την τιμή του Α στο αντικείμενο που δείχνει η Α$. Ομοίως μια Α$.Α++ θα αυξήσει την τιμή του Α στο αντικείμενο που δείχνει το Α$. Οι συναρτήσεις μπορούν να περαστούν με αναφορά. Ένα αντικείμενο μπορεί να πάρει μια συνάρτηση με αναφορά και να την καλέσει βάζοντας την δική του αναφορά (&Αυτό ή &This) Το πιο νέο είναι σε ένα Α τμήμα να καλέσουμε ένα Β τμήμα και να περάσουμε σε αυτό μέρος του τμήματος Α που θα κληθεί διαδοχικά πολλές φορές από το Β, επενεργώντας σε μεταβλητές του Α (πράγμα που γίνονταν για αντικείμενα, αλλά εδώ συμβαίνει σε τμήματα εκτός αντικειμένων). Αυτό το κομμάτι θέλει ...τεκμηρίωση. Επειδή έχει γραφεί με VB6 η γλώσσα δύναται να έχουμε αντικείμενα COM (Δεν μπορούμε να έχουμε αναφορές σε αυτά, μόνο ισχνές αναφορές). Δηλαδή μπορούμε να ανοίξουμε το Word και να φτιάξουμε νέα αντικείμενα από αυτό και να γράψουμε ένα κείμενο σε αυτό! Έτσι έκανα και την εξαγωγή του αρχείου βοήθειας (που είναι σε mdb αρχείο), με ένα μικρό πρόγραμμα σε M2000, διάβασα τα πεδία του αρχείου και τα έγραψα στο Word). Η Μ2000 μπορεί να καλεί εξωτερικά dll (δεν υποστηρίζει, ακόμα, callback). Η βασική διαφορά της Μ2000 από την Basic (αν εξαιρέσουμε και τα αντικείμενα): Τα τμήματα και οι συναρτήσεις δεν έχουν προκαθορισμένο αριθμό και τύπο παραμέτρων. Δηλαδή η κλήση θα γίνει χωρίς να γίνει έλεγχος αν το τμήμα ή η συνάρτηση απαιτεί συγκεκριμένο αριθμό και τύπο παραμέτρων. Το διάβασμα των παραμέτρων μπορεί να γίνει διαδοχικά και με έλεγχο. Οι παράμετροι που δεν είναι με αναφορά περνάνε ως τιμές. Μπορούμε να περάσουμε και πίνακες με αντιγραφή ή με αναφορά. Στην αντιγραφή θα γίνει καθολική αντιγραφή, δηλαδή αν μέσα στο πίνακα υπάρχουν αντικείμενα θα βγουν νέα. Αν τα αντικείμενα αυτά έχουν πίνακες θα βγουν νέοι. Δεν υπάρχει περίπτωση κυκλικής αναφοράς! Θα μπορούσαμε σε ισχνές αναφορές να αλληλοδέσουμε δυο αντικείμενα αλλά οι αναφορές αυτές για να γίνουν κανονικές..θα ελεγχθούν, άρα κατά την εκτέλεση, ενώ κατά την αντιγραφή θα περαστούν ως έχουν. Οι τιμές που περνάμε σε τμήματα πάνε σε ένα σωρό τιμών (ειδική στοίβα), την οποία μοιράζονται τα τμήματα που συγγενεύουν (πατρικό-παιδί). Οι συναρτήσεις έχουν πάντα δικό τους σωρό (που γίνεται πατρικός αν καλέσουν τμήμα). Στο σωρό μπορούμε να επιστρέψουμε τιμές, πίνακες, ομάδες. Μπορούμε να φτιάχνουμε ανώνυμες συναρτήσεις (δεν το αναπτύσσω εδώ). Μέρη τμήματος μπορούν να γίνουν ξεχωριστά νήματα και να τρέχουν παράλληλα. Η Μ2000 υποστηρίζει σύστημα νημάτων και μάλιστα μπορούμε να περιμένουμε την εισαγωγή ενός στοιχείου, π.χ. αλφαριθμητικού, ενώ ένα άλλο νήμα γράφει ή ζωγραφίζει, και άλλο νήμα να μετακινεί το παράθυρο! Μπορούμε να φτιάχνουμε σωληνώσεις και να κάνουμε προγράμματα σε M2000 να επικοινωνούν μεταξύ τους ασύγχρονα μεταφέροντας δεδομένα. Η συγγραφή προγραμμάτων είναι εύκολη. Μπορεί κανείς να χρησιμοποιήσει το πρώτο επίπεδο, απλά ένα τμήμα και μερικές ρουτίνες. Μπορεί να ασχοληθεί με γραφικά, μουσική, βάσεις δεδομένων, με παιχνίδια (έχει και sprites η Μ2000). Μετά μπορεί να πάει σε δεύτερο επίπεδο, να χρησιμοποιεί κλάσεις. Έχω γράψει πρόγραμμα με αντικείμενα και πίνακα κατακερματισμού όπου φαίνεται ξεκάθαρα η ταχύτητα εύρεσης στοιχείων. Αυτό ανήκει στο δεύτερο επίπεδο δυσκολίας. Για νέους εντελώς το πρώτο επίπεδο μπορεί να παίξει χωρίς καν να φτιάξει κανείς πρόγραμμα...δηλαδή μπορεί να δίνει "ξερές" εντολές. Π.χ. Θέση 6000,6000 μετά να δώσει Χάραξε -2000,1000 ή Χάραξε στο 8000,4000 ή Χάραξε Γωνία πι/8, 3000 (γραμμές με σχετικές, απόλυτες ή πολικές συντεταγμένες). Ξεκινάει το παιδί να ζωγραφίζει και μετά του λες να βάλει μια μεταβλητή π,χ, Α=3000 και μετά Χάραξε Α,Α οπότε μαθαίνει τη μεταβλητή ως μια χρησιμότητα για το "παιχνίδι" του. Δεν χρειάζεται στη Μ2000 να κάνουμε ανάλυση του πως και του γιατί. Απλά να γράφει το κώδικα με κατανοητό τρόπο, χωρίς να του λέμε δώσε ακέραιο Α...Όχι όλες οι μεταβλητές double και τελειώνουμε. Δεν υπάρχει λόγος στην εκπαίδευση να ξεκινάμε με το να λέμε πολλά για λίγα πράγματα, αλλά με λίγα να κάνουμε πολλά. Ακριβώς έτσι κάνει μια γλώσσα...Π.χ. με λίγες εντολές ο επεξεργαστής κάνει ότι βλέπουμε! Στη Μ2000 δεν είναι κανόνας ο reusable code. Δηλαδή ενώ μπορούμε να φορτώνουμε "βιβλιοθήκες", σκοπός της Μ2000 είναι να έχουμε τον πλήρη έλεγχο σε όλο το κώδικα. Αν θέλουμε να χρησιμοποιήσουμε κώδικα που γράψαμε παλιότερα καλύτερα να τον φορτώσουμε μόνιμα αλλιώς υπάρχει περίπτωση να αλλαχτεί. Αν ένα τμήμα κάνει συγκεκριμένη δουλειά που θέλουμε τότε το φορτώνουμε και το καλούμε ή το τρέχουμε σε άλλη διεργασία. Μπορούμε όμως και να το ενώσουμε με το πρόγραμμά μας, ώστε να βρίσκεται στη λίστα από την αρχή. Επεξ/σία 11 Ιανουαρίου 2016 από M2000
M2000 Δημοσ. 11 Ιανουαρίου 2016 Μέλος Δημοσ. 11 Ιανουαρίου 2016 Ανέβασα ένα παράδειγμα χρήσης sprites στη Μ2000 (με animation)
M2000 Δημοσ. 12 Ιανουαρίου 2016 Μέλος Δημοσ. 12 Ιανουαρίου 2016 Έφτιαξα και ένα φιδάκι! Παίζει μόνο του με τέσσερις παίκτες!
M2000 Δημοσ. 13 Ιανουαρίου 2016 Μέλος Δημοσ. 13 Ιανουαρίου 2016 Έχω ανεβάσει και ένα πρόγραμμα για Site: Διαγραφήστοιχείου από δυαδικό δένδρο Όποιος έχει χρησιμοποιήσει την γλώσσα ας γράψει εδώ σχόλια!
M2000 Δημοσ. 15 Ιανουαρίου 2016 Μέλος Δημοσ. 15 Ιανουαρίου 2016 Ανέβασα στο blog ένα masterpiece κώδικα (σε αγγλικά) όπου δείχνω πως μπορώ σε ένα αντικείμενο που φτιάχνω για καταχώρηση αντικειμένων δυναμικά να φτιάξω λίστες FIFO και LIFO (μπορούν να υπάρχουν πολλές) με διάφορα αντικείμενα, όπου φροντίζει το αντικείμενο αυτό να προσθέσει μια ιδιότητα "pnext" (ο δείκτης στο επόμενο). Υπάρχει μια βασική μέθοδος Malloc την οποία χρησιμοποιούν δυο άλλες μέθοδοι και μια συνάρτηση! Αυτές τις τρεις "εισόδους" χρησιμοποιούμε δίνοντας ένα αντικείμενο, το οποίο και οι τρεις το "αφήνουν" όπως το δώσαμε για να το χρησιμοποιήσει η βασική μέθοδος. Αυτό γίνεται με τη χρήση του ειδικού σωρού τιμών. Όταν καλούμε την συνάρτηση Malloc() με μια παράμετρο ένα αντικείμενο (η Μ2000 δεν έχει τύπους αντικειμένων, άρα περνάει οποιοδήποτε), αυτό γράφεται στο σωρό τιμών. Η Malloc() καλεί την μέθοδο Malloc αφήνοντας την παράμετρο ως έχει στο σωρό. Σε άλλες γλώσσες θα έπρεπε κανείς να πάρει το αντικείμενο σε μια μεταβλητή και να το ξαναπεράσει σε κλήση μιας ρουτίνας. Αυτό το σημείο το παραβλέπει η Μ2000. Επιπλέον μπορούμε σε πέρασμα δυο ή περισσοτέρων παραμέτρων να κρίνουμε από την πρώτη παράμετρο αν θα διαβάσουμε ή όχι την επόμενη(ες), αν θα αναδιατάξουμε τις θέσεις τους, αν διπλασιάσουμε κάποια!
M2000 Δημοσ. 18 Ιανουαρίου 2016 Μέλος Δημοσ. 18 Ιανουαρίου 2016 Νέα αναθεώρηση 140. Έφτιαξα στατικές μεταβλητές! Δύσκολο για τη Μ2000 (δεν το είχα αποφασίσει για πολλά χρόνια και πρόσφατα ήθελα να βελτιώσω τα νήματα). Γενικά κάθε προσθήκη ρίχνει την ταχύτητα οπότε πριν την κάνω ...διόρθωσα τον κώδικα (έδωσα ένα 5% ταχύτητα παραπάνω).
lnoldori Δημοσ. 18 Ιανουαρίου 2016 Δημοσ. 18 Ιανουαρίου 2016 Απλά μπράβο και χαρά στο κουράγιο σου. 1
M2000 Δημοσ. 22 Ιανουαρίου 2016 Μέλος Δημοσ. 22 Ιανουαρίου 2016 Δοκιμάστηκε η Μ2000 σε Windows 10 (σε νεο Turbo-X mini 28-230 με προεγκατεστημένα Windows 10 χωρίς να έχει μπει καμία εφαρμογή). Κατέβηκε το zip από το dropbox, μπήκε σε ένα φάκελο στα documents, και μόλις άνοιξε ο φάκελος έκανα τη "μεγάλη" διαδικασία (υπάρχει και η σύντομη), Δηλαδή επιλογή του ca.crt και ενσωμάτωση στα πιστοιποιητικά (με δική μας επιλογή ως root πιστοποιητικό). (με αυτόν τον τρόπο δεν χρειάζεται κάποιος να αγοράσει ένα πιστοποιητικό, και αυτό που έχει η Μ2000 αναφέρεται στο root που δίνω). Μετά από τις ιδιότητες του m2000.exe κάνουμε unblock (επειδή το κατεβάσαμε από το ιντερνέτ). Μέχρι εδώ είμαστε έτοιμοι, μπορεί να τρέξει η γλώσσα, δεν χρειάζεται να τρέχει με δικαιώματα διαχειριστή. Το ξεκινάμε γράφουμε την εντολή ρυθμίσεις ή settings και κάνουμε επιλογές σε φόρμα, για βασικά πράγματα. Αν θέλουμε μια φορά τρέχουμε τη γλώσσα με δικαιώματα διαχειριστή και εκτέλούμε την SWITCHES "+REG" και μετά βλέπουμε τι έχει κάνει με την MONITOR (δείχνει όλες τις θέσεις στο δίσκο που σχετίζονται με τη γλώσσα). Το SWITCHES "-REG"΄κάνει το ανάποδο! Έτσι εκτελούμε τα GSB αρχεία (είναι αρχεία με κείμενο, ορισμούς τμημάτων/συναρτήσεων και εντολές). Η δοκιμή δεν ήταν σε βάθος. Θα γίνει και αυτό. Απλά έγραψα μια επανάληψη από ένα έως χίλια και το έσωσα, μετά έκλεισα τη γλώσσα, μετά την άνοιξα και φόρτωσα το πρόγραμμα και το εκτέλεσα. Δείτε Site: εδώ για περισσότερες πληροφορίες
M2000 Δημοσ. 3 Φεβρουαρίου 2016 Μέλος Δημοσ. 3 Φεβρουαρίου 2016 Ανέβασα μια ανάρτηση για το Goto. Δείχνω ένα πρόγραμμα πως φτιάχνεται με goto και χωρίς. Φαίνεται ότι με το goto είναι πιο απλό! Μάλιστα δίνω ακόμα ένα τρίτο όπου είναι όπως το πρώτο με πέντε γραμμές επιπλέον και προσθέτω λειτουργικότητα: http://georgekarras.blogspot.gr/2016/02/to-goto-or-not-to-goto.html Ο αλγόριθμος διαβάζει από ένα αλφαριθμητικό μια σειρά αριθμών. Ο απλός με τις 32 γραμμές διαβάζει με πρόσημο και δεκαδικούς, με χωρίσματα κενά ή κόμμα και κενό. ή κόμμα. Ο εμπλουτισμένος με πέντε γραμμές διαβάζει και εκθετική μορφή με πρόσημο. το + σκέτο, η τελεία σκέτη, το .+ και το .- είναι λάθος. + ή - μέσα στον αριθμό δέχεται μόνο ακριβώς μετά από το e. Προκαλώ οποιονδήποτε να γράψει μια πιο καλή ρουτίνα (όχι με χρήση έτοιμης μετατροπής, αλλά με ανίχνευση ένα προς ένα χαρακτήρα τη φορά για δοσμένο μήκος αλφαριθμητικού, και εξαγωγή τους αριθμούς ως μέρος αλφαριθμητικού, δηλαδή δεν θα τους μετατρέψει σε αριθμούς απλά θα τους βρει σαν μέρος αλφαριθμητικού και θα τους εμφανίσει)
Προτεινόμενες αναρτήσεις