Τώρα είναι Πέμ 28 Μαρ 2024 11:19 pm

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 4 Δημοσιεύσεις ] 
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Ο αριθμός του Kaprekar
ΔημοσίευσηΔημοσιεύτηκε: Τετ 14 Απρ 2004 06:41 pm 
Χωρίς σύνδεση

Εγγραφή: Κυρ 30 Νοέμ 2003 07:20 pm
Δημοσιεύσεις: 5
Τοποθεσία: Αθήνα - Κηφισιά
Syntax: [ Download ] [ Hide ]
!
! Πρόβλημα: Ο αριθμός του 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
 

_________________
Δημήτρης Παπακωνσταντίνου


Τελευταία επεξεργασία από Dimitris και Πέμ 29 Απρ 2004 01:58 pm, έχει επεξεργασθεί 4 φορά/ες συνολικά

Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Τρί 11 Μάιος 2004 02:29 am 
Χωρίς σύνδεση
Διαχειριστής

Εγγραφή: Παρ 28 Φεβ 2003 06:10 pm
Δημοσιεύσεις: 84
:!: Υποδειγματική εκφώνηση/τεκμηρίωση.

Μια αλλαγή για ακόμα απλούστερο κώδικα θα μπορούσε να είναι η παρακάτω...

Το τμήμα:
Syntax: [ Download ] [ Hide ]
! Έλεγχος για όμοια ψηφία
    Flag <-- Ψευδής
    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
      ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ i-1
        ΑΝ    Ψηφίο[i]<> Ψηφίο[j] ΤΟΤΕ
          ! Εαν έστω ένα ψηφίο είναι διαφορετικό από τα άλλα ...
          Flag <-- Αληθής
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΜΕΧΡΙΣ_ΟΤΟΥ (Αριθμός<9999) ΚΑΙ (Αριθμός>0) ΚΑΙ Flag = Αληθής

 

Να αντικατασταθεί από το:
Syntax: [ Download ] [ Hide ]
ΜΕΧΡΙΣ_ΟΤΟΥ (Αριθμός<9999) ΚΑΙ (Αριθμός>0) ΚΑΙ ΟΧΙ ((Ψηφίο[1]=Ψηφίο[2]) ΚΑΙ (Ψηφίο[2]=Ψηφίο[3]) ΚΑΙ (Ψηφίο[3]=Ψηφίο[4]))

 


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Σάβ 13 Νοέμ 2004 09:07 pm 
Χωρίς σύνδεση

Εγγραφή: Παρ 05 Δεκ 2003 01:21 pm
Δημοσιεύσεις: 1
Τοποθεσία: Χανιά
Μια αλλαγή που μπορεί να γίνει για απλούστευση του κώδικα κατά την είσοδο του αρχικού δεδομένου:

Syntax: [ Download ] [ Hide ]
ΓΡΑΨΕ 'Δώσε έναν αριθμό (1-9998) που να μην έχει και τα τέσσερα ψηφία ίδια'
ΔΙΑΒΑΣΕ αριθμός
ΟΣΟ ((αριθμός < 1) ή (αριθμός > 9998)) ή (αριθμός MOD 1111 = 0) ΕΠΑΝΑΛΑΒΕ
   ΓΡΑΨΕ 'Πρόσεξε, έδωσες λάθος αριθμό, ξαναπροσπάθησε...'
   ΔΙΑΒΑΣΕ αριθμός
ΤΕΛΟ΅_ΕΠΑΝΑΛΗΨΗΣ


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης: Re: Ο αριθμός του Kaprekar
ΔημοσίευσηΔημοσιεύτηκε: Παρ 20 Σεπ 2019 12:05 am 
Χωρίς σύνδεση

Εγγραφή: Τρί 17 Σεπ 2019 01:07 am
Δημοσιεύσεις: 3
Μικρή λεπτομέρεια... το "= Αληθής" δεν το έχω να χρειάζεται. :lol: :lol:


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
Τελευταίες δημοσιεύσεις:  Ταξινόμηση ανά  
Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 4 Δημοσιεύσεις ] 

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 3 επισκέπτες


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επισυνάπτετε αρχεία σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
cron
Προβολές: