## CS
1401, Exam #1, TR version

**Date:** Tuesday, September 23, 2014

**Name** (please type legibly, ideally in block letters):
______________________________________________________________________
1. On September 23, 1846, astronomers discovered a new planet of
Neptune. This was one of the first triumphs of computation: by using
Newton's equations, scientists predicted where the new planet could be, and
observations confirmed that there is indeed a planet at this location.
The corresponding computations actively used logarithms tables.

- Explain who invented logarithms and how exactly logarithms help
with computing;
*hint:* they make multiplication faster by reducing it
to addition.
- Describe one more event from history of computing.

2. For each of the following sequences of symbols, describe which
can be valid Java identifiers and which cannot be; if you believe
they cannot be, briefly explain why (e.g., "is a reserved word" or
"does not start with a letter"): - logarithm

- public

- 1846

- 23September

- planet-Neptune

3. The following formula enables us to
compute the gravitational force F caused by a planet of mass M on a
planet of mass m at a distance r: F = GMm/r^{2}.
Assuming that G, M, m, and r are already placed in the corresponding variables of type double, write a
Java code statement for assigning the corresponding value to the variable F of type double. Explain,
step-by-step, which arithmetic operations will be performed first, which next, etc., and
trace the computations on the toy example when G = 2.0, M = 3.0, m = 1.0,
and r = 3.0.
Explain what happens if you simply write GMm in
your Java code.

4-5. Nowadays, we can simply use computers to perform multiplication.
Write the main method which asks the user for his/her name, asks for
the numbers that he/she needs to multiply,
and then computes and prints the result. For example, if Bill Gates
wants to multiply 3.5 by 2.0, your program should print the
following message:
From: Computer
To: Bill Gates
Here is the result of your multiplication:
3.5 X 2.0 = 7.0.

*Reminder:*
to read from the keyboard, you can define the reader as follows:

Scanner reader = new Scanner(System.in);

the header of the *main* method is:
public static void main(String[] args){

6. Suppose that in your computations, lengths are originally given in
meters, and you need to change the units to centimeters. Since
1 m = 100 cm, we need multiply the length in inches by 100.
Suppose that the length is stored in the integer variable *length*.
Which of the two lines of code leads to a
correct increase:
- length = length * 100;
- length = length * 100.0;

If originally, before each of these two lines,
we had length of 2 m, explain what will happen after each of these lines
is implemented by Java. What is a clearer way (different from those above)
to multiply the variable *length* by 100?

7. Neptune is one of the largest planets in the Solar system, it is
actually third largest by mass.
Write a piece of code that decides which of the three given planets
is the largest by mass. The names of three planets are stored in the
variables *pla1*, *pla2*, and *pla3*, and the
masses of these planets are stored in the
variables *mass1*, *mass2*, and *mass3*. Use
if-then statements to write down a piece of Java code that prints
the name of the largest of the three planets.
*Comment:* There is no need to read anything, assume that all
six variables have already been assigned values.

8. A celestial body is called a planet if it is large enough
and close enough to the corresponding star.
Write down a Java statement that uses the known truth
values *largeEnough* and *closeEnough* to assign, to a
boolean variable *is_aPlanet*, true or false depending on whether
it is a planet or not. Draw the truth tables for "and", "or",
and "not". Use these truth tables to find the truth value for Pluto,
which is close enough, but not large enough.