nomikab Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 Θέλω να μετατρέψω την έκφραση πχ. "103+435/25-2*76" σε αριθμό.Θέλω να βρω την αξία του. Δοκίμασα την atoi αλλά μου βγάζει σε ακέραιο μόνο τον 1ο αριθμό που βρίσκει. Γνωρίζει κανείς ?
gon1332 Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 Θέλω να μετατρέψω την έκφραση πχ. "103+435/25-2*76" σε αριθμό.Θέλω να βρω την αξία του. Δοκίμασα την atoi αλλά μου βγάζει σε ακέραιο μόνο τον 1ο αριθμό που βρίσκει. Γνωρίζει κανείς ? Ξεκινάς μεγάλη κουβέντα. Αυτό που ζητάς είναι το μικρότερο πρόβλημα. Parsing. Το μεγαλύτερο πρόβλημα είναι να εφαρμόσεις τις πράξεις σωστά. Με τη σωστή προτεραιότητα και προσεταιριστικότητα τελεστών. Θα σου γράψω χοντρικά τί χρειάζεται να κάνεις και όποτε βρίσκω λίγο χρόνο θα τα αναπτύσσω: Scanning-Parsing: Διάβασμα του κειμένου που περιέχεται σε κάποιο αρχείο ή string χρησιμοποιώντας κάποιες τεχνικές/αλγορίθμους ώστε το αποτέλεσμα αυτής της δια- δικασίας να χρησιμοποιηθεί από το επόμενο στάδιο με μεγαλύτερη ευελιξία. Σε αυτό το στάδιο είναι σημαντικό να ορίσεις και τις ιδιότητες των τελεστών ώστε να μεταχει- ριστείς κατάλληλα την πληροφορία σου. Στο επόμενο στάδιο, το οποίο γίνεται παράλληλα με το πρώτο (pipelined), αποθηκεύ- εις πληροφορία σε μία δομή δεδομένων. Μία δομή δεδομένων που θα πρότεινα για εδώ είναι ένα δένδρο, δυαδικό δένδρο. Γιατί; Για να γίνει κάτι σαν και το παρακάτω: "12+3/2" || \/ __ / __ /`` ``\ + 2 / \ 12 3 Οπότε όπως καταλαβαίνεις με τον κατάλληλο τρόπο διάτρεξης, έχουμε το τελικό αποτέλεσμα. (Αρχίζεις και μπαίνεις σε λημέρια compilers. Βέβαια απλά αγγίζεις, αλλά είναι μία καλή αρχή.) 1
defacer Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 TL;DR αν δεν έχεις τουλάχιστον κάποια εμπειρία σε προγραμματισμό ξέχνα το εκτός κι αν βρεις έτοιμο κώδικα που το κάνει.
nomikab Δημοσ. 1 Μαΐου 2015 Μέλος Δημοσ. 1 Μαΐου 2015 TL;DR αν δεν έχεις τουλάχιστον κάποια εμπειρία σε προγραμματισμό ξέχνα το εκτός κι αν βρεις έτοιμο κώδικα που το κάνει. Ασχολούμαι με C αυτό το διάστημα,δεν την γνωρίζω σε βάθος αλλά ξέρω ορισμένα πραγματάκια ...
defacer Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 Δε θέλω με τίποτα να σε αποθαρρύνω, απλά προσπαθώ να πω: αν "ορισμένα πραγματάκια" εννοείς τα βασικά for, συναρτήσεις, πίνακες, κλπ -- αυτά μόνο δεν είναι αρκετά χωρίς κάποιο βαθμό εμπειρίας από εξάσκηση. Ίσως λοιπόν χρειαστεί να κάνεις αυτή την εξάσκηση στα πλαίσια του προβλήματος, και βέβαια να ξεκινήσεις βήμα-βήμα. Θα σου πρότεινα να απλοποιήσεις το πρόβλημα σε "υπολογισμός παραστάσεων της μορφής Α+Β" και να το πιάσεις από εκεί. Μετά το Α+Β θα πας σε Α+Β+Γ, σε Α+Β+Γ+...., μετά θα βάλεις αφαίρεση, μετά πολλαπλασιασμό και διαίρεση, μετά αν θες και παρενθέσεις. Υπόψιν πως για να περάσεις από κάθε βήμα που αναφέρω στο επόμενο οι διαφορές μπορεί να φαίνονται ασήμαντες στην περιγραφή, αλλά αντιστοιχούν σε σημαντικά "σκαλοπάτια" κατανόησης όταν γράφεις τον κώδικα. Οπότε, ξεκίνα με "A+B".
nomikab Δημοσ. 1 Μαΐου 2015 Μέλος Δημοσ. 1 Μαΐου 2015 Δε θέλω με τίποτα να σε αποθαρρύνω, απλά προσπαθώ να πω: αν "ορισμένα πραγματάκια" εννοείς τα βασικά for, συναρτήσεις, πίνακες, κλπ -- αυτά μόνο δεν είναι αρκετά χωρίς κάποιο βαθμό εμπειρίας από εξάσκηση. Ίσως λοιπόν χρειαστεί να κάνεις αυτή την εξάσκηση στα πλαίσια του προβλήματος, και βέβαια να ξεκινήσεις βήμα-βήμα. Θα σου πρότεινα να απλοποιήσεις το πρόβλημα σε "υπολογισμός παραστάσεων της μορφής Α+Β" και να το πιάσεις από εκεί. Μετά το Α+Β θα πας σε Α+Β+Γ, σε Α+Β+Γ+...., μετά θα βάλεις αφαίρεση, μετά πολλαπλασιασμό και διαίρεση, μετά αν θες και παρενθέσεις. Υπόψιν πως για να περάσεις από κάθε βήμα που αναφέρω στο επόμενο οι διαφορές μπορεί να φαίνονται ασήμαντες στην περιγραφή, αλλά αντιστοιχούν σε σημαντικά "σκαλοπάτια" κατανόησης όταν γράφεις τον κώδικα. Οπότε, ξεκίνα με "A+B". Σε ευχαριστώ πολύ για την απάντηση σου ,θα προσπαθήσω να κάνω ο,τι καλύτερο μπορώ. Το πρόβλημά μου είναι το εξής : Οι αριθμοί Α+Β+Γ+.. είναι οι ίδιοι κάθε φορά , απλώς αλλάζουν κάθε φορά οι πράξεις μεταξύ τους, μέχρι να επιτευχθούν όλοι οι δυνατοί συνδυασμοί, και ψάχνω το αποτέλεσμα κάθε φορά. Να φανταστώ η λογική είναι η ίδια σωστά ? Ευχαριστώ και πάλι για το ενδιαφέρον σου !
defacer Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 Σε ευχαριστώ πολύ για την απάντηση σου ,θα προσπαθήσω να κάνω ο,τι καλύτερο μπορώ. Το πρόβλημά μου είναι το εξής : Οι αριθμοί Α+Β+Γ+.. είναι οι ίδιοι κάθε φορά , απλώς αλλάζουν κάθε φορά οι πράξεις μεταξύ τους, μέχρι να επιτευχθούν όλοι οι δυνατοί συνδυασμοί, και ψάχνω το αποτέλεσμα κάθε φορά. Να φανταστώ η λογική είναι η ίδια σωστά ? Ευχαριστώ και πάλι για το ενδιαφέρον σου ! Α+Β. Wax on, wax off.
gon1332 Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 Υπόψιν, πως αν ξεκινήσεις και φτιάξεις ότι θες μόνο με μία πράξη, όπως σου είπε ο defacer, όταν μετά θα πας να βάλεις και δεύτερη πράξη θα έχεις έναν πολύπλοκο κώδικα. Αν πας και χώσεις μία με άλλες ιδιότητες, τότε η πολυπλοκότητα δυσκολίας-δυσανάγνωστου κώδικα θα ανεβαίνει δραματικά. Αν πας να βάλεις και τρίτη θα χρειαστείς τη μαμά σου. Οπότε προσπάθησε να βάλεις και δεύτερη πράξη. Θα έχεις μάθει κάποια πράγματα για C. Με- τά έλα από εδώ να στείλουμε στα σκουπίδια ό,τι έγραψες* για να το πάμε σωστά. *Προφανώς και δεν εννοώ αυτό που φαίνεται. Απλά, ξεκίνα με το λάθος τρόπο, ώστε να διαπισ- τώσεις και μόνος σου πως θα αρχίζεις να τα βρίσκεις σκούρα από την αρχή. Έτσι θα μάθεις.
migf1 Δημοσ. 1 Μαΐου 2015 Δημοσ. 1 Μαΐου 2015 Θέλω να μετατρέψω την έκφραση πχ. "103+435/25-2*76" σε αριθμό.Θέλω να βρω την αξία του. Δοκίμασα την atoi αλλά μου βγάζει σε ακέραιο μόνο τον 1ο αριθμό που βρίσκει. Γνωρίζει κανείς ? Αυτή αποτελεί κλασική περίπτωση μετατροπής infix σε postfix notation χρησιμοποιώντας στοίβα (stack). Γκούγκλαρε "infix to postfix using a stack" και θα βρεις από λεπτομερείς αναλύσεις αλγόριθμου μέχρι έτοιμους κώδικες.
vaggos_ece Δημοσ. 7 Μαΐου 2015 Δημοσ. 7 Μαΐου 2015 int/float x="103+435/25-2*76" + "0" ;. δεν είμαι σιγουρος αν δουλεύει στην c.
gon1332 Δημοσ. 7 Μαΐου 2015 Δημοσ. 7 Μαΐου 2015 int/float x="103+435/25-2*76" + "0" ;. δεν είμαι σιγουρος αν δουλεύει στην c. Δες Python.
vaggos_ece Δημοσ. 7 Μαΐου 2015 Δημοσ. 7 Μαΐου 2015 μήπως μπορείς να κάνεις κατι με τον ascii (να αφερεσεις ¨"127" αν θυμάμαι καλα) αν και παίζει και αυτο απο python να είναι.
gon1332 Δημοσ. 7 Μαΐου 2015 Δημοσ. 7 Μαΐου 2015 Τι ακριβώς θες να κάνεις με το παραπάνω; Σε διαβεβαιώ πως το παραπάνω δεν είναι C. Πες όμως τί θες να κάνεις.
vaggos_ece Δημοσ. 7 Μαΐου 2015 Δημοσ. 7 Μαΐου 2015 εγώ εδώ είμαι http://www.insomnia.gr/topic/568800-%CE%B1%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CF%83%CF%84%CE%B7%CE%BD-c/... απλά δίνω ιδέες σε αυτό το post.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα