Monthly Schedule

(Introduction to Programming Languages, Period D)

T 3/1/011

HW due: Read to the end of Chapter 8 (pp. 94-98); write the exercises below. Some people may be able to dash this off quickly, but most likely you will need some help. Mr. Hansen will be available during C, D, and E periods on Monday, 2/28. You are also encouraged to work with classmates, although each student must produce his own homework paper.

1. As you may have surmised by now, there is essentially no difference between an
int and a char except in how they are handled in expressions. An int can be added or subtracted or multiplied or divided, whereas a char can be concatenated. To convert back and forth between an int and a char, we can use a special capability of Java called the “typecast.” The purpose of a typecast is to convert a variable from one type to another. The typecast instruction is always the name of the desired type, in parentheses, followed by whatever you wish to convert.

For example, the following code is redundant, since it prints the
char value 'X' as a capital letter X:

      char testLetter='X';

      System.out.println((char)testLetter);

I say “redundant” since I could just as well have said
System.out.println(testLetter);

Saying

               
System.out.println((char)testLetter);

is rather silly, since testLetter is already a
char, and the (char) typecast is a waste of time.

However, if we change the
(char) typecast to an (int) typecast, and you should try this, you will have

      char testLetter='X';

      System.out.println((int)testLetter);

This is much more interesting! Now we get the Unicode value of the upper case letter X, which is 88.

You can also go the other way. Predict the result of the following code stub, and then describe in writing what happens:

      int testLetterValue=87;

      System.out.println((char)testLetterValue);


2. OK, now that you understand a little bit about converting between an
int and a char by using typecasts, run the following stub in your main method:

      String alphabet=" ABCDEFGHIJKLMNOPQRSTUVWXYZ";

      int i=0;

      char scratchChar;

      while(i<=26) {

            scratchChar=alphabet.charAt(i);

            System.out.println((char)scratchChar+" "+(int)scratchChar);

            i++;

      }


What is this program doing? Write a sentence or two.

3. In #2, why is there only a blank and the number 32 on the first line of output?

4. Write a
char method called encryptDecrypt13 that satisfies the following requirements:

                Requirement A. The method must return a
char and must accept as input a char called arg.

                Requirement B. If the input argument is a blank space, and you can easily check this by saying

                               
if ((int)arg==32),

                then return a blank space.

                Requirement C. If the input argument is one of the capital letters A through M, which you would check by comparing against integer values 65 through 77, then add 13 to the integer value and return the result as a
char.

                Hint: If you want to do this in a single line, try something like this:

               
if ((int)arg>=65 && (int)arg<=77) {return (char) ((int)arg+13);}

                Requirement D. If the input argument is one of the capital letters N through Z, which you would check by comparing against integer values 78 through 90, then subtract 13 from the integer value and return the result as a
char.

                Requirement E. If the input argument is anything other than those listed in Requirements B through D, then return the asterisk (*) character, as a
char, in order to indicate an encryption/decryption error.

Use the following code in your
main method to invoke encryptDecrypt13:

      String mrHansenTest="VCY VF IREL PUNYYRATVAT, OHG VG PNA OR SHA NYFB";

      int i=0;

      while (i<=mrHansenTest.length()-1) {

            System.out.print(encryptDecrypt13(mrHansenTest.charAt(i)));

            i++;

      }

      System.out.println(".");

      System.out.println("End of Mr. Hansen's test string.");


Make a printout of your code (both the
main method and the encryptDecrypt13 method).

5. Below your program listing, either copy and paste your output, or write out your output in pencil.

6. Optional bonus: Find a way of improving the readability of your code by using fewer typecasts in the comparisons. Explain why although your method works for the
char passed to the encryptDecrypt13 method, it would not work for String parameters.

7. Optional super bonus: Write a secret message that would be readable by anyone else who has a version of
encryptDecrypt13 satisfying Requirements A through E.

 

W 3/2/011

HW due: Write your test review questions. These can be simple (e.g., vocabulary terms) or hard (e.g., complicated code stub problems). Try to write things that you personally find challenging. If the review questions are not challenging enough, additional ones will be posed for you to answer in class.

In class: Review for test.

 

Th 3/3/011

