Description of the Program to Write Let us consider the foll…

Description of the Program to Write Let us consider the following structure definitions: /*   A Track represents the information about a single track of   a musical album.*/struct track {   char* name; // Title of the track   int duration; // Duration of the track, in minutes}; typedef struct track Track;/*   An Album represents the information about all the tracks    comprising a musical album.*/struct album {   Track* tracks;    int numberOfTracks; // current # of tracks stored in this album   int maxNumberOfTracks; // maximum # of tracks the album can store};typedef struct album Album; In this code, an Album holds a link to a dynamical array of Track structures which size is specified by maxNumberOfTracks. Each Track element holds information about the name of the track (as a char*) as well as its duration (as an int). We want to implement functions that are going to allow us to allocate and deallocate memory for an Album structure, including all the Track structures inside its dynamical array. The prototypes of the functions, and a summary of what they must accomplish, is as follows: Track* tracks_allocate(int size);/* This function returns the address of a dynamically allocated   array of Track. The size of this array is specified by the    parameter size. Each of the Track in the array has a default    duration of 0 minutes and a name set to NULL */void tracks_deallocate(Track* ptr, int numberOfTracks);/* This function deallocates the whole dynamical array of Track   but also makes sure that every Track had first its name field    deallocated (if it is not NULL).*/Album* album_allocate(int size);/* This function returns the address of a dynamically allocated    Environment that has its maxNumberOfTracks field initialized    to the value of the parameter size, and its tracks field    initialized with the help of the tracks_allocate function    that was previously defined. */ void album_deallocate(Album* ptr);/* This function deallocates the Album structure located at the    address specified by the parameter ptr. To this end, it also    makes use of the tracks_deallocate function previously defined. */ In addition to these allocation and deallocation functions, you will also implement a function that will allow you to add information about the name and duration of a Track in the dynamically allocated array of an Album. As you do so, you will also make sure to update its numberOfTracks field to reflect that there is an additional track now stored in the Album. You will also return without doing anything once the numberOfTracks has reached the maxNumberOfTracks. void album_add(Album* ptr, char* trackName, int trackDuration);/* This function adds information about a new Track of name    trackName and duration trackDuration to an already allocated    Album referred to by ptr. To store the duration and name,    you will use the first element of the array referred to by    the field tracks that has a NULL value for its name.    If no such element is available, which also means    numberOfTracks has reached maxNumberOfTracks, simply do    nothing and return.    Please note that you will use the standard strdup method    in order to duplicate trackName and assign the address of    this duplicate to the field name in your structure.*/ Last but not least, you will also implement a function to display the contents of an Album. Please note that it might be relevant to implement this function earlier in order to be able to test out the album_add method previously mentioned. void album_display(Album* ptr);/* This function displays all the information stored in an    Album which address is specified by the parameter ptr.    An example of the output is given in the instructions of   this final exam. */ Upload a .c source file containing the implementation of all the above functions. In addition, you will use the following main method to test your functions (Feel free to change the names and durations of the tracks of our Album. int main(){   Album* ptr = album_allocate(MAXSIZE);    album_add(ptr, “The ballad of Bilbo Baggins”, 4);   album_add(ptr, “Where the Eagles do not fly”, 5);   album_add(ptr, “Another Hobbit bites the dust”, 8);   album_add(ptr, “One Precious to rule them all”, 20);   album_add(ptr, “One does not simply sings about LOTR”, 6);   album_display(ptr);   album_deallocate(ptr);   return EXIT_SUCCESS;} Example of Execution Displaying Album with 5 Titles:    #1    (4 minutes)    “The ballad of Bilbo Baggins”    #2    (5 minutes)    “Where the Eagles do not fly”    #3    (8 minutes)    “Another Hobbit bites the dust”    #4    (20 minutes)   “One Precious to rule them all”    #5    (6 minutes)    “One does not simply sings about LOTR” Please note the following: We use tabulations (‘\t’) If the duration of a track is 1 minute there is no ‘s’ at the end of ‘minutes’ We display double quotes around the title of the track   Grading Criteria: Rubric # Pts Additional Grading Notes The program compiles without compilation errors or warnings 3 Deduct 1 point per minor compilation error (e.g., typo, forgotten semi-colon, forgotten or extra curly braces or parentheses). If the program does not compile due to too many errors or due to an error that is non-trivial to fix (see above), then the whole assignment receives zero points. The program executes without crashing at runtime 3 Deduct one point for each use case that leads the program to crash (maximum 3) tracks_allocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented tracks_deallocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented album_allocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented album_deallocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented album_add 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented album_display   3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented Total 24  

Description of the Program to Write Let us consider the foll…

Description of the Program to Write Let us consider the following structure definitions: /*   A Chapter represents the information about a single chapter of a book.*/struct chapter {   char* name; // Title of the chapter   int pages; // Length of the chapter, in pages}; typedef struct chapter Chapter;/*   A Book represents the information about all the chapters   comprising a book.*/struct book {   Chapter* chapters;   int numberOfChapters; // current # of chapters in this book   int maxNumberOfChapters; // maximum # of chapters of the book};typedef struct book Book; In this code, a Book holds a link to a dynamical array of Chapter structures which size is specified by maxNumberOfChapters. Each Chapter element holds information about the title of the chapter (as a char*) as well as its length in pages (as an int). We want to implement functions that are going to allow us to allocate and deallocate memory for a Book structure, including all the Chapter structures inside its dynamical array. The prototypes of the functions, and a summary of what they must accomplish, is as follows: Chapter* chapters_allocate(int size);/* This function returns the address of a dynamically allocated   array of Chapter. The size of this array is specified by the   parameter size. Each of the Chapter in the array has a default   length of 0 pages and a title set to NULL */void chapters_deallocate(Chapter* ptr, int numberOfChapters);/* This function deallocates the whole dynamical array of Chapter   but also makes sure that every Chapter had first its title field    deallocated (if it is not NULL).*/Book* book_allocate(int size);/* This function returns the address of a dynamically allocated   Book that has its maxNumberOfChapters field initialized   to the value of the parameter size, and its chapters field   initialized with the help of the chapters_allocate function    that was previously defined. */ void book_deallocate(Book* ptr);/* This function deallocates the Book structure located at the    address specified by the parameter ptr. To this end, it also   makes use of the chapters_deallocate function previously defined. */ In addition to these allocation and deallocation functions, you will also implement a function that will allow you to add information about the title and length of a Chapter in the dynamically allocated array of a Book. As you do so, you will also make sure to update its numberOfChapters field to reflect that there is an additional chapter now stored in the Book. You will also return without doing anything once the numberOfChapters has reached the maxNumberOfChapters. void book_add(Book* ptr, char* chapterTitle, int chapterLength);/* This function adds information about a new Chapter with title   chapterTitlte and length chapterLength to an already allocated   Book referred to by ptr. To store the length and title,    you will use the first element of the array referred to by   the field chapters that has a NULL value for its title.    If no such element is available, which also means   numberOfChapters has reached maxNumberOfChapters, simply do    nothing and return.    Please note that you will use the standard strdup method   in order to duplicate chapterTitle and assign the address of   this duplicate to the field title in your structure.*/ Last but not least, you will also implement a function to display the contents of a Book. Please note that it might be relevant to implement this function earlier in order to be able to test out the book_add method previously mentioned. void book_display(Book* ptr);/* This function displays all the information stored in a   Book which address is specified by the parameter ptr.    An example of the output is given in the instructions of   this final exam. */ Upload a .c source file containing the implementation of all the above functions. In addition, you will use the following main method to test your functions (Feel free to change the names and durations of the tracks of our Album. int main(){   Book* ptr = book_allocate(MAXSIZE);   book_add(ptr, “A boring beginning”, 4);   book_add(ptr, “Something finally happens”, 5);   book_add(ptr, “Wait, it is not what I thought”, 8);   book_add(ptr, “There is no hope now”, 20);   book_add(ptr, “No way! I did not see this coming!”, 6);   book_display(ptr);   book_deallocate(ptr);   return EXIT_SUCCESS;} Example of Execution Displaying Book with 5 Chapters:    #1    (4 pages)    “A boring beginning”    #2    (5 pages)    “Something finally happens”    #3    (8 pages)    “Wait, it is not what I thought”    #4    (20 pages)   “There is no hope now”    #5    (6 pages)    “No way! I did not see this coming!” Please note the following: We use tabulations (‘\t’) If the length of a chapter is 1 page there is no ‘s’ at the end of ‘pages’ We display double quotes around the title of the chapters   Grading Criteria Rubric # Pts Additional Grading Notes The program compiles without compilation errors or warnings 3 Deduct 1 point per minor compilation error (e.g., typo, forgotten semi-colon, forgotten or extra curly braces or parentheses). If the program does not compile due to too many errors or due to an error that is non-trivial to fix (see above), then the whole assignment receives zero points. The program executes without crashing at runtime 3 Deduct one point for each use case that leads the program to crash (maximum 3) chapters_allocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented chapters_deallocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented book_allocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented book_deallocate 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented book_add 3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented book_display   3 3 – Implemented according to requirements 2 – Mostly properly implemented 1 – Not properly implemented 0 – not implemented Total 24