Διερμηνευτής Ψευδογλώσσας

Ξεκίνησε από sstergou, 20 Μαΐου 2008, 07:11:30 ΜΜ

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

sstergou

Τους τελευταίους μήνες κάνω μια προσπάθεια υλοποίησης της ψευδογλώσσας της ΑΕΠΠ. Μια γρήγορη ερώτηση που έρχεται στο μυαλό όλων είναι:"μα καλά, πως είναι δυνατόν να υλοποιηθεί μια ψευδογλώσσα; Λέγεται έτσι επειδή ακριβώς δεν είναι υλοποιήσιμη.".

Το πρόβλημα με την ψευδογλώσσα του βιβλίου είναι ότι είναι περισσότερο γλώσσα παρά ψευδό και αυτό κατά τη γνώμη μου οφείλεται κυρίως στις πανελλήνιες εξετάσεις. Έτσι πιστεύω ότι η ψευδογλώσσα έχει εκφυλιστεί σε μια γλώσσα προγραμματισμού.

Αυτή την εκφυλισμένη ψευδογλώσσα προσπαθώ να υλοποιήσω και δεν υποστηρίζω πως αυτό είχαν στο μυαλό τους οι συγγραφείς. Με νοιάζει να υλοποιηθεί με συνέπεια το υποσύνολο της ψευδογλώσσας που χρησιμοποιείται στο 95% των περιπτώσεων.

Πιστεύω πως η αλγοριθμική και πολύ περισσότερο ο προγραμματισμός διδάσκεται  καλύτερα με την βοήθεια του υπολογιστή.

Ένας μεταγλωττιστής/διερμηνευτής για την ψευδογλώσσα μπορεί να είναι εξαιρετικά χρήσιμος για τους παρακάτω λόγους.


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

Μέχρι τώρα έχει υλοποιηθεί ο λεκτικός και συντακτικός αναλυτής(backend) και μένει ο συντάκτης και το περιβάλλον εκτέλεσης (frontend).

Πρόβλημα 1 – Τύποι

Υπάρχουν 3 βασικοί τύποι εκφράσεων αλφαριθμητικές, αριθμητικές, λογικές.
Ο αριθμητικός τύπος διακρίνεται σε ακέραιο και πραγματικό. Η διάκριση αυτή γίνεται μόνο για την εφαρμογή των τελεστών div-mod.

Μια μεταβλητή που διαβάζεται δεν έχει τύπο. Αποκτά τύπο από την στιγμή που της ανατίθεται με την εντολή εκχώρησης ή με τη χρησιμοποίηση της σε κάποια έκφραση.

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

Οι μεταβλητές που δεν έχουν τύπο αποκτούν τύπο σύμφωνα με τους παρακάτω κανόνες.

  • Όποια αγνώστου τύπου μεταβλητή χρησιμοποιείται μαζί με κάποιον αριθμητικό τελεστή αποκτά αυτόματα τον αριθμητικό τύπο.
  • Όποια αγνώστου τύπου μεταβλητή  χρησιμοποιείται μαζί με κάποιον συγκριτικό τελεστή τότε ελέγχεται ο τύπος του άλλου τελεσταίου. Αν είναι αλφαριθμητικό τότε και αυτή γίνεται αλφαριθμητική, αν είναι αριθμός τότε γίνεται αριθμητική, αν και ο άλλος τελεσταίος δεν έχει τύπο τότε γίνεται διαδοχικά σύγκριση αριθμών – αλφαριθμητικών για να εξακριβωθεί ο κατάλληλος τύπος
  • Όποια αγνώστου τύπου μεταβλητή  χρησιμοποιείται μαζί με κάποιον λογικό τελεστή τότε αποκτά αυτόματα τον λογικό τύπο.

Από την στιγμή που θα αποδοθεί τύπος σε μια μεταβλητή αυτός δεν θα μπορεί να αλλάξει. Οποιαδήποτε “παράνομη” χρήση τελεστών θα έχει την συνέπεια ενός σφάλματος χρόνου εκτέλεσης.

Ο λόγος που τα γράφω αυτά είναι επειδή θέλω τη γνώμη σας...Οποιαδήποτε βοήθεια θα εκτιμηθεί ιδιαίτερα.
Ελπίζω να μην σας κούρασα.

P.Tsiotakis

Είμαι απόλυτα σύμφωνος με την ιδέα Στάθη και μάλιστα την είχα προτείνει και στους 2 αστέρες (Άλκη και Σπύρο), είναι γνωστή η αντιπάθεια που έχω στη ΓΛΩΣΣΑ.

1. Συμφωνώ απόλυτα με την λογική "απόδοσης" τύπου στη μεταβλητή κατά την πρώτη χρήση και το μήνυμα λάθους σε μεταγενέστερη λάθος χρήση.  :)

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

Φυσικά, πρέπει να καλύπτονται και οι λάθος εκχωρήσεις του στυλ  α <- 2 * "ζ".

Εγω θέλω να βοηθήσω. Υπάρχουν σίγουρα ΠΑΡΑ πολλά θέματα που θα ανακύψουν και θέλω να συμμετέχω στη συζήτηση.

sstergou

Χαίρομαι ιδιαίτερα για για την συμμετοχή σου Παναγιώτη.  :)

Παράθεση
Φυσικά, πρέπει να καλύπτονται και οι λάθος εκχωρήσεις του στυλ  α <- 2 * "ζ"

Αυτό σημαίνει ότι μέρος των ελέγχων θα πρέπει να γίνει πριν την εκτέλεση. Ποιοι όμως έλεγχοι θα γίνονται πριν και ποιοι μετά;

Αν ελέγχονται μόνο οι εκφράσεις που έχουν μέσα σταθερές;
Τι γίνεται με το :

Διάβασε α
Διάβασε β

γ <- α + β

γ <- "αα";

Γνώμη μου είναι πως πρέπει να είναι σφάλμα χρόνου εκτέλεσης αλλά θέλω να ακούσω και τη γνώμη άλλων πάνω στο θέμα.

Παράθεση από: Τσιωτάκης Παναγιώτης στις 20 Μαΐου 2008, 07:55:04 ΜΜΥπάρχουν σίγουρα ΠΑΡΑ πολλά θέματα που θα ανακύψουν και θέλω να συμμετέχω στη συζήτηση.

Αυτό είναι το μόνο σίγουρο, σκέψου μόνο την κλήση αλγορίθμου από αλγόριθμο  :o


P.Tsiotakis

Την κλήση αλγορίθμου απο αλγόριθμο, μπορείς να την αφήσεις (ή κ να μην την υλοποιήσεις καν)

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

sstergou

#4
Μάλλον δεν γλιτώνουμε το type checking και κατά την διάρκεια της μεταγλώττισης.

Άρα 2 ειδών λάθη τύπων:

  • ότι λάθος μπορεί να πιαστεί κατά τη διάρκεια της μεταγλώττισης
  • Λάθη χρόνου εκτέλεσης

Ήλπιζα να γλιτώσω το πρώτο αλλά μάλλον είναι κακή ιδέα τελικά.

ΠαράθεσηΤην κλήση αλγορίθμου από αλγόριθμο, μπορείς να την αφήσεις ...

Σίγουρα θα την αφήσω για τελευταία πάντως...

sstergou

Μία μεταβλητή μ παίρνει τύπο

1) Όταν συμμετέχει σε μία έκφραση με μια άλλη έκφραση
  α) Όταν ο τελεστής είναι αριθμητικός - παίρνει αριθμητικό τύπο
  β) Όταν ο τελεστής είναι λογικός - παίρνει λογικό τύπο
  γ) Όταν ο τελεστής είναι συγκριτικός :
    γ.1)όταν η έκφραση είναι αριθμητική - παίρνει αριθμητικό τύπο
    γ.2)όταν η έκφραση είναι αλφαριθμητική μεταβλητή - παίρνει αλφαριθμητικό τύπο
    γ.3)όταν η έκφραση είναι μεταβλητή αγνώστου τύπου, οι δύο μεταβλητές "δένονται" και δεν παίρνουν τύπο.

2)Όταν συμμετέχει σε έκφραση δείκτη πίνακα - παίρνει αριθμητικό τύπο

3)Όταν αποτελεί παράμετρο κλήσης συνάρτησης - παίρνει αριθμητικό τύπο

