ερώτηση για τα div/mod

Ξεκίνησε από Πανάγος94, 31 Μαρ 2012, 08:39:57 ΜΜ

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

evry

ένα λεπτάκι
δηλαδή η παρακάτω έκφραση είναι σωστή ή λάθος?

x <- α div 5 + 0.1

δηλαδή οι πράξεις μεταξύ ακεραίων και πραγματικών απαγορεύονται ?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

όπως επίσης τι γίνεται με αυτές τις εκφράσεις; Είναι λάθος ή σωστές;

y ← 9 mod 10 / Τ_Ρ(81) - 1

y ← Α_Τ(2 - 12 div 2 / 2 / 3)

y ← Τ_Ρ(400) - 2) div 10

y ← Α_Τ(4 - 8) div 2 mod (6/3)

evry

#17
νομίζω ότι η 3η και 4η είναι λάθος ούτως ή άλλως
στην 3η εκτός της παρένθεσης που λείπει έχει πραγματικό με div
και στην τελευταία πάλι έχει πραγματικό με mod.

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

Παράθεση από: sdoukakis στις 03 Απρ 2012, 02:56:40 ΜΜ
όπως επίσης τι γίνεται με αυτές τις εκφράσεις; Είναι λάθος ή σωστές;

y ← 9 mod 10 / Τ_Ρ(81) - 1

y ← Α_Τ(2 - 12 div 2 / 2 / 3)

y ← Τ_Ρ(400) - 2) div 10

y ← Α_Τ(4 - 8) div 2 mod (6/3)

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

Ας ξαναδούμε λίγο πιο προσεκτικά τις δύο εκφράσεις:

y ← (Τ_Ρ(400) - 2) div 10

y ← Α_Τ(4 - 8) div 2 mod (6/3)


από που προκύπτει ότι είναι λάθος σε επίπεδο αλγοριθμικής και μαθηματικών;

