CS 1401, Final Exam

Date: Monday, May 5, 2008
Name (please type legibly, ideally in block letters): ______________________________________________________________________
Grading policy: Our intent is that all the problems be equally difficult, so that each problem is worth approximately the same number of points. However, if it turns out that to the class, some problems are more difficult, we will adjust the points given for the problems, so as to give more points to students who successfully solve these difficult problems.

Topic: On May 5, 1891, the Music Hall in New York (now known as Carnegie Hall) was officially opened. At the opening, Tchaikovsky, the famous Russian composer, served as a guest conductor.

1. The classical music scale is logarithmic. Describe, in detail, how logarithms speed up computations.

For extra credit: Describe one more event from the history of computing, and how this event influenced the field of computing.






































2. In 1891, only a few people could listen to a concert. Nowadays, many performance are recorded, and everyone can easily download the corresponding music files and burn a CD. The cost of the resulting CD consists of the cost of the blank CD plus the cost of the downloads. Write a method called cd that takes as input the price of a blank CD, the price of downloading a single song, and the number of songs, and returns the overall cost of producing the corresponding CD. Trace this method for the case when a blank CD costs $2.00, downloading each song costs $1.00, and you want to have 9 songs on this CD.

Your method should return $2.00 + 9 * $1.00 = $11.00.

Hints:

For extra credit: describe a GUI design for entering the price of CS, the price of downloading a song, and the number of songs, and for displaying the overall cost of producing the CD.







































3. Define a class CD in which each object has three private fields: costOfBlankCD, costPerSong, and numberOfSongs. Your code for defining the class should contain:



















































4. A student prepared an email bragging about a nice Beatles CD that he compiled but he accidentally misspelled the band's name as Beetles. Write a piece of code that, given a string email that contains the misspelled name Beetles, replaces the first occurrence of this word with the correct spelling Beatles.

For extra credit: write a piece of code which performs the same replacement even when there may be several occurrences of the misspelled word Beatles.




















































5. A student prepared two classic-rock CDs, with the Beatles and with the Rolling Stones songs, and placed the descriptions of these CDs into two strings named beatles and rollingStones. While working on the CDs, she was enjoying the music so much that she accidentally placed the description of the Beatles CD into the string rollingStones, and vice versa. Write a method that swaps the values of these two global variables. Trace your method on the example when the student placed the words "I like Paul" into the string rollingStones, and the words "Mick Jagger rocks!" into the string beatles.

Hint: your method should work (i.e., swap the values) for all possible values of these two variables, not just the ones used in the example.

















































6. To simplify his archive of CDs, a student decided to use one-letter abbreviations for commonly used rock groups: B means "Beatles", R means "Rolling Stones", and Q means "Queen". Assuming that the variable abbrev contain one of these abbreviation, write a piece of code that, based on the value of this variable, prints the meaning of the corresponding abbreviation. If the letter is neither B, not R, nor Q, print a blank space.

Write two versions of this code:

What are the relative advantages and disadvantages of using switch and if statements?

For extra credit: what are the relative advantages and disadvantages of using ?: instead of if or switch statements?










































7. The student decided to store all the information about his self-made CDs in a file, as follows: Assume that he has no more than 1,000 self-made CDs.

Write a piece of code that asks the user for the name of this file and then places the names of the CDs (from this file) into an array named name and the corresponding number of songs into an array named numberfOfSongs, so that:

The total number of CDs should be placed into the variable numberOfCDs. Use a try-catch statement to handle the situation when there is no file with the input file name, and print out the corresponding error message.

































8. Write a method that takes as input: (as described in Problem 7), and returns the average number of songs on the student's CD. Assuming that the number of CDs can be between 0 and 1,000, what are the reasonable test cases for this method? Give specific examples of the corresponding test data.


















































9. In Problem 2, the computer had to add 2 and 9. Use the algorithms that we learned in class to translate 2 and 9 into binary, to add these numbers in binary, and to translate the result back into decimal (to check the correctness of the result).

For extra credit:
















































10. To prevent people from downloading music for free, the music company uses a special encryption algorithm to store the music files. A group of students cracked the encoding algorithm and placed the easy-to-use decoding algorithm on the web. Is this ethical?

Once the solution is posted, people from all over the world can download the corresponding songs for free. Is this ethical?

For each of these two cases, present:

For extra credit: present more arguments.