M 4/4/011
|
No class.
|
|
T 4/5/011
|
No additional HW is due today.
|
|
W 4/6/011
|
HW due: Reread portions of Chapter 10 (as needed,
since it has been a long time), and write Exercises 10.1, 10.2, 10.7, and
short definitions of the terms shell
and shell script. Note that
Exercises 10.1 and 10.2 are on p. 123; the others are at the end of the
chapter.
|
|
Th 4/7/011
|
HW due: Complete yesterday’s assignment, especially
#10.2 (using the “ignore part of the interval and try again” approach). Then
read pp. 131-135 (through §11.4) and answer the question at the top of p.
135. In other words, draw the state diagram when card1 ==
card2 is true.
|
|
F 4/8/011
|
HW due: Read pp. 135-142 (to end of Chapter 11), and
correct Exercise 10.2 so that it can properly handle negative values for low and/or high. Test your
method with a variety of input values, until you are convinced that it meets
all the requirements and is bug-free.
The bug we found at the end of class yesterday was that a typecast to (int)
does not return the greatest integer less than or equal to randomDouble(low, high+1); instead, the typecast to (int) simply truncates the value, ignoring
the decimal portion.
There are two ways you can approach this. One is to use “if” logic, and
adjust the return value whenever the value you are about to return is
negative. The other approach is to use the Math.floor function before typecasting. If you choose the
second approach, which is cleaner, you may wish to read the online help for
the Math.floor function.
|
|
M 4/11/011
|
No class.
|
|
T 4/12/011
|
HW due: Read Chapter 12 (pp. 143-149); then do the
exercises below. Mr. Hansen will be available for help during D period on
Monday and also after school. Please come in for extra help!
1. Debug your randomInt method and test it so that you are sure it works
correctly. Mr. Hansen strongly recommends using the (int)Math.floor(randomDouble(low,high+1)) approach, using randomDouble as a helper method. However, you are free to
proceed as you wish. Chase and Matthew were the only students with a completely
correct version of randomInt as of last Friday. E-mail your corrected randomInt method to
Mr. Hansen over the weekend.
2. How many integers are there between −7 and 3, inclusive?
3. How many integers are there between any two integers m and n, inclusive,
assuming that n > m?
4. Write a new main method that creates and fills an array (called BigBadArray) with
random integers between −7 and 3, inclusive. Your BigBadArray should
consist of 2000 int values. You should, of course, call your previously
written method, randomInt.
5. Modify your main method from the previous step so that after
creating and filling BigBadArray, you use a loop to determine how many array entries
are equal to −7, −6, −5, and so on, all the way up to 3. It
is up to you whether to name your counters one by one (CountNeg7, CountNeg6, CountZero, CountPos1, etc.) or
to name them as part of another array. The second approach is cleaner and
requires less code, but the first approach is probably easier to implement.
Output the values of your counters so that you can see how many entries of
each value were generated.
6. If BigBadArray contains a true uniform distribution of random
integers, approximately how many entries would we expect to be counted by
each of the counters?
7. How closely did your output values conform to these expected counts? If
you re-run your program, do you achieve similar results?
|
|
W 4/13/011
|
Write Exercise 10.12 on p. 130 (pseudocode or
flowchart only; do not write Java
code) and Exercise 11.2 on p. 142 (Java code expected).
Can you think of any more doubloons? Here are some I came up with: kook,
poop, woowee.
|
|
Th 4/14/011
|
HW due: Read §§13.1-13.5 (pp. 153-156); write the 3
exercises below.
1. Write several additional comment lines for Nick’s code (reproduced below).
2. You can find a small bug if you compare the flowchart carefully with the
code. Correct the bug, and then test your revised isDoubloon method to verify
that the bug is fixed.
3. Explain the comment marked IMPORTANT below. Why might some programmers be
tempted to place the statement in the wrong place (for example, one line
farther up)? How does the flowchart guard against such a bug? Be specific.
public class NickDoubloon {
public static void main(String[]
args) {
System.out.println(isDoubloon("Shanghaiings"));
}
public static boolean
isDoubloon(String iword) {
int
i; //scratch loop counter
if
(iword.length() % 2 != 0) {
return false;
}
int[] counters=new int[26];
String
word=iword.toLowerCase(); //work with lower case version only
for
(i=0;i<word.length();i++) {
counters[(int)word.charAt(i)-97]++; //97 is ASCII
value for "a"
}
for
(i=0;i<26;i++) {
if
(counters[i]==1 || counters[i]>2) {
return false;
}
}
return true; //IMPORTANT!
This line must be outside the for-loop.
}
}
|
|
4/15/011
|
No additional HW due today. Whew! (Yes, it would
have been even better if this had been posted by 3:00 p.m. However, as you know,
there is a general rule that if HW is not posted by 3:00 p.m.—or by some
reasonable hour on Friday evening, before the weekend begins in earnest—then
there is no HW assignment.)
|
|
M 4/18/011
|
No class.
|
|
T 4/19/011
|
No class: Diversity Day in Trapier Theater, 10:00
a.m.
|
|
W 4/20/011
|
HW due:
1. Download Version
1.1.24 of the Python textbook, Think
Python: How to Think Like a Computer Scientist, and save the file to your
computer’s hard disk. You will notice that the author is the same as the
author of the Java text we used. The structure and some of the content are
strikingly similar between the two books.
2. Read pp. 1-26 of the new textbook, reading every word, even the sections
that are purely review for you. That which we do twice, we are more likely to
learn.
3. Pay special attention to the glossary pages at the end of each chapter
(hint, hint). Please note that the term “fruitful function” is not in common
usage in the world of computer science; it is merely an idiosyncratic term
that the book’s author invented. You should know the other terms in the
glossaries for Chapters 1-3, however.
4. Reading notes are required, as always.
5. Write an answer to the question posed in the middle of p. 14, in the final
sentence of §2.8: Can you think of a property that addition has that string
concatenation does not?
6. Write Exercise 2.3, #1-5, on p. 16. You may use a Python interpreter to
check your answers if you wish, but that is not required. We will postpone
the decision of which Python interpreter to use until later in the week.
7. Translate each of the following terms or symbols from Java into Python:
method
} // closing brace
//
8. Translate each of the following terms, symbols, or lines of code from
Python into Java:
function
: # colon character
x = len('mystring') # assume that variable x already
exists as an int
BigDash = '-' * 25
|
|
Th 4/21/011
|
HW due:
1. Read Chapter 5 (pp. 39-47) and make reading notes.
2. As you read, make two lists: Record as many similarities and as many differences
as you can find between Java and Python syntax.
3. Pay special attention to the glossaries at the ends of Chapters 1, 2, 3,
and 5 (hint, hint).
|
|
F 4/22/011
|
HW due:
1. Visit python.org and download Version
2.7.1 of the Windows x86 MSI Installer (or if you have a 64-bit machine, the
Windows x86-64 MSI Installer). Complete the installation on your computer.
2. Read Chapter 6 (pp. 51-60), paying special attention to the glossary at
the end (hint, hint).
3. Enter the factorial function code at the bottom of p. 58 and test your
function by calling it from the interpreter, as illustrated at the top of p.
59. What is the largest integer n
for which this function computes a correct value for n! (n factorial)?
|
|
M 4/25/011
|
No school.
|
|
T 4/26/011
|
HW due: Write Exercise 5.2 (pp. 47-48) and Exercise 6.6
(p. 61). Note that each of these exercises has 2 parts.
Mr. Hansen will be available for help by e-mail over the weekend, as well as
before school.
If you have additional time, you can earn some bonus points by completing the
pi-estimating exercise that Karl gave us in class last Friday. Remember, the
technique was that we would take