Σε πρόσφατη εργασία που δημοσίευσα σε συνέδριο της ΠΕΚΑΠ (http://sdoukakis.files.wordpress.com/2011/04/sd_pekap2011.pdf) υποστήριξα ότι:

"Η ψευδογλώσσα δεν κάνει διάκριση μεταξύ ακέραιων και πραγματικών. Αντίθετα, η χρήση της ΓΛΩΣΣΑΣ περιορίζει την ανάπτυξη του αλγόριθμου, αφού ο μαθητής/τρια θα πρέπει να ασχοληθεί εκτός των άλλων με τα χαρακτηριστικά και τις δυνατότητες της ΓΛΩΣΣΑΣ. Σε αλγοριθμικό επίπεδο, η έκφραση (Τ_Ρ(400) - 2) έχει την τιμή 18, ενώ σε επίπεδο ΓΛΩΣΣΑΣ, η τιμή της έκφρασης (Τ_Ρ(400) - 2) έχει την τιμή 18.0 (η συνάρτηση Τ_Ρ επιστρέφει πραγματική τιμή). Έτσι, σε επίπεδο ΓΛΩΣΣΑΣ είναι αμφισβητούμενη η εντολή: y ← (Τ_Ρ(400) - 2) div 10, με πιθανότερο αποτέλεσμα να μην είναι δυνατή η πράξη div, αφού επιχειρείται να εκτελεστεί μεταξύ πραγματικού και ακεραίου."

Δουκάκης, Σ. (2011). Πανελλαδικές Εξετάσεις στο Μάθημα Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον, Πρακτικά 5ου Πανελληνίου Συνεδρίου Καθηγητών Πληροφορικής Δευτεροβάθμιας Εκπαίδευσης με θέμα: «Η Πληροφορική στην Πρωτοβάθμια και Δευτεροβάθμια Εκπαίδευση – Ο ρόλος του καθηγητή Πληροφορικής στο νέο σχολείο», 1-3 Απριλίου 2011, Ιωάννινα, σελ. 190-197.

evry

Δηλαδή μπορούμε να χρησιμοποιούμε πραγματικούς αριθμούς με τους τελεστές div και mod?

όσον αφορά το επίπεδο μαθηματικών που είπες εκεί και αν είναι λάθος αφού η ευκλείδεια διαίρεση ορίζεται μόνο με ακέραιους από όσο θυμάμαι.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

ok.

Η πράξη 6/3 πόσο κάνει;

evry

2.0

αλλά το πρόβλημα δεν είναι εκεί. Το πρόβλημα είναι στους τελεστές div,mod. Στη σελίδα 46 του βιβλίου που αναφέρει όλες τις εντολές της ψευδογλώσσας
στους τελεστές δεν έχει τα div/mod. γιατί άραγε? Φυσικά τα χρησιμοποιεί στον πολλαπλασιασμό αλά ρωσικά.
Τα div/mod είναι ουσιαστικά τελεστές της ΓΛΩΣΣΑΣ και όχι της ψευδογλώσσας. (με βάση το βιβλίο πάντα)
Αν θέλεις να τα χρησιμοποιήσεις στην ψευδογλώσσα θα πρέπει να δεχτείς και τους περιορισμούς που φέρνουν μαζί τους, ότι δηλαδή οι τελεστέοι πρέπει να είναι ακέραιοι
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

Χωρίς να είμαι σίγουρος, έχω την εντύπωση ότι στη νέα έκδοση του βιβλίου στη σελ. 46 αναφέρει και τους div/mod ...

Αντίθετα, στον αλγόριθμο αλά ρωσικά, στην παλιότερη έκδοση του βιβλίου δεν είχε div/mod... αλλά το ακέραιο μέρος:  [ ]

evry

#23
Νίκο έχεις απόλυτο δίκιο, έχω την παλιά έκδοση. Λογικά το έβαλαν εκεί όταν άλλαξαν και τον πολλαπλασιασμό αλά ρωσικά. Μάλλον έχει σχέση.
Ωστόσο στην παλιά έκδοση του βιβλίου στον αλά ρωσικά το είχε το mod. Απλά στην θέση του div είχε το ακέραιο μέρος. Δεν ξέρω γιατί αλλά το mod το είχε σίγουρα.
Πάντως και πάλι αυτό δεν αλλάζει τίποτα. Τα div/mod από μόνα τους κουβαλάνε τον περιορισμό των ακέραιων τελεστέων αφού αναφέρονται σε ευκλείδεια διαίρεση.

Παράθεση από: Νίκος Αδαμόπουλος στις 04 Απρ 2012, 01:15:13 ΠΜ
Χωρίς να είμαι σίγουρος, έχω την εντύπωση ότι στη νέα έκδοση του βιβλίου στη σελ. 46 αναφέρει και τους div/mod ...

Αντίθετα, στον αλγόριθμο αλά ρωσικά, στην παλιότερη έκδοση του βιβλίου δεν είχε div/mod... αλλά το ακέραιο μέρος:  [ ]
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

maria.k.

Παράθεσηένα λεπτάκι
δηλαδή η παρακάτω έκφραση είναι σωστή ή λάθος?

x <- α div 5 + 0.1

δηλαδή οι πράξεις μεταξύ ακεραίων και πραγματικών απαγορεύονται ?

Εννοείται πως δεν απαγορεύονται, αφού το αποτέλεσμα ολόκληρης της έκφρασης που υπάρχει στο αριστερό μέλος είναι πραγματικός αριθμός (με δεδομένο ότι το α είναι ακεραιος), άρα και η μεταβλητή χ είναι πραγματική.
Το θέμα είναι το εξής:
Η εντολή α <- 1 με το α δηλωμένο ως πραγματικό είναι σωστή, ενώ
η εντολή α<- 1.0 με το α δηλωμένο ως ακέραιο είναι λανθασμένη.
Δηλαδή η γλώσσα μπορεί να μετατρέψει έναν ακέραιο σε πραγματικό ενώ το αντίθετο όχι γιατι χάνει δεδομένα.
Όλο αυτό όμως πώς συνάδει με το "σε μια εντολή εκχώρησης η έκφραση και η μεταβλητή πρέπει να είναι του ίδου τύπου"?
Πως θα το εξηγήσουμε στους μαθητές?
Δε συμπαθούν που δε συμπαθούν τη δήλωση μεταβλητών, μετά θα τις δηλώνουν όλες πραγματικές εκτός αν κάνουν πράξεις με το mod και το div...

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

Η έκφραση:
y ← Α_Τ(4 - 8) div 2 mod (6/3)


περιέχει την πράξη 6/3. Το αποτέλεσμα της πράξης είναι 2 ή 2,0 ή 2,00 ή 2,000 και ας βάλει ο καθένας όσα μηδενικά ψηφία επιθυμεί. Αυτά στο μυαλό μας.

Στα μαθηματικά η διαίρεση δύο ακεραίων π.χ. η διαίρεση 6/3 έχει πηλίκο 2 και υπόλοιπο μηδέν. Είναι δλδ τέλεια διαίρεση.

Συνεπώς, για τα μαθηματικά (βλέπε http://digitalschool.minedu.gov.gr/modules/ebook/show.php/DSGL-B100/133/971,3492/ ή (βλέπε http://en.wikipedia.org/wiki/Division_%28mathematics%29) η διαίρεση 6/2 έχει πηλίκο 2.

Άρα, αφού είναι ακέραιο το πηλίκο της διαίρεσης, μπορεί να γίνει στη συνέχεια η πράξη με mod και div.

Συνεπώς η έκφραση
y ← Α_Τ(4 - 8) div 2 mod (6/3)

σε επίπεδο αλγοριθμικής έχει αποτέλεσμα μηδέν (0).

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

Σε επίπεδο ΓΛΩΣΣΑΣ είναι αμφισβητούμενη αν είναι σωστή ή έκφραση. Ωστόσο δεν με απασχολεί, γιατί μου δίνει την δυνατότητα να αναφερθώ στους περιορισμούς που έχουν οι ίδιες οι γλώσσες προγραμματισμού (πίνακες, πράξεις με div και mod, παραγοντικό κ.α. περισσότερα στο άρθρο http://sdoukakis.files.wordpress.com/2011/04/sd_pekap2011.pdf).

Συνάδελφοι το έχουμε ξαναπεί. Οι περιορισμοί της ΓΛΩΣΣΑΣ δεν μπορεί να οδηγούν σε περιορισμό την σκέψη.

Παράθεση από: evry στις 04 Απρ 2012, 12:52:20 ΠΜ
2.0

αλλά το πρόβλημα δεν είναι εκεί. Το πρόβλημα είναι στους τελεστές div,mod. Στη σελίδα 46 του βιβλίου που αναφέρει όλες τις εντολές της ψευδογλώσσας
στους τελεστές δεν έχει τα div/mod. γιατί άραγε? Φυσικά τα χρησιμοποιεί στον πολλαπλασιασμό αλά ρωσικά.
Τα div/mod είναι ουσιαστικά τελεστές της ΓΛΩΣΣΑΣ και όχι της ψευδογλώσσας. (με βάση το βιβλίο πάντα)
Αν θέλεις να τα χρησιμοποιήσεις στην ψευδογλώσσα θα πρέπει να δεχτείς και τους περιορισμούς που φέρνουν μαζί τους, ότι δηλαδή οι τελεστέοι πρέπει να είναι ακέραιοι

Καρκαμάνης Γεώργιος

Διαβάζοντας από την αρχή όλο το θέμα, πραγματικά έχω μπερδευτεί:
Ποίο είναι το πρόβλημα που τίθεται;

α) αν μπορούμε να πραγματοποιήσουμε πράξεις μεταξύ ακεραίων και πραγματικών αριθμών;
β) αν σε μία πραγματική μεταβλητή μπορούμε να τοποθετήσουμε το αποτέλεσμα μιας πράξης που παράγει ακέραιο αποτέλεσμα;

αν πρόκειται για την α περίπτωση, νομίζω ότι κανένας δεν πρέπει να αμφιβάλλει για το εαν μπορεί να γίνει
για τη β περίπτωση, νομίζω ότι πρέπει να σταθούμε σε αυτό που αναφέρθηκε :

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




alkisg

Παράθεση από: sdoukakis στις 04 Απρ 2012, 10:55:33 ΠΜ
Συνεπώς, για τα μαθηματικά (βλέπε http://digitalschool.minedu.gov.gr/modules/ebook/show.php/DSGL-B100/133/971,3492/ ή (βλέπε http://en.wikipedia.org/wiki/Division_%28mathematics%29) η διαίρεση 6/3 έχει πηλίκο 2.

Άρα, αφού είναι ακέραιο το πηλίκο της διαίρεσης, μπορεί να γίνει στη συνέχεια η πράξη με mod και div.

Το δεύτερο link που παράθεσες δεν συμφωνεί με αυτά που λες.
Αναφέρει ότι η διαίρεση μεταξύ ακεραίων μπορεί να οριστεί με τέσσερις τρόπους.
Εσύ ουσιαστικά λες ότι η ψευδογλώσσα υλοποιεί την περίπτωση 1 (partial function), ενώ ο Διερμηνευτής υλοποιεί την περίπτωση 2 (decimal fraction), η οποία "is the approach usually taken in mathematics."

evry

Παράθεση από: sdoukakis στις 04 Απρ 2012, 10:55:33 ΠΜ
Η έκφραση:
y ← Α_Τ(4 - 8) div 2 mod (6/3)


περιέχει την πράξη 6/3. Το αποτέλεσμα της πράξης είναι 2 ή 2,0 ή 2,00 ή 2,000 και ας βάλει ο καθένας όσα μηδενικά ψηφία επιθυμεί.
Το αποτέλεσμα της πράξης στην ΓΛΩΣΣΑ είναι 2.0 και αυτό γίνεται γιατί πρέπει σε compile-time να αποφασίσει αυτή η έκφραση τι τύπου είναι.
Σύμφωνα με το δικό σου σκεπτικό η έκφραση α/β είναι ακέραια αν η διαίρεση είναι τέλεια και πραγματική αν δεν είναι.

Δηλαδή σύμφωνα με το δικό σου σκεπτικό οι παρακάτω εντολές

Διάβασε α,β
υ <- α/β
Εμφάνισε υ

για α=6 και β=3 θα εμφανίσουν 2 (ακέραια τιμή)
ενώ για α=3 και β =2 θα εμφανίσουν 1.5 (πραγματική)

Αλήθεια τι τύπου είναι η μεταβλητή, ακέραια ή πραγματική? ή μήπως αλλάζει τύπο ανάλογα με την εκτέλεση?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

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

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

δεν ξέρω αν συμφωνείς με το παραπάνω σκεπτικό ή διαφωνείς

Παράθεση από: Καρκαμάνης Γεώργιος στις 04 Απρ 2012, 11:21:24 ΠΜ
Διαβάζοντας από την αρχή όλο το θέμα, πραγματικά έχω μπερδευτεί:
Ποίο είναι το πρόβλημα που τίθεται;
α) αν μπορούμε να πραγματοποιήσουμε πράξεις μεταξύ ακεραίων και πραγματικών αριθμών;
β) αν σε μία πραγματική μεταβλητή μπορούμε να τοποθετήσουμε το αποτέλεσμα μιας πράξης που παράγει ακέραιο αποτέλεσμα;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr