Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω να μετατρέψω την έκφραση πχ. "103+435/25-2*76" σε αριθμό.Θέλω να βρω την αξία του. Δοκίμασα την atoi αλλά μου βγάζει σε ακέραιο μόνο τον 1ο αριθμό που βρίσκει. Γνωρίζει κανείς ?

Δημοσ.

Θέλω να μετατρέψω την έκφραση πχ. "103+435/25-2*76" σε αριθμό.Θέλω να βρω την αξία του. Δοκίμασα την atoi αλλά μου βγάζει σε ακέραιο μόνο τον 1ο αριθμό που βρίσκει. Γνωρίζει κανείς ?

 

Ξεκινάς μεγάλη κουβέντα. Αυτό που ζητάς είναι το μικρότερο πρόβλημα. Parsing.

Το μεγαλύτερο πρόβλημα είναι να εφαρμόσεις τις πράξεις σωστά. Με τη σωστή

προτεραιότητα και προσεταιριστικότητα τελεστών. Θα σου γράψω χοντρικά τί

χρειάζεται να κάνεις και όποτε βρίσκω λίγο χρόνο θα τα αναπτύσσω:

 

  1. Scanning-Parsing: Διάβασμα του κειμένου που περιέχεται σε κάποιο αρχείο ή string

    χρησιμοποιώντας κάποιες τεχνικές/αλγορίθμους ώστε το αποτέλεσμα αυτής της δια-

    δικασίας να χρησιμοποιηθεί από το επόμενο στάδιο με μεγαλύτερη ευελιξία. Σε αυτό

    το στάδιο είναι σημαντικό να ορίσεις και τις ιδιότητες των τελεστών ώστε να μεταχει-

    ριστείς κατάλληλα την πληροφορία σου.

  2. Στο επόμενο στάδιο, το οποίο γίνεται παράλληλα με το πρώτο (pipelined), αποθηκεύ-

    εις πληροφορία σε μία δομή δεδομένων. Μία δομή δεδομένων που θα πρότεινα για

    εδώ είναι ένα δένδρο, δυαδικό δένδρο. Γιατί; Για να γίνει κάτι σαν και το παρακάτω:

    "12+3/2"
       ||
       \/
    
           __ / __
        /``       ``\
       +             2
      / \
    12   3
  3. Οπότε όπως καταλαβαίνεις με τον κατάλληλο τρόπο διάτρεξης, έχουμε το τελικό

    αποτέλεσμα.

 

(Αρχίζεις και μπαίνεις σε λημέρια compilers. Βέβαια απλά αγγίζεις, αλλά είναι μία καλή αρχή.) 

  • Like 1
Δημοσ.

TL;DR αν δεν έχεις τουλάχιστον κάποια εμπειρία σε προγραμματισμό ξέχνα το εκτός κι αν βρεις έτοιμο κώδικα που το κάνει.

Δημοσ.

TL;DR αν δεν έχεις τουλάχιστον κάποια εμπειρία σε προγραμματισμό ξέχνα το εκτός κι αν βρεις έτοιμο κώδικα που το κάνει.

Ασχολούμαι με C αυτό το διάστημα,δεν την γνωρίζω σε βάθος αλλά ξέρω ορισμένα πραγματάκια ...

Δημοσ.

Δε θέλω με τίποτα να σε αποθαρρύνω, απλά προσπαθώ να πω: αν "ορισμένα πραγματάκια" εννοείς τα βασικά for, συναρτήσεις, πίνακες, κλπ -- αυτά μόνο δεν είναι αρκετά χωρίς κάποιο βαθμό εμπειρίας από εξάσκηση. Ίσως λοιπόν χρειαστεί να κάνεις αυτή την εξάσκηση στα πλαίσια του προβλήματος, και βέβαια να ξεκινήσεις βήμα-βήμα.

 

Θα σου πρότεινα να απλοποιήσεις το πρόβλημα σε "υπολογισμός παραστάσεων της μορφής Α+Β" και να το πιάσεις από εκεί. Μετά το Α+Β θα πας σε Α+Β+Γ, σε Α+Β+Γ+...., μετά θα βάλεις αφαίρεση, μετά πολλαπλασιασμό και διαίρεση, μετά αν θες και παρενθέσεις. Υπόψιν πως για να περάσεις από κάθε βήμα που αναφέρω στο επόμενο οι διαφορές μπορεί να φαίνονται ασήμαντες στην περιγραφή, αλλά αντιστοιχούν σε σημαντικά "σκαλοπάτια" κατανόησης όταν γράφεις τον κώδικα.

 

Οπότε, ξεκίνα με "A+B".

Δημοσ.

