Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 9 - Wednesday.  What did we talk about last time?  structs.

Similar presentations


Presentation on theme: "Week 9 - Wednesday.  What did we talk about last time?  structs."— Presentation transcript:

1 Week 9 - Wednesday

2  What did we talk about last time?  structs

3

4

5 C combines the power and performance of assembly language with the flexibility and ease- of-use of assembly language. Anonymous C combines the power and performance of assembly language with the flexibility and ease- of-use of assembly language. Anonymous

6

7  What about printing out a human-readable version of the time?  ctime() takes a time_t value and returns a string giving the day and time  Alternatively, strftime() has a set of specifiers (similar to printf() ) that allow for complex ways to format the date and time printf(ctime(time(NULL)); //prints Fri Mar 15 14:22:34 2013 printf(ctime(time(NULL)); //prints Fri Mar 15 14:22:34 2013

8 struct tm { int tm_sec; // Seconds (0-60) int tm_min; // Minutes (0-59) int tm_hour; // Hours (0-23) int tm_mday; // Day of the month (1-31) int tm_mon; // Month (0-11) int tm_year; // Year since 1900 int tm_wday; // Day of the week (Sunday = 0) int tm_yday; // Day in the year (0-365; 1 Jan = 0) int tm_isdst; /* Daylight saving time flag > 0: DST is in effect; = 0: DST is not effect; < 0: DST information not available */ }; struct tm { int tm_sec; // Seconds (0-60) int tm_min; // Minutes (0-59) int tm_hour; // Hours (0-23) int tm_mday; // Day of the month (1-31) int tm_mon; // Month (0-11) int tm_year; // Year since 1900 int tm_wday; // Day of the week (Sunday = 0) int tm_yday; // Day in the year (0-365; 1 Jan = 0) int tm_isdst; /* Daylight saving time flag > 0: DST is in effect; = 0: DST is not effect; < 0: DST information not available */ };

9  gmtime() and localtime() convert a time_t value to a struct that contains "broken down" time  gmtime() gives UTC time (used to be called Greenwich Mean Time)  localtime() gives the local time, assuming it is set up correctly  mktime() can convert from a broken down time back into time_t time_t seconds = time(NULL); struct tm* brokenDownTime = NULL; brokenDownTime = localtime(&seconds); if( (*brokenDownTime).tm_wday == 1 ) printf("It's just another manic Monday.\n"); time_t seconds = time(NULL); struct tm* brokenDownTime = NULL; brokenDownTime = localtime(&seconds); if( (*brokenDownTime).tm_wday == 1 ) printf("It's just another manic Monday.\n");

10  How accurate is the microsecond part of gettimeofday() ?  It depends on the accuracy of the software clock in your system  This clock measures time in units called jiffies  A jiffy used to be 10 milliseconds (100 Hz)  They raised the accuracy to 1 millisecond (1000 Hz)  Now, it can be configured for your system to 10, 4 (the default), 3.3333, and 1 milliseconds

11  For optimization purposes, it can be useful to know how much time a process spends running on the CPU  This time is often broken down into  User time: the amount of time your program spends executing its own code  System time: the amount of time spent in kernel mode executing code for your program (memory allocation, page faults, file opening)

12  You can time a program's complete execution by running it with the time command  It will give the real time taken, user time, and system time  Let's say you've got a program called timewaster  Run it like this:  Output might be: time./timewaster real 0m4.84s user 0m1.030s sys 0m3.43s real 0m4.84s user 0m1.030s sys 0m3.43s

13

14  Read in 100 student names, GPAs, and ID numbers  Sort them by ID numbers  Print out the values struct student { char name[100]; double GPA; int ID; }; struct student { char name[100]; double GPA; int ID; };

15  You might have noticed that there are all these odd types floating around  time_t  size_t  On some systems, you will even see aliases for your basic types  FLOAT  INT32  How do people create new names for existing types?

16  The typedef command allows you to make an alias for an existing type  You type typedef, the type you want to alias, and then the new name  Don't overuse typedef  It is useful for types like time_t which can have different meanings in different systems typedef int SUPER_INT; SUPER_INT value = 3; //has type int typedef int SUPER_INT; SUPER_INT value = 3; //has type int

17  The typedef command is commonly used with structs  Often it is built into the struct declaration process  It allows the programmer to leave off the stupid struct keyword when declaring variables  The type defined is actually struct _wombat  We can refer to that type as wombat typedef struct _wombat { char name[100]; double weight; } wombat; typedef struct _wombat { char name[100]; double weight; } wombat; wombat martin;

18  You can actually typedef the name of the struct to be the same without the struct part  Or, if you don't need the name of the struct inside itself, you can typedef an anonymous struct typedef struct wombat { char name[100]; double weight; } wombat; typedef struct wombat { char name[100]; double weight; } wombat; typedef struct { char name[100]; double weight; } wombat; typedef struct { char name[100]; double weight; } wombat;

19

20  Since you have all taken CS122 (and many have taken CS221), you all know the power of the linked list  A linked list is a dynamic data structure with the following features:  Insertion, add, and delete can be O(1) time  Search is O(n) time  They are ideally suited for a merge sort  They are a pain to program

21  Node consists of data and a single next pointer  Advantages: fast and easy to implement  Disadvantages: forward movement only X head 23 47 58

22  Since C doesn't have classes, we can't make a self-contained linked list  But we can create nodes and a set of operations to use on them  Clearly, we will need a struct to make the node  It will contain data  It will contain a pointer to the next node in the list  Doubly-linked lists are possible too

23  We'll use this definition for our node for singly linked lists  Somewhere, we will have the following variable to hold the beginning of the list typedef struct _node { int data; struct _node* next; } node; typedef struct _node { int data; struct _node* next; } node; node* head = NULL;

24  Let's define a function that takes a pointer to a (possibly empty) linked list and adds a value to the front  There are two possible ways to do it  Return the new head of the list  Take a pointer to a pointer and change it directly node* add(node* head, int value); void add(node** headPointer, int value);

25  Let's define a function that takes a pointer to a (possibly empty) linked list and a value and returns the node containing the value  Or NULL if there is no such node node* find(node* head, int value);

26  Let's define a function that takes a pointer to a (possibly empty) linked list and returns the sum of the values inside  An empty list has a sum of 0 int sum(node* head);

27  Let's define a function that takes a pointer to a (possibly empty) linked list and deletes the first occurrence of a given value  List is unchanged if the value isn't found  There are two possible ways to do it  Return the new head of the list  Take a pointer to a pointer and change it directly node* remove(node* head, int value); void remove(node** headPointer, int value);

28  Let's define a function that takes a pointer to a (possibly empty) linked list and adds a value in sorted order (assuming that the list is already sorted)  There are two possible ways to do it  Return the new head of the list  Take a pointer to a pointer and change it directly node* add(node* head, int value); void add(node** headPointer, int value);

29

30

31  The enum type  Lab 9

32  Finish Project 4  Due Friday by midnight!  Keep reading K&R chapter 6


Download ppt "Week 9 - Wednesday.  What did we talk about last time?  structs."

Similar presentations


Ads by Google