Part 1 - Java program named MemoryCalculator - Worth 5 points In your Ubuntu VM
ID: 3725229 • Letter: P
Question
Part 1 - Java program named MemoryCalculator - Worth 5 points In your Ubuntu VM (virtual machine), using terminal mode ONLY, do the following:
Note*: Comments required for each step Create the folder program2 In this folder place the text file located on my faculty website in Module 2 called RAMerrors (Do not rename this file, it has no extension.) Error is : ABCDEFABC 1A00D0000 7A0EDF301 3CDAEFFAD
Each record in this file represents the location of an error found in RAM Assume you have a computer with 4 gigs of RAM, each gig in a different memory chip, therefore you have 4 one gig RAM chips. ---------decimal--------------- HINT: RAM chip 0 contain addresses: 0 - 8,589,934,584 bits RAM chip 1 contain addresses: 8,589,934,585 - 17,179,869,184 bits RAM chip 2 contain addresses: 17,179,869,185 - 25,769,803,768 bits RAM chip 3 contain addresses: 25,769,803,769 - 34,359,738,368 bits HINT: RAM chip 0 contain addresses: 0 - 1,073,741,823 bytes RAM chip 1 contain addresses: 1,073,741,824 - 2,147,483,648 bytes RAM chip 2 contain addresses: 2,147,483,647 - 3,221,225,471 bytes RAM chip 3 contain addresses: 3,221,225,472 - 4,294,967,296 bytes In the same folder, in terminal mode using an editor, create a Java program to do the following: - Call the Java program - MemoryCalculator - Open the RAMerrors text file - Read each record - Print the RAM memory chip where the error is located for each record *** CREATE YOUR OWN METHODS THAT WILL CONVERT HEX TO BINARY AND BINARY TO DECIMAL *** DO NOT USE JAVA'S AUTOMATIC CONVERSION METHODS Part 2 - Linux Shell Scripting - Worth 5 points. - NOT using editors, create a sh file named: program2.sh - Set this *.sh file to: chmod 755 *.sh - NOT using editors, append your name, current date and time to a NEW file called results.txt - NOT using editors, append to the *.sh file, all the commands needed so that when you execute your sh file, this file will produce the following: How: - Ask the user to enter a number. - Verify that the number is between 1 and 100. - If the number is not between 1 and 100, then keep asking the user to enter a number until it is valid. - Use a for loop from 1 to the value entered by the user - Sum the results of calculating each number mod 5 - After the for loop ends, display the sum of all previous results and append it to the results.txt file as follows Sum of numbers is xxx Zip your files into one file named FirstnameLastnameA2.zip submit them in the Assignment 2 dropbox. Only include the folowing files: - MemoryCalculator.java - program2.sh
Explanation / Answer
java program:
public class MemoryCalculator {
public static void main(String[] args) {
BufferedReader bf = null;
try {
// define reader for reading from file
bf = new BufferedReader(new FileReader("RAMerrors"));
String address = null;
// read each record in file
while ((address = bf.readLine()) != null) {
// convert the address into binary array
int[] binaryArray = convertToBinay(address);
// convert binary value into decimal value
long decimalLocation = convertToDecimal(binaryArray);
// perform comparison to find out chip
if (decimalLocation >= 0 && decimalLocation <= 1073741823l) {
System.out.println("RAM chip 0 - Address: " + address + "("
+ decimalLocation + ")");
} else if (decimalLocation >= 1073741824l
&& decimalLocation <= 2147483648l) {
System.out.println("RAM chip 1 - Address: " + address + "("
+ decimalLocation + ")");
} else if (decimalLocation >= 2147483647l
&& decimalLocation <= 3221225471l) {
System.out.println("RAM chip 2 - Address: " + address + "("
+ decimalLocation + ")");
} else if (decimalLocation >= 3221225472l
&& decimalLocation <= 4294967296l) {
System.out.println("RAM chip 3 - Address: " + address + "("
+ decimalLocation + ")");
} else {
// invalid address location
System.out.println("Invalid address Location: " + address
+ "(" + decimalLocation + ")");
}
}
bf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// Method to convert binary values into decimal
private static long convertToDecimal(int[] binaryArray) {
long returnValue = 0;
for (int i = binaryArray.length - 1; i >= 0; i--) {
returnValue += binaryArray[i]
* Math.pow(2, binaryArray.length - i - 1);
}
return returnValue;
}
// Method to convert hex value into binary array
private static int[] convertToBinay(String address) {
int[] returnArray = new int[address.length() * 4];
int i = address.length() * 4;
// process each character in input
for (int k = address.length() - 1; k >= 0; k--) {
char ch = address.charAt(k);
int val = 0;
// Convert characters into integer of range 0 - 15
if (ch >= 'A' && ch <= 'F')
val = 10 + ch - 'A';
else if (ch >= 'a' && ch <= 'f')
val = 10 + ch - 'a';
else if (ch >= '0' && ch <= '9')
val = ch - '0';
else
// invalid character
break;
// add each bit value to array
for (int j = 0; j < 4; j++) {
returnArray[--i] = val % 2;
val = val / 2;
}
}
return returnArray;
}
}