Τώρα είναι Πέμ 26 Δεκ 2024 10:04 pm

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




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 5 Δημοσιεύσεις ] 
Συγγραφέας Μήνυμα
ΔημοσίευσηΔημοσιεύτηκε: Δευτ 10 Μαρ 2003 10:43 pm 
Χωρίς σύνδεση
Διαχειριστής

Εγγραφή: Παρ 28 Φεβ 2003 06:10 pm
Δημοσιεύσεις: 84
Syntax: [ Download ] [ Hide ]
! ================================================
! Να γίνει πρόγραμμα που να ζητάει 3 πραγματικούς
! αριθμούς Α, Β και Γ και στη συνέχεια να λύνει
! την εξίσωση Αx^2+Βx+Γ=0.
! ================================================


ΠΡΟΓΡΑΜΜΑ Επίλυση_δευτεροβάθμιας_εξίσωσης

ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Α, Β, Γ, Δ

ΑΡΧΗ

  ΓΡΑΨΕ 'Δώσε το συντελεστή Α:'
  ΔΙΑΒΑΣΕ Α
  ΓΡΑΨΕ 'Δώσε το συντελεστή Β:'
  ΔΙΑΒΑΣΕ Β
  ΓΡΑΨΕ 'Δώσε το συντελεστή Γ:'
  ΔΙΑΒΑΣΕ Γ

  ΑΝ Α<>0 ΤΟΤΕ

    Δ <-- Β^2-4*Α*Γ
    ΑΝ Δ<0 ΤΟΤΕ
      ΓΡΑΨΕ 'Η εξίσωση είναι ΑΔΥΝΑΤΗ'
    ΑΛΛΙΩΣ_ΑΝ Δ>0 ΤΟΤΕ
      ΓΡΑΨΕ 'Η εξίσωση έχει ΔΥΟ ΡΙΖΕΣ:'
      ΓΡΑΨΕ 'Ρ1 = ', (-Β+Τ_Ρ(Δ))/(2*Α)
      ΓΡΑΨΕ 'Ρ2 = ', (-Β-Τ_Ρ(Δ))/(2*Α)
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ 'Η εξίσωση έχει ΜΙΑ ΔΙΠΛΗ ΡΙΖΑ:'
      ΓΡΑΨΕ 'Ρ = ', -Β/(2*Α)
    ΤΕΛΟΣ_ΑΝ

  ΑΛΛΙΩΣ

    ΑΝ Β<>0 ΤΟΤΕ
      ΓΡΑΨΕ 'Η εξίσωση έχει ΜΙΑ ΡΙΖΑ:'
      ΓΡΑΨΕ 'Ρ = ', -Γ/Β
    ΑΛΛΙΩΣ
      ΑΝ Γ<>0 ΤΟΤΕ
        ΓΡΑΨΕ 'Η εξίσωση είναι ΑΔΥΝΑΤΗ'
      ΑΛΛΙΩΣ
        ΓΡΑΨΕ 'Η εξίσωση είναι ΑΟΡΙΣΤΗ'
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ

  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Επίλυση_δευτεροβάθμιας_εξίσωσης

 


Τελευταία επεξεργασία από SpiN και Σάβ 03 Απρ 2004 11:41 pm, έχει επεξεργασθεί 1 φορά/ες συνολικά

Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Δευτ 17 Νοέμ 2003 03:45 pm 
Χωρίς σύνδεση

