Συμμετοχή σε open source πρόγραμμα εκτέλεσης αλγορίθμων

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Συμμετοχή σε open source πρόγραμμα εκτέλεσης αλγορίθμων

Δημοσίευση από alkisg » 03 Οκτ 2007 15:25

Αν ενδιαφέρεται κανείς για συμμετοχή στην ανάπτυξη open source περιβάλλοντος εκτέλεσης αλγορίθμων, με στόχο να χρησιμοποιηθεί στα πλαίσια του μαθήματος "Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον" της Γ΄ Ενιαίου Λυκείου, ας δει τη σχετική ανακοίνωση στο
http://users.sch.gr/alkisg/tosteki/index.php?topic=1077

Το περιβάλλον θα υλοποιηθεί σε html / javascript, ενώ το interface θα είναι κάπως έτσι: http://ecco.sourceforge.net/
http://www.alkisg.com/screenshots/

Για περισσότερες πληροφορίες δείτε το παραπάνω link με την ανακοίνωση.

Ευχαριστώ,
Άλκης

-----------------------------------------------

@skeftomilos και τους άλλους javascript-ο-μάστορες:
Σε κάποια φάση ένας αλγόριθμος (σε ελληνικό ψευδοκώδικα) θα έχει μεταφραστεί σε Javascript, και θα θέλουμε αυτός να εκτελεστεί βήμα-προς-βήμα με παρακολούθηση των τιμών των μεταβλητών κτλ. Ο μόνος τρόπος που σκέφτηκα είναι με την SetTimeOut, γιατί οτιδήποτε άλλο καταρχάς θα παγώνει το interface και κατά δεύτερο θα κάνει τον browser να σκοτώσει το script λόγω υπερβολικού χρόνου εκτέλεσης... Δυστυχώς όμως με την SetTimeOut κάθε γραμμή κώδικα θα πρέπει να εκτελείται ξεχωριστά, και έτσι δεν γίνεται να μεταφραστεί ο κώδικας με συνηθισμένο τρόπο, π.χ.
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 100000
ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

σε Javascript θα θέλαμε να γίνει
for (var i = 1; i <= 100000; i++)
Grapse(i);

Αλλά τώρα με την SetTimeOut το loop θα πρέπει να σπαστεί σε ξεχωριστές εντολές, και δεν μπορώ να σκεφτώ κάποιον τρόπο να γίνει pause / resume της εκτέλεσης...
Καμιά ιδέα;

Δεύτερη απορία, ο firefox υποστηρίζει τις watch() και unwatch(), με τις οποίες ειδοποιούμαστε όταν κάποιο property ενός object αλλάξει τιμή (χρήσιμο για την παρακολούθηση των τιμών των μεταβλητών). Ξέρετε να υπάρχει κάτι αντίστοιχο σε IE;

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Συμμετοχή σε open source πρόγραμμα εκτέλεσης αλγορίθμων

Δημοσίευση από skeftomilos » 03 Οκτ 2007 23:26

Το pause/resume με JavaScript είναι δύσκολη υπόθεση. Ένα project που προσπαθούσε να απλοποιήσει το μπέρδεμα με του timers είναι η Narrative Javascript, αλλά δεν το βλέπω να είναι live αυτή τη στιγμή. Ένα άρθρο: Narrative Javascript - Cleaner Code for Long Running Tasks

Ένας πιθανός τρόπος είναι να σπάσουν οι εντολές του προγράμματος σε χωριστές ρουτίνες, ώστε να μπορεί να υπάρχει παρακολούθηση ποια εντολή τρέχει κάθε στιγμή και ποια είναι η επόμενη. Για παράδειγμα ο παρακάτω κώδικας των έξι γραμμών:

Κώδικας: Επιλογή όλων

function _PROGRAM_1&#40;&#41; &#123;
  /*0001*/ var i = 0
  /*0002*/ while &#40;i <= 10&#41; &#123;
  /*0003*/   Grapse&#40;i&#41;
  /*0004*/   i++
  /*0005*/ &#125;
  /*0006*/ /*Τέλος!*/
&#125;
_PROGRAM_1&#40;&#41;

function Grapse&#40;o&#41; &#123;
  document.write&#40;o + '\n'&#41;
&#125;
...μπορεί να υποστεί την εξής μετατροπή:

Κώδικας: Επιλογή όλων

