athoos ,
Το πρόγραμμά σου είναι αρκετά καλό. Όμως έχει ένα βασικό μειονέκτημα : Δουλεύει ΜΟΝΟ αν του δώσεις περιμέτρους που αντιστοιχούν σε πυθαγόρειες τριάδες ακεραίων. Για παράδειγμα για περίμετρο =12 θα δώσει [3,4,5]. Όμως για περίμετρο =13 δεν θα δώσει τίποτε γιατί ΔΕΝ υπάρχει τέτοια τριάδα ακεραίων. Επομένως θέλει και μια δόση...τύχης όταν το τρέχεις
Παρακάτω δίνω ένα πρόγραμμα, που βρίσκει ΜΟΝΟ τις πρωτόγονες πυθαγόρειες τριάδες που έχουν υποτείνουσα μέχρι ένα (συγκεκριμένο) όριο. Βιβλιογραφία :
http://eprints.utas.edu.au/144/1/triads.pdfΟι τριάδες είναι δύο ειδών: Πρωτόγονες και Μη-Πρωτόγονες. Πρωτόγονες είναι αυτές που οι αριθμοί είναι πρώτοι μεταξύ τους. Δηλαδή δεν έχουν κανένα κοινό διαιρέτη, με άλλα λόγια: ΜΚΔ (α,β,γ,)=1
Οι υπόλοιπες είναι απλώς πολλαπλάσια των πρωτόγονων. π.χ: [3,4,5] * 2 = [6,8,10]. Άρα μας ενδιαφέρουν ΜΟΝΟ οι πρωτόγονες πυθαγόρειες τριάδες.
ΠΡΟΓΡΑΜΜΑ ΠΡΩΤΟΓΟΝΕΣ_ΠΥΘΑΓΟΡΕΙΕΣ_ΤΡΙΑΔΕΣ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Α,Β,Λ,ΜΑΧ,Δ
ΠΡΑΓΜΑΤΙΚΕΣ: Γ
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Θέστε όριο υποτείνουσας (όχι μικρότερο του 5)'
ΔΙΑΒΑΣΕ Λ
ΑΝ Λ<5 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος δεδομένα προσπαθήστε ξανά'
ΓΡΑΨΕ ''
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ Λ>=5
ΓΡΑΨΕ ''
ΜΑΧ <-- Α_Μ(Τ_Ρ(Λ-1))
Δ <-- 0
ΓΙΑ Α ΑΠΟ 2 ΜΕΧΡΙ ΜΑΧ
ΓΙΑ Β ΑΠΟ Α-1 ΜΕΧΡΙ 1 ΜΕ ΒΗΜΑ -2
ΑΝ ΜΚΔ(Α,Β)=1 ΤΟΤΕ
Γ <-- Α^2+Β^2
ΑΝ Γ<=Λ ΤΟΤΕ
Δ <-- Δ+1
ΓΡΑΨΕ Α^2-Β^2,2*Α*Β,Γ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ''
ΓΡΑΨΕ 'Πλήθος:',Δ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ ΜΚΔ(Α,Β): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α,Β,ΜΑΧ,ΜΙΝ,Ι
ΑΡΧΗ
ΑΝ Α>=Β ΤΟΤΕ
ΜΑΧ <-- Α
ΜΙΝ <-- Β
ΑΛΛΙΩΣ
ΜΑΧ <-- Β
ΜΙΝ <-- Α
ΤΕΛΟΣ_ΑΝ
ΜΚΔ <-- 1
ΑΝ (ΜΑΧ MOD ΜΙΝ)=0 ΤΟΤΕ
ΜΚΔ <-- ΜΙΝ
ΑΛΛΙΩΣ
ΜΙΝ <-- Α_Μ(Τ_Ρ(ΜΙΝ))
ΓΙΑ Ι ΑΠΟ 3 ΜΕΧΡΙ ΜΙΝ ΜΕ ΒΗΜΑ 2
ΑΝ (ΜΑΧ MOD Ι)=0 ΤΟΤΕ
ΜΚΔ <-- Ι
Ι <-- ΜΙΝ+1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