Γιατί ο διερμηνευτής θεωρεί ότι η ύψωση σε δύναμη δίνει πραγματικό αριθμό; π.χ. γιατί το α <- β^γ δεν θεωρείται έγκυρο αν η α είναι ακέραια, ενώ και οι β,γ είναι ακέραιες;
Από τη βοήθεια, https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Τελεστές/:
^ (δύναμη): ισχύει για τους ακέραιους και τους πραγματικούς. Το αποτέλεσμα είναι συνήθως πραγματικός αριθμός, εκτός αν ο εκθέτης είναι θετικός ακέραιος σταθερής αποτίμησης. Για παράδειγμα το 2^2 είναι ακέραιος, ενώ το 2^-2 πραγματικός (= 0.25). Έτσι στην γενική περίπτωση το 2^ι εκλαμβάνεται σαν πραγματικός αριθμός.
α, μάλιστα :) Δεν σκέφτηκα να κοιτάξω τη βοήθεια :-[
Επανέρχομαι στο θέμα γιατί στις επαναληπτικές ημερησίου 2004, θέμα 2 (αριθμοί Μέρσεν), υπάρχουν οι εντολές:
D <- (2^A) 1
E <- B MOD D
Μπορούμε να θεωρήσουμε ότι γενικά υπάρχει "λάθος" στον αλγόριθμο (αν π.χ. ο χρήστης δώσει για Α την τιμή -2);
Το Α=-2 απαγορεύεται από τον ορισμό των αριθμών Μέρσεν, απλά δεν ασχολήθηκαν με έλεγχο δεδομένων εισόδου.
Πέρα από αυτήν την παράλειψη, δεν μπορούμε να θεωρήσουμε ότι ο αλγόριθμος είναι λάθος, γιατί είναι ψευδογλώσσα και όχι πρόγραμμα, και στην ψευδογλώσσα δεν υπάρχουν τύποι δεδομένων.
Εντωμεταξύ, όλοι οι αριθμοί που μπαίνουν σαν εκθέτες είναι θετικοί (το 2^Α και το 2 ^ (C 1)). Επομένως αν ο αλγόριθμος υλοποιούνταν σε κάποια άλλη ΓΛΩΣΣΑ προγραμματισμού, που θα είχε τύπο δεδομένων ΘΕΤΙΚΟΙ: Α, C, θα μπορούσαμε να θεωρήσουμε ότι όλες οι μεταβλητές του αλγορίθμου είναι ΘΕΤΙΚΕΣ, και επομένως όλες οι δυνάμεις επίσης θετικοί ακέραιοι.
Το ίδιο θα μπορούσε να γίνει και στη ΓΛΩΣΣΑ με τη συνάρτηση "ακέραιο μέρος" που ουσιαστικά θα έκανε απλά type casting:
D ← Α_Μ((2 ^ A) 1)
Πάντως στην ψευδογλώσσα δεν ασχολούμαστε ούτε με τύπους δεδομένων ούτε με τις μετατροπές μεταξύ τους, οπότε τα πράγματα είναι πιο χαλαρά. Αν δεν κάνω λάθος έχουν και παράδειγμα με
Α[N/2] <- κάτι
όπου βάζουν πραγματικό αριθμό σαν δείκτη πίνακα, απλά επειδή "τυχαίνει" το Ν να είναι πάντα άρτιο στη συγκεκριμένη γραμμή και επομένως το Ν/2 πάντα ακέραιος.
Τι γίνεται όταν γράφουμε το ίδιο πρόγραμμα σε ΓΛΩΣΣΑ; Μια άσκηση που έχει
α<-β^γ
με όλες τις μεταβλητές ακέραιες, είναι λάθος;
Είναι συντακτικό λάθος.
https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Τελεστές/ (https://alkisg.mysch.gr/%CE%93%CE%9B%CE%A9%CE%A3%CE%A3%CE%91/%CE%A4%CE%B5%CE%BB%CE%B5%CF%83%CF%84%CE%AD%CF%82/): "Το αποτέλεσμα είναι συνήθως πραγματικός αριθμός, εκτός αν ο εκθέτης είναι θετικός ακέραιος σταθερής αποτίμησης. Για παράδειγμα το 2^2 είναι ακέραιος, ενώ το 2^-2 πραγματικός (= 0.25). Έτσι στην γενική περίπτωση το 2^ι εκλαμβάνεται σαν πραγματικός αριθμός."
Άρα είναι λάθος να το χρησιμοποιούμε στις ασκήσεις;