The program
The purpose of this assignment are to provide some exercise in using multiply-linked data structures.
Your program would be a number Grid . It would provide a grid with ten rows and six columns. a cell in the grid can hold and display either a number (a double) or a string. Operations is provided which display the grid, assign values to the cells, does arithmetic on cells, does arithmetic on R oWS and columns, fill cells with values, insert, delete, and move rows and columns. The default value for all cells are an empty string. The program would present a menu of operations to perform. When input was taken from the user to a cell value any input beginning with a double quote mark (") is treated as a string . The quote mark is not a included in the string. Any other input is assumed to being a number and is accepted as a double. data Structures
Each cell in the grid would be represented by A  Node (a Class) with a Value field and pointer (i.e. reference) fields, right and down . The right pointers is used to link the nodes into rows and the down pointers would Lin K the nodes into columns. Each row is being linked as a circle (the right field of the final node in each row would point to the fi RST node in the row) as would each column (THE&NBSP, down pointer of the bottom node pointing to the top node of the column).
A Value is represented-a class with three fields:a double field, Dval, to-hold numeric values, a Str ing field, sval, for character strings, and a tag field which indicates whether the Value is CU rrently a number or string (or is invalid). Arithmetic (+,-, *, and/) can performed on Values.
The grid itself'll be a instance of a grid class. This class would have an integer fields for the number of rows and number of columns. Use the value ten for field width when displaying cells. Grid 'll has a head field which points to the first node of the grid (at row 0, column 0). A constructor and a number of public methods for the grid operations would be written.
Internals
After the (number of rows) x (number of columns) nodes has been created and linked together by the constructor for Gr ID All access to nodes would be do through pointer operations beginning at Head.
Values
the Value class represents the values that can being stored in the nodes. A value can be either a double or a string. A separate data field is provided for each so it's possible for a " Value " to contain both a double and a string. THE&NBSP tag field indicates which of these data fields holds the "real value" of the value . a Value can also has an "INVALID" tag. This tag value was only used to (some) intermediate results in arithmetic and a value with an INVALID t AG is never stored in a node. Values are constructed with tag string, Dval 0, and sval null.
Arithmetic can is done on Values with the operators plus , minus , star , and Slash . Each of these would be implemented as a method of the value class taking a value as p Arameter and returning Value . The operators would first check to see if the tags of both operands is DBL. If not arithmetic are performed and the tag of the resulting Value is set to INVALID. Otherwise the sum, product, etc., is computed and the result stored in the dval field of the resulting& nbsp Value . The tag is set to DBL.
You'll write a toString method for Value. Useful methods: String.Format ("%10.4f", X) would return a String representation of the Double X to 4 decimal place s in a field width of ten charactes; String.Format ("%10s", str) would return a string containing the (sub-) string str in a field of charact ERs.
Notice that know whether the input would be a double or a string until after it has been entered. To resolve this problem accept the input as a String and check the first character. If It is a double quote mark (") It's a string and copy it (after allocating memory) withoutthe quote mark to th E sval field. Otherwise the input is intended as a double. In this case, convert it to a double with double.parsedouble and store the result in the dval field.
The Grid class
The grid class has a methods to print the grid, to does arithmetic on the cells, to insert and delete rows and column s, and to assign values to the cells.
The display method would display the grid. Each cell would be displayed in a field of characters and doubles would be the displayed with 4 decimal places. The row and column numbers'll be displayed.
Grid arithmetic
Arithmetic can be do on individual cells with AddNodes, subnodes, mulnodes, and divnodes< /c3> methods. Other methods perform arithmetic to entire rows (addrows, etc) or columns (addcols, etc) at a time. In all cases once you are located the nodes to being operated on you can just "add," etc., the Values and assign values without accessing the Value ' s data fields or checking tags by simply using the arithmetic methods F Rom Value.
Inserting and Deleting nodes
Entire rows and columns can is inserted into the grid using InsertRow and insertcol. Rows and columns can be deleted using deleterow and deletecol. These methods work through much fussing with pointers and require a certain amount of care to code.
Assigning Values to cells
Methods assign values to cells: number and fill. number requires the row and column numbers of both grid cells. These define a rectangular "subgrid" having these of both grid cells as corners. Number would assign the numbers 0, 1, 2, etc. (as doubles) to these cells. fill is similar but it puts the same Value (passed as a parameter) in the node representing each cell.
Notice that fill can is used to assign a value to a single cell.
Validation
For all methods The parameter values must is validated. Each row and column number must is in the correct range (between 0 and Grid.rows-1 and between 0 and Grid.col S-1 respectively). If-Row/column pairs is used to define a-subgrid (as with number and fill) The first pair cannot fol The second (but they can is the same). The delrow and Delcol methods must not reduce the grid to a empty grid (there must always is at least O Ne row and one column in the grid). Methods which do division must check for zero divisors. If a zero divisor is found and error message are displayed, the division is not performed and the resulting Value Would have the tag INVALID. Any and validations needed for the methods-make sense must is done.
The driver
To run your grid you'll write a program which would create a grid (using the default size of ten rows and six columns). The program would run in a loop which displays a menu offering all of the choices seen in the sample run shown above, ACCEP TS user input, and then performs the requested operation by calling the appropriate method.
A Final note
Test your work thoroughly and in small pieces as you proceed. A small problem in Value or the constructor for Grid, for example, which might not being apparent under Ove Rly simple testing can cause major, and difficult to trace, problems later on.
Note that much code is used repeatedly. Simplify your program is factoring out this common code where appropriate. For example, adding a few private methods to class Grid to handle common operations in moving around the Grid can Clean up your code considerably.
To hand in
You'll hand in a hard copy of your source files and of a sample terminal session. For the terminal session, you'll run your program with sample operations which'll be provided to you. There'll be no electronic submission.
Java data structure multiply-linked data Structures program generation (Service code: java00088)