4)Όταν συμμετέχει στην εντολή αντιμετάθεσε
  α) Όταν η άλλη μεταβλητή έχει τύπο παίρνει τον τύπο της άλλης μεταβλητής
  β) Όταν η άλλη μεταβλητή δεν έχει τύπο οι δύο μεταβλητές δένονται

5)Όταν συμμετέχει σε επίλεξε είτε ως επιλογέας είτε ως μέλος έκφρασης περίπτωσης
  α) Αν κάτι από όλα έχει τύπο,παίρνει τον κατάλληλο τύπο (Αυτόν που έχουν οι υπόλοιπες εκφράσεις ή ο επιλογέας)
  β) Αν ο επιλογέας ή και οι εκφράσεις δεν έχουν τύπο και είναι μεταβλητές - τότε αυτές "δένοται" μεταξύ τους.

6)Στη εντολή εκχώρησης
  α) Αν η έκφραση έχει τύπο παίρνει τον τύπο της έκφρασης
  β)Αν η έκφραση είναι μεταβλητή που δεν έχει τύπο τότε οι δύο μεταβλητές "δένονται".

7)Αν είναι στοιχείο πίνακα, τότε παίρνει τον τύπο του πίνακα. Αν ο πίνακας δεν έχει τύπο τότε η μεταβλητή "δένεται" με τον πίνακα.

8 )Αν είναι η μοναδική μεταβλητή σε για είτε ως μεταβλητή είτε ως από είτε ως μέχρι είτε ως βήμα, παίρνει αριθμητικό τύπο.

9)Αν είναι η μοναδική μεταβλητή συνθήκης σε Αν,αλλιώς_αν, όσο, μέχρις_ότου παίρνει λογικό τύπο.

Όταν μία μεταβλητή δένεται με μία άλλη σημαίνει ότι όποια πάρει πρώτη τύπο , δίνει τον τύπο της και στην άλλη.
 

sstergou

Είμαι σε φάση που δοκιμάζω την λεκτική-συντακτική ανάλυση και την εξαγωγή τύπων. Θέλω να δοκιμάσω αρκετά το backend πριν προχωρήσω στο περιβάλλον εκτέλεσης και τον συντάκτη.

Σημασία έχει ο διερμηνευτής να
1) Επιστρέφει το σωστό κώδικα μετά τον πετυχημένο συντακτικό έλεγχο
2) Να εξάγει τον σωστό τύπο σύμφωνα με τους κανόνες που δημοσίευσα
3)Να πιάνει όλα τα λάθη που μπορούν να πιαστούν κατά τη μεταγλώττιση.

Στην διεύθυνση : http://users.sch.gr/sstergou/pseudoglossa/ υπάρχει ένα πολύ λιτό και όχι φιλικό interface για το μεταγλωττιστή. Μπορεί όμως να δοκιμάσει όλα τα παραπάνω.

Αν κάποιος έχει χρόνο και όρεξη, ας ρίξει μια ματιά. Σημασία έχουν όλα τα πιθανά λάθη αλλά και οι σωστές μεταγλωττίσεις. Βάζεις τον κώδικα στο textarea πατάς μεταγλώττιση αν υπάρχει λάθος υποτίθεται αναφέρεται, αλλιώς φαίνονται οι μεταβλητές που έχουν πάρει τύπο (και η έκφραση από την οποία έχουν πάρει) και στη συνέχεια ο κώδικας μορφοποιημένος με tabs, χωρίς σχόλια. Θα είναι μεγάλη βοήθεια οποιαδήποτε δοκιμή και αναφορά λάθους στο : sstergouATgmailDOTcom.

pgrontas

#7
Στάθη θα έχω κάποιον χρόνο από Τετάρτη, οπότε σκέφτομαι να αρχίσω να δοκιμάζω.
Θες να ελέγξεις κάτι συγκεκριμένο ή να αρχίσουμε να βαράμε και ότι βρίσκουμε?
Από μια σύντομη ματιά που είδα τώρα είναι case sensitive. Δεν δέχεται πχ. ΑΛΓΟΡΙΘΜΟΣ με κεφαλαία. Επίσης η εκχώρηση είναι <-?
Θα ξεκινήσω δοκιμές από Τετάρτη.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

#8
Παναγιώτη προς το παρόν είναι case sensitive, αργότερα όταν υλοποιηθεί ο συντάκτης θα γίνεται έλεγχος για τις λέξεις κλειδιά και θα αναγνωρίζονται σε όλες τους τις μορφές (π.χ. τελοσ_αΝ).
Προς το παρόν οι λέξεις κλειδιά είναι όπως τις έχει το βιβλίο. Η εκχώρηση είναι το <- αλλά και το σύμβολο unicode ← .

Εγώ ελέγχω συνεχώς για τη σωστή απόδοση τύπων, το χειρισμό πινάκων και τα λάθη που προκύπτουν όταν γίνεται κάτι περίεργο κτλ
π.χ.
Κώδικας: ψευδογλώσσα
Επίλεξε α
  Περίπτωση β,τ
  Περίπτωση γ[1]
  Περίπτωση 4
Τέλος_επιλογών


Ο παραπάνω κώδικας θα πρέπει να δώσει αριθμητικό τύπο σε όλες τις μεταβλητές αλλά και στον πίνακα.

ενώ ο :
Κώδικας: ψευδογλώσσα
α[1] <- 2
α[2] <- "3"


Πρέπει να χτυπήσει λάθος τύπων.

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

Ευχαριστώ εκ των προτέρων.

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

alkisg

#9
Διάβασε α, β
Εμφάνισε α > β

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

Διάβασε α   !Ο χρήστης δίνει 0432. Tο διαβάζεις σαν κείμενο! Όχι σαν αριθμό, γιατί τότε θα χάσεις τα αρχικά μηδενικά.
                !Αν όμως δεν είχε μηδενικά, καλύτερα να τον διαβάσεις σαν αριθμό για να διευκολύνεις τις αρχικές δραστηριότητες.
Εμφάνισε α > 0  !Σε αυτό το σημείο καταλαβαίνεις ότι έπρεπε να είναι αριθμός.

Για να λύσεις το παραπάνω πρόβλημα, κατά τη δεύτερη εντολή μετατρέπεις τον τύπο του α σε αριθμό.

α <- "10"
Εμφάνισε α > 0

Το παραπάνω όμως είναι σίγουρα συντακτικό σφάλμα.

Επομένως, κατά την εκτέλεση, αποφασίζεις για τους τύπους:
1. Το τι τύπο θεώρησες ότι είναι, a.type = {empty, number, integer, real, string, boolean}
2. Το πόσο σίγουρος είσαι για τη θεώρηση, a.stricttype = {false, true}
Αν δεν είσαι σίγουρος, επιτρέπεις (μερικές μόνο) δυναμικές αλλαγές τύπων, όπως στο παραπάνω παράδειγμα.
Αν είσαι σίγουρος τότε δεν επιτρέπεις δυναμική αλλαγή τύπου και πετάς συντακτικό σφάλμα κατά την εκτέλεση. :)

Ο τύπος number παραπάνω χρειάζεται για τις περιπτώσεις:
α <- 1    ! α = number, δεν ξέρουμε τι είναι
α <- 1.1 ! α = real
α <- 4 div 2  ! α = integer

και φυσικά δυναμικά μετατρέπεται σε real ή integer όταν θα έχεις παραπάνω πληροφορίες, ώστε να απαγορεύσεις στη συνέχεια περαιτέρω αλλαγή του στον αντίθετο (integer / real) τύπο. Π.χ. αν οι τρεις παραπάνω εντολές υπήρχαν στο ίδιο πρόγραμμα, στην τρίτη έπρεπε να χτυπήσεις συντακτικό σφάλμα.

sstergou

Παράθεση από: alkisg στις 09 Ιουν 2008, 07:31:47 ΠΜ
Διάβασε α, β
Εμφάνισε α > β
Δουλεύει ανεξαρτήτως τύπων είτε για αριθμητικές είτε για αλφαριθμητικές μεταβλητές, και μάλιστα αν ο χρήστης δώσει 10, 9 ανάλογα με το τι τύπο θα ορίσεις βγάζεις διαφορετικό αποτέλεσμα.
Για αυτό και σ'αυτήν την περίπτωση δεν αποδίδεται τύπος στη διάρκεια της μεταγλώττισης αλλά περιμένω να μαντέψω κατά τη διάρκεια της εκτέλεσης.

Παράθεση από: alkisg στις 09 Ιουν 2008, 07:31:47 ΠΜ
Στάθη μου φαίνεται πιο σοφό για την ψυχική σου υγεία ;) να παρατήσεις τον στατικό έλεγχο τύπων, και να κάνεις μόνο δυναμικό.

