# Week 6 - Dictionaries ## Team Team name: Date: Members | Role | Name | |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------| | **Facilitator** keeps track of time, assigns tasks and makes sure all the group members are heard and that decisions are agreed upon. |Mihail | | **Spokesperson** communicates group’s questions and problems to the teacher and talks to other teams; presents the group’s findings. |Mihail | | **Reflector** observes and assesses the interactions and performance among team members. Provides positive feedback and intervenes with suggestions to improve groups’ processes. |Mihail | | **Recorder** guides consensus building in the group by recording answers to questions. Collects important information and data. |Mihail | ## Activities ### Activity 1: count letters in a string ```c= unsigned long countLetters(unsigned long counts[static 26], const char* str){ for (int i = 0; i<strlen(str); i++){ if(isalpha(str[i])){ int letter = tolower(str[i]) - 'a'; counts[letter]++; } } return counts; } ``` ### Activity 2: recognizing languages The implementation of makeSignature(): ```c= const char* makeSignature(unsigned long counts[static 26]){ static char signature[7]; int max_idx = 0; for(int i = 0; i<7; i++) { // write the implementation for (int j = 0; j < 26; j++) { if(counts[j]>counts[max_idx]){ max_idx = j; } } signature[i] = max_idx + 'a'; counts[max_idx] = 0; } signature[6] = '\0'; // null terminator return &signature[0]; } ``` Unfortuantely the results I got from the match language function were not correct. The result I got was correct for the first file but incorrect for the rest. ### Activity 3: Find out: dictionaries around us Real life examples of key-value relationships can be: * A website database that links users to their account * A donation ledger linking a person's name with the amount they donated * A price sheet linking a product with its price * An ID verification system linking a person with their ID number * A key that is inherantly linked with the door that it unlocks ### Activity 4: Find out: dictionaries in other languages * Python has a data structure called exactly dictionary. It looks like this: ``` python= thisdict = { "brand": "Ford", "model": "Mustang", "year": 1964 } ``` Python allows the use of the method update() to add a key-value combination. It looks like this. ```python= thisdict.update({"color": "White"}) ``` It also allows the use of the method pop() to remove a key-value combination. An example is: ```python= thisdict.pop("model") ``` The get() method allows you to retrive the value if the key specified exists: ```python= x = thisdict.get("year") ``` * In C# the class Dictionary can be used to easily create a dictionary, like so: ```csharp= //creating a dictionary of strings with string keys Dictionary<string, string> openWith = new Dictionary<string, string>(); ``` The add() function can be used to add elements to the dictionary. The function can be used like this: ```csharp= openWith.Add("dib", "paint.exe"); ``` The remove() function can be used like this: ``` csharp= Console.WriteLine("\nRemove(\"key\")"); openWith.Remove("key"); if (!openWith.ContainsKey("key")) { Console.WriteLine("Key \"key\" is not found."); } ``` To get the value of a key we can use the function TryGetValue(). An example of the function can be seen here: ``` csharp= string value = ""; if (openWith.TryGetValue("tif", out value)) { Console.WriteLine("For key = \"tif\", value = {0}.", value); } else { Console.WriteLine("Key = \"tif\" is not found."); } ``` * Dictionaries in Java are called Maps * The same as C JavaScript also doesn't have a premade dictionary data structure. * In Swift a dictionary is declared like this: ```swift= @frozen struct Dictionary<Key, Value> where Key : Hashable ``` ### Activity 5: ensureCapacity function ```c= _Bool _ensureCapacity(Counter counter[static 1], const int minimumCapacity){ int new_capacity = counter->capacity; if (new_capacity == 0){ new_capacity = DEFAULT_CAPACITY; } while (minimumCapacity > new_capacity){ new_capacity *= GROWTH_FACTOR; } if (new_capacity > counter->capacity){ // TODO: implement resizing counter->data = realloc(counter->data, sizeof(Pair *) * new_capacity); counter->capacity = new_capacity; return true; } return false; } ``` ### Activity 6: insertAt function Record your answer here ### Activity 7: increment function And that's how you insert code blocks: ```c= double *number = malloc(sizeof(double)); ``` ### Activity 8: function strtok ### Activity 9: how many words ## Look back ### What we've learnt Fill in... ### What were the surprises Fill in... ### What problems we've encountered Fill in... ### What was or still is unclear Fill in... ### How did the group perform? How was the collaboration? What were the reasons for hick-ups? What worked well? What can be improved next time?