|
Computer Science 237 Computer Organization Williams College Fall 2006
|
|
Lab 1: Binary Numbers and C Practice
Due: Monday, September 18, 2006 at 9:00 AM
Lab meets this week in TCL 216. Remember, we begin at 1:00 PM.
Working with Numbers
Please answer each of the following problems, and turn in your
solutions on this paper. (Don't forget to write your name on it.)
- Represent each of the following quantities using each of the 8 bit
representations, if possible. All values are base 10 (unless noted),
and characters are ASCII (hint: see man ascii):
| | Signed |
Quantity | Unsigned | S. Mag. | 1's Comp | 2's Comp |
0 | | | | |
11 | | | | |
-42 | | | | |
42 | | | | |
-127 | | | | |
127 | | | | |
-128 | | | | |
128 | | | | |
255 | | | | |
DB16 (a positive) | | | | |
'6' (see man ascii) | | | | |
|
- Compute the following binary 2's complement problems in 4 bits.
Circle those answers that are suspect.
0001 0001 1001 1111
+0101 +0111 +1111 +0101
---- ---- ---- ----
- Compute the following binary 1's complement problems in 4 bits.
Circle those answers that are suspect.
0001 0001 0000 1000
+0101 +0111 +1111 +1111
---- ---- ---- ----
- The following problems are expressed in 8 bit, hexadecimal, 2's
complement. Compute the result as 16 bit 2's complement expressed
in hex. Again, circle suspect answers.
FF FF 01 4c 7f 80
+ 11 + FF + 7F x 04 x 7f x 80
---- ---- ---- ---- ---- ----
- True or false: 0.1 (base 10) can be represented as a
floating point number within the computer. Justify your answer.
- True or false: The signed product of two signed n-bit numbers
can always be correctly expressed as a signed 2n-bit number.
Justify your answer.
Unix and C practice
If you are not familiar with the CSLab Mac and FreeBSD systems, spend
some time getting familiar with those systems. We will be using both
during the semester. There is nothing to turn in for this part of the
lab.
- Go through the Unix tutorial handout. This will teach you how
to log in and out of the machines, use basic Unix commands, and edit
files with Emacs.
- Log into a Mac in TCL 216. Start X11, the X Window System, by
clicking on the rectangular while icon with an X on it in the dock at
the bottom of your desktop. This will bring up an "xterm" command
window.
- Log into a FreeBSD system in TCL 312. You have a separate
account there (separate password, home directory). Log into one of
the systems (you can go up to the lab or use ssh). There are several
options for the X11 environment here. Most students use KDE.
- To set up your account to find the tools we, you
should enter the command
source /usr/cs-local/bin/237
in the command window each time you log into a FreeBSD system, or
source /usr/mac-cs-local/bin/237
each time you log into a Mac.
Rather than type this command every time, you can make it happen
automatically by adding it to the file .local_bashrc in your
home directory.
- Identify the function of and experiment with these Unix Commands:
ls cd cp mv rm mkdir pwd
man chmod cat more grep head tail
ln find rmdir wc diff tar
Identify the function of and experiment with these Emacs Commands:
C-x C-s C-x C-c C-x C-f C-x C-w C-g C-a C-e
C-d C-_ C-v M-v C-s C-r M-%
Learn these commands - you will use them often. Hints can be found in
the Unix and Emacs web pages on the course website.
- Make a directory in your account on both the Macs and the
FreeBSD systems for CS 237 work (perhaps "237" or "cs237" might be reasonable). Use the chmod command to
restrict access to this directory so only you can read the files. Ask
a classmate, TA, or instructor to verify that he or she cannot see the
contents of this directory.
- Write a "Hello, world!" program in C and run it on both the
Mac and FreeBSD systems. In each case, the C compiler "gcc" should
be available.
C Programming Assignments
The last part of the lab is to write two C programs. Approach these
problems as best you can as a computer scientist. Make sure that your
code is well written and documented.
- Write a C program prime.c that reads an integer from the
input and prints out whether the number itself if prime, then prints
the primes that are closest to it (next smaller and next larger). You
might use this in a data structures course if you're looking to size a
hash table. Note that there no primes less than 2. Once you have the
program working, modify it so that it accepts its input as a
command-line parameter. If no command-line parameter is supplied, the
program should prompt for it, as was done in the original version. To
earn full credit, you should not check for unnecessary factors and you
should avoid making expensive calls to the math library.
- Write a C program access.c that reads in a five digit lab
access code as a decimal number that writes out each of the five digit
access codes that are equivalent (there are 32). Be aware that 1 and
2 are on the same button, as are 3 and 4, etc. 9 and 0 are on the
same button as well. Make sure that you print any leading zeros.
Again, your program should first check for the input on the command
line. If none is provided, it should prompt for it. You may assume
that the value on the input is an integer.
Submit these from the Macs or from the CS Lab FreeBSD systems using
the turnin utility:
turnin -c 237 prime.c
turnin -c 237 access.c
(Make sure you get a message at your command prompt that each file was
successfully turned in.)
Your programs will be graded based on correctness, documentation,
structure, and performance.
Just for fun and more practice, try this one:
Write a C program to find the three four-digit numbers that have this
special property: when you add the first two digits to the last two
digits and square the sum, you get the original number back.