where the tilde symbol (~) is interpreted as “asymptotically equals.” We made
a loop in which the number of sides, n, would grow larger and larger. For
each iteration in the loop, we kept side length (which Karl called sl)
constant, and therefore the perimeter would be sl*n. We then used
trigonometry to find the apothem as a function of half the side length.
Interesting bonus questions:
1. Karl defined side length, which he called sl, as a constant floating-point
value, so that the perimeter would always be sl*n. Does accuracy of the pi
estimates get better or worse if we take the opposite approach, namely
defining perimeter as a constant floating-point value and computing sl by the
formula perimeter/n?
2. At a certain point, regardless of which method you use, accuracy starts to
break down, and you achieve little or no improvement in the pi estimates even
as you take larger and larger values for n. Why do you suppose this is? For
reference, the true value of pi is 3.14159 26535 89793 23846 26433 83279
50288 4197 . . .
|
|
W 4/27/011
|
HW due: Exercise 9.8 on p. 86. Use the technique
Karl taught us yesterday for checking for palindromes. For example, if x is a string, then x[::−1] will
be a reversed version of x. Check to see whether
x == x[::−1]
and you should be halfway home. (The hard part is in making substrings out of
partial bits of the numbers you are testing. The modulus operator should be
useful in that regard.)
Optional HW (for people who need more challenge, and you know who you are):
Answer bonus questions 1 and 2 from yesterday’s assignment. There are no
bonus points attached this time, but you can impress your ol’ teacher by showing
that you are interested enough to do a little extra analysis.
In class: Pop double quiz on recent Python vocabulary.
|
|
Th 4/28/011
|
HW due: Read Chapter 10 (pp. 89-100). Reading notes are
required, as always. As you do the reading, try the code snippets in the book
on your Python interpreter, and try other things as well so that you can
learn faster. For example, on p. 89, you see the code snippet
cheeses = ['Cheddar', 'Edam', 'Gouda']
If your hobby is cheese, like Wallace in the Wallace and Gromit movies, you
might find this example memorable or interesting. Everyone else, though,
would probably learn better with a more vivid example such as
favorite_sports = ['hockey', 'baseball', 'lacrosse']
|
|
F 4/29/011
|
HW due: Exercise 10.4 on p. 100.
|
|