Lab 6
Logistics
- Due: Friday, March 1st AoE.
- Submission instructions: ensure that you have the source code you want us to
grade in a file called
lab6.c
in your~/csci112_spring2024/labs/lab6
directory, and that the snapshot (commit) of your repository containing the version of that file you want us to grade has been committed and tagged aslab6
. (You should have set up yourgit
repo and practiced tagging a commit in Classwork 4.)
Outside resources
On this assignment, you may not use the the internet or generative AI such as ChatGPT to solicit solutions to the programming part of the assignment. If you are having trouble writing your program, please go to lab (Fridays, 10am-4pm in Barnard 254) or post in Discord to get help.
However, you may use those resources for help with navigating the Linux terminal, using vim, and using git, although you may get better answers to your questions by going to lab or posting on Slack anyway.
Learning outcomes
- Practice using arrays.
- Practice using file pointers.
- Practice sorting an array.
Assignment
In this lab, you will write a program that can read in unsorted doubles from a file and print them out in sorted order in a different file.
For this assignment, you can hard-code the input filename into your program.
The input file can be found in /public/labs/lab6/numbers.txt
and it looks like this:
[g73x595@csci112 lab6]$ cat /public/labs/lab6/numbers.txt
34.56 -0.01 9.7
5.55 3.14 3.3303330303 1.0 -45.99
18.1
In general, the file will have up to 100 doubles separated by whitespace. You must
read the file using fscanf
, not using redirection and scanf
, and you
should store the doubles in an array.
Your program must use selection sort (see slides on arrays) to sort the numbers in ascending order (smallest first) and
write them to a new file called outdata.txt
in the directory where the program
is being run. You should use fprintf
to write to the file.
As your program runs, it should print out the current state of the array, like so:
[g73x595@csci112 lab6]$ gcc lab6.c -Wall
[g73x595@csci112 lab6]$ ./a.out
Before sorting, arr of numbers is
34.56 -0.11 9.70 5.55 3.14 3.33 1.00 -45.99 18.10
Now performing selection sort:
-45.99 -0.11 9.70 5.55 3.14 3.33 1.00 34.56 18.10
-45.99 -0.11 9.70 5.55 3.14 3.33 1.00 34.56 18.10
-45.99 -0.11 1.00 5.55 3.14 3.33 9.70 34.56 18.10
-45.99 -0.11 1.00 3.14 5.55 3.33 9.70 34.56 18.10
-45.99 -0.11 1.00 3.14 3.33 5.55 9.70 34.56 18.10
-45.99 -0.11 1.00 3.14 3.33 5.55 9.70 34.56 18.10
-45.99 -0.11 1.00 3.14 3.33 5.55 9.70 34.56 18.10
-45.99 -0.11 1.00 3.14 3.33 5.55 9.70 18.10 34.56
Then, you should also write the sorted array to outdata.txt
with one number
per line, like this:
[g73x595@csci112 lab6]$ cat outdata.txt
-45.99
-0.11
1.00
3.14
3.33
5.55
9.70
18.10
34.56
As always, make sure you match the output formatting exactly so that the autograder can read your answers.
Hints
- Since you know you will get no more than 100 doubles in the input file, you can declare an array to store the numbers with 100 slots.
- Follow the selection sort pseudocode from the slides carefully.
Grading–100 points
- 10: source file exists with correct name in correct location
- 10: source file compiles without warnings
- 5: uses
fscanf
to read from/public/labs/lab6/numbers.txt
- 5: uses
fprintf
to write tooutdata.txt
- 5: printing arrays is formatted correctly in output to console
- 5: printing arrays is formatted correctly in
outdata.txt
For each of 3 tests,
- 5: numbers are read in correctly
- 5: intermediate sorting steps are correct in output to console
- 10: final sorted output in
outdata.txt
is correct
Autograder
You can run the autograder using
/public/labs/lab6/autograder.sh
A detailed breakdown of your score will be present in autograder.txt
.
Grading turnaround
Scores will be uploaded to D2L by class time the Wednesday after the due date.