ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Επιπλέον στοιχεία της C
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 2 Πρόγραμμα σε Διαφορετικά Αρχεία Οργανώνουμε καλύτερα τον κώδικα Χρήσιμα σε μεγάλα προγράμματα – Παράδειγμα (human tracking) linker header files – #include “myheader.h” extern – extern void myfunction();
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 3 header files – Παράδειγμα - “myAlloc.h” #include #define Pi //Orismos Domwn typedef struct Level { int level; struct List *head; struct List *tail; struct Level *next; } Level; typedef struct List { float **image; int l,c; struct List *next; } List; //Orismos global metablhtwn int globalVariable; //prototypes sunarthsewn void **Alloc2D(int dimx, int dimx_bytes, int dimy, int dimy_bytes); int **FreeInt(int **I, int dimx); Level *AllocTree(int depth, int l, int c); Level *FreeTree(Level *root);
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 4 Ορίσματα στη γραμμή εντολής int main(int argc, char *argv[]) { int number; if (argc != 2) { printf(“Usage:%s number\n”,argv[0]); exit(0); } number = atoi(argv[1]); … } int main(int argc, char *argv[]) argc: # Ορισμάτων argv: Ορίσματα Παράδειγμα > a.out test.txt //argc = 4 //argv[0] = “a.out” //argv[1] = “10” //argv[2] = “20” //argv[3] = “test.txt”
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 5 Χειρισμός Bits (1101) 2 = 1 x x x x 2 0 = (13) 10 (A3F) 16 = 10 x x x 16 0 = (2623) 10
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 6 Χειρισμός Bits Οι τελεστές των bits εφαρμόζονται σε κάθε bit των ακεραίων τιμών και είναι: ~ (ΣΥΜΠΛΗΡΩΜΑ) ~1 = 0 ~0 = 1 – ~( ) = ( ) & (AND) 0 & 1 = 0 1 & 1 = 1 – ( ) & ( ) = ( ) | (OR) 0 | 1 = 1 0 | 0 = 0 – ( ) | ( ) = ( ) ^ (XOR) 1 ^ 1 = 0 1 ^ 0 = 1 – ( ) ^ ( ) = ( )
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 7 Χειρισμός Bits Τελεστές ολίσθησης > – x << y ολισθαίνει το αριστερά κατά y θέσεις bit Τα νέα bits είναι 0 ( ) << 2 = ( ) int a = 1; int b; b = a << 2; /* assigns 4 to b */ a <<= 2; /* changes a to 4 */
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 8 Χειρισμός Bits Τελεστές ολίσθησης > – x >> y ολισθαίνει το δεξιά κατά y θέσεις bit Αν το x είναι unsigned, τα νέα bits είναι 0 Αλλιώς, τα νέα bits διατηρούν το πρόσημο (ανάλογα με την αρχιτεκτονική της μηχανής) ( ) >> 2 = ( ) (unsigned) ( ) >> 2 = ( ) (signed – sign extension)
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 9 Χειρισμός Bits - Παραδείγματα Πόσα bits του x είναι 1; int getBitsEqualToOne(int x) { int n; for (n = 0; x != 0; ++n) x &= x-1; return n; }
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 10 Χειρισμός Bits - Παραδείγματα Μετατροπή σε “δυαδικό” string του ακεραίου n, και εκτύπωση του. void printBinary(int n) { int i; int size = 8 * sizeof(int); char *ps = (char *)malloc(size+1); for (i = size - 1; i >= 0; i--, n >>= 1) ps[i] = (01 & n) + '0'; ps[size] = '\0'; printf(“%s\n”,ps); free(ps); }