Αποστολέας Θέμα: Πρόβλημα σε εκχώρηση?  (Αναγνώστηκε 2567 φορές)

bagelis

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 503
Πρόβλημα σε εκχώρηση?
« στις: 24 Απρ 2008, 11:56:51 μμ »
Γράφοντας ένα πρόγραμμα σε ΓΛΩΣΣΑ (ver 0.92) mου προέκυψε το εξής:
Στην εντολή:
    Παρανομαστής ← (ι + 1)^(ι + 2)
ενώ το ι είναι δηλωμένο ακέραιες, η Γλώσσα απαιτεί η μεταβλητή Παρανομαστής να είναι δηλωμένη πραγματική...


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


bagelis

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 503
Απ: Πρόβλημα σε εκχώρηση?
« Απάντηση #1 στις: 25 Απρ 2008, 12:07:29 πμ »
Ακόμα κάτι:

Δεν δέχεται Δήλωση Διαδικασίας χωρίς παραμέτρους.

Αν δε κάνω λάθος θα έπρεπε να επιτρέπεται, έτσι δεν είναι?

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4296
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Πρόβλημα σε εκχώρηση?
« Απάντηση #2 στις: 25 Απρ 2008, 12:42:07 πμ »
Βαγγέλη, τα έχω στην online βοήθεια, http://alkisg.mysch.gr/help/, αλλά και στην ενσωματωμένη βοήθεια του Διερμηνευτή.

Για το (1):
^ (δύναμη): ισχύει για τους ακέραιους και τους πραγματικούς. Το αποτέλεσμα είναι συνήθως πραγματικός αριθμός, εκτός αν ο εκθέτης είναι θετικός ακέραιος σταθερής αποτίμησης. Για παράδειγμα το 2^2 είναι ακέραιος, ενώ το 2^-2 πραγματικός (= 0.25). Έτσι στην γενική περίπτωση το 2^ι εκλαμβάνεται σαν πραγματικός αριθμός.
Για να είναι το χ^ψ εγγυημένα ακέραιος (με χ, ψ ακεραίους) θα πρέπει το ψ να είναι εγγυημένα θετικός. Όσο "καλή πρόθεση" και να έχει ο προγραμματιστής να κρατήσει το ψ θετικό, ο συντακτικός έλεγχος δεν μπορεί να το δεχτεί, αφού για ψ<0 το αποτέλεσμα είναι πραγματικός.
Θα μπορούσε να γίνει μια εξαίρεση για το χ^Α_Τ(ψ), αλλά θα φαινόταν τελείως παράταιρο... Έτσι το κράτησα ακέραιο μόνο για τους εκθέτες που έχουν εγγυημένα θετική τιμή κατά τη στιγμή της μεταγλώττισης, δηλαδή όταν χρησιμοποιούνται θετικές σταθερές.
Εν τέλει το σωστό είναι
Παρανομαστής ← Α_Μ((ι + 1)^(ι + 2))

Και για το (2):
Μία διαδικασία χωρίς παραμέτρους δηλώνεται και καλείται χωρίς παρενθέσεις.
Έχει παραδείγματα το βιβλίο που χρησιμοποιεί διαδικασίες χωρίς παρενθέσεις. Επίσης έχει και παραδείγματα (στο κεφάλαιο για τον event driven προγραμματισμό) με παρενθέσεις. Το πρώτο μου φάνηκε πιο λογικό, ταιριάζει και με το κυρίως πρόγραμμα που κι αυτό δεν έχει παρενθέσεις. Εξάλλου τα παραδείγματα του event driven προγραμματισμού είναι έτσι κι αλλιώς λάθος, αφού χρησιμοποιούν καθολικές μεταβλητές, κάτι που η ΓΛΩΣΣΑ δεν υποστηρίζει.

bagelis

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 503
Απ: Πρόβλημα σε εκχώρηση?
« Απάντηση #3 στις: 25 Απρ 2008, 05:12:49 μμ »
Δεκτά όλα αυτά και σε ευχαριστώ για το χρόνο σου... Άλλη φορά θα κοιτάω και το help  ;D

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

Το σχολικό σελ. 214 στη σύνταξη μιας διαδικασίας δεν αναφέρει ότι η παρένθεση μπορεί να παραλείπεται, ανάφέρει ότι η λίστα παραμέτρων δεν είναι υποχρεωτική. Σε σύνταξη αυτό σημαίνει ότι η παρένθεση παραμένει απλά δεν υπάρχουν παράμετροι μέσα της... παραδέχομαι όμως ότι είναι θέμα ερμηνείας και παραδειγμάτων του σχολικού πράγμα σχετικά διφορούμενο... Βασιζόμενος πάντως σε λογική Pascal και Basic, γλώσσες κοντινές στην ΓΛΩΣΣΑ, θα προτιμούσα να υπάρχει η παρένθεση...


alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4296
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Πρόβλημα σε εκχώρηση?
« Απάντηση #4 στις: 25 Απρ 2008, 06:17:21 μμ »
Βασιζόμενος πάντως σε λογική Pascal και Basic, γλώσσες κοντινές στην ΓΛΩΣΣΑ, θα προτιμούσα να υπάρχει η παρένθεση...

Η Pascal δεν έχει παρενθέσεις στις διαδικασίες χωρίς παραμέτρους!
Και στο σχολικό βιβλίο, στον ορισμό υποτίθεται της διαδικασίας για events, πάλι δεν έχει παρενθέσεις...
Anyway, αν θέλετε βάζω μια ακόμα επιλογή στην καρτέλα "Ασάφειες", τι 10 ασάφειες τι 11... ;-)