Σχετικά με τις διαδικασίες / συναρτήσεις

Ξεκίνησε από alkisg, 08 Ιαν 2003, 06:04:49 ΠΜ

« προηγούμενο - επόμενο »

alkisg

Λύθηκε η ασάφεια με τις διαδικασίες:
Μετά από επικοινωνία με τους συγγραφείς του βιβλίου προέκυψαν τα εξής συμπεράσματα: Στη ΓΛΩΣΣΑ το πέρασμα των μεταβλητών γίνεται με αναφορά στις διαδικασίες και με τιμή στις συναρτήσεις. Άρα είναι αδύνατη η κλήση μιας διαδικασίας με εκφράσεις (ή σταθερές) σαν παραμέτρους (δεν επιτρέπεται η  ΚΑΛΕΣΕ ΚάνεΚάτι(Α - 1)). Σαν επακόλουθο, είναι αδύνατη η χρήση αναδρομής στην ΓΛΩΣΣΑ και αν ποτέ αυτή ενταχτεί στην ύλη θα χρειαστούν κάποιες αλλαγές στον τυπικό ορισμό της.
(παρατήρηση 9/10/03: τελικά βρήκα έναν τρόπο για υλοποίηση που παρακάμπτει τις ασάφειες, περισσότερες λεπτομέρειες στην 0.90b)

Πέτρος Βασιλικός

Οι διαδικασίες ειναι μέσα στην εξεταστέα ύλη. Τι λέτε ? να το κάνουμαι απλά θεωριτικά ? στον πίνακα ?

alkisg

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

Χρήστος

 :-[ Eίναι απαραίτητο να εγκαταλήψεις την Delphi?

alkisg

??? Το αποτέλεσμα θα είναι καλύτερο, το πρόβλημα που είναι ???
Χρήστο νομίζω ότι το Delphi είναι βολικότατο και φέρνει όμορφα και γρήγορα αποτελέσματα, όμως για συμβατότητα με το Linux (που έχω στα υπόψη και ελπίζω να προλάβω να υλοποιήσω) θα πρέπει να χρησιμοποιήσω το Qt, που σημαίνει > 5 Mb download!!! Επίσης είχα διάφορα προβλήματα π.χ. με τα array από varInt64 και μάλλον φταίει το Delphi, όχι εγώ.
Έχω όμως και μια σκέψη να γυρίσω τον διερμηνευτή σε open-source (όχι δωρεάν, πιστεύω ότι αυτοί που αφιερώνουν χρόνο στην ανάπτυξη εκπαιδευτικών βοηθημάτων πρέπει να αμοίβονται), οπότε αν βρω συνεργάτες που να έχουν εμπειρία σε Delphi το συνεχίζω σε Delphi (και ξεχνάω την φορητότητα)!!!
Πάντως το control που σκέφτομαι να χρησιμοποιήσω (με κάποια τροποποίηση βέβαια) έχει δυνατότητες εκτύπωσης, αποθήκευσης ως Html / Rtf / Pdf / Latex, αναδίπλωσης κώδικα (να κρατάει μόνο τα σημαντικά και να κρύβει π.χ. το εσωτερικό των διαδικασιών) κτλ κτλ και θα υλοποιήσω και κάποια πράγματα που εκκρεμούν όπως breakpoints, code autocompletion, συναρτήσεις / διαδικασίες κτλ...
Ελπίζω μόνο ο διερμηνευτής να είναι τόσο χρήσιμος όσο και ο χρόνος που θα του αφιερώσω!  :)

bugman

