Teaching:
FeedbackStudent Number | Assignments | Test | Final grade | |||
---|---|---|---|---|---|---|
collatz | assoc array | retake (June) |
||||
L1 | 155896 | 4.0 | 4.0 | 6.8 | 11.0 | 3.5 |
156072 | 4.0 | 3.5 | 15.1 | 4.0 | ||
156047 | 3.0 | 3.0 | 8.0 | 10.7 | 3.0 | |
156053 | 5.0 | 5.0 | 16.6 | 5.0 | ||
156069 | 4.5 | 4.0 | 15.9 | 4.5 | ||
156074 | 3.0 | 3.0 | 4.8 | 2.0 | ||
156060 | 3.0 | 3.0 | 7.3 | 11.2 | 3.0 | |
156062 | 3.0 | 4.0 | 14.8 | 4.0 | ||
156055 | 4.5 | 3.5 | 19.4 | 4.5 | ||
156042 | 4.0 | 4.5 | 18.9 | 4.5 | ||
156044 | 3.0 | 3.5 | 5.8 | 6.0 | 2.0 | |
156058 | 4.5 | 4.0 | 10.9 | 3.5 | ||
156070 | 3.0 | 3.5 | 5.9 | 7.2 | 2.0 | |
156063 | 4.0 | 3.5 | 10.7 | 3.5 | ||
158763 | — | — | absent | |||
L2 | 156034 | 4.5 | 4.0 | 12.8 | 4.0 | |
151114 | 3.0 | — | 3.8 | 2.0 | ||
156073 | 5.0 | 5.0 | 18.4 | 5.0 | ||
156038 | 4.0 | 5.0 | 19.5 | 5.0 | ||
156048 | 4.5 | 5.0 | 15.2 | 4.5 | ||
156040 | 3.0 | 5.0 | 11.5 | 3.5 | ||
156049 | 4.5 | 5.0 | 15.8 | 4.5 | ||
156061 | 3.0 | 4.0 | 9.4 | 14.9 | 4.0 | |
156066 | 3.0 | 3.0 | 14.0 | 3.5 | ||
156068 | 3.5 | 3.5 | 17.5 | 4.5 | ||
156041 | 3.5 | 4.0 | 10.4 | 3.0 | ||
156064 | 5.0 | 3.5 | 6.8 | 11.2 | 3.5 | |
156059 | 4.5 | 4.5 | 16.4 | 4.5 | ||
156039 | 5.0 | 4.5 | 17.2 | 5.0 | ||
156057 | 5.0 | 4.5 | 18.0 | 5.0 | ||
MAX | 20.00 | 20.00 |
A summary of how come the grades for assignment 2 are so low in group L1:
1) An associative array is a data structure "such that each possible key appears at most once in it". If you did not know what it is, you should have read at least the linked Wikipedia article. 9 out of 14 of you wrote insert so that it does not check whether the key is already present in the map, but it just adds duplicate keys. And get/remove so that it gets/removes only operates on the first item with matching key. 2) Your assignment was to "write a thread-safe associative array (key-value map) that offers the following operations". Your assignment was NOT to write code that executes these operations in one specific use case! 8 out of 14 of you did not have the operations explicitly listed in the requirements. 3) Your assignment was to "write a thread-safe array". That means, among other, that when get(5) executes concurrently with erase(5), then no use-after-free occurs. So if your code had lines akin to: | pthread_mutex_unlock(&mutex); | return temp->data; in the get/poll, then a concurrent erase could free the memory that is pointed by temp, and you read from deallocated memory. 5 out of 10 of you made this mistake. The remaining 4 people did not write a get method that returns a value. 4) You were required to write "operations that allow iterating over all key-value pairs: first(), next(…), last() (or equivalent)". 8 out of 14 of you did not have these operations or had such operations, but they did not allow iterating over key-value pairs. Most of you wrote an operation that prints all keys instead. But that is merely a specific use case of iterating over k-v pairs. 5) A language remark: poll and pool both belong to computer science technical vocabulary and describe different things: 'poll' - https://en.wikipedia.org/wiki/Polling_(computer_science), 'pool' - https://en.wikipedia.org/wiki/Pool_(computer_science), (and I also saw at least one 'pull' amidst the files you sent me).