Καλησπέρα.
Χρησιμοποιώντας την γλώσσα python κατάφερα να φτιάξω ένα πρόγραμμα που λύνει εξισώσεις δευτέρου
βαθμού (δίνεις τα α ,β ,γ βρίσκει την διακρίνουσα και με τον τύπο λύσεων βρίσκει τις λύσεις).
Στην ουσία μπλέκουν μόνο αριθμοί σε αυτό το πρόγραμμα.
Άμα τώρα θέλω για παράδειγμα να φτιάξω ένα πρόγραμμα που να λύνει εξισώσεις πρώτου βαθμού όπως :
2x + 3 = x +8 <=> x = 5
Πώς θα πω στον υπολογιστή να κάνει πράξεις όπως 2x + x = 3x ?
Καταρχάς τη θα πρέπει να ζητήσω από τον χρήστη, πως είναι δυνατόν να μου δώσει
ολόκληρη την παράσταση?
Αυτό μου φαίνεται αδύνατον , έχω σπάσει το κεφάλι μου εδώ και πόσες μέρες αλλά δεν μπορώ να βρω
λύση.Και στο ίντερνετ δεν έχω βρει κανένα παρόμοιο προγραμματάκι για να δω τον κώδικα.
Μήπως έχει κανείς καμιά ιδέα?
Ευχαριστώ.
Εμφάνιση 1-14 από 14
-
28-08-13, 19:49 Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #1
-
28-08-13, 20:23 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #2
Όπως στις εξισώσεις 2ου βαθού ο γενικός τύπος είναι αχ^2 + βχ + γ = 0, εδώ ο τύπος που ψαχνεις είναι αχ + β = 0.
Άρα η είσοδος στο πρόγραμμά σου θα είναι τα α και β.
-
28-08-13, 20:31 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #3
Στην ουσία ο τύπος επίλυσης θα είναι x = -β/α .
Δίκαιος έχεις απλός εγώ σκεπτόμουν αν γινόταν ο χρήστης να δίνει ολόκληρη την παράσταση πχ
2x+5+x = 2x +10
και το πρόγραμμα τα κάνει αυτό :
2x+5+x = 2x +10 <=> 3x + 5 = 2x + 10 <=> x = 5
Θα μπορούσα με κάποιον τρόπο να το κάνω αυτό?
-
28-08-13, 20:33 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #4
Μια πρόχειρη (πιθανή) λύση που μου ήρθε είναι η εξής:
1) η εισαγωγή θα μπορούσε να γίνει με τον χρήστη να γράψει όλη την εξίσωση,καλύτερα χωρίς κενά, κάπως έτσι "2χ+4χ+23=18-5χ" και αυτό θα το αποθήκευα ως ένα string.
2)Θα δημιουργούσα δύο λίστες(array,στην python αν δεν κάνω λάθος λέγοντα lists). Στην μία λίστα θα βάλεις αυτά που υπάρχουν δεξιά από το = και στην άλλη αυτά που υπάρχουν αριστερά.
3)Μετά το αρχικό string θα το έσπαγα σε κομμάτια έτσι ώστε το κάθε κομμάτι να περιέχει μόνο πράξη(+ ή -),αριθμό, και χ αν υπάρχει, και θα τοποθετούσα το κάθε κομμάτι σε όποια λίστα ανήκει, δηλαδή το παραπάνω παράδειγμα θα γινόταν κάπως έτσι
Κώδικας:list1 = ['+2x', '+4x', '23'] list2 = ['18', '-5x']
5) κάνεις και τις τελευταίες πράξεις αλλάζοντας μεριά(οπότε και πρόσημα) όπου χρειάζεται και μετά βγάζεις το αποτέλεσμα.
Ελπίζω να βοήθησα...Δεν έχω δοκιμάσει αυτό τον τρόπο οπότε δεν ξέρω αν θα λειτουργήσει ή τι προβλήματα μπορεί να προκύψουν!
-
29-08-13, 13:52 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #5
Η γενική περίπτωση αυτού που περιγράφεις ονομάζεται symbolic computation. Υπάρχουν εξειδικευμένα προγράμματα (πχ Mathematica, Mapple κτλ) που κάνουν ακριβώς αυτήν την δουλειά και πολύ περισσότερα (πχ παραγωγίσεις, ολοκληρώσεις κτλ). Στην python υπάρχει μια βιβλιοθήκη που είναι αρκετά ώριμη (δεν είναι mathematica όμως) και ονομάζεται sympy.
Τα μαθηματικά πίσω από αυτές τις βιβλιοθήκες/προγράμματα συνήθως ξεφεύγουν. Πχ δεν λύνουν ολοκληρώματα κτλ με τον τρόπο που τα λύνουμε με το χέρι. Χρησιμοποιούν άλλες μεθόδους.
Αναφορικά με αυτό που ρωτάς, κάτι πιο γενικό από αυτό που προτείνει ο atilas είναι να δημιουργήσεις μία κλάση Symbol ή Expression ή κάτι τέτοιο, μέσω της οποίας θα κρατάς τις μεταβλητές σε συμβολική μορφή και θα κάνεις τις πράξεις. Δες εδώ και τις βιβλιοθήκες που προτείνονται για να πάρεις ιδέες
http://stackoverflow.com/questions/5...ematics-python
Το πιο απλό πάντως, ιδίως αν έχεις να λύσεις συγκεκριμένο πρόβλημα είναι να χρησιμοποιήσεις το sympy. Αν είναι απλώς για εξάσκηση, τότε έιναι μεν ενδιαφέρον πρόβλημα, αλλά αν θες να κάνεις κάτι λίγο πιο γενικό, ρίξε ένα μάτι πρώτα να δεις τι κάνουν οι άλλοι γιατί γενικά θέλει design πρώτα. Δεν είναι κάτι δηλαδή που μπορείς κατευθείαν να ξεκινήσεις να γράφεις κώδικα.Τελευταία επεξεργασία από το μέλος pmav99 : 29-08-13 στις 13:58.
-
29-08-13, 19:34 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #6
Η πιο σωστή λύση πιστεύω είναι να χρησιμοποιήσεις expression tree για να αναλύσεις τις πράξεις με τη βοήθεια του δέντρου.
http://en.wikipedia.org/wiki/Binary_expression_tree
Όπως θα δεις και στο link τα φύλα είναι οι αριθμοί ή οι άγνωστοι που θα έχεις και οι ενδιάμεσοι κόμβοι είναι τα μαθηματικά σύμβολα.
Το "=" αν φτιαχτεί σωστά το δέντρο θα πρέπει να είναι λογικά η ρίζα του δέντρου. Οπότε θα μπορείς να κοιτάς αριστερά της ρίζας πόσα "x" έχεις και το ίδιο και δεξιά να τα μεταφέρεις κάνωντας
αντιστροφή προσήμου σε αυτά που βρίσκονται είτε αριστερά είτε δεξιά και κάνεις πρόσθεση και το ίδιο κάνεις και για τους αριθμούς.
Αφού έχεις φτάσει στην μορφή αx = b τότε κάνεις την διαίρεση και βρίσκεις το αποτέλεσμα.Τελευταία επεξεργασία από το μέλος xcyanx : 29-08-13 στις 19:41.
-
30-08-13, 14:39 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #7
Με δυαδικό δέντρο, δεν είναι και η σωστότερη / πλέον βελτιστοποιημένη προσέγγιση, γιατί δεν έχεις πάντα μόνο 2 operands πράξεων ίδιας προτεραιότητας (κι ας γίνονται πάντα οι πράξεις πάντα ανά 2 operands).
π.χ. να 2 παραδείγματα όπου έχεις πάνω από 2 operands:
2x+3x+5x
2x*3x*5x
Καλύτερη προσέγγιση θα είναι να ΜΗΝ είναι δυαδικό το δέντρο.
-
31-08-13, 01:03 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #8
Εγώ είπα για expression tree απλά το μόνο link που βρήκα ήταν για binary expression tree και για αυτό το postara.
Μπορεί μια χαρά αν δει το binary να φτιάξει το αντίστοιχο μη-δυαδικό δέντρο μιας και θα ξέρει στο περίπου πως λειτουργεί.
- - - Updated - - -
Αν και κάπου είχα διαβάσει ότι τα expression trees είναι αναγκαστικά δυαδικά δέντρα.
Μια photo απο το link Που έδωσα( http://en.wikipedia.org/wiki/Binary_expression_tree#Algebraic_expressions ) δείχνει δυαδικό δέντρο να
μπορεί να αναπαραστήσει πράξεις με operators που δεν έχουν ίδια προτεραιότητα.
-
31-08-13, 02:14 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #9
stack θελεις
διαβασε εδω να δεις πως το κανουνε τα πραγματικα προγραμματα http://www.calculator.org/rpn.aspx
εχω φτιαξει τετοιο προγραμμα πολυ παλια που τα εκανε ολα εξισωσεις πραξεις κτλπ σε java και χρησιμοποιησα stacks + reverse polish notation απλο ειναι ..
προσοχη να σου πω οτι αν κανεις τετοιο προγραμμα ΔΕΝ χρησιμοποιεις τις κλασικες πραξεις που ειναι build in στην γλωσσα δινουνε ΛΑΘΟΣ αποτελεσμα
σε καποιες περιπτωσεις γιατι ενας 10δικος δεν μπορει να αναπαρασταθει σωστα εσωτερικα σε δυαδικη μορφη.
Πρεπει να φτιαξεις ειδικη βιβλιοθηκη για αριθμους και πραξεις μεταξυ αυτων η να βρεις ετοιμη.
Στην java υπαρχει ετοιμο αυτο στην python δεν ξερω.
Γενικα να ξερεις οτι ο τροπος που γινονται οι πραξεις στον υπολογιστη δεν εχει σχεση με τον τροπο που γινονται στα κλασικα μαθηματικα
υπαρχουνε αλλες προσεγγισεις λογω περιορισμων που βαζει το hardwareΤελευταία επεξεργασία από το μέλος mpetou : 31-08-13 στις 02:26.
-
31-08-13, 15:57 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #10
Αυτό που λες όμως απευθύνεται σε calculators ενώ το παλικάρι θέλει ένα υποτυπώδες σύστημα για symbolic computation. Άλλο το πρόγραμμα να σου λύνει μια εξίσωση και άλλο να σου κάνει πράξεις για να βγάλει αποτέλεσμα.
-
01-09-13, 01:12 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #11
γιατι οι εξισωσεις δεν εχουνε παρενθεσεις πραξεις προτεραιότητες κτλπ ?
-
01-09-13, 03:20 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #12
Αν είχες π.χ. την πράξη 2+x μέσα στην stack σύμφωνα με το άρθρο που έκανες post θα έπρεπε για το + να κάνεις push στην stack δύο αριθμούς, δηλαδή το 2 και το x σε αυτή την περίπτωση.
Αν τώρα κάνεις την πράξη 2+x εσωτερικά στο πρόγραμμα τι περιμένεις να σου δώσει σαν αποτέλεσμα? Ή μήπως περιμένεις ότι χρησιμοποιώντας stack ότι μπορείς να μεταφέρεις τόσο έυκολα τους αγνώστους απο την μία πλευρά και τους αριθμούς απο την άλλη? Και αν αργότερα θέλει για παράδειγμα(λίγο ακραίο ξέρω) να υλοποιήσει και παραγώγους ή κάτι ανάλογο με την stack πως ακριβώς θα το κάνει? Και στους μοναδιαίους τελεστές όπως είναι το παραγωντικό? Θα πρέπει να έχουμε μια συνάρτηση ελέγχου των τελεστών? Συν ότι με τα binary expression trees μπορείς να ορίσεις μια οποιαδήποτε μαθηματική λογική με τελεστές(βλέπε μαθηματική λογική) χωρίς πολύ κόπο. Τέσπα, επειδή κάθε θέμα τείνει να γίνει debate του πιο ξερόλα αυτό είναι το τελευταίο μου post στο συγκεκριμένο θέμα και ελπίζω ο OP να βρήκε μια άκρη.
-
01-09-13, 05:49 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #13
δεν εχεις 1 stack και κανεις ελεγχο του τι βαζεις μεσα. δεν χρειαζετε να βαλεις το χ
-
01-09-13, 17:40 Απάντηση: Υπάρχει επίλυση στο πρόβλημα "Πρόγραμμα που λύνει εξισώσεις πρώτου βαθμού" #14
Τι να σου πω...Απλά πιστεύω ότι η stack καλή είναι για calculators και όχι για αυτό που ζητάει ο OP. Γιατί μιας και έχει κάνει για 2βαθμια και 1βαθμια εξίσωση αργότερα θα θέλει να κάνει ίσως και για 3βάθμια που και πάλι γίνεται και με
stack αλλά η λογική του προγράμματος θα είναι πιο περίπλοκη.
Παρόμοια Θέματα
-
Πρόβλημα σε πρόγραμμα αλληλογραφίας POP Peeper
Από petros07 στο φόρουμ Software γενικάΜηνύματα: 3Τελευταίο Μήνυμα: 08-05-13, 22:36 -
Cyta Ελλάδας: Δωρεάν το Πρόγραμμα Χρόνου Ομιλίας "Cyta προς Cyta Ελλάδα και Κύπρος"
Από nm96027 στο φόρουμ ΕιδήσειςΜηνύματα: 3Τελευταίο Μήνυμα: 12-04-13, 00:10 -
Πρόγραμμα που να υποστηρίζει βιντεοκλήση με live messenger: τελικά υπάρχει;
Από britgreek στο φόρουμ Unix - LinuxΜηνύματα: 8Τελευταίο Μήνυμα: 16-10-12, 10:53 -
Πρόβλημα "Τοπικός Προσαρμογέας Οθόνης VGA"
Από Tsikos18 στο φόρουμ Κάρτες ήχου, γραφικών, ηχεία και οθόνεςΜηνύματα: 8Τελευταίο Μήνυμα: 15-09-12, 17:56 -
Προβλημα με προγραμμα δημιουργιας DVD επαναφορας (κολλησε)
Από keristas στο φόρουμ WindowsΜηνύματα: 25Τελευταίο Μήνυμα: 10-09-12, 23:02
Bookmarks