#5
Άλκη,  πιστεύω ότι το καλύτερο θα ήταν να ολοκληρωθεί η γλώσσα στον Διερμηνευτή σου. τελευταία έγραψα μερικά προγράμματα - demo - για την ΓλωσσοΜάθεια του Νικολαϊδη στο Ασκησιολόγιο. http://users.otenet.gr/~spin1/glossomatheia/programs/Θα βρεις την τρίλιζα και το mastermind (φυσικά και μια γεννήτρια ψευδοτυχαίων αριθμών).
Προτείνω να φτιάξεις τις συναρτήσεις και τις διαδικασίες.  
Να φτιάξεις δε την υποστήριξη αυτών όχι κατά ανάγκη με αναδρομή (recursion) αλλά με επανείσοδο (reentrance) - p.x. Η Α καλεί την Β όπου η Β καλεί πάλι την Α. Η πρώτη Α και η δεύτερη Α ενώ έχουν ίδιο ορισμό έχουν διαφορετικές τιμές στις μεταβλητές τους (που έχουν ίδιο όνομα).
Αυτό που θα ήθελα να ξεκαθαρίσεις (το ζήτησα και από τον Νικολαϊδη) είναι το μέγεθος που μπορούμε να έχουμε:
Στα ονόματα των αναγνωριστικών (μεταβλητών-σταθερών-διαδικασιών-συναρτήσεων)
Στα Αλφαριθμητικά,
Στους Δείκτες Πινάκων,
Στη περισσότερη μνήμη που μπορούμε να αποδώσουμε σε ένα πίνακα (κάθε τύπου)
Καθώς και τον αριθμό μέγιστων φωλιασμένων επαναλήψεων (λέγεμε stack)

Και να και ένα δωράκι:
ΠΡΟΓΡΑΜΜΑ τυχαιος_αριθμος 
ΜΕΤΑΒΛΗΤΕΣ 
   ΑΚΕΡΑΙΕΣ: ΑΡΧΙΚΟ, ΝΕΟ, Ι, ΑΠ, ΣΥΧΝΟΤΗΤΑ[100], ΜΕΓΙΣΤΟ 
ΔΙΑΔΙΚΑΣΙΑ ΤΥΧΑΙΟΣ(Α,Ν) 
ΜΕΤΑΒΛΗΤΕΣ 
   ΑΚΕΡΑΙΕΣ: Α, Ν 
ΑΡΧΗ 
   Ν <-- N + Α DIV 123 
   Α <-- Ν + Α MOD 13031 
   Ν <-- (Ν MOD 100)*100+(N DIV 100) MOD 100 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 
ΑΡΧΗ 
   ΑΡΧΙΚΟ <-- 12123 
   ΜΕΓΙΣΤΟ <-- 100000 
   ΓΡΑΨΕ 'ΘΑ ΚΑΝΩ ΕΛΕΓΧΟ ΣΕ ',ΜΕΓΙΣΤΟ,' ΝΟΥΜΕΡΑ' 
   ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ ΜΕΓΙΣΤΟ 
      ΚΑΛΕΣΕ ΤΥΧΑΙΟΣ(ΑΡΧΙΚΟ, ΝΕΟ) 
      ΑΠ <-- (ΝΕΟ DIV 100) +1 
    ΣΥΧΝΟΤΗΤΑ[ΑΠ] <-- ΣΥΧΝΟΤΗΤΑ[ΑΠ]+1 
   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ 
   ΓΡΑΨΕ 
   ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 100 
      ΓΡΑΨΕ_ Ι,'[',ΣΥΧΝΟΤΗΤΑ[Ι],'] ' 
   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ 

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

alkisg