Test (100 points, pencil required). You are responsible for all vocabulary through Chapter 8, as well as all terminology discussed in class (much of which is not in the textbook), but the only code stubs you will be expected to produce are those using techniques described in Chapters 1 through 7, plus typecasts. Grading of code stubs will be somewhat lenient, since you will be writing your code in pencil instead of on the computer. For example, an occasional forgotten semicolon will not count against you, but if you forget all of your semicolons, that would require some points to be deducted. Squiggly braces are more important, but you will not penalized for the first squiggly brace error. Indentation, however, must be logical.

Methods other than
main may be entered above or below main and in any order you wish, as long as main is either the first or the last method. You need to know how to insert code stubs in the proper place. However, the following “wrapper” will be provided for you in order to reduce the amount of material you have to memorize:

public class TestMarch3 {

      public static void main(String[] args) {


      }

 

}

Simple hex conversions may be tested, but floating-point conversions (requiring negative powers of 2 or 16) will not be on this test. Here are two sample problems to show the level of difficulty that is possible:

1. Convert 0xCAB to decimal (base 10).
Solution: C=12, A=10, and B=11. Place values are 162 = 256, 161 = 16, and 160 = 1. Answer = 12(256) + 10(16) + 11(1) = 3243.

2. Convert the base-10 integer 492 to hex.
Solution: 492 equals 1 group of 256, with a remainder of 236; 236 equals 14 groups of 16, with a remainder of 12. Therefore, 492 = 0x1EC.

 

F 3/4/011

HW due: Write the program that you did not do on yesterday’s test. Print out your program listing as well as the output. If you did #6 without using a loop, you must also re-do #6.

3. Square numbers are numbers (1, 4, 9, 16, etc.) based on patterns of dots arranged in squares. It is a mathematical fact that the nth square number equals the (n − 1)st square number plus 2n − 1. Use that fact to write a recursive method called sqNum, which takes an integer argument, n, and returns the nth square number. Now, clearly, sqNum(n) could be much more easily computed as n * n, but that would not be a recursive method.

Other requirements for sqNum are as follows: (a) sqNum should return an error value, −9999, as well as a printed error message, if n is less than 0, and (b) sqNum should return 0 and print a warning message if n is greater than 25.

Your
main method has the following requirements: (a) it must begin by printing a line that reads, “Table of square numbers and double-check values,” and (b) it must then print the values for n, sqNum(n), and n2 in three columns, for n between −4 and 29, inclusive.

[Note: Please use the Unicode tab character, "\t", to create neat columns. Also note that the range of values for n has been enlarged from what it was on the in-class version of the test, so that you can make sure that your error traps are working correctly.]

6. Write a program that prints the base 10 values for 0xC8 through 0xD8, one per line. [Before you start, you may wish to figure out what the base 10 values for 0xC8 and 0xD8 are, and then code those into your loop condition. Or, you can simply use the constants 0xC8 and 0xD8 exactly as they are. The choice is yours. However, you must use a loop! It is usually considered poor programming practice to hard-code things that should be in a loop.]

7. Write a program that includes a method called scrunchStr such that (a) scrunchStr accepts a String argument and prints a shorter string in which only the 1st, 3rd, 5th, . . . characters are displayed, all together on the same line, (b) if the argument passed to scrunchStr is null, scrunchStr should print only the word "null", and (c) your
main method causes the scrunchStr method to be invoked on the null string and the following two phrases:

HappyCal is fun.
IPL is fun.

The correct output would therefore be as follows:

null
Hpya sfn
ILi u.

 

M 3/7/011

No class.

 

T 3/8/011

No additional HW due. JD, please write up all three program stubs from the 3/4 calendar entry.

 

W 3/9/011

HW due: Write Exercise 8.4abdf. If you need help, please call a classmate or leave voice mail at 703-599-6624, since e-mail has been down for several days and is still down.

 

Th 3/10/011

HW due: Correct yesterday’s assignment so that it meets all of the stated requirements and includes a few well-worded comments; read Chapter 9 (pp. 103-114).

 

F 3/11/011

HW due: Skim (do not read thoroughly) the Wikipedia article on Mersenne primes. The 25th Mersenne prime, namely  was discovered in 1978. For convenience, we will refer to this gigantic integer as M21701 from now on. It is a 6533-digit monster (in base 10) that would be unmanageable by any computer, then or now, using primitive integer types.

However, with multiple-precision arithmetic, we can add, subtract, multiply, or divide numbers this size and even larger! Answer the questions below.

