COS 126

Assignment 0
Programming Assignment


The purpose of this assignment is to introduce you to programming in Java and familiarize you with the mechanics of preparing and submitting assignment solutions. Your goal this week is to learn to use DrJava for editing, compiling, and executing programs.

Hello, World.  The purpose of this step is to set up your computer for developing Java programs.

Programming.  Your job is to write four short programs on your own. We'll assume that you have already created, compiled, and executed HelloWorld.java by following the instructions in the previous part of the assignment.

  1. Read Section 1.1 of the textbook. Modify UseArgument.java to make a program HiFour.java that takes four names as command-line arguments and prints out the sentence shown below with the names in the reverse of the order given, so that, for example,
    % java HiFour Alice Bob Carol Dave
    
    outputs
    Hi Dave, Carol, Bob, and Alice. 
    

  2. Boolean and integer variables. Write a program Ordered.java that reads in three int command-line arguments, x, y, and z. Define a boolean variable isOrdered whose value is true if the three values are either in strictly ascending order (x < y < z) or in strictly descending order (x > y > z), and false otherwise. Print out the variable isOrdered using System.out.println(isOrdered).
    % java Ordered 10 17 49
    true
    
    % java Ordered 49 17 10
    true
    
    % java Ordered 10 49 17
    false
    

  3. Floating-point numbers and the Math library. The great circle distance is the shortest distance between two points on the surface of a sphere if you are constrained to travel along the surface. Write a program GreatCircle.java that takes four double command-line arguments x1, y1, x2, and y2 (the latitude and longitude, in degrees, of two points on the surface of the earth) and prints out the great-circle distance between them (in nautical miles) using the following formula derived from the spherical law of cosines:
    Great circle distance formula
    This formula uses degrees, whereas Java's trigonometric functions use radians. Use Math.toRadians() and Math.toDegrees() to convert between the two.
    % java GreatCircle 40.35 74.65 48.87 -2.33      // Princeton to Paris 
    3185.1779271158425 nautical miles  
    

  4. Type conversion.   Several different formats are used to represent color. For example, the primary format for LCD displays, digital cameras, and web pages, known as the RGB format, specifies the level of red (R), green (G), and blue (B) on an integer scale from 0 to 255. The primary format for publishing books and magazines, known as the CMYK format, specifies the level of cyan (C), magenta (M), yellow (Y), and black (K) on a real scale from 0.0 to 1.0.

    Write a program RGBtoCMYK.java that converts RGB to CMYK. Input three integers, red, green, and blue (not all zero), from the command line, and print the equivalent CMYK values using these formulas:

    RGB to CMYK formula

    Hint. Math.max(x, y) returns the maximum of x and y.

    % java RGBtoCMYK 75 0 130       // indigo
    cyan    = 0.423076923076923
    magenta = 1.0
    yellow  = 0.0
    black   = 0.4901960784313726
    

Program style and format.  Now that your program is working, go back and look at the program itself. Did you include a header that will tell the reader who wrote the program, and what it does? (Also, if you are planning on doing any professional programming, you should get into the habit of also including instructions for compiling and running the program.) For full marks, your program should not only work correctly, but should conform to the recommended style and format so that it is easy to follow. Read Booksite Appendix B: Writing Clear Code. Follow the guidelines in the Reviewing your Programs section of the Checklist.

Writeup.  With each assignment you must submit a text file named readme.txt that is a narrative description of your work. We provide a readme.txt that you should use as a template. Download this file and answer all questions in the space provided. You will need to read the COS 126 Collaboration Policy in order to answer the related questions in your readme file.

Questionnaire.  Part of this assignment is to fill out the following brief questionnaire.

Browsing the course website.  The next part of the assignment is to browse the COS 126 website. The address is:

http://www.princeton.edu/~cos126
It is essential that you understand what's where and how to get to it. Please follow the Treasure Hunt worksheet on the Precepts page. (You may complete this part with a classmate.)

Submitting the assignment.  The final part of the assignment is to submit HelloWorld.java, HiFour.java, Ordered.java, GreatCircle.java, RGBtoCMYK.java, and readme.txt via the Web submission system called Dropbox. To do this, click the Assignments link from the course website; click the Submit link for that assignment; and (if you aren't already logged in) login using your OIT NetID and email password. Upload the required files, and click the Check All Submitted Files button. Your programs should compile without errors or warnings; if not, fix the problem and resubmit the appropriate files. Remember that every file you submit needs to have your name, netID, and precept number.

Getting help. If anything is unclear, don't hesitate to drop by office hours, post a question on Piazza or email us. We also recommend reading the checklist, which provides some clarifications and answers to frequently asked questions.

Challenge for the bored (not extra credit). Try to solve Ordered without using any of the four ordered-comparison operators (< <= > >=). Try to solve RGBtoCMYK without using Math.max(). You don't need to use if for either one. Even if you solve these, we recommend submitting your original simpler solutions, which are less likely to have bugs and are more transparent to read.