Αυτό σκεφτόμουνα στην αρχή αλλά προφανώς το
Κώδικας: ψευδογλώσσα
β<- α / "αλφαριθμητικό"

πρέπει να χτυπήσει λάθος μεταγλώττισης. Τώρα η ζημιά έγινε (!)

Βέβαια υπάρχει το εξής πρόβλημα :
Κώδικας: ψευδογλώσσα
α <- 2
Αν α > 3 τότε
  β <- 4
αλλιώς 
  β <-3.14
Τέλος_αν

γ <- α mod β

όπου αν και όλη η πληροφορία είναι εκεί ο τύπος δεν μπορεί να εξακριβωθεί γιατί πρέπει να εκτελεστεί ο κώδικας οπότε ο έλεγχος για το mod είναι λάθος και βασίζεται στην τελευταία τιμή του β (3.14).
Αυτό που θα μπορούσε να γίνει είναι :
Ο real να είναι strict τύπος και να μην επιτρέπεται μετατροπή σε integer οπότε χτυπάει λάθος μεταγλώττισης, αλλά τότε παίρνουμε μέρος της ελευθερίας της ψευδογλώσσας και αυτό δεν μου αρέσει. Ακόμη θα μπορούσε ο μεταγλωττιστής απλά να βγάζει ένα warning χωρίς να σταματάει και να αφήνει το λάθος να πιαστεί κατά τη διάρκεια της εκτέλεσης.

Παράθεση από: alkisg στις 09 Ιουν 2008, 07:31:47 ΠΜ
2. Το πόσο σίγουρος είσαι για τη θεώρηση, a.stricttype = {false, true}
Αν δεν είσαι σίγουρος, επιτρέπεις (μερικές μόνο) δυναμικές αλλαγές τύπων, όπως στο παραπάνω παράδειγμα.
Αν είσαι σίγουρος τότε δεν επιτρέπεις δυναμική αλλαγή τύπου και πετάς συντακτικό σφάλμα κατά την εκτέλεση. :)

Ενδιαφέρουσα προσέγγιση  :)

Παράθεση από: alkisg στις 09 Ιουν 2008, 07:31:47 ΠΜ
Ο τύπος number παραπάνω χρειάζεται για τις περιπτώσεις:
α <- 1    ! α = number, δεν ξέρουμε τι είναι
α <- 1.1 ! α = real
α <- 4 div 2  ! α = integer

και φυσικά δυναμικά μετατρέπεται σε real ή integer όταν θα έχεις παραπάνω πληροφορίες, ώστε να απαγορεύσεις στη συνέχεια περαιτέρω αλλαγή του στον αντίθετο (integer / real) τύπο. Π.χ. αν οι τρεις παραπάνω εντολές υπήρχαν στο ίδιο πρόγραμμα, στην τρίτη έπρεπε να χτυπήσεις συντακτικό σφάλμα.

Ξέρεις τι δε μου αρέσει σε αυτό; :
Κώδικας: ψευδογλώσσα
α<-3.14
εντολές
α <- 2
Γράψε α mod 2

με αυτή την προσέγγιση ο παραπάνω κώδικας πρέπει να χτυπήσει λάθος αν και η τιμή του α είναι έγκυρη... :(
Μήπως να πάμε και εδώ σε σφάλμα χρόνου εκτέλεσης με κάποιο warning ίσως στη μεταγλώττιση;

papet

Είμαι λίγο ζαλισμένος σήμερα αλλά, παρακαλώ ας μου επιτραπεί μια παρέμβαση...

Παράθεση από: alkisg στις 09 Ιουν 2008, 07:31:47 ΠΜ
Ο τύπος number παραπάνω χρειάζεται για τις περιπτώσεις:
α <- 1    ! α = number, δεν ξέρουμε τι είναι
α <- 1.1 ! α = real
α <- 4 div 2  ! α = integer

και φυσικά δυναμικά μετατρέπεται σε real ή integer όταν θα έχεις παραπάνω πληροφορίες, ώστε να απαγορεύσεις στη συνέχεια περαιτέρω αλλαγή του στον αντίθετο (integer / real) τύπο. Π.χ. αν οι τρεις παραπάνω εντολές υπήρχαν στο ίδιο πρόγραμμα, στην τρίτη έπρεπε να χτυπήσεις συντακτικό σφάλμα.

Νομίζω ότι μπορεί να αποφευχθεί η χρήση του τύπου number. Ο αριθμός μπορεί να θεωρείται αρχικά integer (αν δεν καθορίζεται σαφώς ως real από την πρώτη εκχώρηση) και στη συνέχεια να "κλειδώνει" (κι εμένα μου άρεσε η ιδέα με τη stricttype ιδιότητα) με το πρώτο div/mod ή δεκαδικό στον αντίστοιχο τύπο...

(Συγχωρήστε με αν λέω αβάσιμα πράγματα -είχα μια πολύ δύσκολη νύχτα-)
May the Force b with u...
papet

sstergou

Ναι, σε κάποιες περιπτώσεις όπως στη συγκεκριμένη μπορεί να αποφευχθεί.

Σκέψου όμως και το :

Κώδικας: ψευδογλώσσα
β <- 1
Διάβασε α
β <- α + β


Δεν πρέπει το α να πάρει κάποιον τύπο έστω και προσωρινό ώστε να ξέρει ο μεταγλωττιστής σε τι εκφράσεις μπορεί να τον χρησιμοποιήσει;
Και αφού δεν ξέρουμε αν είναι integer ή real , το προτιμότερο είναι ένας γενικότερος τύπος number.

Βασικά αυτό που σκεφτόμουνα είναι οι τύποι integer και real να έχουν αξία μόνο αν η μεταβλητή έχει τιμή. Την τιμή της όμως δεν μπορείς να την ξέρεις πριν την εκτέλεση είτε γιατί πρέπει να διαβαστεί είτε γιατί πρέπει να εκτελέσεις τον κώδικα (δες το παραπάνω παράδειγμα με την Αν). Μου κακοφαίνεται για την φιλοσοφία της ψευδογλώσσας ο αυστηρός ακέραιος ή πραγματικός τύπος που χτυπάει λάθος μεταγλώττισης σε div,mod, ακόμα και αν δεν είναι γνωστή η τιμή της μεταβλητής...

π.χ. ο κώδικας
Κώδικας: ψευδογλώσσα
α[4/4] <- 1

πρέπει να χτυπήσει λάθος μεταγλώττισης?

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

Βέβαια ίσως αυτό αποδειχθεί τελικά ανέφικτο οπότε πάμε σε αυστηρούς τύπους.

alkisg

papet, δίκιο έχεις, ο τύπος number μπορεί να αποφευχθεί αν οι αριθμοί θεωρούνται αρχικά integer με stricttype=false. Τα έγραψα βιαστικά γιατί έφευγα για σχολείο.

Στάθη, το
β <- α / "αλφαριθμητικό"
ΔΕΝ είναι απαραίτητο να χτυπήσει εξ' αρχής λάθος μεταγλώττισης. Μπορεί να το χτυπήσει αργότερα όταν πάει να εκτελέσει τη συγκεκριμένη γραμμή. Έτσι θα είναι και συνεπής με τη θεωρία του βιβλίου, που λέει ότι οι διερμηνευτές μεταφράζουν το πρόγραμμα ανά γραμμή (ας μην επεκταθώ παραπέρα γιατί έχω πολλά να πω για τη θεωρία! :P). Φυσικά έτσι που το έχεις σχεδιάσει το β <- α / / θα χτυπήσει συντακτικό λάθος εξ' αρχής αφού το δεύτερο / δεν είναι έκφραση.

Για παράδειγμα,
Κώδικας: ψευδογλώσσα
Αν 1 = 2 τότε β <- α / "αλφαριθμητικό" 
Εμφάνισε "Η παραπάνω ανάθεση δεν πρόκειται να εκτελεστεί ποτέ, επομένως ένας διερμηνευτής μπορεί κάλλιστα να εκτελέσει τον αλγόριθμο"



Βασικά προτείνω να υπάρχουν οι εξής επιλογές κάπου στο interface:
( ) Να μην επιτρέπονται αλλαγές στον τύπο των μεταβλητών και να σταματάει η εκτέλεση
(*) Να επιτρέπονται αλλαγές στον τύπο των μεταβλητών και να εμφανίζεται warning
( ) Να επιτρέπονται αλλαγές στον τύπο των μεταβλητών και να μην εμφανίζεται warning

και φυσικά όταν λέω αλλαγή τύπου, εννοώ αφού έχει ξεκαθαριστεί ο τύπος της (stricttype = true). Δηλαδή το α <- 1 και μετά α <- 1.2 δεν θεωρείται αλλαγή τύπου.
Γράφω κάποια παραδείγματα παρακάτω. Όταν λέω "να βγάλει warning", αυτό εξαρτάται από την επιλογή του interface, δηλαδή μπορεί είτε να σταματήσει, είτε να εμφανίσει warning, είτε να μην εμφανίσει τίποτα.

Παραδείγματα:
α <- 1.1
α <- 2
ι <- α div 2
Θεωρώ ότι πρέπει να βγάλει warning, το div δεν ορίζεται για πραγματικούς. Αν ήθελε div δεν θα έπρεπε ποτέ να του αναθέσει πραγματική τιμή.

α <- 6.2
β <- α div 2
Επίσης warning αλλά αν ο χρήστης έχει επιλέξει να μη σταματάει η εκτέλεση τότε το β να γίνει 3 και να συνεχίσει.

α <- "Κώστας"
α <- 3
Επίσης προτείνω σκέτο warning και να επιτρέπεται η συνέχιση της εκτέλεσης με τη σχετική επιλογή του interface.
Εφόσον λέμε ότι δεν έχουμε τύπους, δεν έχουμε τύπους, τελεία. Στο χέρι του προγραμματιστή είναι να κάνει ότι θέλει. Δεν είναι περίεργο, αρκετές γλώσσες το επιτρέπουν.

Τα ίδια περίπου θα αντιμετωπίσεις και στη Διάβασε, οπότε ο στατικός έλεγχος δε βοηθάει και πολύ.

Ένα πιο σοβαρό είναι οι πράξεις:
α <- "6.2"
β <- α div 2

ή

α <- "Κώστας"
β <- α div 2

Φυσικά θα βγάλεις warning, θα σταματήσει όμως η εκτέλεση ή όχι; Εδώ μερικές γλώσσες κάνουν το β στην πρώτη περίπτωση 3 και στη δεύτερη 0, άλλες το κάνουν NaN (Not A Number) και άλλες δεν το επιτρέπουν και σταματάνε την εκτέλεση.
Προτείνω σε αυτήν την περίπτωση να σταματάει η εκτέλεση, γιατί δεν μπορώ να φανταστώ μαθητή που να θέλει επίτηδες να κάνει κάτι τέτοιο.

Ιδέες ρίχνω, εσύ διαλέγεις...

sstergou

Μου φαίνεται περίεργο να υλοποιώ μια stictly typed γλώσσα ενώ τόσο καιρό είμαι φανατικός υποστηρικτής των δυναμικών τύπων και πιο συγκεκριμένα των τύπων πάπιας : http://en.wikipedia.org/wiki/Duck_typing

Το κακό είναι ότι δεν υπάρχει η αντίστοιχη στήριξη από το βιβλίο για τέτοια υλοποίηση, το οποίο μιλάει ξεκάθαρα για τύπους. Αν είναι να δώσω ένα χαρακτηρισμό στην ψευδογλώσσα θα της έδινα stictly typed με type inference εκτός βέβαια από τους αριθμούς που εκεί τα πράγματα είναι λίγο χλωμά.

Νομίζω ότι για τους αριθμούς το καλύτερο θα ήταν ένα warning πριν την εκτέλεση για τον πιθανό κίνδυνο και σφάλμα χρόνου εκτέλεσης αν έχουμε μη ακέραιο δείκτη πίνακα και div, mod με μη ακέραιους τελεσταίους.

Παράθεση από: alkisg στις 09 Ιουν 2008, 02:37:02 ΜΜ
το
β <- α / "αλφαριθμητικό"
ΔΕΝ είναι απαραίτητο να χτυπήσει εξ' αρχής λάθος μεταγλώττισης. Μπορεί να το χτυπήσει αργότερα όταν πάει να εκτελέσει τη συγκεκριμένη γραμμή. Έτσι θα είναι και συνεπής με τη θεωρία του βιβλίου, που λέει ότι οι διερμηνευτές μεταφράζουν το πρόγραμμα ανά γραμμή (ας μην επεκταθώ παραπέρα γιατί έχω πολλά να πω για τη θεωρία!
...


Ναι, αλλά σκέψου και την περίπτωση να έχεις δώσει 20 τιμές για διάβασμα δισδιάστατου και να μην δεις αποτέλεσμα επειδή ξέχασες ένα κόμμα!Σκέτη απελπισία...

Άσε που το συγκεκριμένο σημείο θεωρίας είναι το λιγότερο παρωχημένο ;) Μήπως ο διερμηνευτής της γλώσσας δεν είναι τελικά διερμηνευτής :D

