Due: November 17, 2006.
No extensions. I will hand out solutions next Friday and you should
study them for midterm2.
This assignment will give you practice at:
Write Java programs to solve Problems 16, 19 and 20 in the Java Exercises Handout (see the yellow book).
Hints
Source Code Schematic for Problem 16
/* * ===================================================================== * RainfallAnalysis.java: The java program conducts a simple statistical * analysis on monthly rainfall measurements. * * Written By: Mark Austin * Modified By: ........... November 2006 * ===================================================================== */ import java.text.*; import java.lang.Math; public class RainfallAnalysis { // No of columns in print array task... public final static int NoColumns = 6; // ========================================================= // main method : this is where the program execution begins. // ========================================================= public static void main ( String [] args ) { // [a] Populate rainfall data array (measured over 30 days) double [] fRainfall = { 1.1 ... fill in missing details ..... }; // [b] Print contents of fRainfall in six columns ... System.out.println("Array: fRainfall"); System.out.println("----------------"); ... fill in missing details .... System.out.println("----------------"); // [b] Compute and print rainfall measurement statistics.. System.out.println(""); System.out.println("Statistics of Daily Rainfall"); System.out.println("============================"); System.out.printf("Max value = %5.2f\n", maxValue( fRainfall )); System.out.printf("Min value = %5.2f\n", minValue( fRainfall )); System.out.printf("Range of values = %5.2f\n", range( fRainfall )); System.out.printf("Mean value = %5.2f\n", mean( fRainfall )); System.out.printf("Standard deviation = %5.2f\n", std( fRainfall )); System.out.println("============================"); } /* ================================================== */ /* Methods to compute maximum/minimum daily rainfalls */ /* ================================================== */ public static double maxValue ( double dA [] ) { ... fill in missing details .... } public static double minValue ( double dA [] ) { ... fill in missing details .... } /* ========================================== */ /* Method to compute range in daily rainfalls */ /* ========================================== */ public static double range ( double dA [] ) { ... fill in missing details .... } /* ====================================================== */ /* Compute mean and standard deviation of daily rainfalls */ /* ====================================================== */ public static double mean ( double dA [] ) { ... fill in missing details .... } public static double std ( double dA [] ) { ... fill in missing details .... } }
The output generated by my version of the program is:
prompt >> java RainfallAnalysis Array: fRainfall ---------------- 1.10 0.80 1.10 1.20 0.50 0.20 0.05 0.00 0.00 0.00 0.40 0.50 0.60 0.80 1.00 1.20 3.00 2.40 1.50 1.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 2.00 2.40 ---------------- Statistics of Daily Rainfall ============================ Max value = 3.00 Min value = 0.00 Range of values = 3.00 Mean value = 0.83 Standard deviation = 0.84 ============================ prompt >>
Source Code Schematic for Problem 19
/* * =========================================================================== * CubeRoot.java: This program prompts the user for a number and then computes * and prints its cube root. * * Draft: Mark Austin * Finished By: ........ November, 2006 * =========================================================================== */ import java.lang.Math; import java.util.*; import java.io.*; import java.text.*; public class CubeRoot { public static void main( String args[] ) { double dNumber; String sLine; // Print welcome message. .... fill in details ..... // Prompt user for number... .... fill in details ..... // Compute and print cube root... System.out.printf("CubeRoot( %8.2f ) = %8.2f\n", dNumber, cubeRoot (dNumber)); } /* * ================================================================== * cubeRoot(): Compute cube root of a floating-point no. * * Input : double dNumber -- Number that cube root is to be computed. * Output : double dX -- Cube root of dNumber. * ================================================================== */ public static final double EPSILON = 0.00001; public static double cubeRoot ( double dNumber ) { boolean bConvergenceAchieved = false; double dX, dXnext; /* [a] : No iteration is required for trivial cases */ .... fill in details ..... /* [b] : Compute cube root */ dX = dNumber/2.0; // initial guess for cube root of dNumber ... while( bConvergenceAchieved == false ) { // Compute next estimate of cube root ... .... fill in details ..... // Check for convergence of answer ... .... fill in details ..... // Update estimate of cube root... .... fill in details ..... } return dX; } /* * ============================================================= * Method getTextFromConsole() : Get line of input from keyboard * * Input : None. * Output : String sLine -- character string of keyboard input * ============================================================= */ public static String getTextFromConsole() { String inLine = ""; .... fill in details .... }
Here is a sample output from my program:
Script started on Thu Nov 09 14:42:33 2006 prompt >> prompt >> java CubeRoo Compute Cube Root of Number --------------------------------------- Input Number: -81.00 *** Cube root estimate = -27.01646091 *** Cube root estimate = -18.04796585 *** Cube root estimate = -12.11486821 *** Cube root estimate = -8.26054007 *** Cube root estimate = -5.90270925 *** Cube root estimate = -4.71006683 *** Cube root estimate = -4.35709793 *** Cube root estimate = -4.32695962 *** Cube root estimate = -4.32674872 *** Cube root estimate = -4.32674871 CubeRoot( -81.00 ) = -4.33 prompt >> exit script done on Thu Nov 09 14:42:48 2006
I have put a print statement inside the loop so that you can see how the algorithm converges.
Source Code Schematic for Problem 20
/* * =========================================================================== * DartExperiment.java: This program simulates and experiment where darts are * thrown at a board. The proportion of darts falling * inside a circle relative to the total number of darts * thrown provides an approximate estimate of pi. * * Draft: Mark Austin * Finished By: ........ November, 2006 * =========================================================================== */ import java.lang.Math; import java.util.*; import java.io.*; import java.text.*; public class DartExperiment { public static void main( String args[] ) { double dX, dY; int iNoPoints = 100000; int iNoInside = 0; // Print welcome message. System.out.println("Estimating pi with Dart Experiment "); System.out.println("---------------------------------------"); // Conduct numerical experiment ... for ( int i = 1; i <= iNoPoints; i = i + 1 ) { // Generate scaled coordinate point (dX, dY) ... .... details of code removed .... // Is point inside the circle? .... .... details of code removed .... } // Compute and print estimate of pi ... .... details of code removed .... } }
Here is the output from my program when the experiment is conducted with 100,000 data points.
Estimating pi with Dart Experiment --------------------------------------- (X,Y) = (-0.010970, -0.430134) (X,Y) = (0.817009, -0.484418) (X,Y) = (0.542297, -0.721900) ... 99,995 lines of output removed .... (X,Y) = (-0.030996, -0.524783) (X,Y) = (0.279210, -0.171811) Estimate of pi = 3.145920
Note. For each problem, hand in a copy of your program source code and a script of I/O for typical program usage. To create a script, type something like:
prompt >> script output-file
Now all input/output on the screen will be echoed to the file "output-file". To terminate the script, type:
prompt >> exit
Now print "output-file" and hand it in.
Developed in November 2006 by Mark Austin
Copyright © 2006, Department of Civil and Environmental Engineering, University of Maryland