Αποστολέας Θέμα: div και mod με αρνητικους  (Αναγνώστηκε 3759 φορές)

apanagio

  • ΟΔΕ
  • *
  • Μηνύματα: 163
div και mod με αρνητικους
« στις: 08 Δεκ 2014, 09:19:43 πμ »
Όπως έχει συζητηθεί κι εδώ:
http://alkisg.mysch.gr/steki/index.php?topic=755.0
η συμπεριφορά των div και mod ίσως να ξενίζει τους μαθητές μας όταν τα ορίσματα είναι αρνητικοί αριθμοί.

Σύμφωνα με τα μαθητικά    0 < α mod β <=  β  για θετικούς β
Στο pseudoglossa.gr
-9 mod 2 = -1

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

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: div και mod με αρνητικους
« Απάντηση #1 στις: 08 Δεκ 2014, 02:45:27 μμ »
Και ποιος είναι ο μαθηματικός ορισμός;
Εδώ πάντως τα πράγματα δεν είναι καθόλου ξεκάθαρα.
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

apanagio

  • ΟΔΕ
  • *
  • Μηνύματα: 163
Απ: div και mod με αρνητικους
« Απάντηση #2 στις: 08 Δεκ 2014, 06:00:36 μμ »
Στη wikipedia που κάνεις link λέει:
Παράθεση
In mathematics the result of the modulo operation is the remainder of the Euclidean division.

Και η ευκλείδεια διαίρεση ορίζεται:
Παράθεση
Given two integers a and b, with b ≠ 0, there exist unique integers q and r such that a = bq + r and 0 ≤ r < |b|

Διάφορες γλώσσες προγραμματισμού έχουν και διαφορετική προσέγγιση.

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: div και mod με αρνητικους
« Απάντηση #3 στις: 08 Δεκ 2014, 07:58:24 μμ »
Δηλαδή αν κατάλαβα καλά λες ότι πρέπει να επιστρέφει πάντα θετικό;

Υπάρχει κάποιος λόγος πέραν του μαθηματικού ορισμού όπου αυτό πρέπει να συμβαίνει;
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

apanagio

  • ΟΔΕ
  • *
  • Μηνύματα: 163
Απ: div και mod με αρνητικους
« Απάντηση #4 στις: 08 Δεκ 2014, 09:04:57 μμ »
Ναι αυτό λέω.

Εκεί που μου προέκυψε το πρόβλημα ήταν όταν σε μια άσκηση ένα παιδί ήθελε να δει αν ένας αριθμός είναι άρτιος ή περιττός. Κάνοντας έλεγχο με
Κώδικας: [Επιλογή]
x mod 2 = 1 δεν του δούλευε για αρνητικούς.


sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: div και mod με αρνητικους
« Απάντηση #5 στις: 08 Δεκ 2014, 09:17:50 μμ »
Πάντως το έχει στα common pitfalls! http://en.wikipedia.org/wiki/Modulo_operation#Common_pitfalls

Από την άλλη το 9 mod 2 έχει μια λογική να είναι διαφορετικό από το -9 mod 2.

Δεν ξέρω, αν το θέλουν και άλλοι να το αλλάξω.

 
« Τελευταία τροποποίηση: 08 Δεκ 2014, 09:33:29 μμ από sstergou »
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

apanagio

  • ΟΔΕ
  • *
  • Μηνύματα: 163
Απ: div και mod με αρνητικους
« Απάντηση #6 στις: 08 Δεκ 2014, 09:24:45 μμ »
Ναι το ξέρω,
Το συναντησα πρώτη φορά στην άσκηση του βιβλίου (και του algo.pk)
"να διαβάζει έναν ακέραιο και να επιστρέφει τον επόμενο άρτιο"

Κανένας

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: div και mod με αρνητικους
« Απάντηση #7 στις: 09 Δεκ 2014, 12:00:12 πμ »
Και ποιος είναι ο μαθηματικός ορισμός;
Εδώ πάντως τα πράγματα δεν είναι καθόλου ξεκάθαρα.

Εὐκλείδεια διαίρεση:
Γιὰ κάθε Ϲεῦγος ἀκεραίων (a, b) μὲ b > 0 ὑπάρχει ἕνα μοναδικὸ Ϲεῦγος ἀκεραίων (q, r), τέτοιο ὥστε
a = bq + r καὶ 0 ≤ r < b .
Στὴ σχέση αὐτὴ ὁ a χαρακτηρίζεται διαιρετέος καὶ ὁ b διαιρέτης. ῾Ο q ὀνομάζεται
(ἀκέραιο) πηλίκο τῆς διαίρεσης τοῦ a διὰ b καὶ ὁ r ὑπόλοιπο τῆς διαίρεσης.

Δηλαδή ακέραιο πηλίκο q ορίζουμε τον μεγαλύτερο ακέραιο για τον οποίο ισχύει bq<=a.
π.χ.   όπως (9 div 2=4 και 9 mod 2=1) διότι 4*2<9
    και όχι (9 div 2=5 και 9 mod 2=-1) διότι 5*2>9

   έτσι και (-9 div 2=-5 και -9 mod 2=1) διότι (-5)*2<-9
    και όχι (-9 div 2=-4 και -9 mod 2=-1) διότι (-4)*2>-9
