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

Γενικό Λύκειο => Αλγοριθμική και Προγραμματισμός => Ψευδογλώσσα => Μήνυμα ξεκίνησε από: apanagio στις 08 Δεκ 2014, 09:19:43 ΠΜ

Τίτλος: div και mod με αρνητικους
Αποστολή από: apanagio στις 08 Δεκ 2014, 09:19:43 ΠΜ
Όπως έχει συζητηθεί κι εδώ:
https://alkisg.mysch.gr/steki/index.php?topic=755.0
η συμπεριφορά των div και mod ίσως να ξενίζει τους μαθητές μας όταν τα ορίσματα είναι αρνητικοί αριθμοί.

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

Αν και δεν είναι μέσα στην ύλη μήπως θα ήταν καλύτερα να αλλάξει η υλοποίηση και να συμφωνεί με τον μαθηματικό ορισμό;
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 08 Δεκ 2014, 02:45:27 ΜΜ
Και ποιος είναι ο μαθηματικός ορισμός;
Εδώ (http://en.wikipedia.org/wiki/Modulo_operation) πάντως τα πράγματα δεν είναι καθόλου ξεκάθαρα.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: apanagio στις 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|

Διάφορες γλώσσες προγραμματισμού έχουν και διαφορετική προσέγγιση.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 08 Δεκ 2014, 07:58:24 ΜΜ
Δηλαδή αν κατάλαβα καλά λες ότι πρέπει να επιστρέφει πάντα θετικό;

Υπάρχει κάποιος λόγος πέραν του μαθηματικού ορισμού όπου αυτό πρέπει να συμβαίνει;
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: apanagio στις 08 Δεκ 2014, 09:04:57 ΜΜ
Ναι αυτό λέω.

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

Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 08 Δεκ 2014, 09:17:50 ΜΜ
Πάντως το έχει στα common pitfalls! http://en.wikipedia.org/wiki/Modulo_operation#Common_pitfalls

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

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

Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: apanagio στις 08 Δεκ 2014, 09:24:45 ΜΜ
Ναι το ξέρω,
Το συναντησα πρώτη φορά στην άσκηση του βιβλίου (και του algo.pk)
"να διαβάζει έναν ακέραιο και να επιστρέφει τον επόμενο άρτιο"
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: Κανένας στις 09 Δεκ 2014, 12:00:12 ΠΜ
Παράθεση από: sstergou στις 08 Δεκ 2014, 02:45:27 ΜΜ
Και ποιος είναι ο μαθηματικός ορισμός;
Εδώ (http://en.wikipedia.org/wiki/Modulo_operation) πάντως τα πράγματα δεν είναι καθόλου ξεκάθαρα.

Εὐκλείδεια διαίρεση:
Γιὰ κάθε Ϲεῦγος ἀκεραίων (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
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: gpapargi στις 09 Δεκ 2014, 11:24:56 ΠΜ
Στάθη είχαμε πει πιο παλιά να ακολουθήσουμε τον ορισμό της ακέραιας διαίρεσης  του Ευκλείδη όπως αυτός περιγράφεται στο βιβλίο των μαθηματικών κατεύθυνσης της Β λυκείου. Να υπάρχει και συνέχεια μεταξύ των βιβλίων και ειδικά να είμαστε σύμφωνοι με τα μαθηματικά που κάνουν τα παιδιά (έστω και με τα εκτός ύλης κομμάτια).
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 03:58:35 ΜΜ
Αφού υπάρχει συμφωνία θα το αλλάξω.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: gpapargi στις 09 Δεκ 2014, 04:20:24 ΜΜ
Από ότι θυμάμαι είχε συζητηθεί στο πλαίσιο των ασαφειών της ΑΕΠΠ. Προβλημάτιζε και τον Άλκη το τι θα υλοποιήσει στο Διερμηνευτή.
https://alkisg.mysch.gr/steki/index.php?topic=914.0
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: Κανένας στις 09 Δεκ 2014, 04:38:09 ΜΜ
Παράθεση από: gpapargi στις 09 Δεκ 2014, 11:24:56 ΠΜ
Στάθη είχαμε πει πιο παλιά να ακολουθήσουμε τον ορισμό της ακέραιας διαίρεσης  του Ευκλείδη όπως αυτός περιγράφεται στο βιβλίο των μαθηματικών κατεύθυνσης της Β λυκείου. Να υπάρχει και συνέχεια μεταξύ των βιβλίων και ειδικά να είμαστε σύμφωνοι με τα μαθηματικά που κάνουν τα παιδιά (έστω και με τα εκτός ύλης κομμάτια).

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

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

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

Ο τελεστής mod όπου εφαρμόζεται πάντως πρέπει να επιστρέφει μη αρνητικό αποτέλεσμα.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 06:45:43 ΜΜ
Ωραία, το άλλαξα. Τώρα δουλεύει ως εξής:
Κώδικας [Επιλογή]

function(a:Number, b:Number):Number {
var r:Number = a % b;
return r >= 0 ? r : r + Math.abs(b);
}
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: apanagio στις 09 Δεκ 2014, 07:06:27 ΜΜ
Θα πρέπει να αλλάξεις και το div για να συμφωνεί.  :)

Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 07:53:13 ΜΜ
Διαφώτισέ με λίγο για να μην ψάχνομαι, το παρακάτω εμφανίζει σε όλα Αληθής.
Κώδικας [Επιλογή]

αλγοριθμος ταδε
για α από -10 μέχρι 10
για β από 1 μέχρι 3
πηλικο ← α div β
υπολοιπο ← α mod β
απ ← πηλικο * β + υπολοιπο
γραψε α, β, απ, απ = α
Τέλος_επανάληψης
τελος_επαναληψης
τελος ταδε
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: apanagio στις 09 Δεκ 2014, 08:09:15 ΜΜ
Εγώ ακόμα δεν βλέπω την καινουρια έκδοση,
ίσως είναι cached στον browser μου η παλια.
αλλά αυτό που πρέπει να συμβαίνει είναι

έστω α = π*β + υ
όπου π = α div β και
υ = α mod β

πρέπει π*β <= α.
πχ -1 div 2 = -1
προς το παρόν -1 div 2 βγάζει 0
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 08:12:29 ΜΜ
Μήπως μπαίνεις στο pseudoglossa.gr και όχι στο pseudoglossa.gr/new ?
Σε λίγο καιρό η νέα έκδοση θα γίνει η βασική και η παλιά θα καταργηθεί.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 09:10:16 ΜΜ
Το σε λίγο έγινε τώρα.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: ether στις 09 Δεκ 2014, 09:40:49 ΜΜ
Υπάρχει κάποιο πρόβλημα με την τιμή που επιστρέφεται για το div στην περίπτωση που ο διαιρέτης είναι αρνητικός
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 09:43:54 ΜΜ
Όλα αυτά που συζητάμε είναι μόνο για την περίπτωση που ο διαιρέτης είναι θετικός.
Δεν μου έρχεται στο μυαλό το τι θα μπορούσε να γίνει αν είναι αρνητικός.

Αν έχεις να προτείνεις κάτι μαζί με μια πηγή και αντίστοιχη φόρμουλα το βλέπουμε.
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: ether στις 09 Δεκ 2014, 09:49:00 ΜΜ
Δες στο βιβλίο Μαθηματικά Θετικής Β' Λυκείου, σελίδες 142-143
http://ebooks.edu.gr/courses/DSGL-B100/document/4c5fc6fdnxxi/4c5fc737mw02/4e293c5aytvd.pdf
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 09:57:43 ΜΜ
Ωραία, θα το κοιτάξω όταν βρω χρόνο. Αν κάποιος έχει τη λύση ας μου την πει να μην κουράζομαι... :)
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: gpapargi στις 09 Δεκ 2014, 10:37:17 ΜΜ
Θυμάμαι ότι πιο παλιά είχα γράψει όλους τους συνδυασμούς. Νομίζω ότι είναι στο παρακάτω link. Θα το δω και αύριο που θα δουλεύει το κεφάλι καλύτερα.
https://alkisg.mysch.gr/steki/index.php?topic=183.msg1170#msg1170
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 09 Δεκ 2014, 10:43:03 ΜΜ
Πάντως έχεις μνήμη!
Στο θέμα που παραθέτεις υπάρχει link από όταν στο στέκι ήταν στο tripod το 2003 (και εγώ δεν είχα πάει ακόμα φαντάρος)!!!
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: gpapargi στις 10 Δεκ 2014, 10:09:28 ΠΜ
Μπααα, δεν έχω μνήμη. Απλά θυμόμουν ότι κάποτε τα είχα γράψει και ότι ο Άλκης συγκεντρώνοντας τις ασάφειες είχε μαζέψει αρκετές (αν όχι όλες) τις σχετικές συζητήσεις για κάθε ασάφεια. Οπότε μπήκα στις ασάφειες (που είναι μόνιμο θέμα και εμφανίζεται πάνω πάνω) για τα div-mod και έριξα μια γρήγορη ματιά για το που είχα γράψει κάτι
Υπήρχε index δηλαδή και έγινε γρήγορα η αναζήτηση  :)
Τίτλος: Απ: div και mod με αρνητικους
Αποστολή από: sstergou στις 10 Δεκ 2014, 01:23:12 ΜΜ
Για εγκυκλοπαιδικούς λόγους ... http://research.microsoft.com/pubs/151917/divmodnote-letter.pdf