Γιώργο sorry που δεν σου απάντησα πιο πριν αλλά έτρεχα με τις πανελλήνιες και τα μεταπτυχιακά.
Για την reentrancy: όπου υποστηρίζεται αναδρομή οι τιμές των μεταβλητών αποθηκεύονται στο stack, οπότε υποχρεωτικά ο κώδικας είναι reentrant.
Τα μεγέθη που ζητάς είναι ουσιαστικά απεριόριστα (π.χ. για 1 τρισεκατομμύριο διαστάσεις πινάκων πρώτα θα εξαντηθεί η RAM σου και μετά θα βγάλει πρόβλημα ο διερμηνευτής - η m2000 αν δεν κάνω λάθος υποστηρίζει μόνο 60 ;-) ). Για τα υπόλοιπα μεγέθη (πραγματικοί, ακέραιοι κτλ) τα γράφω όλα στο εγχειρίδιο της γλώσσας (στην ιστοσελίδα μου), ρίξ' του μια ματιά. Γενικώς η φιλοσοφία μου είναι ότι δεν πρέπει ποτέ να αναγκάσουμε τους μαθητές να ασχοληθούν με την ακρίβεια των υπολογισμών, οπότε χρησιμοποιώ τεράστιους ακέραιους (int64), διπλής ακρίβειας πραγματικούς, 4 Gb strings/αναγνωριστικά κτλ.

bugman

Ok
Θα διαβάσω, την βοήθεια. Πρέπει όμως να φτιάξεις έναν άμεσο τρόπο εισαγωγής και εξαγωγής στοιχείων στο ιδιο παράθυρο. Αυτό με τα InputBoxes είναι τραβηγμένο!(Και αλλάζει την λογική που φτιάχνουμε προγράμματα)

Α! Η Μ2000 στην έκδοση 4, υποστηρίζει μόνο μονοδιάστατους πίνακες. Στην έκδοση 5 πολυδιάστατους μέχρι δέκα διαστάσεις. Και στις δυο εκδόσεις μπορείς να βάλεις όσα στοιχεία θέλεις(32Bit δείκτες).
Τώρα για τους ακέραιους, δεν χρησιμοποιώ καθόλου Integers! Δηλαδή είναι πραγματικοί χωρίς δεκαδικά!

Στις συναρτήσεις της Μ2000 (εκδ 5) μπορείς να κάνεις επανείσοδο. Στα τμήματα, επίσεις μπορείς να το κάνεις αλλα δεν επιτρέπω την αναδρομή!(από δική μου παραξενιά). Μην ξεχνάς ότι μπορείς να έχεις τμήματα που να έχουν συναρτήσεις που να έχουν τμήματα που να έχουν συναρτήσεις....Και επειδή είναι interpreter η Μ2000 μπορείς να έχεις δυο ορισμούς για μια συνάρτηση και με ένα if then else να αλλάζεις τον τρέχον ορισμό σε διαδοχικές εκτελέσεις του ίδιου τμήματος!
Κάνεις καλή προσπάθεια αλλά μπλέκουμε στο επι αμοιβή! Εκεί βέβαια ο καθένας, και καλά κάνει, το βλέπει όπως θέλει.




Ceres

Καλή σχολική χρόνια σε όλους σας.
Τελικά ούτε η νέα έκδοση 0.88α του διερμηνευτή θα υποστηρίζει Διαδικασίες και  Συναρτήσεις;
Πρόκειται να υπάρξει κάτι νεότερο πάνω σ'αυτό αργότερα;
Φιλικά
Ceres  ???

alkisg

