migf1 Δημοσ. 12 Ιουλίου 2012 Δημοσ. 12 Ιουλίου 2012 καλα,σε πολλα σημεια την εχασα την μπαλα εκει μεσα migf1 οπως ειπες,μαλλον για αργοτερα θα το αφησω οταν μαθω σχετικα με τους πινακες και διαφορες αλλες λειτουργιες που κανεις εκει μεσα.. Δεν έχεις κι άδικο Το γραψα πολύ γρήγορα, οπότε σίγουρα μπορεί να γραφτεί πιο ευανάγνωστα (αλλά τώρα βαριέμαι να το ξανα φτιάξω ). EDIT: Τώρα που το ξαναδιάβασα μια, βλέπω πως π.χ. το ISVALID© macro δεν το χρησιμοποιώ πουθενά
imitheos Δημοσ. 12 Ιουλίου 2012 Δημοσ. 12 Ιουλίου 2012 > #define ISVALID(c) ( isdigit(c) || isalpha(c) ) // input validation #define HASH(c) ( tolower(c) - 'a' ) // hash "function" #define CHR2DIG(c) ( isdigit(c) ? (c) - '0' : -1 ) // map char to digit value if ( '\0' != *dict[ (i=HASH(*word)) ] ) cp = dict[ HASH(c) ]; int n = CHR2DIG(c); Με κίνδυνο να γίνω αιτία να παρεκκλίνει το νήμα και να έρθουμε στο #define vs const του άλλου νήματος (πράγμα το οποίο δεν θέλω), είναι απαραίτητα τα παραπάνω macros ? Χρησιμοποιούνται 0, 2, 1 φορές αντίστοιχα (το ISVALID δεν πρέπει να χρησιμοποιείται ποτέ αν δεν μου ξέφυγε στο μάτι), αυτά που αντικαθιστούν είναι πολύ εύκολες και μικρές εκφράσεις οπότε αντί να ευκολύνουν δυσκολεύουν μια και από εκεί που ο αναγνώστης θα έβλεπε ένα απλό και ωραίο tolower© - 'a' βλέπει ένα HASH οπότε πρέπει να ψάξει να δει τι κάνει αυτό.
migf1 Δημοσ. 12 Ιουλίου 2012 Δημοσ. 12 Ιουλίου 2012 Με κίνδυνο να γίνω αιτία να παρεκκλίνει το νήμα και να έρθουμε στο #define vs const του άλλου νήματος (πράγμα το οποίο δεν θέλω), είναι απαραίτητα τα παραπάνω macros ? Χρησιμοποιούνται 0, 2, 1 φορές αντίστοιχα (το ISVALID δεν πρέπει να χρησιμοποιείται ποτέ αν δεν μου ξέφυγε στο μάτι), αυτά που αντικαθιστούν είναι πολύ εύκολες και μικρές εκφράσεις οπότε αντί να ευκολύνουν δυσκολεύουν μια και από εκεί που ο αναγνώστης θα έβλεπε ένα απλό και ωραίο tolower© - 'a' βλέπει ένα HASH οπότε πρέπει να ψάξει να δει τι κάνει αυτό. Yeap, δεν το χρησιμοποιώ καθόλου το ISVALID(), το είδα κι εγώ... μάλλον γράφαμε μαζί... δες το προηγούμενο ποστ μου (που γράφω στον kolisbro ότι δεν έχει άδικο που δεν καταλαβαίνει τίποτα, γιατί το 'γραψα πολύ βιαστικά τον κώδικα). Τα άλλα 2 macros επίσης δεν έχουν ιδιαίτερο λόγο ύπαρξης στο συγκεκριμένο παράδειγμα. Απλώς είμαι συνηθισμένος να γράφω έτσι για να μπορώ να κάνω εύκολα αλλαγές/βελτιώσεις χωρίς να ψάχνω όλο τον κώδικα, οπότε πάει μόνο του το χέρι και το μυαλό όταν γράφω στα γρήγορα. Π.χ. να μπορώ να αλλάξω το hash-function αλλάζοντας απλά το σώμα του HASH() macro, χωρίς να το ψάχνω στο υπόλοιπο κώδικα. Ομοίως και το CHR2DIG (π.χ. αν φύγουμε από ASCII). Για την συγκεκριμένη άσκηση είναι όντως overkill.
imitheos Δημοσ. 12 Ιουλίου 2012 Δημοσ. 12 Ιουλίου 2012 Yeap, δεν το χρησιμοποιώ καθόλου το ISVALID(), το είδα κι εγώ... μάλλον γράφαμε μαζί... δες το προηγούμενο ποστ μου (που γράφω στον kolisbro ότι δεν έχει άδικο που δεν καταλαβαίνει τίποτα, γιατί το 'γραψα πολύ βιαστικά τον κώδικα). Ναι τώρα το είδα. Όταν άρχισα να γράφω δεν υπήρχε ούτε το μήνυμα του koslibpro αλλά αφενός πιάστηκα με άλλες δουλειές και αφετέρου τα μηνύματά μου λόγω δυσλεξίας περνάνε από καμμιά 10 revisions μέσω του preview μέχρι να διαβάζονται (και πολλές φορές όταν τα διαβάζω μετά από καμμιά ώρα λέω "τι σκεφτόμουν όταν το έγραψα αυτό. δεν διαβάζεται" ) οπότε περνάει η ώρα.
Timonkaipumpa Δημοσ. 13 Ιουλίου 2012 Δημοσ. 13 Ιουλίου 2012 +1 στον imitheo. Στη χειρότερη περίπτωση ακόμα και χωρίς τις char classification functions θα έπρεπε τουλάχιστον να λέει c > 'a' αντί για ascii codes. ΟΚ... αλλά α) Σε κάποιον που μαθαίνει τώρα, θεώρησα καλύτερο να δει τις συγκρίσεις με τιμές int (για να υπάρξει η σύνδεση με την μεταβλητή int c, την getchar και την σχέση char και int) β) Το σημαντικό ήταν, στην προκειμένη φάση και για εμένα, να δει ότι μπορεί κανείς να χειριστεί πιο έξυπνα ένα switch έχοντας μία δομή δεδομένων (και έτσι να συνδέσει το indexing με το "switch") και για αυτό είχα και τους δύο πίνακες.. που στην ουσία ήταν το ίδιο με του directx. Οπότε... φυσικά και δεν είναι όσο γενικό και κοντά σε καλές πρακτικές προγραμματισμού αυτό που έδωσα... αλλά ήταν on purpose και με σκοπό να εστιάσει αλλού.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα