Question: Let us consider the following structure definitions: /* A Track represents the information about a single track of a musical album. */ struct track {

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 Please help me solve this

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!