var PROGRAM_1 = &#40;function&#40;&#41; &#123;
  var _VARS = &#123;&#125;
  var _COMMANDS = &#91;&#93;
  /*0001*/ _COMMANDS&#91;1&#93; = function&#40;&#41; &#123;_VARS.i = 0; _EXEC&#40;2&#41;&#125;
  /*0002*/ _COMMANDS&#91;2&#93; = function&#40;&#41; &#123;if &#40;_VARS.i <= 10&#41; &#123;_EXEC&#40;3&#41;&#125; else &#123;_EXEC&#40;6&#41;&#125;&#125;
  /*0003*/ _COMMANDS&#91;3&#93; = function&#40;&#41; &#123;Grapse&#40;_VARS.i&#41;; _EXEC&#40;4&#41;&#125;
  /*0004*/ _COMMANDS&#91;4&#93; = function&#40;&#41; &#123;_VARS.i++; _EXEC&#40;5&#41;&#125;
  /*0005*/ _COMMANDS&#91;5&#93; = function&#40;&#41; &#123;_EXEC&#40;2&#41;&#125;
  /*0006*/ _COMMANDS&#91;6&#93; = function&#40;&#41; &#123;/*Τέλος!*/&#125;
  function _EXEC&#40;index&#41; &#123;
    _COMMANDS&#91;index&#93;&#40;&#41;
  &#125;
  return &#123;
    commands &#58; _COMMANDS,
    vars     &#58; _VARS,
    runToEnd &#58; function&#40;&#41; &#123;_EXEC&#40;1&#41;&#125;,
    runOne   &#58; function&#40;&#41; &#123;/*TODO*/&#125;
  &#125;
&#125;&#41;&#40;&#41;
PROGRAM_1.runToEnd&#40;&#41;
document.write&#40;'i = ' + PROGRAM_1.vars.i&#41;
Στη ρουτίνα _EXEC μπορούν να προστεθούν μετρητές, timers και άλλα κόλπα.

- Live Demo
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Συμμετοχή σε open source πρόγραμμα εκτέλεσης αλγορίθμων

Δημοσίευση από alkisg » 04 Οκτ 2007 00:23

Wow, ωραία return, δεν είχα ξαναδεί function να κατασκευάζει και να επιστρέφει object on-the-fly.

Άξιος όπως πάντα. Με τον παραπάνω κώδικα υπάρχει πρόβλημα stack overflow λόγω υπερβολικού recursion αν εκτελεστούν πολλές εντολές, αλλά νομίζω ότι θα βρω ένα τρόπο να το ξεπεράσουμε (χρήση program counter αντί για κλήση EXEC).

Thanks!

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Συμμετοχή σε open source πρόγραμμα εκτέλεσης αλγορίθμων

Δημοσίευση από skeftomilos » 04 Οκτ 2007 00:54

Σωστά! Ούτε που μου πέρασε από το μυαλό το overflow.

Πρόχειρο fix:

Κώδικας: Επιλογή όλων

var PROGRAM_1 = &#40;function&#40;&#41; &#123;
  var _VARS = &#123;&#125;
  var _COMMANDS = &#91;&#93;
  /*0001*/ _COMMANDS&#91;1&#93; = function&#40;&#41; &#123;_VARS.i = 0; return 2&#125;
  /*0002*/ _COMMANDS&#91;2&#93; = function&#40;&#41; &#123;if &#40;_VARS.i <= 10&#41; &#123;return 3&#125; else &#123;return 6&#125;&#125;
  /*0003*/ _COMMANDS&#91;3&#93; = function&#40;&#41; &#123;Grapse&#40;_VARS.i&#41;; return 4&#125;
  /*0004*/ _COMMANDS&#91;4&#93; = function&#40;&#41; &#123;_VARS.i++; return 5&#125;
  /*0005*/ _COMMANDS&#91;5&#93; = function&#40;&#41; &#123;return 2&#125;
  /*0006*/ _COMMANDS&#91;6&#93; = function&#40;&#41; &#123;/*Τέλος!*/ return 0&#125;
  return &#123;
    commands &#58; _COMMANDS,
    vars     &#58; _VARS,
    runToEnd &#58; function&#40;&#41; &#123;
      var index = 1
      while&#40;index&#41; &#123;
        index = _COMMANDS&#91;index&#93;&#40;&#41;
      &#125;
    &#125;
  &#125;
&#125;&#41;&#40;&#41;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης