A_M, div και ασκηση ευρεσης ψηφίων πραγματικού

Ξεκίνησε από landreou, 02 Απρ 2013, 08:01:55 ΠΜ

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

landreou

Τί αποτέλεσμα δίνει η A_M(0.75) ;
Τι αποτέλεσμα δίνει η 4 mod 5 ;
Τι αποτέλεσμα δίνει η 4 div 5 ;

Για τον υπολογισμό των ψηφίων του ακεραίου και του δεκαδικύ μέρους πραγματικού αριθμού
δίνει τον επόμενο τμήμα

ΔΙΑΔΙΚΑΣΙΑ ΨΗΦΙΑ(Χ,Πλ_ΑΚ,Πλ_ΔΕΚ)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : Χ ,δεκ
ΑΚΕΡΑΙΕΣ : ακ,Πλ_ΑΚ,Πλ_ΔΕΚ

ΑΡΧΗ
ακ <- Α_Μ(Χ)
δεκ <- Χ - ακ

Πλ_ΑΚ <- 0
ΟΣΟ ακ <> 0 ΕΠΑΝΑΛΑΒΕ

ακ <- ακ div 10
Πλ_ΑΚ <- Πλ_ΑΚ + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Πλ_ΔΕΚ <- 0

ΟΣΟ δεκ <> Α_Μ(δεκ) ΕΠΑΝΑΛΑΒΕ  ! ΤΙ ΚΑΝΕΙ ΕΔΩ ;

δεκ <- δεκ * 10

Πλ_ΔΕΚ <- Πλ_ΔΕΚ + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

gpapargi

Παράθεση από: landreou στις 02 Απρ 2013, 08:01:55 ΠΜ
Τί αποτέλεσμα δίνει η A_M(0.75) ;
Τι αποτέλεσμα δίνει η 4 mod 5 ;
Τι αποτέλεσμα δίνει η 4 div 5 ;

Αν κάνεις τη γνωστή κάθετη διαίρεση του 4 με το 5, προκύπτει ότι το 5 στο 4 χωράει 0 φορές και περισσεύουν 4 (όλα δηλαδή). Άρα 4 div 5 = 0  (τόσο χωράει το 5 στο 4) και 4 mod 5 = 4 (τόσο περισσεύει).

Α_Μ(0.75)=0. Στους θετικούς το ακέραιο μέρος είναι απλά αποκοπή δεκαδικών. Στους αρνητικούς έχει προκύψει το θέμα αν στα πλαίσια του μαθήματος είναι αποκοπή δεκαδικών (προγραμματιστική προσέγγιση) ή ο μεγαλύτερος ακέραιος που δεν υπερβαίνει το αριθμό (μαθηματική προσέγγιση).

Παράθεση από: landreou στις 02 Απρ 2013, 08:01:55 ΠΜ

ΟΣΟ δεκ <> Α_Μ(δεκ) ΕΠΑΝΑΛΑΒΕ  ! ΤΙ ΚΑΝΕΙ ΕΔΩ ;

δεκ <- δεκ * 10

Πλ_ΔΕΚ <- Πλ_ΔΕΚ + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Παίρνει το δεκαδικό κομμάτι του αριθμού και το πολλαπλασιάζει επαναληπτικά με 10 (δηλαδή κουνάει την υποδιαστολή δεξιά) μέχρι ο αριθμός να γίνει ίσος με το ακέραιο μέρος του δηλαδή μέχρι να γίνει ακέραιος. Σε κάθε πολλαπλασιασμό με 10 (αριστερή ολίσθηση αν θέλεις) αυξάνει το μετρητή. Έτσι βρίσκει το πλήθος των δεκαδικών στοιχείων.

landreou

για τον αριθμό 500,15 ας πουμε με παράδειγμα γιατι πάλι δεν κατάλαβα .

Παίρνει το δεκαδικό μέρος του αριθμού που είναι 0.15 και το πολλαπλασιάζει με το 10 γίνεται 1.5 και παλι με 10 και γίνεται 15 .
Και γιατί να μη συνεχίζει να το κάνει αφού η συνθήκη λέει ΟΣΟ δεκ <> Α_Μ(δεκ) ΕΠΑΝΑΛΑΒΕ και στην ουσία λέμε όσο το
δεκαδικό μέρος είναι <> 0.

gpapargi

Όταν το δεκαδικό μέρος (δεκ) είναι 0.15 ισχύει ότι δεκ<>Α_Μ(δεκ) γιατί το πρώτο είναι 0.15 ενώ το δεύτερο είναι 0. Μετά τον πρώτο πολλαπλασιασμό με 10 το δεκ γίνεται 1.5. Και πάλι ισχύει ότι δεκ<>Α_Μ(δεκ) αφού το πρώτο είναι 1.5 και το δεύτερο είναι Α_Μ(1.5)=1 (προσοχή γιατί μάλλον εδώ έγινε το λάθος).
Τώρα το κρίσιμο σημείο: Μετά το δεύτερο πολλαπλασιασμό το δεκ γίνεται πια 15 (προσοχή δεν είναι πια 0.15). Άρα το Α_Μ(δεκ) είναι πια 15 και όχι 0. Τώρα το δεκ<>Α_Μ(δεκ) είναι ψευδές αφού και τα 2 είναι 15.
Με άλλα λόγια το Α_Μ(Χ)=Χ είναι μια συνθήκη που ελέγχει κατά πόσο το Χ έχει ακέραια τιμή. Όταν λέω ακέραια τιμή δεν εννοώ πως είναι δηλωμένη η μεταβλητή (που μπορεί να είναι πραγματική). Εννοώ σαν μαθηματική αξία.  Ο αριθμός 15 (ή 15.0 αν προτιμάς) από μαθηματική άποψη είναι ακέραιος