CSCI 1120 (Low-Level Computing), Fall 2017:
Homework 6

Credit:
20 points.

Reading

Be sure you have read, or at least skimmed, the assigned readings for classes through 10/11.

Honor Code Statement

Please include with each part of the assignment the Honor Code pledge or just the word ``pledged'', plus one or more of the following about collaboration and help (as many as apply).1Text in italics is explanatory or something for you to fill in. For written assignments, it should go right after your name and the assignment number; for programming assignments, it should go in comments at the start of your program(s).

Programming Problems

Do the following programming problems. You will end up with at least one code file per problem. Submit your program source (and any other needed files) by sending mail to bmassing@cs.trinity.edu with each file as an attachment. Please use a subject line that mentions the course and the assignment (e.g., ``csci 1120 hw 6'' or ``LL hw 6''). You can develop your programs on any system that provides the needed functionality, but I will test them on one of the department's Linux machines, so you should probably make sure they work in that environment before turning them in.

  1. (20 points) Write a C program that sorts the lines in a text file (considering each line as a string) using the library function qsort. So for example if the file contains lines "hello", "abcdef", "end", and "aaaa", the program should print
    aaaa
    abcdef
    hello
    end

    The program should take the name of the file to sort as a command-line argument (and print appropriate error messages if none is given or the one given cannot be opened) and write the result of the sort to standard output.

    To do this, I think you will need to read the whole file into memory. There are various ways to do this and perform the sort; the one I want you to use is somewhat involved but intended to give you more practice working with pointers. To get full credit you must use the approach described here.

    You can check your program's output by using the sort command to sort the input file and comparing its result (captured with I/O redirection!) with your result (also captured with I/O redirection). Correction: Depending on your account's configuration, the sort may do a simple sorting based on what strcmp returns for the lines in the file, OR it may do a comparison that is case-insensitive and ignores leading whitespace. For this problem I just want you to do the simple comparison. You can get the sort command to do that by overriding the normal configuration, thus:

    LC_COLLATE=C sort filetosort



Footnotes

... apply).1
Credit where credit is due: I based the wording of this list on a posting to a SIGCSE mailing list. SIGCSE is the ACM's Special Interest Group on CS Education.
... footnote2
printf with a %s conversion specification prints a string, which is assumed to end with the null character ('\0'). It's happy to print strings containing any number of newlines.


Berna Massingill
2017-10-11