Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Αλγοριθμική και Προγραμματισμός => Διερμηνευτής της ΓΛΩΣΣΑΣ => Μήνυμα ξεκίνησε από: Wizard στις 27 Σεπ 2008, 06:15:51 ΜΜ

Τίτλος: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: Wizard στις 27 Σεπ 2008, 06:15:51 ΜΜ
Γιατί ο διερμηνευτής θεωρεί ότι η ύψωση σε δύναμη δίνει πραγματικό αριθμό; π.χ. γιατί το α <- β^γ δεν θεωρείται έγκυρο αν η α είναι ακέραια, ενώ και οι β,γ είναι ακέραιες;
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: alkisg στις 27 Σεπ 2008, 07:14:44 ΜΜ
Από τη βοήθεια, https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Τελεστές/:

^ (δύναμη): ισχύει για τους ακέραιους και τους πραγματικούς. Το αποτέλεσμα είναι συνήθως πραγματικός αριθμός, εκτός αν ο εκθέτης είναι θετικός ακέραιος σταθερής αποτίμησης. Για παράδειγμα το 2^2 είναι ακέραιος, ενώ το 2^-2 πραγματικός (= 0.25). Έτσι στην γενική περίπτωση το 2^ι εκλαμβάνεται σαν πραγματικός αριθμός.
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: Wizard στις 27 Σεπ 2008, 07:31:43 ΜΜ
α, μάλιστα  :) Δεν σκέφτηκα να κοιτάξω τη βοήθεια  :-[
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: Wizard στις 28 Σεπ 2008, 03:17:05 ΜΜ
Επανέρχομαι στο θέμα γιατί στις επαναληπτικές ημερησίου 2004, θέμα 2 (αριθμοί Μέρσεν), υπάρχουν οι εντολές:

Κώδικας [Επιλογή]
D <- (2^A) – 1
E <- B MOD D


Μπορούμε να θεωρήσουμε ότι γενικά υπάρχει "λάθος" στον αλγόριθμο (αν π.χ. ο χρήστης δώσει για Α την τιμή  -2);
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: alkisg στις 28 Σεπ 2008, 03:55:33 ΜΜ
Το Α=-2 απαγορεύεται από τον ορισμό των αριθμών Μέρσεν, απλά δεν ασχολήθηκαν με έλεγχο δεδομένων εισόδου.
Πέρα από αυτήν την παράλειψη, δεν μπορούμε να θεωρήσουμε ότι ο αλγόριθμος είναι λάθος, γιατί είναι ψευδογλώσσα και όχι πρόγραμμα, και στην ψευδογλώσσα δεν υπάρχουν τύποι δεδομένων.
Εντωμεταξύ, όλοι οι αριθμοί που μπαίνουν σαν εκθέτες είναι θετικοί (το 2^Α και το 2 ^ (C – 1)). Επομένως αν ο αλγόριθμος υλοποιούνταν σε κάποια άλλη ΓΛΩΣΣΑ προγραμματισμού, που θα είχε τύπο δεδομένων ΘΕΤΙΚΟΙ: Α, C, θα μπορούσαμε να θεωρήσουμε ότι όλες οι μεταβλητές του αλγορίθμου είναι ΘΕΤΙΚΕΣ, και επομένως όλες οι δυνάμεις επίσης θετικοί ακέραιοι.

Το ίδιο θα μπορούσε να γίνει και στη ΓΛΩΣΣΑ με τη συνάρτηση "ακέραιο μέρος" που ουσιαστικά θα έκανε απλά type casting:
D ← Α_Μ((2 ^ A) – 1)

Πάντως στην ψευδογλώσσα δεν ασχολούμαστε ούτε με τύπους δεδομένων ούτε με τις μετατροπές μεταξύ τους, οπότε τα πράγματα είναι πιο χαλαρά. Αν δεν κάνω λάθος έχουν και παράδειγμα με
Α[N/2] <- κάτι
όπου βάζουν πραγματικό αριθμό σαν δείκτη πίνακα, απλά επειδή "τυχαίνει" το Ν να είναι πάντα άρτιο στη συγκεκριμένη γραμμή και επομένως το Ν/2 πάντα ακέραιος.
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: happiness στις 24 Οκτ 2018, 01:44:43 ΜΜ
Τι γίνεται όταν γράφουμε το ίδιο πρόγραμμα σε ΓΛΩΣΣΑ; Μια άσκηση που έχει
Κώδικας [Επιλογή]
α<-β^γ
με όλες τις μεταβλητές ακέραιες, είναι λάθος;
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: alkisg στις 24 Οκτ 2018, 01:47:53 ΜΜ
Είναι συντακτικό λάθος.
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^ι εκλαμβάνεται σαν πραγματικός αριθμός."
Τίτλος: Απ: Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;
Αποστολή από: happiness στις 27 Οκτ 2018, 04:47:49 ΜΜ
Άρα είναι λάθος να το χρησιμοποιούμε στις ασκήσεις;