Παράθεση από: alkisg στις 09 Ιουν 2008, 02:37:02 ΜΜ
Βασικά προτείνω να υπάρχουν οι εξής επιλογές κάπου στο interface:
( ) Να μην επιτρέπονται αλλαγές στον τύπο των μεταβλητών και να σταματάει η εκτέλεση
(*) Να επιτρέπονται αλλαγές στον τύπο των μεταβλητών και να εμφανίζεται warning
( ) Να επιτρέπονται αλλαγές στον τύπο των μεταβλητών και να μην εμφανίζεται warning

Το κακό στα 2,3 είναι ότι μπορεί να χαθεί πληροφορία και το ότι έρχεται σε πλήρη αντίθεση με αυτό που θα μάθουν αργότερα....

Ψηφίζω warning πριν την εκτέλεση (μόνο για αριθμούς, για άλλους τύπους λάθος) και σφάλμα χρόνου εκτέλεσης με παύση εκτέλεσης.

Όσοι άλλοι συνάδελφοι έχουν άποψη για αυτό το θέμα, θα εκτιμούσα ιδιαίτερα αν την έγραφαν.

pgrontas

My 2 cents...

Από εκπαιδευτικής πλευρά ο Στάθης έχει δίκιο, από την πλευρά της ευελιξίας ο Άλκης έχει δίκιο. Αλλά νομίζω πως για το συγκεκριμένο θέμα προέχει η εκπαιδευτική πλευρά.
Επιπλέον νομίζω ότι έχει απόλυτο δίκιο στον χαρακτηρισμό static typed με type inference με τους τύπους που εξάγονται να είναι οι γενικότεροι δυνατοί - όπως το έχει φτιάξει ήδη.
Δεν έχω όλους τους αλγόριθμους του βιβλίου στο κεφάλι μου αλλά δεν νομίζω να μπορεί να συμβεί αλλαγή τύπου - μπορεί να υπάρχει περίπτωση μη αναγνώρισης τύπου όχι όμως αλλαγής.
Σχετικά με το div και το mod είναι σίγουρο ότι δεν ορίζονται σε πραγματικούς? Μήπως θα μας έλυνε τα προβλήματα αν τα ορίζαμε και σε πραγματικούς χρησιμοποιώντας το ακεραιο μέρος, όπως γίνεται σε κάποιες γλώσσες προγραμματισμού.
Αυτό στο οποίο δεν συμφωνώ είναι να δίνεται η δυνατότητα μέσω επιλογών στον χρήστη να αλλάξει την σημασία και την συμπεριφορά ενός προγράμματος.
Καλύτερα να αποφασίσουμε κάτι και τα προγράμματα να έχουν την ίδια σημασία πάντα έστω και αν μας περιορίζει.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

Αν δεν με απατά η μνήμη μου τα div, mod ορίζονται μόνο για ακέραιους αριθμούς.

Σε μερικές γλώσσες προγραμματισμού όμως (π.χ. C++) υπάρχουν συναρτήσεις (fmod, fdiv) οι οποίες λειτουργούν και με πραγματικούς αριθμούς και επιστρέφουν πραγματικό αριθμό.

Μια ιδέα είναι οι  συγκεκριμένοι τελεστές να υλοποιηθούν έτσι ώστε να δουλεύουν και με πραγματικούς και να εμφανίζεται προειδοποίηση (ή σφάλμα) στη μεταγλώττιση αλλά και στην εκτέλεση. Η προειδοποίηση αυτή θα μπορεί να απενεργοποιείται έτσι ώστε ο χρήστης που "ξέρει τι κάνει" να μην ενοχλείται. Από πλευράς ευελιξίας σίγουρα το καλύτερο.

