!=========================================================================================================
! Να γραφεί πρόγραμμα το οποίο να προσθέτει δύο κλάσματα.
! Το πρόγραμμα δέχεται τέσσερις ακεραίους αριθμούς τους παρανομαστές και τους αριθμητές των δύο κλασμάτων
! υπολογίζει και εκτυπώνει τον αριθμητή και τον παρανομαστή του αποτελέσματος: α/β + γ/δ= θ/ζ.
! Ενώ το πρόβλημα αρχικά φαίνεται απλό, η υλοποίησή του είναι σχετικά πολύπλοκη.
! Αρχικά πρέπει να απλοποιηθούν τα κλάσματα, στη συνέχεια να γίνουν ομώνυμα,
! να προστεθούν οι αριθμητές και τέλος να απλοποιηθεί το αποτέλεσμα
! Οι λειτουργίες αυτές απαιτούν τον υπολογισμό του ΜΚΔ (για την απλοποίηση)
! και του ΕΚΠ για τη μετατροπή των κλασμάτων σε ομώνυμα.
! Να χρησιμοποιήσετε για τους παραπάνω υπολογισμούς συναρτήσεις.
! (Δραστηριότητα ΔΣ5, από το σχολικό ΤΕΤΡΑΔΙΟ του ΜΑΘΗΤΗ, σελιδα 110, κεφ. 10, Υποπρογράμματα)
!=========================================================================================================
ΠΡΟΓΡΑΜΜΑ Πρόσθεση_Κλασμάτων_ΔΣ5_ΤΜΣ110
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:α,β,γ,δ, ΜΚΔ_αβ, ΜΚΔ_γδ, ekp_βδ, θ, ζ, ΜΚΔ_εζ
ΑΡΧΗ
ΓΡΑΨΕ 'Δώσε ακέραιο αριθμητή 1ου κλασμάτος'
ΔΙΑΒΑΣΕ α
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε ακέραιο παρονομαστή 1ου κλασμάτος'
ΔΙΑΒΑΣΕ β
ΜΕΧΡΙΣ_ΟΤΟΥ β<>0
ΓΡΑΨΕ 'Δώσε ακέραιο αριθμητή 2ου κλασμάτος'
ΔΙΑΒΑΣΕ γ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε ακέραιο παρονομαστή 2ου κλασμάτος'
ΔΙΑΒΑΣΕ δ
ΜΕΧΡΙΣ_ΟΤΟΥ δ<>0
!--- Απλοποίηση κλασμάτων -----
ΓΡΑΨΕ α,'/',β,' + ',γ,'/',δ,' = '
ΜΚΔ_αβ <-- ΜΚΔ(α,β)
α <-- α DIV ΜΚΔ_αβ
β <-- β DIV ΜΚΔ_αβ
ΜΚΔ_γδ <-- ΜΚΔ(γ,δ)
γ <-- γ DIV ΜΚΔ_γδ
δ <-- δ DIV ΜΚΔ_γδ
ΓΡΑΨΕ α,'/',β,' + ',γ,'/',δ,' = '
!--- Μετατροπή κλασμάτων σε ομώνυμα -----
ekp_βδ <-- ΕΚΠ (β,δ)
α <-- α * ekp_βδ DIV β
β <-- ekp_βδ
γ <-- γ * ekp_βδ DIV δ
δ <-- ekp_βδ
ζ <-- ekp_βδ
!--- Πρόσθεση αριθμητών κλασμάτων -----
θ <-- α+γ
ΓΡΑΨΕ_ α,'/',β,' + ',γ,'/',δ,' = ',θ,'/',ζ
!--- Απλοποίηση απότελέσματος -----
ΜΚΔ_εζ <-- ΜΚΔ(θ,ζ)
θ <-- θ DIV ΜΚΔ_εζ
ζ <-- ζ DIV ΜΚΔ_εζ
ΓΡΑΨΕ ' = ',θ,'/',ζ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Πρόσθεση_Κλασμάτων_ΔΣ5_ΤΜΣ110
!-------------------------------------------
ΣΥΝΑΡΤΗΣΗ ΜΚΔ(x,y) : ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:x,y,maxΚΔ
ΑΡΧΗ
maxΚΔ <-- x
ΑΝ y<x ΤΟΤΕ
maxΚΔ <-- y
ΤΕΛΟΣ_ΑΝ
ΟΣΟ ((x MOD maxΚΔ)<>0) Η((y MOD maxΚΔ)<>0) ΕΠΑΝΑΛΑΒΕ
maxΚΔ <-- maxΚΔ-1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! ο αλγόριθμος εύρευσης ΜΚΔ του Ευκλείδη ειναι φυσικά βέλτιστος, αλλά διδακτικά μάλον απρόσιτος.
ΜΚΔ <-- maxΚΔ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
!-------------------------------------------
ΣΥΝΑΡΤΗΣΗ ΕΚΠ(x,y) : ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:x,y,i
ΑΡΧΗ
! εάν προηγουμένως γίνει έλεγχος ώστε o x να είναι ο μέγιστος των x,y
! και ο y o ελάχιστος, το επόμενο τμήμα θα πραγματοποιεί λιγότερες επαναλήψεις !
i <-- 1
ΟΣΟ (i*x) MOD y<>0 ΕΠΑΝΑΛΑΒΕ
i <-- i+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΚΠ <-- i*x
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
!-------------------------------------------