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

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

Δημοσ.

καλα,σε πολλα σημεια την εχασα την μπαλα εκει μεσα migf1 :P

οπως ειπες,μαλλον για αργοτερα θα το αφησω οταν μαθω σχετικα με τους πινακες και διαφορες αλλες λειτουργιες που κανεις εκει μεσα..

 

Δεν έχεις κι άδικο :) Το γραψα πολύ γρήγορα, οπότε σίγουρα μπορεί να γραφτεί πιο ευανάγνωστα (αλλά τώρα βαριέμαι να το ξανα φτιάξω :lol:).

 

EDIT:

 

Τώρα που το ξαναδιάβασα μια, βλέπω πως π.χ. το ISVALID© macro δεν το χρησιμοποιώ πουθενά :P

  • Απαντ. 34
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσ.

>
#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 οπότε πρέπει να ψάξει να δει τι κάνει αυτό.

Δημοσ.

Με κίνδυνο να γίνω αιτία να παρεκκλίνει το νήμα και να έρθουμε στο #define vs const του άλλου νήματος (πράγμα το οποίο δεν θέλω), είναι απαραίτητα τα παραπάνω macros ?

Χρησιμοποιούνται 0, 2, 1 φορές αντίστοιχα (το ISVALID δεν πρέπει να χρησιμοποιείται ποτέ αν δεν μου ξέφυγε στο μάτι), αυτά που αντικαθιστούν είναι πολύ εύκολες και μικρές εκφράσεις οπότε αντί να ευκολύνουν δυσκολεύουν μια και από εκεί που ο αναγνώστης θα έβλεπε ένα απλό και ωραίο tolower© - 'a' βλέπει ένα HASH οπότε πρέπει να ψάξει να δει τι κάνει αυτό.

Yeap, δεν το χρησιμοποιώ καθόλου το ISVALID(), το είδα κι εγώ... μάλλον γράφαμε μαζί... δες το προηγούμενο ποστ μου (που γράφω στον kolisbro ότι δεν έχει άδικο που δεν καταλαβαίνει τίποτα, γιατί το 'γραψα πολύ βιαστικά τον κώδικα).

 

Τα άλλα 2 macros επίσης δεν έχουν ιδιαίτερο λόγο ύπαρξης στο συγκεκριμένο παράδειγμα. Απλώς είμαι συνηθισμένος να γράφω έτσι για να μπορώ να κάνω εύκολα αλλαγές/βελτιώσεις χωρίς να ψάχνω όλο τον κώδικα, οπότε πάει μόνο του το χέρι και το μυαλό όταν γράφω στα γρήγορα.

 

Π.χ. να μπορώ να αλλάξω το hash-function αλλάζοντας απλά το σώμα του HASH() macro, χωρίς να το ψάχνω στο υπόλοιπο κώδικα. Ομοίως και το CHR2DIG (π.χ. αν φύγουμε από ASCII).

 

Για την συγκεκριμένη άσκηση είναι όντως overkill.

Δημοσ.

Yeap, δεν το χρησιμοποιώ καθόλου το ISVALID(), το είδα κι εγώ... μάλλον γράφαμε μαζί... δες το προηγούμενο ποστ μου (που γράφω στον kolisbro ότι δεν έχει άδικο που δεν καταλαβαίνει τίποτα, γιατί το 'γραψα πολύ βιαστικά τον κώδικα).

 

Ναι τώρα το είδα. Όταν άρχισα να γράφω δεν υπήρχε ούτε το μήνυμα του koslibpro αλλά αφενός πιάστηκα με άλλες δουλειές και αφετέρου τα μηνύματά μου λόγω δυσλεξίας περνάνε από καμμιά 10 revisions μέσω του preview μέχρι να διαβάζονται (και πολλές φορές όταν τα διαβάζω μετά από καμμιά ώρα λέω "τι σκεφτόμουν όταν το έγραψα αυτό. δεν διαβάζεται" :P) οπότε περνάει η ώρα.

Δημοσ.

+1 στον imitheo.

 

Στη χειρότερη περίπτωση ακόμα και χωρίς τις char classification functions θα έπρεπε τουλάχιστον να λέει c > 'a' αντί για ascii codes.

 

 

ΟΚ... αλλά

 

α) Σε κάποιον που μαθαίνει τώρα, θεώρησα καλύτερο να δει τις συγκρίσεις με τιμές int (για να υπάρξει η σύνδεση με την μεταβλητή int c, την getchar και την σχέση char και int)

β) Το σημαντικό ήταν, στην προκειμένη φάση και για εμένα, να δει ότι μπορεί κανείς να χειριστεί πιο έξυπνα ένα switch έχοντας μία δομή δεδομένων (και έτσι να συνδέσει το indexing με το "switch") και για αυτό είχα και τους δύο πίνακες.. που στην ουσία ήταν το ίδιο με του directx.

 

 

:)

 

 

Οπότε... φυσικά και δεν είναι όσο γενικό και κοντά σε καλές πρακτικές προγραμματισμού αυτό που έδωσα... αλλά ήταν on purpose και με σκοπό να εστιάσει αλλού.

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...