potato

Βασικά πρέπει να σκεφτείς τι σκοπό και ανάγκες εκπληρώνεις με το project αυτό. Όταν καλοσκεφτείς αυτό, μετά θα μπορείς να κρίνεις αν είναι αναγκαίο να υλοποιηθεί τέτοια  συνάρτηση σαν την fmod. Δηλαδή τουλάχιστον για αρχή δε νομίζω ότι πρέπει να αφιερώσεις χρόνο και κόπο σε ένα τέτοιο θέμα.
Be open source. Knowledge belongs to the world.

sstergou

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

Προς το παρόν σαρώνω ξανά τα 3 βιβλία μήπως και μου ξέφυγε τίποτα αλλά και μήπως μαντέψω τις απαντήσεις σε αυτά τα ερωτήματα.

sstergou

Συνάδελφοι, στην διεύθυνση http://www.pseudoglossa.gr λειτουργεί ένας on-line διερμηνευτής για την Ψευδογλώσσα της Α.Ε.Π.Π. Βρίσκεται σε στάδιο δοκιμών αλλά έχει χρησιμοποιηθεί με επιτυχία από τους μαθητές μου.

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

Οι λειτουργίες τις μεταγλώττισης, εκτέλεσης, η προσθήκη σημείων διακοπής, η παρακολούθηση μεταβλητών και η βηματική εκτέλεση λειτουργούν κανονικά.

Όποιος έχει όρεξη ας του ρίξει μία ματιά. Εάν εντοπίσετε κάποιο πρόβλημα παρακαλώ να μου το επισημάνετε.
Ευχαριστώ.


P.Tsiotakis

Συγχαρητήρια για την επιμονή σου Στάθη.

Θα το ξανακοιτάξω ενδελεχώς. Μόνο, μια σκέψη, να βάλεις και το βελάκι αριστερά στο πλαίσιο των εντολών, στο copy paste δεν έβαλε βελάκι, και προβληματίστηκα λίγο ποιο ειναι το βελάκι..

Και πάλι πολλά μπράβο..

sstergou

Ευχαριστώ για τα καλά σου λόγια Παναγιώτη.
Το θέμα με το βελάκι διορθώθηκε.

Παραλίγο να το ξεχάσω, αντί για το βελάκι μπορείς να γράψεις : <-

P.Tsiotakis

Στάθη, ήθελα εδω και καιρό να γράψω και το αμελούσα

χρησιμοποίησα το pseudoglossa.gr  για να δείξω στη Β λυκείου "περι τίνος πρόκειται"  και ήταν πολύ ωραία και απλά. Δεν ήθελα να μπλέξω με προγράμματα και δηλώσεις μεταβλητών, ήθελα να είναι όσο πιο απλά γίνεται και έτσι έγινε...

Πρέπει να σου πω παλι μπράβο για την πολύ καλή δουλειά.




evry

Πάρα πολύ καλή δουλειά, μπράβο. Είναι γρήγορο, δεν κολλάει καθόλου, αν και θα πρέπει να το δω και από τους υπολογιστές του σχολείου ;D.

Ειδικά με τους πίνακες έχει πολύ ενδιαφέρον. Μπορείς να φτιάξεις έναν πίνακα 10 θέσεων και μετά να κάνεις μια εκχώρηση στο 20ο στοιχείο του. Υπάρχει δηλαδή ένας δυναμικός χαρακτήρας όπως θα έπρεπε να είναι σε ψευδογλώσσα.
   Σε javascript το έχεις κάνει?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Νίκος Αδαμόπουλος

Όντως πολύ καλή δουλειά! Μπράβο Στάθη!! Δεν είχα υπόψη μου το εργαλείο που έχεις φτιάξει και πράγματι μπορεί να συμβάλλει πολύ στο μάθημα...

Ρίχνοντας μια ματιά στον κώδικα είδα ότι αναφέρεται το Adobe Flex...

pgrontas

Στάθη, πολύ καλή δουλειά.
Είχα λίγο καιρό να μπώ στο site σου και όπως είδα σήμερα του άλλαξες το φώτα!!!
Πολύ ωραίο design και πολύ επαγγελματικό.

Μπορείς να το τρέξεις και offline?

Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

P.Tsiotakis

Αυτό με το offline είναι και δική μου απορία (- αίτημα  ::) )
ο κώδικας λογικά μπορεί να κλειδωθεί ...

πιθανώς και η αποθήκευση σε αρχεία txt (ή κάτι τέτοιο) να ήταν χρήσιμη, λες ποιο πάνω για Σεπτέμβρη.
Αν εξάγεται το πρόγραμμα σε ΓΛΩΣΣΑ, τότε θα μπορούν και να "τροφοδοτηθούν" τα άλλα λογισμικά
(πχ για εξαγωγή διαγράμματος ροής που κάνει η ΓΛΩΣΣΟΜΑΘΕΙΑ)

Επίσης, αν θέλεις θα βρούμε και άλλες προσθήκες για να γεμίσεις και τον υπόλοιπο ελεύθερο χρόνο σου  :D

sstergou

Παναγιώτη, Ευριπίδη και Νίκο ευχαριστώ για τον χρόνο που διαθέσατε στο να δείτε την εφαρμογή.

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

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

Ευριπίδη είναι αρκετά γρήγορο για διαδικτυακή εφαρμογή επειδή η διαδικασία της μεταγλώττισης και της εκτέλεσης γίνεται εξ' ολοκλήρου στον client.  Το κομμάτι του μεταγλωττιστή τρέχει στο plugin του flash και έχει γραφτεί σε actionscript 3 χρησιμοποιώντας τα components ανοιχτού κώδικα της adobe (flex).

Βέβαια σε καμιά περίπτωση δεν μπορεί να φτάσει την ταχύτητα compiled εφαρμογών (όπως ο διερμηνευτής της γλώσσας) αλλά δεν νομίζω ότι η ταχύτητα είναι το ζητούμενο.

Τώρα όσο αφορά την υλοποίηση προσπάθησα να είμαι όσο πιο κοντά γίνεται στο βιβλίο (στατικοί τύποι, διάκριση ακέραιου - πραγματικού μόνο σε div, mod, εντολές δεδομένα - αποτελέσματα, πίνακες που το μέγεθος καθορίζεται κατά την εκτέλεση κτλ..).

Μια μικρή παρατήρηση για τους χρήστες linux : Ο adobe flash player έχει πρόβλημα στο συγκεκριμένο λειτουργικό στην απεικόνιση χαρακτήρων άλλων γλωσσών πέραν της αγγλικής. Είναι αρκετά γνωστό πρόβλημα και πολλοί περιμένουμε πως και πως να φτιαχτεί.

http://bugs.adobe.com/jira/browse/FP-40

Προσωρινά οι χρήστες linux μπορούν να πληκτρολογούν τις εντολές σε greeklish και αυτόματα γίνεται μετατροπή τους σε ελληνικά. Τα ονόματα μεταβλητών αναγκαστικά πρέπει να είναι με αγγλικούς χαρακτήρες. Το workaround αυτό το έχω δοκιμάσει εκτεταμένα και μπορώ να πω ότι δουλεύει αρκετά καλά.


Οποιαδήποτε παρατήρηση-πρόταση είναι ευπρόσδεκτη. Στόχος μου είναι με τη νέα σχολική χρονιά να μπορεί να χρησιμοποιηθεί στα εργαστήρια.

pgrontas

Παράθεση από: Τσιωτάκης Παναγιώτης στις 10 Ιουν 2009, 06:03:30 ΜΜ
Επίσης, αν θέλεις θα βρούμε και άλλες προσθήκες για να γεμίσεις και τον υπόλοιπο ελεύθερο χρόνο σου  :D

Παναγιώτη έχεις δίκιο, όσο κάθομαι και το σκέφτομαι, οι δυνατότητες που έχει είναι τεράστιες!!!
Για παράδειγμα θα μπορούσε να δημιουργηθεί κάτι σαν ηλεκτρονική τάξη:
Να μπαίνουν οι μαθητές να γράφουν τον κώδικα τους, να τον σώζουν στο site και μετά να μπαίνει ο καθηγητής να κάνει συγκεκριμένες διορθώσεις, οι οποίες να γίνονται tagged σε κάθε εντολή, ή σε ομάδες εντολών. Μετά να μπαίνουν οι μαθητές να τις βλέπουν κτλ. Μπορεί να κρατάει και ιστορικό κτλ. για κάθε μαθητή. Μπορούν να γίνουν παππάδες!

