Πρόβλημα σε εκχώρηση?

Ξεκίνησε από bagelis, 24 Απρ 2008, 11:56:51 ΜΜ

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

bagelis

Γράφοντας ένα πρόγραμμα σε ΓΛΩΣΣΑ (ver 0.92) mου προέκυψε το εξής:
Στην εντολή:
    Παρανομαστής ← (ι + 1)^(ι + 2)
ενώ το ι είναι δηλωμένο ακέραιες, η Γλώσσα απαιτεί η μεταβλητή Παρανομαστής να είναι δηλωμένη πραγματική...


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


bagelis

Ακόμα κάτι:

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

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

alkisg

#2
Βαγγέλη, τα έχω στην online βοήθεια, https://alkisg.mysch.gr/help/, αλλά και στην ενσωματωμένη βοήθεια του Διερμηνευτή.

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

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

bagelis

Δεκτά όλα αυτά και σε ευχαριστώ για το χρόνο σου... Άλλη φορά θα κοιτάω και το help  ;D

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

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


alkisg

Παράθεση από: bagelis στις 25 Απρ 2008, 05:12:49 ΜΜ
Βασιζόμενος πάντως σε λογική Pascal και Basic, γλώσσες κοντινές στην ΓΛΩΣΣΑ, θα προτιμούσα να υπάρχει η παρένθεση...

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