#9
Το χρονοδιάγραμμα έχει ως εξής:
  • 0.89α, σε περίπου δύο βδομάδες (παρατήρηση 9/10/03: τελικά άκυρο το 2 εβδομάδες, η 0.89α θα έχει αρκετά παραπάνω πράγματα, οπότε αναμένεται προς το τέλος Οκτώβρη): Η τελευταία έκδοση ΧΩΡΙΣ τμηματικό προγραμματισμό. Θα υποστηρίζει το & (συνέχιση γραμμής), επιλογή για ΜΗ unicode σχεσιακούς τελεστές (<=, >=, <>, σύμφωνα με τα κεφάλαια 7-10 του βιβλίου), καλύτερο μαρκάρισμα λεκτικών - συντακτικών - λαθών εκτέλεσης και κάποιες άλλες μικροβελτιώσεις.
  • 0.90β, περίπου Νοέμβρη. Πλέον ο διερμηνευτής θα περιλαμβάνει όλη τη ΓΛΩΣΣΑ του βιβλίου (και τμηματικό), οπότε θα μπορεί να χαρακτηριστεί *βήτα* (beta). Το μέχρι τώρα *άλφα* σημαίνει ότι δεν έχει όλα τα αναμενόμενα χαρακτηριστικά. Οι διαδικασίες θα υλοποιηθούν περίπου σε στυλ visual basic, παρακάμπτοντας έτσι κάποιες ασάφειες και κάνοντας δυνατή και την αναδρομή από συναρτήσεις. Δηλαδή θα είναι copy in - copy out (όχι με αναφορά, το βιβλίο περιγράφει μηχανισμό copy in - copy out). Το copy out θα γίνεται πάντα, όταν βέβαια είναι δυνατό, οπότε με αυτόν τον τρόπο θα είναι απολύτως συμβατό με όλα τα παραδείγματα του βιβλίου. Αναλυτικότερη περιγραφή μετά την υλοποίηση ;-)
  • 0.9xβ, μέχρι τα Χριστούγεννα. Διορθώσεις μικρολαθών και βελτιώσεις user-interface (dockable παράθυρα - π.χ. να μπορεί να αλλαχτεί η θέση της οθόνης χρήστη). Υλοποίηση εκφράσεων προς παρακολούθηση και αλλαγή του παραθύρου παρακολούθησης μεταβλητών, ώστε να εμφανίζονται καλύτερα οι πίνακες, να φαίνεται ο τύπος και το context των μεταβλητών (σε ποια διαδικασία αναφέρονται). Επίσης προσθήκη δυνατότητας εξαγωγής πίνακα τιμών σε HTML αρχείο.
  • 1.0, στο τέλος των διακοπών των Χριστουγέννων. 1.0 για μένα σημαίνει να έχουν υλοποιηθεί όλα τα παραπάνω και να μην υπάρχουν γνωστά σφάλματα.
  • 2.0, τέλος καλοκαιριού, εφόσον συνεχιστεί αμείωτο το ενδιαφέρον για τον διερμηνευτή. Ξαναγράψιμο του διερμηνευτή σε C και ριζική αλλαγή του user interface: Ο διερμηνευτής θα γίνει κάτι σε στυλ visual studio, με τρεις καρτέλες για κάθε πρόγραμμα: Στην πρώτη θα έχει έναν HTML editor (σαν το frontpage) για την συγγραφή των εκφωνήσεων, στην δεύτερη θα είναι το πρόγραμμα περίπου όπως είναι τώρα (με κάποιες παραπάνω ευκολίες) και στην τρίτη θα μπορεί να καταγράφεται για επαναχρησιμοποίηση η είσοδος του προγράμματος (π.χ. αν θέλουμε να δείξουμε κάτι στους μαθητές με 100x100 πίνακα δεν λέει να εισάγουμε 10000 στοιχεία με το χέρι!).
Θα υπάρχει δυνατότητα απόκρυψης της λύσης με κωδικό, ώστε να δίνουμε σε μία δισκέτα π.χ. 100 ασκήσεις στους μαθητές, να μπορούν να βλέπουν τις εκφωνήσεις και να τις εκτελούν αλλά να μην μπορούν να δουν τις λύσεις. Αφού λυθούν οι ασκήσεις στον πίνακα δεν χρειάζεται να τις δώσουμε στους μαθητές, αρκεί να τους δώσουμε τον αντίστοιχο κωδικό.
Το φορμάτ αρχείων θα αλλάξει και θα γίνει html ώστε να υποστηρίζει και τις εκφωνήσεις και θα είναι δυνατή η απ' ευθείας προβολή του από τον internet explorer.
  • 3.0, στο απώτερο μέλλον: Υποστήριξη και της ψευδογλώσσας των πρώτων κεφαλαίων, για προγραμματισμό σε πολύ ελεύθερη μορφή.