Και πάλι μπράβο, Στάθη.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

P.Tsiotakis

Παράθεση από: pgrontas στις 10 Ιουν 2009, 06:24:16 ΜΜ
Για παράδειγμα θα μπορούσε να δημιουργηθεί κάτι σαν ηλεκτρονική τάξη:
Να μπαίνουν οι μαθητές να γράφουν τον κώδικα τους, να τον σώζουν στο site και μετά να μπαίνει ο καθηγητής να κάνει συγκεκριμένες διορθώσεις, οι οποίες να γίνονται tagged σε κάθε εντολή, ή σε ομάδες. Μετά να μπαίνουν οι μαθητές να τις βλέπουν κτλ. Μπορεί να κρατάει και ιστορικό κτλ. για κάθε μαθητή. Μπορούν να γίνουν παππάδες!

Κύριε των δυνάμεων....

P.Tsiotakis

Άρα αν αποθηκευτεί τοπικά το plug in θα ανοίγει offline απο browser ??

sstergou

#31
Ευχαριστώ και εσένα Παναγιώτη (pgrontas).

Μπορεί κάποιος να κάνει αποθήκευση της σελίδας τοπικά και να το τρέξει offline. Για την αποθήκευση του κώδικα όμως (όταν με το καλό υλοποιηθεί) θα πρέπει να έχει σύνδεση. Προς το παρόν δεν έχω σκοπό να φτιάξω και έκδοση που να λειτουργεί αυτόνομα τοπικά. Όποιος δεν έχει σύνδεση όμως  μπορεί να αποθηκεύει σε txt (π.χ. με το notepad) τα αρχεία και να τα φορτώνει με αντιγραφή επικόλληση.

Βέβαια καλό είναι να μη γίνει αυτό από κάποιον που έχει σύνδεση γιατί συνεχώς γίνονται προσθήκες και διορθώσεις στην εφαρμογή. Αυτός είναι και ο λόγος που κάθε φορά που επισκέπτεστε την σελίδα ξαναφορτώνει.

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

Η εξαγωγή σε ΓΛΩΣΣΑ, η καταγραφή εισόδου, το γέμισα πινάκων με τυχαίες τιμές, η εξαγωγή πίνακα τιμών, αλλά και άλλες υποστηρικτικές δυνατότητες (όπως δημιουργία ασκήσεων από τον διδάσκοντα, ομάδες μαθητών, ανακοινώσεις σχόλια , αξιολόγηση ασκήσεων, κατηγοριοποιήσεις ασκήσεων κτλ) είναι πράγματα τα οποία είχα στο μυαλό μου από την αρχή. Προφανώς δεν μπορούν να υλοποιηθούν όλα σε μια στιγμή (εκτός αν κάποιος άλλος θέλει να βοηθήσει :) . Σιγά σιγά όμως και εφόσον υπάρχει ενδιαφέρον αλλά και ΑΕΠΠ στο πρόγραμμα σπουδών έχω σκοπό να προσθέτω μία μία αυτές τις δυνατότητες . Όχι όμως άμεσα μιας και δεν έχω τόσο πολύ ελεύθερο χρόνο.


evry

Μια χαρά είναι και στην ταχύτητα, δοκίμασα για τους πρώτους από 1 εώς 100 και τους έβγαλε αμέσως. Μέχρι το 1000 φυσικά καθυστέρησε λίγο αλλά και πάλι τους έβγαλε.
   Φυσικά αυτό το οποίο με κέρδισε αμέσως είναι ότι μπορείς να αλλάξεις τον μετρητή i μέσα στη Για και έτσι γίνεται σίγουρα η καταλληλότερη δομή επανάληψης :D.

Κώδικας: ΨΕΥΔΟΓΛΩΣΣΑ
Αλγόριθμος primes
Εμφάνισε 'Δώσε έναν ακέραιο αριθμό'
Διάβασε Ν
ΓΙΑ  αριθμός  ΑΠΟ 2 ΜΕΧΡΙ Ν
	ΓΙΑ i  ΑΠΟ 2 μέχρι αριθμός-1 
		Αν αριθμός mod i = 0  τότε 
			i <-  αριθμός+1
		Τέλος_Αν 	
	Τέλος_Επανάληψης 
	Αν i = αριθμός Τότε
		Εμφάνισε αριθμός
	Τέλος_Αν 
Τέλος_Επανάληψης 
Τέλος primes
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis


P.Tsiotakis

Ευριπίδη, και ποιος πιστεύεις οτι είναι ο καταλληλότερος υπουργός;

sstergou

Παράθεση από: pgrontas στις 10 Ιουν 2009, 06:24:16 ΜΜ
Παράθεση από: Τσιωτάκης Παναγιώτης στις 10 Ιουν 2009, 06:03:30 ΜΜ
Επίσης, αν θέλεις θα βρούμε και άλλες προσθήκες για να γεμίσεις και τον υπόλοιπο ελεύθερο χρόνο σου  :D

Παναγιώτη έχεις δίκιο, όσο κάθομαι και το σκέφτομαι, οι δυνατότητες που έχει είναι τεράστιες!!!
Για παράδειγμα θα μπορούσε να δημιουργηθεί κάτι σαν ηλεκτρονική τάξη:
Να μπαίνουν οι μαθητές να γράφουν τον κώδικα τους, να τον σώζουν στο site και μετά να μπαίνει ο καθηγητής να κάνει συγκεκριμένες διορθώσεις, οι οποίες να γίνονται tagged σε κάθε εντολή, ή σε ομάδες εντολών. Μετά να μπαίνουν οι μαθητές να τις βλέπουν κτλ. Μπορεί να κρατάει και ιστορικό κτλ. για κάθε μαθητή. Μπορούν να γίνουν παππάδες!

Και πάλι μπράβο, Στάθη.

Τα περισσότερα από αυτά που λες (και ιδιαίτερα η πλοήγηση σε αλγορίθμους και ασκήσεις με tags) αλλά και άλλα (περιορισμός πρόσβασης σε ασκήσεις και αλγορίθμους από τον ιδιοκτήτη τους) τα έχω λάβει υπόψη μου στον αρχικό σχεδιασμό. Δεν ξέρω όμως για τους λόγους που είπα πριν αν και πότε θα τα κάνω.

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

sstergou

Με δεξί κλικ μπορείτε να αντιγράψετε τον κώδικα ως HTML.


evry


  Δεν θα πω όνομα, αλλά θα δώσω κάποια στοιχεία. Λοιπόν πρόκειται για πολιτικό εκπρόσωπο κόμματος στον διάλογο για την παιδεία, ο οποίος μάλιστα παντρεύεται και σύντομα. Δεν ξέρω τι θα κάνει με την πληροφορική αλλά σίγουρα θα αύξησει τις ώρες των αρχαίων ελληνικών στα σχολεία ;)

Παράθεση από: Τσιωτάκης Παναγιώτης στις 10 Ιουν 2009, 06:46:13 ΜΜ
Ευριπίδη, και ποιος πιστεύεις οτι είναι ο καταλληλότερος υπουργός;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

Θα πω στο Λαζόπουλο που θα παει στο γάμο, να του πει καμια καλή κουβέντα...

sstergou

Προστέθηκαν οι δυνατότητες εγγραφής χρηστών και δημιουργίας-διαχείρισης αλγορίθμων.

ntzios kostas

Φίλε Στάθη έξοχη δουλεία. Μπράβο σου!!!!

Το μόνο που βρήκα ως παρατήρηση είναι ότι κατά βήμα προς βήμα εκτέλεσης της δομής ΓΙΑ,  ο μετρητής αλλάζει όταν η εκτέλεση μπαίνει σε μία επανάληψη δηλαδή όταν ξεπερνάει την πρώτη γραμμή του ΓΙΑ και όχι στο τέλος_επανάληψης.

Ευχαριστώ.

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

sstergou

Ευχαριστώ Κώστα!

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

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

Αν παρ' όλα αυτά οι περισσότεροι νομίζουν ότι η αλλαγή πρέπει να γίνεται στο τέλος, θα το αλλάξω.

Νίκος Αδαμόπουλος