Δε θέλω με τίποτα να σε αποθαρρύνω, απλά προσπαθώ να πω: αν "ορισμένα πραγματάκια" εννοείς τα βασικά for, συναρτήσεις, πίνακες, κλπ -- αυτά μόνο δεν είναι αρκετά χωρίς κάποιο βαθμό εμπειρίας από εξάσκηση. Ίσως λοιπόν χρειαστεί να κάνεις αυτή την εξάσκηση στα πλαίσια του προβλήματος, και βέβαια να ξεκινήσεις βήμα-βήμα.

 

Θα σου πρότεινα να απλοποιήσεις το πρόβλημα σε "υπολογισμός παραστάσεων της μορφής Α+Β" και να το πιάσεις από εκεί. Μετά το Α+Β θα πας σε Α+Β+Γ, σε Α+Β+Γ+...., μετά θα βάλεις αφαίρεση, μετά πολλαπλασιασμό και διαίρεση, μετά αν θες και παρενθέσεις. Υπόψιν πως για να περάσεις από κάθε βήμα που αναφέρω στο επόμενο οι διαφορές μπορεί να φαίνονται ασήμαντες στην περιγραφή, αλλά αντιστοιχούν σε σημαντικά "σκαλοπάτια" κατανόησης όταν γράφεις τον κώδικα.

 

Οπότε, ξεκίνα με "A+B".

Σε ευχαριστώ πολύ για την απάντηση σου ,θα προσπαθήσω να κάνω ο,τι καλύτερο μπορώ. Το πρόβλημά μου είναι το εξής :

 Οι αριθμοί Α+Β+Γ+.. είναι οι ίδιοι κάθε φορά , απλώς αλλάζουν κάθε φορά οι πράξεις μεταξύ τους, μέχρι να επιτευχθούν όλοι οι δυνατοί συνδυασμοί, και ψάχνω το αποτέλεσμα κάθε φορά. Να φανταστώ η λογική είναι η ίδια σωστά ? Ευχαριστώ και πάλι για το ενδιαφέρον σου ! 

Δημοσ.

Σε ευχαριστώ πολύ για την απάντηση σου ,θα προσπαθήσω να κάνω ο,τι καλύτερο μπορώ. Το πρόβλημά μου είναι το εξής :

 Οι αριθμοί Α+Β+Γ+.. είναι οι ίδιοι κάθε φορά , απλώς αλλάζουν κάθε φορά οι πράξεις μεταξύ τους, μέχρι να επιτευχθούν όλοι οι δυνατοί συνδυασμοί, και ψάχνω το αποτέλεσμα κάθε φορά. Να φανταστώ η λογική είναι η ίδια σωστά ? Ευχαριστώ και πάλι για το ενδιαφέρον σου ! 

 

Α+Β. Wax on, wax off.

Δημοσ.

Υπόψιν, πως αν ξεκινήσεις και φτιάξεις ότι θες μόνο με μία πράξη, όπως σου είπε ο defacer,

όταν μετά θα πας να βάλεις και δεύτερη πράξη θα έχεις έναν πολύπλοκο κώδικα. Αν πας και

χώσεις μία με άλλες ιδιότητες, τότε η πολυπλοκότητα δυσκολίας-δυσανάγνωστου κώδικα θα

ανεβαίνει δραματικά. Αν πας να βάλεις και τρίτη θα χρειαστείς τη μαμά σου.

 

Οπότε προσπάθησε να βάλεις και δεύτερη πράξη. Θα έχεις μάθει κάποια πράγματα για C. Με-

τά έλα από εδώ να στείλουμε στα σκουπίδια ό,τι έγραψες* για να το πάμε σωστά.

 

*Προφανώς και δεν εννοώ αυτό που φαίνεται. Απλά, ξεκίνα με το λάθος τρόπο, ώστε να διαπισ-

τώσεις και μόνος σου πως θα αρχίζεις να τα βρίσκεις σκούρα από την αρχή. Έτσι θα μάθεις. ;)

Δημοσ.

Θέλω να μετατρέψω την έκφραση πχ. "103+435/25-2*76" σε αριθμό.Θέλω να βρω την αξία του. Δοκίμασα την atoi αλλά μου βγάζει σε ακέραιο μόνο τον 1ο αριθμό που βρίσκει. Γνωρίζει κανείς ?

 

Αυτή αποτελεί κλασική περίπτωση μετατροπής infix σε postfix notation χρησιμοποιώντας στοίβα (stack). Γκούγκλαρε "infix to postfix using a stack" και θα βρεις από λεπτομερείς αναλύσεις αλγόριθμου μέχρι έτοιμους κώδικες.

Δημοσ.

μήπως μπορείς να κάνεις κατι με τον  ascii (να αφερεσεις ¨"127" αν θυμάμαι καλα) αν και παίζει και αυτο απο python  να είναι.

Δημοσ.

Τι ακριβώς θες να κάνεις με το παραπάνω; Σε διαβεβαιώ πως το παραπάνω δεν είναι C.

Πες όμως τί θες να κάνεις.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...