Advertisement
Nikolovska

[НП] лаб6.3 Генеричка матрица

Jun 6th, 2018
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.95 KB | None | 0 0
  1. /*Генерички податочни структури (6)
  2.  
  3. Генеричка матрица Problem 3 (0 / 0)
  4.  
  5. Да се напише класа која е генеричка матрица од елементи. Сите елементи се од ист тип. Матрицата има две димензии број
  6. на редици и број на колони (сите редици имаат ист број на елементи – бројот на колони). Класата Matrix треба да ги
  7. имплементира следните методи:
  8.  
  9. Matrix(int numRows,int numCols) - креира нова матрица со дадените димезии, сите елементи се иницијализираат на null
  10. getNumRow():int
  11. getNumColumns():int
  12. getElementAt(int row, int col) - го враќа елементот на соодветната позиција
  13. setElementAt(int row, int col, T value) - го поставува елементот на соодветната позиција на новата вредност
  14. fill(T element) - ги поставува вредностите на сите полиња во матрицата на element
  15. insertRow(int row) - вметнува нов ред во матрицата на дадената позиција, сите редови после таа позиција се поместуваат
  16. за едно место во десно (си ги зголемуваат индексите за 1). Валидни вредности за row се [0, getNumRows()], во спротивно
  17. фрлете исклучок ArrayIndexOutOfBoundsException.
  18. deleteRow(int row) - го брише соодветниот ред од матрицата, доколку има други редови после него тие се поместуваат во
  19. лево (нивните индекси се намалуваат за 1). Валидни вредности за row се [0, getNumRows()), во спротивно фрлете
  20. исклучок ArrayIndexOutOfBoundsException.
  21. insertColumn(int col) - вметнува новa колона во матрицата на дадената позиција, сите колони после таа позиција се
  22. поместуваат за едно место во десно (си ги зголемуваат индексите за 1). Валидни вредности за col се [0, getNumColumns()],
  23. во спротивно фрлете исклучок ArrayIndexOutOfBoundsException.
  24. deleteColumn (int col) - ја брише соодветната колона од матрицата, доколку има други колони после неа тие се поместуваат
  25. во лево (нивните индекси се намалуваат за 1). Валидни вредности за col се [0, getNumColumns()), во спротивно фрлете
  26. исклучок ArrayIndexOutOfBoundsException.
  27. resize(int rows, int num) - врши промена на димензиите на матрицата. Доколку некоја димезнија е поголема од тековната
  28. новите полиња се иницијализираат на null. Ако некоја димензија е помала од тековната се врши отсекување на полињата
  29. кои се вишок.
  30.  
  31. Sample input
  32. 0 5 3
  33.  
  34. Sample output
  35.   5 x 3
  36.     0    1    2    
  37.   ---------------
  38. 0|null null null
  39. 1|null null null
  40. 2|null null null
  41. 3|null null null
  42. 4|null null null
  43.  
  44.  */
  45.  
  46. import java.util.Scanner;
  47.  
  48. class Matrix<T> {
  49.     private int rows;
  50.     private int columns;
  51.     private T[][] marix;
  52.  
  53.     public Matrix(int numRows, int numCols){
  54.         rows = numRows;
  55.         columns = numCols;
  56.         marix = (T[][]) new Object[numRows][numCols];
  57.         fill(null);
  58.     }
  59.  
  60.     public int getNumRows(){
  61.         return rows;
  62.     }
  63.  
  64.     public int getNumColumns(){
  65.         return columns;
  66.     }
  67.  
  68.     public T getElementAt(int row, int col){
  69.         return marix[row][col];
  70.     }
  71.  
  72.     public void setElementAt(int row, int col, T value){
  73.         marix[row][col] = value;
  74.     }
  75.  
  76.     public void fill(T element){
  77.         for (int i = 0; i < rows; i++) {
  78.             for (int j = 0; j < columns; j++) {
  79.                 marix[i][j] = element;
  80.             }
  81.         }
  82.     }
  83.  
  84.     public boolean isValidRow(int n) throws ArrayIndexOutOfBoundsException{
  85.         if (n < 0  ||  n > rows)
  86.             throw new ArrayIndexOutOfBoundsException();
  87.         return true;
  88.     }
  89.  
  90.     public boolean isValidColumn(int n) throws ArrayIndexOutOfBoundsException{
  91.         if (n < 0  ||  n > columns)
  92.             throw new ArrayIndexOutOfBoundsException();
  93.         return true;
  94.     }
  95.  
  96.     public void insertRow(int row){
  97.         isValidRow(row);
  98.         T[][] temp = (T[][]) new Object[rows+1][columns];
  99.         for (int i = 0; i < row; i++) {
  100.             for (int j = 0; j < columns; j++) {
  101.                 temp[i][j] = marix[i][j];
  102.             }
  103.         }
  104.         for (int i = row; i < rows; i++) {
  105.             for (int j = 0; j < columns; j++) {
  106.                 temp[i+1][j] = marix[i][j];
  107.             }
  108.         }
  109.         marix = temp;
  110.         rows++;
  111.     }
  112.  
  113.     public void insertColumn(int col){
  114.         isValidColumn(col);
  115.         T[][] temp = (T[][]) new Object[rows][columns+1];
  116.         for (int i = 0; i < rows; i++) {
  117.             for (int j = 0; j < col; j++) {
  118.                 temp[i][j] = marix[i][j];
  119.             }
  120.             for (int j = col; j < columns; j++) {
  121.                 temp[i][j+1] = marix[i][j];
  122.             }
  123.         }
  124.         marix = temp;
  125.         columns++;
  126.     }
  127.  
  128.     public void deleteRow(int row){
  129.         isValidRow(row);
  130.         T[][] temp = (T[][]) new Object[rows-1][columns];
  131.         for (int i = 0; i < row; i++) {
  132.             for (int j = 0; j < columns; j++) {
  133.                 temp[i][j] = marix[i][j];
  134.             }
  135.         }
  136.         for (int i = row; i < rows-1; i++) {
  137.             for (int j = 0; j < columns; j++) {
  138.                 temp[i][j] = marix[i+1][j];
  139.             }
  140.         }
  141.         marix = temp;
  142.         rows--;
  143.     }
  144.  
  145.     public void deleteColumn(int col){
  146.         isValidColumn(col);
  147.         T[][] temp = (T[][]) new Object[rows][columns-1];
  148.         for (int i = 0; i < rows; i++) {
  149.             for (int j = 0; j < col; j++) {
  150.                 temp[i][j] = marix[i][j];
  151.             }
  152.             for (int j = col; j < columns-1; j++) {
  153.                 temp[i][j] = marix[i][j+1];
  154.             }
  155.         }
  156.         marix = temp;
  157.         columns--;
  158.     }
  159.  
  160.     public void resize(int rows, int num){
  161.         T[][] tmp = (T[][]) new Object[rows][num];
  162.  
  163.         for (int i = 0; i < Math.min(rows,this.rows); i++) {
  164.             for (int j = 0; j < Math.min(columns,num); j++) {
  165.                 tmp[i][j] = marix[i][j];
  166.             }
  167.         }
  168.         marix = tmp;
  169.         this.rows = rows;
  170.         columns = num;
  171.     }
  172. }
  173.  
  174.  
  175. public class MatrixTest {
  176.    
  177.     public static void main(String[] args) {
  178.         Scanner jin = new Scanner(System.in);
  179.         int t = jin.nextInt();
  180.         if ( t == 0 ) {
  181.             int r = jin.nextInt();
  182.             int c = jin.nextInt();
  183.             Matrix<Integer> matrix = new Matrix<Integer>(r,c);
  184.             print(matrix);
  185.         }
  186.         if ( t == 1 ) {
  187.             int r = jin.nextInt();
  188.             int c = jin.nextInt();
  189.             Matrix<Integer> matrix = new Matrix<Integer>(r,c);
  190.             for ( int i = 0 ; i < r ; ++i ) {
  191.                 for ( int k = 0 ; k < c ; ++k ) {
  192.                     matrix.setElementAt(i, k, jin.nextInt());
  193.                 }
  194.             }
  195.             print(matrix);
  196.         }
  197.         if ( t == 2 ) {
  198.             int r = jin.nextInt();
  199.             int c = jin.nextInt();
  200.             Matrix<String> matrix = new Matrix<String>(r,c);
  201.             for ( int i = 0 ; i < r ; ++i ) {
  202.                 for ( int k = 0 ; k < c ; ++k ) {
  203.                     matrix.setElementAt(i, k, jin.next());
  204.                 }
  205.             }
  206.             print(matrix);
  207.         }
  208.         if ( t == 3 ) {
  209.             int r = jin.nextInt();
  210.             int c = jin.nextInt();
  211.             Matrix<String> matrix = new Matrix<String>(r,c);
  212.             for ( int i = 0 ; i < r ; ++i ) {
  213.                 for ( int k = 0 ; k < c ; ++k ) {
  214.                     matrix.setElementAt(i, k, jin.next());
  215.                 }
  216.             }
  217.             print(matrix);
  218.             matrix.deleteRow(jin.nextInt());
  219.             matrix.deleteRow(jin.nextInt());
  220.             print(matrix);
  221.             int ir = jin.nextInt();
  222.             matrix.insertRow(ir);
  223.             for ( int k = 0 ; k < c ; ++k ) {
  224.                 matrix.setElementAt(ir, k, jin.next());
  225.             }
  226.             ir = jin.nextInt();
  227.             matrix.insertRow(ir);
  228.             for ( int k = 0 ; k < c ; ++k ) {
  229.                 matrix.setElementAt(ir, k, jin.next());
  230.             }
  231.             print(matrix);
  232.             matrix.deleteColumn(jin.nextInt());
  233.             matrix.deleteColumn(jin.nextInt());
  234.             print(matrix);
  235.             int ic = jin.nextInt();
  236.             matrix.insertColumn(ir);
  237.             for ( int i = 0 ; i < r ; ++i ) {
  238.                 matrix.setElementAt(i, ic, jin.next());
  239.             }
  240.             ic = jin.nextInt();
  241.             matrix.insertColumn(ic);
  242.             for ( int i = 0 ; i < r ; ++i ) {
  243.                 matrix.setElementAt(i, ic, jin.next());
  244.             }
  245.             print(matrix);
  246.         }
  247.         if ( t == 4 ) {
  248.             int r = jin.nextInt();
  249.             int c = jin.nextInt();
  250.             Matrix<Integer> matrix = new Matrix<Integer>(r,c);
  251.             for ( int i = 0 ; i < r ; ++i ) {
  252.                 for ( int k = 0 ; k < c ; ++k ) {
  253.                     matrix.setElementAt(i, k, jin.nextInt());
  254.                 }
  255.             }
  256.             print(matrix);
  257.             int nr = jin.nextInt();
  258.             int nc = jin.nextInt();
  259.             matrix.resize(nr, nc);
  260.             print(matrix);
  261.             matrix.fill(jin.nextInt());
  262.             print(matrix);
  263.         }
  264.     }
  265.    
  266.     public static void print ( Matrix<?> m ) {
  267.         int r = m.getNumRows();int c = m.getNumColumns();
  268.         System.out.println("  "+r+" x "+c);
  269.         System.out.print("    ");
  270.         for ( int k = 0 ; k < c ; ++k ) {
  271.             System.out.print(k+"    ");
  272.         }
  273.         System.out.println();
  274.         System.out.print("  ");
  275.         for ( int k = 0 ; k < c ; ++k ) {
  276.             System.out.print("-----");
  277.         }
  278.         System.out.println();
  279.         for ( int i = 0 ; i < r ; ++i ) {
  280.             System.out.print(i+"|");
  281.             for ( int k = 0 ; k < c ; ++k ) {
  282.                 if ( k > 0 ) System.out.print(" ");
  283.                 System.out.print(m.getElementAt(i, k));
  284.             }
  285.             System.out.println();
  286.         }
  287.         System.out.println();
  288.     }
  289.  
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement