CS253: Software Development with C++

Fall 2021

HW 1

CS253 HW1: Counting Sort                

Changes                

The C int array used to store the counts must have exactly 100 entries.                 

Description                

For this assignment, you will write a C++ program called hw1 that will read integers in the range 0…99 from standard input, and perform a counting sort on the integers. It will display the sorted integers in two ways: firstly as integers and counts, secondly as repeated integers.                 

Counting sort                

Start with an array of zeroes. It contains counts, representing how many times each integer has been seen:                 

0123456789
0000000000

Of course, this array can only handles values 0…9.                 

We read the value 5. Increment location 5 from 0 to 1:                 

0123456789
0000010000

Then, we read 6, another 5, a 2, and yet another 5, incrementing as we go:                 

0123456789
0010031000

Now, we scan the array, ignoring the 0 counts. We see 1 instance of 2, 3 instances of 5, and 1 instance of 6. We could write that out like this:

    2x1 5x3 6x1

or, equivalently:

    2,5,5,5,6

Look! The integers are sorted!                 

This is the Colorado State University CS253 web page https://cs.colostate.edu/~cs253/Fall21/HW1 fetched by unknown <unknown> with Linux UID 65535 at 2024-11-21T18:41:53 from IP address 18.118.30.137. Registered CSU students are permitted to copy this web page for personal use, but it is forbidden to repost the information from this web page to the internet. Doing so is a violation of the rules in the CS253 syllabus, will be considered cheating, and will get you an F in CS253.

Sample Run                

Here is a sample run, where % is my prompt.                 

% cat CMakeLists.txt
cmake_minimum_required(VERSION 3.11)
project(hw1)

# Are we in the wrong directory?
if (CMAKE_SOURCE_DIR MATCHES "[Hh][Ww]([0-9])$"
   AND NOT PROJECT_NAME MATCHES "${CMAKE_MATCH_1}$")
    message(FATAL_ERROR "Building ${PROJECT_NAME} in ${CMAKE_SOURCE_DIR}")
endif()

# Using -Wall is required:
add_compile_options(-Wall)

# These compile flags are highly recommended, but not required:
add_compile_options(-Wextra -Wpedantic)

# Optional super-strict mode:
add_compile_options(-fmessage-length=80 -fno-diagnostics-show-option
    -fstack-protector-all -g -O3 -std=c++17 -Walloc-zero -Walloca
    -Wctor-dtor-privacy -Wduplicated-cond -Wduplicated-branches
    -Werror -Wextra-semi -Wfatal-errors -Winit-self -Wlogical-op
    -Wold-style-cast -Wshadow -Wunused-const-variable=1
    -Wzero-as-null-pointer-constant)

# add_compile_options must be BEFORE add_executable.

# Create the executable from the source file main.cc:
add_executable(${PROJECT_NAME} main.cc)

# Create a tar file every time:
add_custom_target(${PROJECT_NAME}.tar ALL COMMAND
    tar -cf ${PROJECT_NAME}.tar *.cc CMakeLists.txt)
% cmake . && make
… cmake output appears here …
… make output appears here …
% cat data
42 13
99 013 00013

4
42 0 42 42 42 42

% ./hw1 <data
0x1 4x1 13x3 42x6 99x1
0,4,13,13,13,42,42,42,42,42,42,99
% cat data | ./hw1
0x1 4x1 13x3 42x6 99x1
0,4,13,13,13,42,42,42,42,42,42,99
% ./hw1 </dev/null


% echo 11 10 9 10 11 | ./hw1
9x1 10x2 11x2
9,10,10,11,11

Standard Input                

If run without any redirection via < or |, then what should hw1 do? It should do what it always does: read from standard input. In this case, since standard input has not been changed with < or |, standard input remains connected to the keyboard. The program will appear to stop, but it is simply reading from the keyboard.                 

When that happens, the user has two options:

Hints                

Debugging                

If you encounter “STACK FRAME LINK OVERFLOW”, then try this:

    export STACK_FRAME_LINK_OVERRIDE=ffff-ad921d60486366258809553a3db49a4a

Requirements                

If you have any questions about the requirements, ask. In the real world, your programming tasks will almost always be vague and incompletely specified. Same here.                 

Tar file                

    cmake . && make

Remember how HW0 went on & on about testing your tar file? It applies here, too, and also to all other assignments.                 

How to submit your work:                

In Canvas, check in the file hw1.tar to the assignment “HW1”. It’s due 10:00:00ᴘᴍ MT Saturday, with a 24-hour late period for a 25% penalty.                 

How to receive negative points:                

Turn in someone else’s work.