Εγγραφή: Δευτ 17 Νοέμ 2003 03:26 pm
Δημοσιεύσεις: 2
Τοποθεσία: Θεσσαλονίκη
Αγαπητέ, Spin
Έχω μια ένσταση όσον αφορά στο συγκεκριμένο πρόγραμμα. Από τη μια ο τίτλος της άσκησης είναι «Επίλυση δευτεροβάθμιας εξίσωσης» και από την άλλη στην εκφώνηση ζητάται επίλυση εξίσωσης της Αχ^2+Βχ+Γ.
Δευτεροβάθμια εξίσωση ή αλλιώς πολυωνυμική δευτέρου βαθμού ονομάζεται εξίσωση Αχ^2+Βχ+Γ, με Α<>0 εξ’ ορισμού. Σε διαφορετική περίπτωση θα μιλούσαμε για εξίσωση πρώτου ή μηδενικού βαθμού. Δεν νοείται λοιπόν δευτεροβάθμια εξίσωση πρώτου ή μηδενικού βαθμού…
Έτσι άλλος αλγόριθμος επιλύει εξίσωση δευτέρου βαθμού και άλλος την εξίσωση Αχ^2+Βχ+Γ γιατί πολύ απλά η εξίσωση αυτή δεν είναι απαραίτητα δευτεροβάθμια.
Πιστεύω πως για την παρούσα εκφώνηση ο αλγόριθμος που γράψατε είναι ο κατάλληλος αλλά ο τίτλος της ασκήσεως δεν είναι ορθός. :wink:
Τέλος, θα έπρεπε, για την περίπτωση Δ<0, στο μήνυμα προς το χρήστη να αναφέρετε ότι η εξίσωση δεν έχει ρίζες στο R. Γιατί μια τέτοια εξίσωση είναι αδύνατη μόνο στο R αλλά έχει δύο ρίζες στο C. Η δική μου πρόταση για την ολοκληρωμένη επίλυση δευτεροβάθμιας είναι παρακάτω. Ίσως είναι λίγο τραβηγμένη για τα στενά πλαίσια των πανελλαδικών εξετάσεων και ξεφεύγει από το σκοπό για τον οποίο γράφτηκε η άσκηση αλλά νομίζω πως θα ενδιέφερε κάποιους που επιθυμούν να ασχοληθούν λίγο παραπάνω και για αυτό το λόγο το δημοσιεύω. 8)

Syntax: [ Download ] [ Hide ]
! Να γίνει πρόγραμμα που να ζητάει 3 πραγματικούς
! αριθμούς Α, Β και Γ και στη συνέχεια να λύνει
! δευτεροβάθμια εξίσωση.
! ================================================
ΠΡΟΓΡΑΜΜΑ ΕΠΙΛΥΣΗ_ΔΕΥΤΕΡΟΒΑΘΜΙΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Α, Β, Γ, Δ, ρ1, ρ2, Χ, Υ1, Υ2
ΑΡΧΗ
  ΓΡΑΨΕ 'ΠΛΗΚΤΡΟΛΟΓΗΣΕ ΤΑ Α, Β ΚΑΙ Γ ΤΗΣ ΔΕΥΤΕΡΟΒΑΘΜΙΑΣ ΕΞΙΣΩΣΗΣ (ΜΕ Α<>0 ΥΠΟΧΡΕΩΤΙΚΑ)'
  ΔΙΑΒΑΣΕ Α, Β, Γ
  Δ <-- Β^2-4*Α*Γ
  ΑΝ (Δ>0) ΤΟΤΕ
    ρ1 <-- (-Β+Τ_Ρ(Δ))/(2*Α)
    ρ2 <-- (-Β-Τ_Ρ(Δ))/(2*Α)
    ΓΡΑΨΕ 'ΟΙ ΡΙΖΕΣ ΤΗΣ ΔΟΘΗΣΑΣ ΕΞΙΣΩΣΗΣ ΕΙΝΑΙ: ', ρ1, ρ2
  ΑΛΛΙΩΣ_ΑΝ (Δ=0) ΤΟΤΕ
    ρ1 <-- ((-Β)/(2*Α))
    ΓΡΑΨΕ 'Η ΜΙΑ ΔΙΠΛΗ ΡΙΖΑ ΑΥΤΗΣ ΤΗΣ ΕΞΙΣΩΣΗΣ ΕΙΝΑΙ: ', ρ1
  ΑΛΛΙΩΣ
    Χ <-- (-Β)/(2*Α)
    Υ1 <-- (Τ_Ρ(Α_Τ(Δ)))/(2*Α)
    Υ2 <-- (-(Τ_Ρ(Α_Τ(Δ)))/(2*Α))
    ΓΡΑΨΕ 'ΑΥΤΗ Η ΕΞΙΣΩΣΗ ΕΧΕΙ ΔΥΟ ΣΥΖΥΓΕΙΣ ΜΙΓΑΔΙΚΕΣ ΡΙΖΕΣ, ΟΙ ΟΠΟΙΕΣ ΕΙΝΑΙ ΟΙ ΕΞΕΙΣ: '
    ΓΡΑΨΕ 'Ζ1 ΜΕ RΕ(Ζ1)=', Χ, 'ΚΑΙ ΙΜ(Ζ1)=', Υ1
    ΓΡΑΨΕ 'Ζ2 ΜΕ RE(Z2)=', Χ, 'ΚΑΙ ΙΜ(Ζ2)=', Υ2
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Δευτ 17 Νοέμ 2003 04:32 pm 
Χωρίς σύνδεση
Διαχειριστής