1. In Java, the
int type provides 4 bytes of storage. If we elect to treat the sign bit as if it were the same as any other bit (what C calls unsigned), we would therefore have how many bits of storage that we could use in a single variable of type int? Hint: A byte equals 8 bits. This question is meant to be easy. Do not over-think it.

2. Notational reminder: A subscript “2” denotes base 2, and the prefix “0x” denotes hexadecimal (hex, base 16). For now, do not worry about how the software would have to be written to deal with large numbers. We will deal with those questions later. Instead, observe the following patterns and fill in the blanks:

22 − 1 = 3 = 112 = 0x00000003
23 − 1 = 7 = 1112 = 0x00000007
24 − 1 = 15 = 11112 = 0x________________
25 − 1 = 31 = 111112 = 0x0000001F
28 − 1 = 255 = 111111112 = 0x000000FF
216 − 1 = 65535 = 11111111111111112 = 0x0000FFFF
224 − 1 = ________________ = 1111111111111111111111112 = 0x________________
232 − 1 = 4294967295 = 111111111111111111111111111111112 = 0xFFFFFFFF
221701 − 1 = M21701 = ________________________2

(For the last blank, you are not expected to write out all the bits! Simply describe what would go in the blank.)

3. Prove that if we were to join 700
int variables together in some fashion, we could easily represent integers as large as M21701. Hint: Figure out how many bits are required to represent M21701, and then show that 700 int variables would have more than that number of bits.

4. How many hex digits would be required to represent M21701? Hint: One hex digit equals 4 bits.

 

M 3/14/011

Pi Day (no class).

 

T 3/15/011

Beware the Ides of March! No additional written HW is due. However, there will be a

40-point Vocabulary Quiz

today, which is cumulative through Chapter 9. A few terms from in-class discussions may also be quizzed. Examples include kludge, rainbow table, requirements creep, stack overflow, LIFO, FIFO, overflow, and underflow.

Note: Under school policy, you may be required to take up to 2 tests on any day, but you can obtain an alternate testing date if your teachers have scheduled 3 or more tests for the same day. However, quizzes are not covered by this policy. Nevertheless, since some IPL students (namely Chase and Matthew) already have 2 tests scheduled for today, anyone who wishes to take the vocabulary quiz after chapel on Monday, March 14, may do so. If you wish to do that, please send an e-mail to Mr. Hansen so that an advance copy will be waiting for you. Otherwise, please plan on taking the quiz during class on March 15.

The quiz will last about 20 minutes and should not be a “killer quiz.” On the first vocabulary quiz, on Feb. 17, most people did well, and the average score was 93% (A).

 

W 3/16/011

HW due: Read pp. 119-121 (through §10.3); write the exercise at the bottom of p. 121 with the additional requirement that the array to be copied is an array of 10 integers whose values are the numbers 35 through 44. The copy that results should then be printed, one line per entry.

 

Th 3/17/011

HW due: Correct yesterday’s assignment so that it resembles the code stub below (not exactly, of course; you should add a few comments and enhancements as you deem appropriate). Make sure that it runs correctly. Then, read pp. 122-127 (to the end of Chapter 10) and modify yesterday’s assignment (below) so that the second loop uses the length attribute of array a, instead of the hard-coded upper limit of 9 or 10, when copying the elements of a to b.

public class ArrayTester {

      public static void main(String[] args) {

            int[] a=new int[10];

            int[] b=new int[10];

            int i;

            for (i=0;i<=9;i++) {

                  a[i]=35+i;

            }

            for (i=0;i<=9;i++) {

                  b[i]=a[i];

                  System.out.println(b[i]);

            }

      }

 

}


In class: We will plan on having a guest speaker today: Mr. Joe Morris of MITRE Corporation. Mr. Morris is a St. Albans graduate, class of 1962, and he has more than twice as much experience in the computer field as Mr. Hansen!

 

F 3/18/011

Last day of third quarter. No additional HW is due today, but J.D. still needs to see me regarding the assignment due Thursday, 3/17.

Deadline for all work, including optional extra-credit crossword puzzles (www.mathcross.net) is 3:00 p.m. today.

 

 

Spring break.

 

 


Return to the IPL Zone

Return to Mr. Hansen’s home page

Return to Mathematics Department home page

Return to St. Albans home page

Last updated: 04 Apr 2011