Παράθεση από: sstergou στις 29 Αυγ 2009, 12:29:17 ΜΜ
Όσον αφορά την δομή Για, είναι εύκολο να γίνει μία τέτοια αλλαγή και η αλλαγή της τιμής της μεταβλητής ελέγχου να γίνεται στο τέλος_επανάληψης. Από την στιγμή όμως που η εντολή με_βήμα βρίσκεται στην πρώτη γραμμή της εντολής, έβαλα εκεί πέρα και αλλαγή της μεταβλητής ελέγχου (για λόγους κατανόησης).

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

Κι εγώ θα συμφωνήσω με τον Κώστα!

Για παράδειγμα στο:

Για i από 1 μέχρι 10 με_βήμα 2
   Εμφάνισε  i
Τέλος_επανάληψης

Η μετατροπή σε Όσο θα ήταν:

i<-1
Όσο i<=10 επανάλαβε
   Εμφάνισε  i
   i<-i+2
Τέλος_επανάληψης 

Δηλαδή θα περίμενε κάποιος όταν η εκτέλεση θα φτάνει στο Τέλος_επανάληψης κάθε φορά, να έχει αλλάξει ήδη η τιμή της μεταβλητής (ή να αλλάζει τη στιγμή εκείνη αφού η εντολή  i<-i+2 είναι αόρατη) - βλ. εικόνα. Αλλιώς μπορεί να δημιουργήσει σύγχυση ακριβώς σε αυτό: στον συσχετισμό με την Όσο...

sstergou

Έχετε δίκιο στο ότι μπορεί να μπερδέψει κάποιον που έχει στο μυαλό του την ισοδύναμη Όσο. Μιλάμε όμως για διαφορετική δομή.

Όπως και να χει, το αλλάζω.

evry

Κάτσε ρε περίμενεεεε, μην αλλάζεις τίποτα ακόμα!!!
  Ο μετρητής πρέπει να αλλάζει τη στιγμή που φεύγει ο έλεγχος από το Τέλος_Επανάληψης και γυρνάει πίσω στο Για. Δηλαδή πριν φύγει από το τέλος επανάληψης έχει ακόμα την τιμή της προηγούμενης επανάληψης. Συμφωνώ με το σκεπτικό του Στάθη ότι πρόκειται για άλλη δομή και όχι για την Όσο και πρέπει να την αντιμετωπίσουμε με τις δικές της ιδιαιτερότητες δηλαδή ότι πρέπει να συσχετιστεί η αλλαγή του μετρητή με το με βήμα.
   Δεν είμαι απολύτως σίγουρος γιατί το θέμα δεν είναι τόσο απλό όσο φαίνεται να πεις με σιγουριά ποια από τις 2 περιπτώσεις θα παράγει περισσότερες παρανοήσεις, αλλά μου φαίνεται με μια πρώτη ματιά ότι είναι οκ ως έχει.
   Δηλαδή αν αλλάζει πριν το Τέλος_Επανάληψης ο μαθητής θα αναρωτηθεί γιατί το με_βήμα είναι εκεί πάνω και δεν είναι εδώ κάτω αφού εδώ εκτελείται?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

sstergou

Ευριπίδη  οι περιπτώσεις είναι 2
1) Αλλαγή τιμής όταν ο εκτελείται τη εντολή "Για ι από 1 μέχρι 10 με_βήμα 2"
2) Αλλαγή τιμής όταν εκτελείται η εντολή "Τέλος_Επανάληψης".

Εγώ είμαι υπέρ της πρώτης.

P.Tsiotakis

Εγώ παιδιά θεωρώ οτι μετά την Τέλος_επανάληψης (που η ροή αναγκαστικά μεταβαίνει στη Για), πραγματοποιείται η τροποποίηση του μετρητή σύμφωνα με το βήμα...

evry

Συμφωνώ με τον Παναγιώτη. Δηλαδή η μεταβολή του μετρητή πρέπει να γίνεται τη στιγμή που ο έλεγχος μεταβαίνει από το Τέλος_Επανάληψης στο με_βήμα. Όπως το έχει τώρα

Παράθεση από: Τσιωτάκης Παναγιώτης στις 29 Αυγ 2009, 06:02:01 ΜΜ
Εγώ παιδιά θεωρώ οτι μετά την Τέλος_επανάληψης (που η ροή αναγκαστικά μεταβαίνει στη Για), πραγματοποιείται η τροποποίηση του μετρητή σύμφωνα με το βήμα...
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Νίκος Αδαμόπουλος

Άλλαξες τίποτα; Δεν θυμάμαι αν το μεσημέρι που το είχα δοκιμάει ο μετρητής άλλαζε και πιο μετά που γύρναγε πίσω στην αρχή της Για ή αν άλλαζε με το που γύρναγε στην αρχή της Για - όπως είναι τώρα... Τώρα που το ξαναείδα καλό μου φαίνεται...  :)

Νίκος Αδαμόπουλος

Είδα ότι τα κουπιά Αντιγραφής και Επικόλλησης κώδικα λειτουργούν ανεξάρτητα από τις εντολές Copy και Paste του δεξιού κλικ. Είναι σαν να υπάρχουν δύο διαφορετικά πρόχειρα. Ένα για τα κουμπιά και ένα για το δεξί κλικ...

ntzios kostas

Τώρα είναι σωστό. Τώρα η αλλαγή γίνεται κατά την μετάβαση από το τέλος_επανάληψης στη για. Το πρωί ήταν από την για στην πρώτη εντολή της δομής.



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

sstergou

Παράθεση από: Νίκος Αδαμόπουλος στις 29 Αυγ 2009, 08:24:54 ΜΜ
Άλλαξες τίποτα; Δεν θυμάμαι αν το μεσημέρι που το είχα δοκιμάει ο μετρητής άλλαζε και πιο μετά που γύρναγε πίσω στην αρχή της Για ή αν άλλαζε με το που γύρναγε στην αρχή της Για - όπως είναι τώρα..
Ναι, το άλλαξα το μεσημέρι.


Παράθεση από: Νίκος Αδαμόπουλος στις 29 Αυγ 2009, 08:24:00 ΜΜ
Είδα ότι τα κουπιά Αντιγραφής και Επικόλλησης κώδικα λειτουργούν ανεξάρτητα από τις εντολές Copy και Paste του δεξιού κλικ. Είναι σαν να υπάρχουν δύο διαφορετικά πρόχειρα. Ένα για τα κουμπιά και ένα για το δεξί κλικ...

Οι περιορισμοί ασφαλείας που έχει το φλας δεν επιτρέπουν πρόσβαση στο κανονικό πρόχειρο του H/Y και ως εκ τούτου δεν ήταν δυνατό να μπει το κουμπί της επικόλλησης. Για το λόγο αυτό υπάρχει και ξεχωριστό πρόχειρο με κουμπιά στην μπάρα εργαλείων. Το θέμα με προβλημάτισε πάρα πολύ. Το ξέρω δεν είναι ότι καλύτερο αλλά το οι επιλογές ήταν οι εξής :
1) 1 πρόχειρο χωρίς όμως κουμπιά στην μπάρα και πρόσβαση μόνο από το μενού του δεξιού κλικ.
2) 2 πρόχειρα, το πρώτο προσβάσιμο με δεξί κλικ και τις εντολές copy, paste και το δεύτερο με ύπαρξη κουμπιών στην μπάρα και τις επιλογές Αντιγραφή Κώδικα, Επικόλληση κώδικα προσβάσιμες και αυτές από το δεξί κλικ.

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

Νίκος Αδαμόπουλος

Παράθεση από: sstergou στις 29 Αυγ 2009, 09:48:22 ΜΜ
Το ξέρω δεν είναι ότι καλύτερο αλλά το οι επιλογές ήταν οι εξής :
1) 1 πρόχειρο χωρίς όμως κουμπιά στην μπάρα και πρόσβαση μόνο από το μενού του δεξιού κλικ.
2) 2 πρόχειρα, το πρώτο προσβάσιμο με δεξί κλικ και τις εντολές copy, paste και το δεύτερο με ύπαρξη κουμπιών στην μπάρα και τις επιλογές Αντιγραφή Κώδικα, Επικόλληση κώδικα προσβάσιμες και αυτές από το δεξί κλικ.

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

ΟΚ. Μην τρελαίνεσαι κιόλας! Διαφήμισέ το ως ειδικό χαρακτηριστικό της εφαρμογής!  ;)

meteo_xampos

Συνάδελφοι σας χαιρετώ, και καλή σχολική χρονιά να έχουμε... Λοιπόν, κάτι που παρατήρησα στον online διερμηνευτή...
Αν τρέξω τον παρακάτω αλγόριθμο...

