Answered step by step
Verified Expert Solution
Question
1 Approved Answer
Please use C language. Strings: print_integer(...) Goals This assignment has the following goals: Goals Overview Prepare Instructions Pro tips (optional) Test-driven development Requirements Pre-tester 1.
Please use C language.
Strings: print_integer(...) Goals This assignment has the following goals: Goals Overview Prepare Instructions Pro tips (optional) Test-driven development Requirements Pre-tester 1. Understand number bases 2. Understand how printed representations of values relate to in-memory representations 3. Practice designing simple algorithms 4. Get a gentle introduction to test-driven development Overview You will create a function called print_integer (.) that prints a given integer in a specified number base. This is the first step toward future assignments in which you will implement your own version of printf(..) and sprintf(..). You will use your code from this assignment in the future assignments. Prepare Read this assignment description carefully, including the Code Quality Standards. Next, make sure you understand each of the topics below. You may need to do a bit of external reading. We have suggested several concise references to help you get up to speed. #include The #include directive is effectively replaced with the entire contents of the file it refers to. See pp. 90-91 in the textbook or the links on the Resources page. #include guards You will not need to use #include guards for this assignment, but you will see them in the header file (hw02.h). See the link on the Resources page. number bases For this assignment, you will need a good understanding of number bases. You will be writing code to express integers in a variety of number bases (e.g., binary, hexadecimal, etc.). However, most of the algorithms you see online will give you the digits from right-to-left. You will need to print them left-to-right. See pp. 134-137 in the textbook or the links on the Resources page. fputc..., stdout) To print a single character (ch) to the console (stdio), use this code: fputc(ch, stdout); That's all you need to know, for now. Some may ask how this is different from putchar(..). It is equivalent, but please use the fputc(...) form. If you would like to know more about fputc(..), see p. 659 in the textbook, the link on the Resources page, or simply type man fputc from bash. Instructions Start by getting the files. Type 264get hwO2 and then cd hwo2 from bash. You will find only one file: hw02.h. That is the header file. It defines the signature of the function you will implement: print_integer(.). You will be creating three new files: hw02.c, hwo2test.c, and hwo2test.txt. There is no starter code (other than the header file). hwo2.c is where your print_integer (...) implementation will go. To start this file, simply copy the function signatures from hw02.h into a new file called hw02.c and then add the braces to make them into functions. hwo2test.c will contain a main() function that will test your print_integer (.). hwo2test.txt will contain the expected output from running your tests in hwo2test.c. It will be a simple text file. To test if your code works perfectly, you will run the following: # compile your test together with your hwo2.c to create an executable called hwo2test GCC -o hwo2test hwo2test.c hw02.c # run your executable and send the output to a file called hwo2test.actual.txt (That filename is arbitrary.) ./hw02 test > hwO2test.actual.txt # compare the actual output with the expected output using the diff command diff hwo2test.actual.txt hw02 test.txt The diff command prints the differences so if you see any output at all, then your test failed. If you see no output, then it passed. Test-driven development The most efficient way to complete this assignment will be to follow a the test-driven development method. First, you will need to set up a skeleton hw02.c, hwo2test.c, and hwo2test.txt. Your print_integer (..) will do nothing. Your hwo2test.txt will be empty. Therefore, the test procedure described above will appear to pass. Now, repeat the following 2-step process until the assignment is complete. 1. Add a single test to your hwo2test.c and hwo2test.txt files. You will want to start with print_integer (...), so add a single call to print_integer(..) to your main((.) and a corresponding line in your hwo2test.txt. 2. Add just enough to your print_integer (.) so that it can pass that test. Hint: To print the digit 9, you can simply add the character literal for 'O' to the number 9, i.e., 'O' + 9. To the C compiler, there is almost no difference between 'O' and the number 48 (ASCII value of 'O'), so to that expression is the same as 48 + 9, which would give you the ASCII value for the digit '9'. 3. Save a copy of your code by running 264submit hwo2 hw02* every time you get a new part of the functionality working. You will want to start with very simple test cases, e.g., print_integer(1, 20, ""). Then, add a test for something slightly more complicated (e.g., multi-digit number) and implement enough of print_integer (.) to make that work. Keep adding tests and the corresponding code until print_integer(..) handles everything. Requirements 1. Your submission must contain each of the following files, as specified. file contents hw02.c functions print_integer (int n, int radix, char* prefix) return type: void Print the number n to the console (stdout) in the specified number base (radix), with the prefix immediately before the first digit. radix may be any integer between 2 and 36 (inclusive). n may be any int. For values of radix above 10, use lowercase letters to represent the digits following 9. print_integer (0) should not print a newline (' ' or '). Examples: print_integer (768336, 10, "") should print "768336" because the number seven-hundred sixty-eight thousand three-hundred thirty-six would be written as "768336" in base 10 (decimal). print_integer (-768336, 10, "") should print "-768336". print_integer (-768336, 10, "$") should print"-$768336". Notice that the prefix ("$") comes after the "-" and before the first digit. print_integer (768336, 16, "") should print "bb950" because the number seven-hundred sixty- eight thousand three-hundred thirty-six would be written as "bb950" in base 16 (hexadecimal). print_integer (768336, 16, "Ox") should print "Oxbb950". The "Ox" prefix is added only because it is passed as an argument to print_integer (..). print_integer (-768336, 16, "Ox") should print "-Oxbb950". print_integer (-768336, 2, "Ob") should print"-Ob10111011100101010000". print_integer (768, 10, "'); print_integer (-336, 10, "") should print "768-336". print_integer (65 .8 ," "should print "101" In case of inconsistency, the textual requirements in this document take precedence over this calculator. Reminder: Your test cases must be your own. Do not copy these or any other test cases. hwo2test.c functions main(int argc, char* argv[]) return type: int Test your print_integer(-). Your main() must return EXIT_SUCCESS. hwo2test.txt output Expected output from running your hwo2test.c. Either type the function signatures into your hw02.c or copy from your hw02.c. Copying from this web page won't work. 2. Your hwo2test.c must exercise all functionality (e.g., negative numbers, any radix between 2 and 36, largest possible n, smallest possible n, etc.). 3. Only the following external header files, functions, and symbols are allowed in your hw02.c. That means you may use printf(.) in your hwo2test.c but not in your hw02.c. You may use fputc() and stdout in either one (or both). header functions/symbols allowed in... stdio.h fputc,stdout hwo2.c, hwo2test.c stdio.h printf hwo2test.c stdlib.h EXIT_SUCCESS hwo2test.c limits.h INT_MAX, INT_MIN hwO2test.c stdbool.h bool, true, false hwo2.c, hwo2test.c All others are prohibited unless approved by the instructor. Feel free to ask if there is something you would like to use. 4. Repeat: Do not call printf(..) 5. Do not make any assumptions about the size of an int. 6. Submissions must meet the code quality standards and the course policies on homework and academic integrity. How much work is this? This is a little harder than it looks. Getting your print_integer (9) to work properly with any valid int is a puzzle that you need to solve. However, it does not require very much code. For example, the instructor's solution for print_integer (..) is only 20 sloc*. cloc reports 20 sloc for the whole file. * sloc = "source lines of code" (excluding comments and blank lines) Here's a screenshot of all three files that you will be turning in. (This screenshot was taken with a version of the code that had a bug. It didn't handle INT_MIN properly. Fixing the bug added another 4 lines to the code.) Your test cases must be your own. Do not copy test cases from here or anywhere else. We are sharing a few test cases so you can see how this works. In general, our code is not fair game unless explicitly stated otherwise. See the Syllabus. 1 #includeStep by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started