CS1101C Practical Exam

Session 1 (1600 - 1745 hours)

Punctuation Frequency

The name of your C program file must be called punct.c, files with any other name will not be marked.

The deadline for this lab is Tuesday 15 April 2008, 17:45:59 hours. Strictly no submissions will be accepted after the deadline.

Introduction

Did you know that the ancient languages like Greek and Hebrew did not contain any punctuation?

English has many punctuation characters. Which punctuation characters occur most often?

Your task is to write a simple program that reads in a text file, counts the frequency of each punctuation character, and display the results in a sorted order on the screen.

Punctuation characters are defined as any non-control character that is not a letter, digit, or whitespace.

Text File

A sample text file called text1.txt has been copied into your directory by the pesetup command. Here is the sample text file:
http://www.rpbridge.net/8t69.htm

Board 1

North Deals   S 10 9 3
None Vul      H 9 7 5 4
              D K 10 5
              C 9 8 6

S Q                       S J 7 6 5 4
H A K Q J 10 3            H -
D 8 7 6 4                 D A Q J 9 3
C 10 2                    C A K 5
              S A K 8 2
              H 8 6 2
              D 2
              C Q J 7 4 3

Off to a red-hot start! East-West can make a slam in either red suit,
but it's hardly biddable. A common auction should be:

West North East South
     Pass  1S   Pass
2H   Pass  3D   Pass
4H   All Pass

Some Souths may scrounge a 2C overcall, which should not change the
East-West bidding. West might sense a slam after East's 3D bid, but
the four-card fit is less appealing without an honor. The key to slam is
East having almost all his points outside of spades -- hard to
visualize, unless the Bridge Laws allowed an opening of "one no
spades."

In hearts, 12 tricks are easily made by taking two diamond finesses.
After a club lead, it is tempting to try for all 13: Ruff the third
club, draw trumps, finesse diamonds once and hope they split. Oops; the
price of greed is then only 11 tricks. Been there; done that.

In diamonds, the same 12 tricks are available with careful play (ruff
two black cards, win three hearts, finesse trumps twice) but it is
doubtful many will play there. Even if West stretches to slam, it would
be quite a position to choose diamonds over hearts at matchpoints.

Sample Output

Assuming that the executable is punct.c, sample runs of the program are shown below. The sample runs are self-explanatory. Follow the sample output precisely. User input is denoted in bold.

We will test your program with other text files.

$ gcc -Wall punct.c -o punct

$ ./punct text1.txt

. 13
, 12
- 7
/ 3
: 3
" 2
' 2
; 2
! 1
( 1
) 1

$

Notice that the output shows each punctuation character followed by the number of times it occurred in the text file. Punctuation characters that do not occur at all are not shown. The list is sorted in descending order of frequency. If one or more punctuation characters have the same frequency count, display the punctuation character with the lowest ASCII value first. You may use any sorting algorithm you wish. Hint: Maintain two arrays, one containing the punctuation characters, and the other containing the frequency count of each punctuation character.

You may assume that there are at the most 40 different punctuation characters.

You may assume that each line in the text file contains at the most 80 characters (excluding the newline characters).

You may assume that the text file always exists, and is always supplied as an argument on the command line. The name of the text file is obtained from this command line argument.

Important Notes

Do not use any structures or any form of dynamic memory allocation (using malloc or calloc) in your program, else no credit will be given.

Remember to submit your program frequently using the submit punct.c command, and check your submission using the check command.

All the best!

UNIX commands

Some useful UNIX commands (in case you forgot what you did in Lab 0):

  1. dir”: lists all the files in the directory.
  2. cp a.txt b.txt”: copies a.txt to b.txt.
  3. mv a.txt b.txt”: moves / renames a.txt to b.txt.
  4. cat a.txt”: shows the contents of a.txt.