Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

please help completing this short assignment that needs to be done in linux, in

ID: 3789908 • Letter: P

Question

please help completing this short assignment that needs to be done in linux,

in java code create a program The program must do the conversion without using any of the built-in functions from the Java library. Thank you in advance.

*** DO NOT USE JAVA'S AUTOMATIC CONVERSION METHODS*****

to do the following:

In your Ubuntu, linux, using terminal mode ONLY, do the following:

- Create a folder named pgm2

- In this folder place the text file located at: http://users.cis.fiu.edu/~mrobi002/databases/RAMerrors4

***some of the lines in the file have spaces at the biggining, read the lines overcoming that trick instructed by the professor*****

Do not modify the file putting it adjacent to the left.

******* MAKE SURE NOT TO CHANGE THE FILE NAME *******

Each record in this file represents the location of an error found in RAM

Assume your computer has 4 gigs of RAM, each gig in a different memory chip, therefore you have 4 one gig RAM chips. A gigabyte contains 1,073,741,824 or 1024^3 or 2^30 bytes, which is also equivalent to 1,048,576 kilobytes or 1,024 megabytes.

These are the addresses in each RAM chip in a computer with 4 (gigs) of RAM:

------ decimal adresses ----------

RAM chip 0 contain addresses: 0 - 1,073,741,823 bytes

RAM chip 1 contain addresses: 1,073,741,824 - 2,147,483,647 bytes

RAM chip 2 contain addresses: 2,147,483,648 - 3,221,225,471 bytes

RAM chip 3 contain addresses: 3,221,225,472 - 4,294,967,295 bytes

- In the same folder (pgm2), use an editor in terminal mode, create a Java program to do the following:

- Open the text file

- Read each record in the file

- Convert the record to binary

- Convert the binary result to decimal

- Find in which RAM chip is the decimal error found

- Print the RAM memory chip where the error is located for each record as follows: example:

hex number = binary number = decimal number located at x RAM chip

*** CREATE YOUR OWN METHODS THAT WILL CONVERT HEX TO BINARY AND BINARY TO DECIMAL

*** DO NOT USE JAVA'S AUTOMATIC CONVERSION METHODS, IT HAS TO BE DONE DOING MATH ONLY *****

Explanation / Answer

You can create a directory in UNIX using mkdir command.

$mkdir pgm2

Now, for JAVA program (WITHOUT ANY AUTOMATIC CONVERSION FUNCTION).

1. checkRAMChip(): This method checks if the converted decimal number will be in chip 0 or chip 1 or chip 2 or chip 3.

2. binToDecimal(): This method takes a binary number (in string form) as an input and returns its decimal equivalent.

3. getHexEquivalent(): This method returns the hexadecimal value (in the form of string) of the given single binary digit (in the form of a single char).

4. hexToBinary(): This method converts the hexadecimal value to binary.

5. removeSpaces(): This method removes the leading and trailing space from the string and returns the new string with only data value.

6. startCalculation(): This method invokes all the other methods to perform the final calculation.

JAVA SOURCE CODE (RAMERROR.java):

import java.util.*;
import java.io.*;

class RAMERROR{

// check if the input falls into the chip 0/1/2/3.
int checkRAMChip(double deci){
    int chip=-1;

    if(deci>=0 && deci<=1073741823.0)
      chip=0; // chip 0
    else
      if(deci>=1073741824.0 && deci<=2147483647.0)
        chip=1; // chip 1
      else
        if(deci>=2147483648.0 && deci<=3221225471.0)
          chip=2; // chip 2
        else
          if(deci>=3221225472.0 && deci<=4294967295.0)
            chip=3; // chip 3
        
    return chip;
}

// convert binary to decimal value
double binToDecimal(String bin){
    double d=0;

    for(int i=0; i<bin.length();i++){
      if(bin.charAt(i)=='1'){
        // calculate if digit is 1
        d=d+Math.pow(2,bin.length()-1-i);
      }
    }
    return d;
}

// get the hexadecimal equivalent of input character
String getHexEquivalent(char c){
    String h="";
    switch(c){
      case '0':
        h="0000"; break;
      case '1':
        h="0001"; break;
      case '2':
        h="0010"; break;
      case '3':
        h="0011"; break;
      case '4':
        h="0100"; break;
      case '5':
        h="0101"; break;
      case '6':
        h="0110"; break;
      case '7':
        h="0111"; break;
      case '8':
        h="1000"; break;
      case '9':
        h="1001"; break;
      case 'A':
      case 'a':
        h="1010"; break;
      case 'B':
      case 'b':
        h="1011"; break;
      case 'C':
      case 'c':
        h="1100"; break;
      case 'D':
      case 'd':
        h="1101"; break;
      case 'E':
      case 'e':
        h="1110"; break;
      case 'F':
      case 'f':
        h="1111"; break;
      default:
        assert(false);
        h="";
    }
    return h;
}

// hexadecimal to binary
String hexToBinary(String hex){
    String bin="";

    for(int i=0; i<hex.length(); i++){
      bin+=getHexEquivalent(hex.charAt(i));
    }
  
    return bin;
}

// start calculating the values and print the desired output
void startCalculation(String hex){
    String bin;
    int chip;

    bin=hexToBinary(hex); // convert hex to bin
    double deci = binToDecimal(bin); // convert bin to decimal
    chip=checkRAMChip(deci); // check which RAM it belongs to
    if(chip!=-1){  
      System.out.printf("%s = %s = %.0f located at %d RAM chip ",hex,bin,deci,chip);
      System.out.println("-----------------------");
    }
    else{
      System.out.printf("%s = %s = %.0f not located at any RAM chip (out of memory) ",hex,bin,deci);
      System.out.println("-----------------------");
    }
}

// remove the spaces (leading + trailing) in the input string.
String removeSpaces(String str){
    String s="";
    char c=' ';

    for(int i=0; i<str.length();i++){
      c=str.charAt(i);
      if(c!=' '){ // create new string if char is not space
        s+=c;
      }
    }
    return s;
}

public static void main(String args[]){
    // create an object of Triangle
    RAMERROR rerror = new RAMERROR();

    try{
      // File reading using FileReader
      File file = new File("RAMerrors4");
      FileReader fileReader = new FileReader(file);
      BufferedReader bufferedReader = new BufferedReader(fileReader);
      //StringBuffer stringBuffer = new StringBuffer();
      String line;
      String value="";

      // process each line
      while ((line = bufferedReader.readLine()) != null) {
        value=rerror.removeSpaces(line);
        rerror.startCalculation(value);
      }

      fileReader.close();
   }catch (IOException e) {
      e.printStackTrace();
   }
}
}

OUTPUT:

080000000 = 000010000000000000000000000000000000 = 2147483648 located at 2 RAM chip
-----------------------
0F2D05DFF = 000011110010110100000101110111111111 = 4073741823 located at 3 RAM chip
-----------------------
4DE743E0 = 01001101111001110100001111100000 = 1307001824 located at 1 RAM chip
-----------------------
FFfDFF5DF = 111111111111110111111111010111011111 = 68717376991 not located at any RAM chip (out of memory)
-----------------------
0046535FF = 000000000100011001010011010111111111 = 73741823 located at 0 RAM chip