1. Loops & Conditionals (Individual Assignment) | COS 126 Fall'21 Search COS 126 Fall'21 COS 126 Fall'21 Course Policies Schedule Assignments Resources Exams People Light Dark Automatic 1. Loops & Conditionals (Individual Assignment) Due September 12 at 23:59 The goals of this assignment are to deepen your understanding of loops, conditionals, and arrays and to to learn how to debug code. Background Read Section 1.3 of the textbook. You may also find it instructive to work through some of the other exercises and look at the solutions on the booksite afterwards. Getting Started Similarly to the first assignment, you need to download and unzip the project zip file, which contains the files you will need for this assignment. Download the project zip file for this assignment from TigerFile Java Implementation Tasks Overall Requirements Implement five programs: Ordered.java RGBtoCMYK.java Checkerboard.java RandomWalker.java RandomWalkers.java Complete a readme.txt. Submit your .java and readme.txt using TigerFile . Ordered This exercise demonstrates the use of the int and boolean data types. Write a program Ordered.java that takes three integer command-line arguments, x, y, and z. Define a boolean variable 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. Then, print this boolean value. Do not use a conditional or loop (such as an if, while, or for statement) in your solution. Examples: > java-introcs Ordered 10 17 49
true
> java-introcs Ordered 49 17 10
true
> java-introcs Ordered 10 49 17
false
RGBtoCMYK This exercise demonstrates the use of type conversions. 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 inclusive. 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 inclusive. Write a program RGBtoCMYK.java that converts from RGB format to CMYK format. Your program must take three integer command-line arguments, red, green, and blue; print the RGB values; then print the equivalent CMYK values using the following mathematical formulas. $$ white = \max ({ \frac{red}{255}, \frac{green}{255}, \frac{blue}{255}}) $$ $$ cyan = (white - \frac{red}{255}) \div white $$ $$ magenta = (white - \frac{green}{255}) \div white $$ $$ yellow = (white - \frac{blue}{255}) \div white $$ $$ black = 1 - white $$ CMYK is a subtractive color space, because its primary colors are subtracted from white light to produce the resulting color: cyan absorbs red, magenta absorbs green, and yellow absorbs blue. Examples: // indigo // Princeton orange
> java-introcs RGBtoCMYK 75 0 130 > java-introcs RGBtoCMYK 255 143 0
red = 75 red = 255
green = 0 green = 143
blue = 130 blue = 0
cyan = 0.423076923076923 cyan = 0.0
magenta = 1.0 magenta = 0.4392156862745098
yellow = 0.0 yellow = 1.0
black = 0.4901960784313726 black = 0.0
If the red, green, and blue values are each 0, the resulting color is black. Here is what your program should do: // black
> java-introcs RGBtoCMYK 0 0 0
red = 0
green = 0
blue = 0
cyan = 0.0
magenta = 0.0
yellow = 0.0
black = 1.0
Recall that Math.max(x, y) returns the maximum of x and y. For full credit, your programs must not only work correctly for all valid inputs, but they should be easy to read. Checkerboard Write a program Checkerboard.java that takes an integer command-line argument \(n\), and uses a nested for loop to print an n-by-n checkerboard pattern like the one below: a total of \(n^2\) asterisks, where each row has \(2n\) characters (alternating between asterisks and spaces). > java-introcs Checkerboard 4 > java-introcs Checkerboard 5
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * *
RandomWalker A drone begins flying aimlessly, starting at Nassau Hall (0, 0). At each time step, the drone flies one meter in a random direction, either north, east, south, or west, with probability 25%. How far will the drone be from Nassau Hall after n steps? This process is known as a two-dimensional random walk. Write a program RandomWalker.java that takes an integer command-line argument n and simulates the motion of a random walk for n steps. Print the location at each step (including the starting point), treating the starting point as the origin (0, 0). Finally, print the square of the final Euclidean distance from the origin. Examples: > java-introcs RandomWalker 10 > java-introcs RandomWalker 20
(0, 0) (0, 0)
(0, -1) (0, 1)
(0, 0) (-1, 1)
(0, 1) (-1, 2)
(0, 2) (0, 2)
(-1, 2) (1, 2)
(-2, 2) (1, 3)
(-2, 1) (0, 3)
(-1, 1) (-1, 3)
(-2, 1) (-2, 3)
(-3, 1) (-3, 3)
squared distance = 10 (-3, 2)
(-4, 2)
(-4, 1)
(-3, 1)
(-3, 0)
(-4, 0)
(-4, -1)
(-3, -1)
(-3, -2)
(-3, -3)
squared distance = 18
Possible Progress Steps First, think about which variables you need to maintain. You certainly need to parse and store the command-line argument n. You also need to store the current location (x, y) of the random walker. What should be the type of the variables x and y? What should be their initial values? To choose a random direction, consider using the idiom from Section 1.2 to generate a random integer in a given range. RandomWalkers Write a program RandomWalkers.java that takes two integer command-line arguments n and trials. In each of trials independent experiments, simulate a random walk of n steps and compute the squared distance. Output the mean squared distance (the average of the trials squared distances). Background This process is a discrete version of a natural phenomenon known as Brownian motion. It serves as a scientific model for an astonishing range of physical processes, from the dispersion of ink flowing in water, to the formation of polymer chains in chemistry, to cascades of neurons firing in the brain. Examples: > java-introcs RandomWalkers 100 10000
mean squared distance = 101.446
> java-introcs RandomWalkers 100 10000
mean squared distance = 99.1674
> java-introcs RandomWalkers 200 1000
mean squared distance = 195.75
> java-introcs RandomWalkers 400 2000
mean squared distance = 383.12
> java-introcs RandomWalkers 800 5000
mean squared distance = 811.8264
> java-introcs RandomWalkers 1600 100000
mean squared distance = 1600.13064
Possible Progress Steps Copy the code (in main) from RandomWalker.java to RandomWalkers.java Which additional variables do you need? You certainly need to read and store the command-line arguments n and trials. In addition to the current location (x, y) of the random walker, you need an accumulator variable, say totalSquaredDistance, that stores the total sum of squared distances so far. Nest the loop inside an outer loop that repeats trials times and add code to update totalSquaredDistance after each time through the outer loop. readme.txt - Analysis Edit the text file named readme.txt that is a narrative description of your work. As n increases, we expect the random walk to end up farther and farther away from the origin. But how much farther? Use RandomWalkers to formulate a hypothesis as to how the mean squared distance grows as a function of n. What is the proportional relationship between the number of steps n of the random walk and the mean squared distance? By relationship, we mean something like mean squared distance = 126n9 Briefly justify your answer based on computational experiments. Describe the experiments and list several data points. Provide your answer in your readme.txt file. Hints! Run a series of experiments keeping the number of trials fixed, but changing n - try large values for n (e.g., 100,000) Run a series of experiments keeping n fixed but changing the number of trials - try large values for trials (e.g., 100,000) Submission Before submitting the assignment, please ensure you have read the COS 126 Style Guide and that your code follows our conventions. Style is an important component of writing code, and not following guidelines will result in deductions. Submit the files Ordered.java, RGBtoCMYK.java, Checkerboard.java, RandomWalker.java, RandomWalkers.java, and a completed readme.txt file. Enrichment Here are some famous and not-so-famous quotations about learning to program. Published with Wowchemy — the free, open source website builder that empowers creators. Cite × Copy Download