!
! Πρόβλημα: Ο αριθμός του D.R. Kaprekar (Ινδός ερασιτέχνης μαθηματικός)
!
! Δίδεται ένας αριθμός μικρότερος του 9999, ο οποίος δεν έχει και τα τέσσερα ψηφία του ίσα.
! Εκτελούμε την παρακάτω διαδικασία:
! 1. Διατάσσουμε τα ψηφία του κατά φθίνουσα σειρά. Έστω Α ο αριθμός που προκύπτει.
! 2. Διατάσσουμε τα ψηφία του κατά αύξουσα σειρά. Έστω Β ο αριθμός που προκύπτει.
! 3. Εκτελούμε την αφαίρεση Α-Β.
! 4. Έστω C το αποτέλεσμα
! 5. Επαναλαμβάνουμε την ίδια διαδικασία με τον C, μέχρι το αποτέλεσμα να είναι: 6174
! Να γραφεί πρόγραμμα το οποίο επαληθεύει την παραπάνω διαδικασία και
! εμφανίζει τον αριθμό των επαναλήψεων που απαιτούνται για την ολοκλήρωσή της.
! (Παρατήρηση:Αν ο αριθμός δεν είναι τετραψήφιος, προσθέτουμε τον κατάλληλο αριθμό μηδενικών)
!
!
! Παράδειγμα 1
!
! Έστω ο αριθμός 319
!
! 9310 9711 8532
! - 0139 - 1179 - 2358
! ----- ----- -----
! 9171 8532 6174
!
!
! Παράδειγμα 2
!
! Έστω ο αριθμός 1983
!
! 9831 8442 9954 5553 9981 8820 8532
! - 1389 - 2448 - 4599 - 3555 - 1899 - 0288 - 2358
! ----- ----- ----- ----- ----- ----- -----
! 8442 5994 5355 1998 8082 8532 6174
!
!
! Οδηγίες:
!
! Κατά την είσοδο του αριθμού, να γίνει έλεγχος αν:
! a) Ο αριθμός είναι μεγαλύτερος του 9998
! b) Ο αριθμός έχει και τα τέσσερα ψηφία του ίσα
! Απομονώστε τα ψηφία του αριθμού με χρήση των συναρτήσεων MOD και DIV
! Εκχωρήστε τα ψηφία που απομονώσατε σε πίνακα Π[4]
! Ταξινομήστε τα ψηφία κατά φθίνουσα και αύξουσα σειρά. (Χρήση υποπρογράμματος;)
! Μετατρέψτε σε αριθμούς (Ψ1*1000+Ψ2*100+Ψ3*10+Ψ4)
! Αφαιρέστε
! Τοποθετήστε ένα μετρητή
! Επαναλάβατε μέχρι να βρείτε 6174
ΠΡΟΓΡΑΜΜΑ Kaprekar
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Αριθμός, Ψηφίο[4], Αριθμός1, Αριθμός2, Αριθμός3, Μετρητής, i, j, Temp
ΛΟΓΙΚΕΣ: Flag
ΑΡΧΗ
! Έλεγχος εισόδου
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε έναν αριθμό από το 1 μέχρι και το 9998'
ΓΡΑΨΕ 'Πρέπει να μην έχει όλα τα ψηφία του ίδια'
ΔΙΑΒΑΣΕ Αριθμός
Temp <-- Αριθμός
! Απομόνωση ψηφίων
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
Ψηφίο[i] <-- Temp MOD 10
Temp <-- Temp DIV 10
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Έλεγχος για όμοια ψηφία
Flag <-- Ψευδής
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ i-1
ΑΝ Ψηφίο[i]<> Ψηφίο[j] ΤΟΤΕ
! Εαν έστω ένα ψηφίο είναι διαφορετικό από τα άλλα ...
Flag <-- Αληθής
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΧΡΙΣ_ΟΤΟΥ (Αριθμός<9999) ΚΑΙ (Αριθμός>0) ΚΑΙ Flag = Αληθής
Μετρητής <-- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
Μετρητής <-- Μετρητής + 1
! Απομόνωση ψηφίων
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
Ψηφίο[i] <-- Αριθμός MOD 10
Αριθμός <-- Αριθμός DIV 10
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ταξινόμηση ψηφίων
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 4
ΓΙΑ j ΑΠΟ 4 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ Ψηφίο[j-1] > Ψηφίο[j] ΤΟΤΕ
Temp <-- Ψηφίο[j-1]
Ψηφίο[j-1] <-- Ψηφίο[j]
Ψηφίο[j] <-- Temp
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Μετατροπή σε αριθμό
Αριθμός1 <-- Ψηφίο[4]*1000 + Ψηφίο[3]*100 + Ψηφίο[2]*10 + Ψηφίο[1]
Αριθμός2 <-- Ψηφίο[1]*1000 + Ψηφίο[2]*100 + Ψηφίο[3]*10 + Ψηφίο[4]
Αριθμός3 <-- Αριθμός1 - Αριθμός2
Αριθμός <-- Αριθμός3
ΓΡΑΨΕ 'Πέρασμα: ', Μετρητής
ΓΡΑΨΕ Αριθμός1,' ', Αριθμός2,' ', Αριθμός3
ΓΡΑΨΕ '-----------------------------'
ΜΕΧΡΙΣ_ΟΤΟΥ Αριθμός3=6174
ΓΡΑΨΕ
ΓΡΑΨΕ 'Συνολικά ',Μετρητής,' επαναλήψεις'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Kaprekar