Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Programming Assignment 10 (60 points) Due date: March 23rd, 2018 at 11:59 PM Ove

ID: 3732423 • Letter: P

Question

Programming Assignment 10 (60 points) Due date: March 23rd, 2018 at 11:59 PM Overview This assignment will give you experience with dictionaries and the use of lists, as well as more practice with file Part 1: Word Index [30 points] Write a program that reads the contents of a text file. The program should create a dictionary in which the key- value pairs are described as follows: Key. The keys are the individual words found in the file. . Values. Each value is a list that contains the line numbers in the file where the word (the key) is found. For example, suppose the word "robot" is found in lines 7. 18, 94, and 138. The dictionary would contain an element in which the key was the string "robot". and the value was a list containing the numbers 7, 18, 94, and 138. Once the dictionary is built, the program should create another text file, known as a word index, listing the contents of the dictionary The word index file should contain an alphabetical listing of the words that are stored as keys in the dictionary, along with the line numbers where the words appear in the original file. The following figure shows an example of an original text file (Kennedy.txt) and its index file (index.txt). Name the source code files "WordIndex.py" We observe today not victoty of party but a celebration of freedon syebolizing an end observe : 1 3 today s a: 1 24 4 as well as abeginaing s signifying reneval as vell 6 as change e victory: 1 of: 3 party:2 9 but: 2 10 celebration: 2 11 freedom: 3 1 symbolizing: 3 end:3 3: 45 weli: 4 S ,signifying: 5 change: 17 beginning: 4

Explanation / Answer

Part 1:

#include <stdio.h>

#include <string.h>

#define MAXW 100

#define MAXC 32

int main (int argc, char **argv)

{

    char seen[MAXW][MAXC] = {{ 0 }};

    char word[MAXC] = {0};

    size_t freq[MAXW] = {0};

    size_t i, idx = 0;

    FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;

    if (!fp) {

        fprintf (stderr, "error: file open failed '%s'. ", argv[1]);

        return 1;

    }

    /* seen 1st word into 'seen' array, update index 'idx' */

    if (fscanf (fp, " %32[^ ,. ]%*c", word) == 1) {

        strcpy (seen[idx], word);

        freq[idx]++;

        idx++;

    }

    else {

        fprintf (stderr, "error: file read error. ");

        return 1;

    }

    /* read each word in file */

    while (fscanf (fp, " %32[^ ,. ]%*c", word) == 1)

{

     

for (i = 0; i < idx; i++)

{

            /* if word already in 'seen', update 'freq' count */

            if (strcmp (seen[i], word) == 0) {

                freq[i]++;

                goto skipdup;   /* skip adding word to 'seen' */

            }

        } /* add word to 'seen', update freq & 'idx' */

        strcpy (seen[idx], word);

        freq[idx]++;

        idx++;

    skipdup:

        if (idx == MAXW) { /* check 'idx' against MAXW */

            fprintf (stderr, "warning: MAXW words exceeded. ");

            break;

        }

    }

    if (fp != stdin) fclose (fp);

    printf (" the occurrence of words are: ");

    for (i = 0; i < idx; i++)

        printf (" %-28s : %zu ", seen[i], freq[i]);

    return 0;

}