ΝΙΚΗΦΟΡΟΣ ΜΑΝΔΗΛΑΡΑΣ
ΓΕΛ ΝΑΞΟΥ

gpapargi

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2428
  • I 'm not young enough to know everything
Απ: div και mod με αρνητικους
« Απάντηση #8 στις: 09 Δεκ 2014, 11:24:56 πμ »
Στάθη είχαμε πει πιο παλιά να ακολουθήσουμε τον ορισμό της ακέραιας διαίρεσης  του Ευκλείδη όπως αυτός περιγράφεται στο βιβλίο των μαθηματικών κατεύθυνσης της Β λυκείου. Να υπάρχει και συνέχεια μεταξύ των βιβλίων και ειδικά να είμαστε σύμφωνοι με τα μαθηματικά που κάνουν τα παιδιά (έστω και με τα εκτός ύλης κομμάτια).
Γιώργος Παπαργύρης (gpapargi@hotmail.com)

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: div και mod με αρνητικους
« Απάντηση #9 στις: 09 Δεκ 2014, 03:58:35 μμ »
Αφού υπάρχει συμφωνία θα το αλλάξω.
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

gpapargi

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2428
  • I 'm not young enough to know everything
Απ: div και mod με αρνητικους
« Απάντηση #10 στις: 09 Δεκ 2014, 04:20:24 μμ »
Από ότι θυμάμαι είχε συζητηθεί στο πλαίσιο των ασαφειών της ΑΕΠΠ. Προβλημάτιζε και τον Άλκη το τι θα υλοποιήσει στο Διερμηνευτή.
http://alkisg.mysch.gr/steki/index.php?topic=914.0
Γιώργος Παπαργύρης (gpapargi@hotmail.com)

Κανένας

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: div και mod με αρνητικους
« Απάντηση #11 στις: 09 Δεκ 2014, 04:38:09 μμ »
Στάθη είχαμε πει πιο παλιά να ακολουθήσουμε τον ορισμό της ακέραιας διαίρεσης  του Ευκλείδη όπως αυτός περιγράφεται στο βιβλίο των μαθηματικών κατεύθυνσης της Β λυκείου. Να υπάρχει και συνέχεια μεταξύ των βιβλίων και ειδικά να είμαστε σύμφωνοι με τα μαθηματικά που κάνουν τα παιδιά (έστω και με τα εκτός ύλης κομμάτια).

Το θεώρημα της ακεραίας διαίρεσης  του Ευκλείδη στο βιβλίο των μαθηματικών κατεύθυνσης της Β λυκείου διατυπώνεται ως εξής:
Αν α και β ακέραιοι με β≠0 , τότε υπάρχουν μοναδικοί ακέραιοι κ και υ, τέτοιοι, ώστε
α=κβ+υ, 0≤υ<|β|.
και είναι ισοδύναμο με το παρακάτω:

Γιὰ κάθε Ϲεῦγος ἀκεραίων (a, b) μὲ b > 0 ὑπάρχει ἕνα μοναδικὸ Ϲεῦγος ἀκεραίων (q, r), τέτοιο ὥστε
a = bq + r καὶ 0 ≤ r < b .

στο οποίο απαιτείται ο διαιρέτης b να είναι θετικός ακέραιος (φυσικός)
δεδομένου ότι a/-b=-a/b και -a/-b=a/b.

Ο τελεστής mod όπου εφαρμόζεται πάντως πρέπει να επιστρέφει μη αρνητικό αποτέλεσμα.
ΝΙΚΗΦΟΡΟΣ ΜΑΝΔΗΛΑΡΑΣ
ΓΕΛ ΝΑΞΟΥ

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: div και mod με αρνητικους
« Απάντηση #12 στις: 09 Δεκ 2014, 06:45:43 μμ »
Ωραία, το άλλαξα. Τώρα δουλεύει ως εξής:
Κώδικας: [Επιλογή]
function(a:Number, b:Number):Number {
var r:Number = a % b;
return r >= 0 ? r : r + Math.abs(b);
}
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

apanagio

  • ΟΔΕ
  • *
  • Μηνύματα: 163
Απ: div και mod με αρνητικους
« Απάντηση #13 στις: 09 Δεκ 2014, 07:06:27 μμ »
Θα πρέπει να αλλάξεις και το div για να συμφωνεί.  :)


sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: div και mod με αρνητικους
« Απάντηση #14 στις: 09 Δεκ 2014, 07:53:13 μμ »
Διαφώτισέ με λίγο για να μην ψάχνομαι, το παρακάτω εμφανίζει σε όλα Αληθής.
Κώδικας: [Επιλογή]
αλγοριθμος ταδε
για α από -10 μέχρι 10
για β από 1 μέχρι 3
πηλικο ← α div β
υπολοιπο ← α mod β
απ ← πηλικο * β + υπολοιπο
γραψε α, β, απ, απ = α
Τέλος_επανάληψης
τελος_επαναληψης
τελος ταδε
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr