Homework Assignment 5 CS 340d Unique Number: 50960 Spring, 2019 Given: February 25, 2019 Due: March 6, 2019 1. This problem is a further evolution of Problem 1 from HW #3 and HW #4. Our specification remains the same: char *dst, *src; // Set src and dst pointers while( *dst++ = *src++ ); This program fragment copies memory bytes from *src to *dst one byte at a time. Unlike Problem 1 from HW #3 and HW #4, we no longer know that the initial value of pointer ``src'' and ``dst'' are long-word (8-byte) aligned. If they are, then the solution you produced for Problem 1 of HW #3 should (hopefully) work. But, if the starting point of ``src'' and ``dst'' are not 8-byte aligned, then you will need to do some additional work. Your solution should not read each word from the memory referenced by ``src'' more than once and should not write each word referenced by ``dst'' more than once. Be sure to specify a loop invariant and a termination condition for all forms of your memory copy program. 2. Write a C-language program which converts ASCII to EBCDIC and also converts EBCDIC to ASCII. Your program should read input from stdin and write the converted output to stdout. You do not need to parse filename arguments on the command line, just read from stdin and write to stdout. Your program should include an invariant which specifies when the EBCDIC-to-ASCII conversion will be lossless. It should also include another invariant which specifies when the ASCII-to-EBCDIC is lossless. When the conversion will not be lossless, the return status should be a negative number. When supplying this program with ASCII input that can be converted to EBCDIC in a lossless manner, it should also be possible to convert that EBCDIC back to ASCII in a lossless manner. 3. Turn in your C-language code for the predicate for Part B of Lab #1. This predicate should identify a unique representation of a 2-dimensional set. This is a way for you to get early feedback on your Lab #1 effort.