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

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




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: τέσσερα τετράγωνα - βοήθεια;
ΔημοσίευσηΔημοσιεύτηκε: Τετ 03 Νοέμ 2004 02:12 am 
Χωρίς σύνδεση

Εγγραφή: Τετ 03 Νοέμ 2004 01:34 am
Δημοσιεύσεις: 1
Syntax: [ Download ] [ Hide ]
! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
! Σύμφωνα με τη Θεωρία Αριθμών, κάθε θετικός ακέραιος αριθμός
! είναι δυνατόν να αναλυθεί σε άθροισμα τεσσάρων τετραγώνων. Ο
! παρακάτω αλγόριθμος βρίσκει αυτούς τους αριθμούς.
!
! Η βασική στρατηγική που χρησιμοποίησα την πρώτη φορά που
! προσπάθησα να λύσω το πρόβλημα, ήταν αυτή της διαδοχικής
! αφαίρεσης των μεγιστων δυνατών τετραγωνων, π.χ. το μεγιστο
! τετράγωνο του 19 είναι το 16=4^2, αφαιρούμε το 16 από το 19
! και επαναλαμβάνουμε την διαδικασία. Τελικα, με αυτή τη μέθοδο
! προκύπτει: 19 = 4^2 + 1^2 + 1^2 + 1^2. Όμως αυτή η μέθοδος
! δεν λειτουργεί για το 23, για το οποίο προκύπτει η εξής τετράδα:
! 4^2 + 2^2 + 1^2 + 1^2 = 22. Τί γίνεται σε αυτήν την περίπτωση;
! Με δοκιμές ανακάλυψα πως κάποιος από τους μεγαλύτερους
! αριθμούς της τετράδας πρέπει να μειωθει, ούτως ώστε να μπορεί
! να "χωρέσει" κάποιο άλλο τετράγωνο μέσα στο 23 και να γίνει το
! άθροισμα ακριβώς 23. Τελικά προέκυψε ένα μεγάλο πρόγραμμα με
! πολλούς ελέγχους, γι αυτό σας το στέλνω, αν μπορείτε να το
! απλοποιήσετε...
! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

ΠΡΟΓΡΑΜΜΑ τέσσερα_τετράγωνα
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: n, a, b, c, d, e
  ΧΑΡΑΚΤΗΡΕΣ: decide
ΑΡΧΗ
  decide <-- 'y'
  ΟΣΟ (decide = 'y') ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ 'δώσε θετικό ακέραιο n'
    ΔΙΑΒΑΣΕ n
    ΟΣΟ (n > Α_Μ(n)) ή (n < 0) ΕΠΑΝΑΛΑΒΕ
      ΓΡΑΨΕ 'λανθασμένη εισαγωγή δεδομένων'
      ΓΡΑΨΕ 'δώσε θετικό ακέραιο n'
      ΔΙΑΒΑΣΕ n
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'ακολουθεί η ανάλυση του αριθμού σε τέσσερα τετράγωνα'
    a <-- Α_Μ(Τ_Ρ(n))
    e <-- n - a*a
    b <-- Α_Μ(Τ_Ρ(e))
    e <-- e - b*b
    c <-- Α_Μ(Τ_Ρ(e))
    e <-- e - c*c
    d <-- Α_Μ(Τ_Ρ(e))
    ΑΝ (a*a + b*b + c*c + d*d < n) ΤΟΤΕ
      ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
        c <-- c - 1
        e <-- n - a*a - b*b - c*c
        d <-- Α_Μ(Τ_Ρ(e))
      ΜΕΧΡΙΣ_ΟΤΟΥ (a*a + b*b + c*c + d*d = n) ή (c = 0)
      ΑΝ (a*a + b*b + c*c + d*d < n) ΤΟΤΕ
        ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
          b <-- b - 1
          e <-- n - a*a - b*b
          c <-- Α_Μ(Τ_Ρ(e))
          e <-- e - c*c
          d <-- Α_Μ(Τ_Ρ(e))
        ΜΕΧΡΙΣ_ΟΤΟΥ (a*a + b*b + c*c + d*d = n) ή (b = 0)
        ΑΝ (a*a + b*b + c*c + d*d < n) ΤΟΤΕ
          ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
            a <-- a - 1
            e <-- n - a*a
            b <-- Α_Μ(Τ_Ρ(e))
            e <-- e - b*b
            c <-- Α_Μ(Τ_Ρ(e))
            e <-- e - c*c
            d <-- Α_Μ(Τ_Ρ(e))
          ΜΕΧΡΙΣ_ΟΤΟΥ (a*a + b*b + c*c + d*d = n)
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
    ΓΡΑΨΕ n, ' = ', a, '^2 + ', b, '^2 + ', c, '^2 + ', d, '^2'
    ΓΡΑΨΕ 'για να ξαναδοκιμάσετε, πατήστε το "y"'
    ΔΙΑΒΑΣΕ decide
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ τέσσερα_τετράγωνα
 

_________________
There are 10 kinds of people; those who understand binary code and those who don't.


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

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


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

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


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

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