Αλγόριθμος Τάδε
Διάβασε α
α← "α"
Εκτύπωσε α
Τέλος Τάδε

Αν προσπαθήσεω να τρέξω τον παρακάτω αλγόριθμο...

Αλγόριθμος Τάδε
α← 2
α← "α"
Εκτύπωσε α
Τέλος Τάδε

τότε με ειδοποιεί με μήνυμα ότι... "Η μεταβλητή έχει διαφορετικό τύπο από αυτόν με τον οποίο χρησιμοποιείται στην συγκεκριμένη εντολή"...


pgrontas

Αυτό σωστό μου φαίνεται
Στην πρώτη περίπτωση το α από την Διάβασε μπορεί να είναι οποιοδήποτε τύπος. Στην συνέχεια έρχεται η ανάθεση και το συγκεκριμενοποιεί σε χαρακτήρες. Δεν υπάρχει ασυμβατότητα.
Στην δεύτερη περίπτωση από την πρώτη ανάθεση εξάγει ότι το α είναι αριθμητικό και στην συνέχεια μπαίνουν χαρακτήρες οπότε υπάρχει ασυμβατότητα.
Ας πει βέβαια και ο Στάθης ως ειδικός.

Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Νίκος Αδαμόπουλος

Κι εμένα σωστό μου φαίνεται...

meteo_xampos

Όπα άκυρο... Βάλτε μια οποιαδήποτε αριθμητική τιμή στην μεταβλητή α, και θα δείτε ότι εκτυπώνει πάλι "α"...
Δεν ολοκλήρωσα τη σκέψη μου...Όποιος δεν έχει μυαλό έχει δάχτυλα και ξαναστέλνει e-mail... :)

sstergou

Ο Παναγιώτης εξήγησε σωστά αυτό που συμβαίνει.

Τώρα για την πρώτη περίπτωση, αν η απορία σου είναι "γιατί δεν βγάζει λάθος αφού η μεταβλητή είναι αλφαριθμητική και έχω δώσει αριθμό;" τότε και πάλι υπάρχει εξήγηση: Το 2 είναι και αυτό μια έγκυρη αλφαριθμητική τιμή, δεν νομίζω ότι γίνεται να ξέρουμε αν ο χρήστης είχε την πρόθεση να δώσει αριθμό και όχι αλφαριθμητικό. Οπότε δεν είναι σωστό να εγερθεί λάθος σε αυτή την περίπτωση.

Wizard

Συγχαρητήρια για την πολύ καλή δουλειά!!!

Θα ήθελα κι εγώ με τη σειρά μου να ξαναπροτείνω το αίτημα για offline υποστήριξη (δηλαδή, άνοιγμα και σώσιμο αρχείων), αλλά και κάτι καινούργιο: να μπορούμε να μεταβάλλουμε το μέγεθος της γραμματοσειράς (και του κώδικα και του τμήματος εντολών/μεταβλητών), γιατί θα ήθελα να κάνω προβολές με προτζέκτορα, αλλά η γραμματοσειρά είναι πολύ μικρή.

sstergou

Ναι, έχεις δίκιο, χρειάζεται ένα παράθυρο ρυθμίσεων όπου θα μπορείς να καθορίσεις το μέγεθος της γραμματοσειράς, την καθυστέρηση εκτέλεσης κτλ. Είναι στα άμεσα σχέδια, θα σε ειδοποιήσω όταν υλοποιηθεί.

Η offline υποστήριξη δεν είναι κάτι στο οποίο έχω σκοπό να δουλέψω σύντομα. Ίσως κάποια στιγμή στο μέλλον και ανάλογα με το πως θα πάει η η χρησιμοποίηση της υπηρεσίας.


sstergou

Προστέθηκε η δυνατότητα αλλαγής μεγέθους γραμματοσειράς μαζί με κάποιες άλλες ρυθμίσεις.

Wizard

#62
Παράθεση από: sstergou στις 10 Οκτ 2009, 06:41:30 ΜΜ
Προστέθηκε η δυνατότητα αλλαγής μεγέθους γραμματοσειράς μαζί με κάποιες άλλες ρυθμίσεις.

Ευχαριστούμε!! Πώς θα σου φαινότανε επίσης μια επιλογή να εμφανίζονται κενά μεταξύ των μεταβλητών/σταθερών σε εντολή Εμφάνισε;
Δηλαδή, αν υπάρχουν οι μεταβλητές α,β,γ με τιμές 1,2 και 3 αντίστοιχα, η εντολή Εμφάνισε α,β,γ να μπορεί να εμφανίζει "1 2 3" και όχι μόνο "123"  ;) Γιατί τώρα αναγκάζομαι να λέω στα παιδιά να βάζουν οι ίδιοι κενά για να ξεχωρίζουν τις τιμές.

sstergou

Αυτό είναι κάτι που μου είχε ζητήσει και ο sdoukakis, αλλά δυστυχώς το ξέχασα  ::)   Σε λίγο καιρό θα μπει και αυτή η επιλογή/ρύθμιση.

Wizard

Πολύ καλή η ρύθμιση για τα κενά μεταξύ τιμών  ;)
Ανακάλυψα ένα bug(?) : αν φτιάξω έναν αλγόριθμο στον Διερμηνευτή χρησιμοποιώντας tabs και τον αντιγράψω σε έναν άλλο editor, ο αλγόριθμος μεταφέρεται αυτούσιος μαζί με τα tabs όπως πρέπει. Αν όμως τον ξανακάνω paste στον Διερμηνευτή, τα tabs δεν αναγνωρίζονται και εμφανίζονται όλες οι εντολές η μία κάτω από την άλλη  :-\

sstergou

Ναι, το είδα και είναι πολύ σπαστικό. Δουλεύω ένα fix αυτές τις μέρες. Ευχαριστώ για την αναφορά.

Σπύρος Δουκάκης

#66
Παράθεση από: Wizard στις 31 Οκτ 2009, 06:55:41 ΜΜ
Πολύ καλή η ρύθμιση για τα κενά μεταξύ τιμών  ;)

Διαμαρτύρομαι  >:( εντόνως για τη διαφορετική μεταχείριση που απολαμβάνουν οι δεινόσαυροι του forum. Ενημέρωσα για τη ρύθμιση του κενού στις 11/06/2009 τον κο Στέργου και ο κος Στέργου δεν το υλοποίησε...

Είναι ανήκουστο να συμπεριφέρεστε έτσι στους Βετεράνους  :'(. Αν και τον Ιούνιο του 2009 μάλλον ήμουν Νέος...παρότι έχω στην πλάτη μου δέκα χρόνια διδασκαλίας και διόρθωσης του μαθήματος!!

Το ξέρω ότι θα γίνω δεινόσαυρος κάποια μέρα και τότε όλα θα αλλάξουν!

Tέρμα το αστείο! ;)

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

Συνέχισε το έργο σου!

P.Tsiotakis

Σπύρο, κατέβασε και δες το "ice age 3: dawn of the dinosaurs"

Νίκος Αδαμόπουλος

Τρέχει κάτι με τους δεινόσαυρους>:(

potato

Είδα ότι δεν τηρείται η προτεραιότητα στους λογικούς τελεστές
π.χ. το

s4 ←  Αληθής  ή  Ψευδής  και  Ψευδής
Εμφάνισε s4

δίνει "Ψευδής"
Be open source. Knowledge belongs to the world.

sstergou

Στο βιβλίο δεν ορίζεται σαφώς η ιεραρχία των τελεστών ΚΑΙ και Η.
Στο pseudoglossa.gr οι δύο αυτοί τελεστές έχουν την ίδια προτεραιότητα.

Αν σε ενδιαφέρει το θέμα διάβασε τα παρακάτω :

https://alkisg.mysch.gr/steki/index.php?topic=112.0
https://alkisg.mysch.gr/steki/index.php?topic=727.0
https://alkisg.mysch.gr/steki/index.php?topic=916.0
https://alkisg.mysch.gr/steki/index.php?topic=912.msg8645#msg8645


potato

Ναι έχετε δίκιο, συγνώμη, είχα μείνει στην `αυθαίρετη` σειρά "ΟΧΙ - ΚΑΙ - Η".

Παράλογο να μην ορίζεται, by the way, είναι τελεστές και θα πρέπει να υπάρχει προτεραιότητα.
Anyway thanks!
Be open source. Knowledge belongs to the world.

evry

Κάτι μου λέει ότι σύντομα θα ανέβει το pagerank σου ;D
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr