My Project
Number Conversion in C
Programming Assignment P2: CS270 Computer Organization

Programming Assignment P2
Number Conversion


Programming due Sunday, Jan. 31 at 10:00pm, late deadline at 11:59pm.


This assignment has four objectives:
  1. To learn how to to compile multiple C files into an executable program.
  2. To demonstrate that many of the Java programming constructs you learned are valid in C. (Java and C++ syntax were based on C).
  3. To learn how to convert between human readable numeric values and internal numeric values and vice-versa.
  4. To become comfortable working in various number bases.
  5. To learning a little about C pointers.
  6. To learn simple iteration through a C string.

First read the Getting Started section below and then study the documentation for numconv.h in the Files tab to understand the details of the assignment. In addition, these two references provide additional information:


Getting Started

Perform the following steps
  1. Create a directory for this assignment. A general scheme might be to have a directory for each CS class you are taking and beneath that, a directory for each assignment. The name of the directory is arbitrary, but you may find it useful to name it for the assignment (e.g. P2).
  2. Copy the three files into this directory. It is easiest to right click on the link, and do a Save Target As.. for each of the files.
  3. Open a terminal and make sure you are in the directory you created in step 1. The cd command can be used for this.
  4. In the terminal type the following three commands to build the executable.
    
        gcc -std=c11 -g -Wall -c testConv.c // compile command
        gcc -std=c11 -g -Wall -c numconv.c // compile command
        gcc -g numconv.o testConv.o -o testConv // link command
        
  5. In the terminal type ./testConv and read how to run the the program.

You now have a functioning program. All the commands work. However, none will produce correct results at this point.


Completing the Code

Before attempting to write any of the functions of numconv.c, study the documentation in found in the files tab. Plan what you need to do before writing code.

The best way to complete the code is to follow a write/compile/test sequence. Do not attempt to write everything at once. Rather, choose one function and do the following steps.

  1. Write some/all of one function in numconv.c using your favorite editor.
  2. Save your changes and recompile numconv.c using the command shown above. You may find it convenient to work with both a terminal and editor window at the same time.
  3. Repeat steps 1 and 2 until there are no errors or warnings.
  4. Rebuild the executable using the link command shown above.
  5. Test the function you have been working on. Do not attempt to move on until you complete and thoroughly test a function. You will find that the function int2char() is called in the int2ascii() function and that char2int() is useful in ascii2int(). Therefore, you might write the functions in the following order:
    1. int2char()
    2. char2int()
    3. divRem()
    4. ascii2int()
    5. int2ascii()
    6. ascii2double() [Extra Credit]
  6. Repeat steps 1 thru 5 for the remaining functions.

Iterating thru a C string

In C, a string is an array of characters that is terminated with a character having a value 0 (i.e. its ascii value is 0). Compare this to the ascii value 0x30 which represents the character '0'. You will learn that there is a relationship between pointers and arrays later in the course. For now, simply understand that if you are given a string (char* string) that you may examine each of the characters with the code:

   for (int i = 0; string[i] != 0; i++)
Later you will learn how to dereference the pointer and increment it. You will need to do this in the ascii2int()/ascii2double() functions.


The divRem() function

This function gives you a simple introduction to pointers. The function computes the quotient and remainder and returns both to the caller. The result is that the function is able to "return" multiple values to the caller. The caller passes pointers to the addresses where it wants the results stored and the function uses the dereference operator to store the values. Review your notes from class and study how pointers are used in testConv.c.

You may implement this function however you want, including using the C operators for division and modulus (/ %). However, you may want to implement it using repeated subtraction as this will give you a pattern to follow later in the course when you implement this functionality in LC3 assembly language.

Specifications

Your program must meet the following specifications:

Grading Criteria

Submit the single file numconv.c to the Checkin tab on the course website, as you were shown in the recitation.
© 2016 CS270 Colorado State University. All Rights Reserved.