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

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




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 4 Δημοσιεύσεις ] 
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Πρόσθεση κλασμάτων
ΔημοσίευσηΔημοσιεύτηκε: Τρί 18 Μάιος 2004 10:55 pm 
Χωρίς σύνδεση

Εγγραφή: Πέμ 22 Απρ 2004 11:16 am
Δημοσιεύσεις: 60
Τοποθεσία: Θεσσαλονίκη
Syntax: [ Download ] [ Hide ]
!=========================================================================================================
! Να γραφεί πρόγραμμα το οποίο να προσθέτει δύο κλάσματα.
! Το πρόγραμμα δέχεται τέσσερις ακεραίους αριθμούς τους παρανομαστές και τους αριθμητές των δύο κλασμάτων
! υπολογίζει και εκτυπώνει τον αριθμητή και τον παρανομαστή του αποτελέσματος:    α/β + γ/δ= θ/ζ.
! Ενώ το πρόβλημα αρχικά φαίνεται απλό, η υλοποίησή του είναι σχετικά πολύπλοκη.
! Αρχικά πρέπει να απλοποιηθούν τα κλάσματα, στη συνέχεια να γίνουν ομώνυμα,
! να προστεθούν οι αριθμητές και τέλος να απλοποιηθεί το αποτέλεσμα
! Οι λειτουργίες αυτές απαιτούν τον υπολογισμό του ΜΚΔ (για την απλοποίηση)
! και του ΕΚΠ για τη μετατροπή των κλασμάτων σε ομώνυμα.
! Να χρησιμοποιήσετε για τους παραπάνω υπολογισμούς συναρτήσεις.
! (Δραστηριότητα ΔΣ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
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

!-------------------------------------------

 


Οι παραπάνω συναρτήσεις ενώ λειτουργούν απρόσκοπτα εαν οι αριθμοί είναι φυσικοί, έχουν πρόβλημα στον υπολογισμό ΜΚΔ και ΕΚΠ έαν οι αριθμοί είναι αρνητικοί ακέραιοι (άπειρες επαναλήψεις).
Παρακάτω ακολουθούν οι συναρτήσεις οι οποίες υπολογίζουν ΜΚΔ και ΕΚΠ και για αρνητικούς αριθμούς.
Κατά τη γνώμη μου, έχει μεγάλη διδακτική αξία ορίσμενες φορές, να μην παρουσίαζεται από την πρώτη στιγμή στο μαθητή ένας καθολικός αλγόριθμος, ο οποίος λειτουργεί για κάθε περίπτωση, αλλά κάποιος που συχνά φαίνεται αρκέτα άρτιος και αποδεκτός. Το ζήτούμενο μετά από κάθε έλεγχο, είναι η γενίκευση του αλγοριθμού και η βέλτιστη λύση του προβλήματος.

Κάθε σχόλιο δεκτό ! :wink:

Syntax: [ Download ] [ Hide ]
!-------------------------------------------
ΣΥΝΑΡΤΗΣΗ ΜΚΔ(x,y) : ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:x,y,maxΚΔ,j
ΑΡΧΗ

  maxΚΔ <-- x
  ΑΝ Α_Τ(y)< Α_Τ(x) ΤΟΤΕ
    maxΚΔ <-- y
  ΤΕΛΟΣ_ΑΝ

  j <-- -1
  ΑΝ maxΚΔ<0 ΤΟΤΕ
    j <-- 1
  ΤΕΛΟΣ_ΑΝ

  ΟΣΟ ((x MOD maxΚΔ)<>0) Η((y MOD maxΚΔ)<>0) ΕΠΑΝΑΛΑΒΕ
    maxΚΔ <-- maxΚΔ+j
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΜΚΔ <-- maxΚΔ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

!-------------------------------------------
ΣΥΝΑΡΤΗΣΗ ΕΚΠ(x,y) : ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:x,y,i,j
ΑΡΧΗ

  i <-- 1
  j <-- 1

  ΑΝ x<0 ΤΟΤΕ
    j <-- -1
    i <-- -1
  ΤΕΛΟΣ_ΑΝ

  ΟΣΟ (i*x) MOD y<>0 ΕΠΑΝΑΛΑΒΕ
    i <-- i+j
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΕΚΠ <-- i*x
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

!-------------------------------------------    
 


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης: Πρόσθεση κλασμάτων
ΔημοσίευσηΔημοσιεύτηκε: Πέμ 27 Μάιος 2004 07:58 am 
Χωρίς σύνδεση

Εγγραφή: Κυρ 15 Φεβ 2004 09:10 pm
Δημοσιεύσεις: 18
Τοποθεσία: Ενιαίο Λύκειο Χιλιομοδίου Κορινθίας
Αγαπητέ kfrei,

Έχω δει και άλλες λύσεις της συγκεκριμένης άσκησης με τη δική σου προσέγγιση αλλά θεωρώ οτι πραγματοποιούνται περιττές ενέργειες...

Μπορούμε απλά να δημιουργήσουμε το τελικό κλάσμα (α/β + γ/δ = α*δ+γ*β/β*δ) και να να το απλοποιήσουμε μια και καλή με το ΜΚΔ

Δείτε και ΔΣ5 http://users.kor.sch.gr/ptsiotakis/aepp ... _tm_10.htm

Με εκτίμηση, Τσιωτάκης Παναγιώτης


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Πέμ 27 Μάιος 2004 01:47 pm 
Χωρίς σύνδεση

Εγγραφή: Πέμ 22 Απρ 2004 11:16 am
Δημοσιεύσεις: 60
Τοποθεσία: Θεσσαλονίκη
Αγαπητέ Παναγιώτη,
Ευχαριστώ καταρχήν για το σχόλιο σου. Δεν θα διαφωνήσω με την απόψη σου επί της ουσίας, μια και η λύση που προτείνεις είναι εξίζου σωστή, και φανερά αποφεύγει κάποιες περιττές πράξεις. Απλά ακολούθησα τις "υποδείξεις" της εκφώνησης του Τετραδίου του Μαθητή. Κατά τη γνώμη μου, "στείνεται" έτσι η εκφώνηση αυτή, για να αναδειχθεί ως ένα βαθμό η αξία της χρήσης της Συνάρτησης. Εκτελούνται περιττές πράξεις, για να να φανεί ίσως το πλέονέκτημα του υπολογισμού ΜΚΔ με τρια διαφορετικά ζευγάρια ακεραίων, καλώντας τρεις φορές τη Συνάρτηση υπολογισμού ΜΚΔ. Δυστυχώς το εύρος των ασκήσεων που συναντά ο μαθητής μέσα στην ΑΕΠΠ, δεν του επιτρέπει να "αισθανθεί" την αξία των υποπρογραμμάτων και γι'αυτόν είναι μάλον κάτι περιττό, που απλά πρέπει να το μάθει. Επομένως αν κανείς καλέσει μόνο μια φορά τη συνάρτηση ΜΚΔ, πέφτει στην παγίδα της απλοποίησης του αλγοριθμού, αλλά ταυτόχρονα και στην ερώτηση: "Μα γιατί να χρησιμοποιήσουμε υποπρόγραμμα ?".
Κοίταξα εν συντομία το link που παρεπέμπεις, και οποσδήποτε φαίνεται ότι έχεις κάνει μια ΠΟΛΥ ΚΑΛΗ προσπάθεια. Ένα σχόλιο μονο που αναφέρεται στο επόμενο πρόγραμμα σου :
Syntax: [ Download ] [ Hide ]
ΠΡΟΓΡΑΜΜΑ ΔΣ5_10
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ : αριθ_1, παρον_1, αριθ_2, παρον_2, αριθ_τελ, παρον_τελ, ΜΚΔ
ΑΡΧΗ
  ΓΡΑΨΕ 'Δώστε το 1ο κλάσμα'
  ΔΙΑΒΑΣΕ αριθ_1, παρον_1
  ΓΡΑΨΕ 'Δώστε το 2ο κλάσμα'
  ΔΙΑΒΑΣΕ αριθ_2, παρον_2
  αριθ_τελ <-- αριθ_1 * παρον_2 + αριθ_2 * παρον_1
  παρον_τελ <-- παρον_1 * παρον_2
  ΜΚΔ <-- Υπολόγισε_ΜΚΔ (αριθ_τελ, παρον_τελ)    !  Συνάρτηση άσκησης 10.2.7
  !  απλοποίηση κλάσματος
  αριθ_τελ <-- αριθ_τελ / ΜΚΔ
  παρον_τελ <-- παρον_τελ / ΜΚΔ
  ΓΡΑΨΕ 'Το τελικό κλάσμα είναι : ', αριθ_τελ, ' / ', παρον_τελ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 

Θα μου επιτρέψεις τις αλλαγές στον τελεστή '<-' και στα εισαγωγικά για να τρέχει και στη Γλωσσομάθεια. Και πιο συγκεκριμένα αναφέρομαι στο επόμενο τμήμα
Syntax: [ Download ] [ Hide ]
  αριθ_τελ <-- αριθ_τελ / ΜΚΔ
  παρον_τελ <-- παρον_τελ / ΜΚΔ
 

Είναι μια παγίδα, που πέφτουμε συχνά χρησιμοποιώντας την πράξη της διαίρεσης "/" και της δύναμης "^", όταν αναθέτουμε το αποτέλεσμα της σε ακέραια μεταβλητή. Κατά την ταπεινή μου άποψη πρέπει να αντικατασταθεί με την πράξη "DIV". Το σχολικό βιβλίο (όπως και τα περισσότερα βοήθηματα) δεν φαίνεται να δίνουν σημασία στο γεγονός αυτό, αλλά κατά την άποψη μου έχει μεγάλη διδακτική αξία, η παραπάνω παρατήρηση. Το σχολικό βιβλίο άλλωστε πέφτει και αυτό στην ίδια παγίδα στο Παράδειγμα 2, σελ 188, 189 με την παρακάτω εντολή:
Syntax: [ Download ] [ Hide ]
Διαμεσος <-- (Χ[Ν/2] +Χ[Ν/2 +1]) /2
 

Ειναι φανερό ότι ο δείκτης ενός πίνακα, πρέπει να είναι αναγκαστικά ακέραιος ενώ η πόσότητα Ν/2 δεν έιναι ακέραια. Κι εδώ κατά τη γνώμη θα πρέπει να αντικατασταθεί η πράξη της διαίρεσης "/" με την πράξη "DIV".

Με εκτίμηση,
Φρειδερίκος Κώστας

kfrei


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης: Πρόσθεση κλασμάτων
ΔημοσίευσηΔημοσιεύτηκε: Παρ 28 Μάιος 2004 10:15 am 
Χωρίς σύνδεση

Εγγραφή: Κυρ 15 Φεβ 2004 09:10 pm
Δημοσιεύσεις: 18
Τοποθεσία: Ενιαίο Λύκειο Χιλιομοδίου Κορινθίας
Αγαπητέ Κώστα,

Και με τη λύση που πρότεινα έχει αξία το υποπρόγραμμα καθώς θέλουμε το μέγιστο κοινό διαιρέτη, πάντως έχεις δίκιο οτι με τον άλλο τρόπο αναδεικνύεται περισσότερο η χρήση υποπρογραμμάτων

Για την ανάθεση σε ακέραια μεταβλητή τού αποτελέσματος μιας πράξης /,^ κτλ που δεν ασχολείται το σχολικό βιβλίο και τα βοηθήματα πιστεύω οτι ορθώς το πράττουν και δεν έχεις δίκιο...

Τα παιδιά δεν είναι προγραμματιστές αλλά στόχος είναι να αναπτύσσουν αλγοριθμικό τρόπο σκέψης. Δεν ασχολείται κανείς με το πλήθος bytes που καταλαμβάνει ο integer και ο double. Αν το μάθημα αποκτήσει ΕΠΙΣΗΜΟ προγραμματιστικό εργαλείο, παραμείνει στις εξετάσεις και ωριμάσει περισσότερο θα μπορέσουμε να αναλύσουμε περισσότερο κάποια θέματα, αυτή είναι η προσωπική μου γνώμη

Θα μείνει όμως το μάθημα στα πανελλαδικά εξεταζόμενα ?

Με εκτίμηση. Παναγιώτης


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

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


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

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


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

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