Εγγραφή: Παρ 28 Φεβ 2003 06:10 pm
Δημοσιεύσεις: 84
Φίλε D.K.Morpheus έχεις απόλυτο δίκιο. Ο λόγος όμως που δεν έμπλεξα στο πρόγραμμα τις μιγαδικές λύσεις είναι ότι δεν ήθελα να υπάρχει μαθηματική δυσκολία. Κατά τη γνώμη μου δεν υπάρχει μεγαλύτερο κρίμα από το να χάσει ένας μαθητής κάποια άσκηση, όχι επειδή δεν είναι καλός στον προγραμματισμό, αλλά επειδή δε γνωρίζει το θεωρητικό (φυσικό, μαθηματικό κλπ.) υπόβαθρο. Γι' αυτό πιστεύω ότι πρέπει να είμαστε προσεκτικοί, ώστε η όποια δυσκολία ενός προβλήματος να είναι κατά κύριο λόγο προγραμματιστικής φύσης. (Απ' ότι ξέρω οι εμπλοκή των μιγαδικών βρίσκεται στις "παρυφές" της ύλης των μαθηματικών κατεύθυνσης.)
Το πρόγραμμά σου καλύπτει τη γενική περίπτωση δευτεροβάθμιων εξισώσεων και είναι ένα πολύ καλό παράδειγμα για όσους θέλουν να το ψάξουν λίγο περισσότερο.


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
ΔημοσίευσηΔημοσιεύτηκε: Σάβ 03 Απρ 2004 09:56 pm 
Αγαπητέ Spin, πρώτο σχόλιο στα σχόλιά σου : η εξίσωση είναι Ax^2+Bx+C = 0 και όχι απλώς Ax^2+Bx+C

Περί του κώδικα που προτείνει ο Morpheus έχω να πώ τα εξής: Αφού φτάνουμε τόσο βαθυά στο μαθηματικό κομμάτι θα πρέπει να πάμε πιό βαθυά και στο υπολογιστικό. Αρα ΔΕΝ πρέπει να ΑΠΑΓΟΡΕΥΟΥΜΕ στον χρήστη, ίσως αν χρειάζεται μόνο να του υπενθυμίζουμε τον κανόνα. Ενα σωστό ΠΡΟΓΡΑΜΜΑ (αλγόριθμος να πώ καλύτερα) πρέπει να προβλέπει "εσωτερικά" στον κώδικά του όλες τις περιπτώσεις ακόμη και την περίπτωση που ο χρήστης ηθελημένα βάλει μή αποδεκτές τιμές πχ. Α=0. 'Η, σε περίπτωση που ο αλγόριθμος εκφράζεται με υποπρόγραμμα, πράγμα που είναι πολύ πιό σωστό στην περίπτωση του δομημένου προγ/μού, πρέπει να επιστρέφει μιά τιμή (προκαθορισμένη κατα προτίμηση με μιά σταθερά) που να επιτρέπει το κυρίως πρόγραμμα τα χειριστεί το λάθος.

Για τό εν λόγω πρόγραμμα η λύση πρέπει να δομηθεί κατα την γνώμη μου όπως προτείνει ο SpiN με πιθανή επέκταση για την περίπτωση που προκύπτουν μιγαδικές λύσεις (πράγμα όμως που απλώς επιβαρύνει την άσκηση γιατί εισάγει κώδικα που δεν βοηθάει σε τίποτε στην παραπάνω κατανόηση των δομών λογικών επιλογών).

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

Φιλικά
Παναγής Καρυδάς
Φυσικός - Αναλυτής / προγραμματιστής


Κορυφή
  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Σάβ 03 Απρ 2004 11:40 pm 
Χωρίς σύνδεση
Διαχειριστής

Εγγραφή: Παρ 28 Φεβ 2003 06:10 pm
Δημοσιεύσεις: 84
Φίλε Παναγή, δεκτή η παρατήρηση.
Αναφέρθηκα σε "εξίσωση" χωρίς να τη γράψω!

Ο κώδικας διορθώθηκε...


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

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


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

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


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

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