# Lab Exercise 1 (Structuring the Document) (Optional) > This is meant as review of imperative programming languages like C. This Lab Exercise is optional. ## Task A document is represented as a collection paragraphs, a paragraph is represented as a collection of sentences, a sentence is represented as a collection of words and a word is represented as a collection of lower-case ([a-z]) and upper-case ([A-Z]) English characters. **Create a C program that will convert a raw text document into its component paragraphs, sentences and words**. To test your results, queries will ask you to return a specific paragraph, sentence or word as described below. Words, sentences and paragraphs are represented using C structures #### words ```C struct word { char* data; }; ``` #### sentences ```c struct sentence { struct word* data; int word_count;//the number of words in a sentence }; ``` The words in a sentence are separated by one space. The last word does not end in space (" "). #### paragraphs ```c struct paragraph { struct sentence* data ; int sentence_count;//the number of sentences in a paragraph }; ``` The sentences in the paragraph are separated by one period ("."). There are no spaces after the period. #### document ```c struct document { struct paragraph* data; int paragraph_count;//the number of paragraphs in document }; ``` The paragraphs in the document are separated by one newline (`\n`). The last paragraph does not end with a newline. The paragraphs in the document are separated by one newline(`\n`). The last paragraph does not end with a newline. For example: ``` Learning C is fun. Learning pointers is more fun.It is good to have pointers. ``` The only sentence in the first paragraph could be represented as: ```c struct sentence first_sentence_in_first_paragraph; first_sentence_in_first_paragraph.data = {"Learning", "C", "is", "fun"}; ``` The first paragraph itself could be represented as: ```c struct paragraph first_paragraph; first_paragraph.data = {{"Learning", "C", "is", "fun"}}; ``` The first sentence in the second paragraph could be represented as: ```c struct sentence first_sentence_in_second_paragraph; first_sentence_in_second_paragraph.data = {"Learning", "pointers", "is", "more", "fun"}; ``` The second sentence in the second paragraph could be represented as: ```c struct sentence second_sentence_in_second_paragraph; second_sentence_in_second_paragraph.data = {"It", "is", "good", "to", "have", "pointers"}; ``` The second paragraph could be represented as: ```c struct paragraph second_paragraph; second_paragraph.data = {{"Learning", "pointers", "is", "more", "fun"}, {"It", "is", "good", "to", "have", "pointers"}}; ``` Finally, the document could be represented as: ```c struct document Doc; Doc.data = {{{"Learning", "C", "is", "fun"}}, {{"Learning", "pointers", "is", "more", "fun"}, {"It", "is", "good", "to", "have", "pointers"}}}; ``` Alicia has sent a document to her friend Teodora as a string of characters, i.e. represented by char* not a struct document. Help her convert the document to struct document form by completing the following functions: - `void initialize_document(char *text)` - to intialise the document. to return the paragraph in the document. - `struct paragraph kth_paragraph(int k)` - return the kth paragraph in the document - `struct sentence kth_sentence_in_mth_paragraph(int k, int m)` - to return the kth sentence in the mth paragraph. - `struct word kth_word_in_mth_sentence_in_nth_paragraph(int k, int m, int n)` - to return the kth word in the mth sentence of the nth paragraph. **Input Format:** The first line contains the integer `paragraph_count`. Each of the next `paragraph_count` lines contains a paragraph as a single string. The next line contains the integer `q`, the number of queries. Each of the next `q` lines contains a query in one of the following formats: - `1 k`: This corresponds to calling the function` kth_paragraph`. - `2 k m`: This corresponds to calling the function `kth_sentence_in_mth_paragraph`. - `3 k m n`: This corresponds to calling the function `kth_word_in_mth_sentence_in_nth_paragraph`. **Constraints** - The text which is passed to get_document has words separated by a space, sentences separated by a period and paragraphs separated by a newline. - The last word in a sentence does not end with a space. - The last paragraph does not end with a newline. - The words contain only upper-case and lower-case English letters. - 1 <= number of characters in the entire document <= 1000 . - 1 <= number of paragraphs in the entire document <= 5. **Output Format** Print the paragraph, sentence or the word corresponding to the query to check the logic of your code. **Sample Input 0** ```c 2 Learning C is fun. Learning pointers is more fun.It is good to have pointers. 3 1 2 2 1 1 3 1 1 1 ``` **Sample Output 0** ```c Learning pointers is more fun.It is good to have pointers. Learning C is fun Learning ``` **Explanation 0** - The first query returns the second paragraph. - The second query returns the first sentence of the first paragraph. - The third query returns the first word of the first sentence of the first paragraph ## Assessment Criteria *This exercise is optional*