HayCZ

Simerda - izapr - MATICE

Apr 26th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.00 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package ipalp_cv09;
  7.  
  8. /**
  9.  *
  10.  * @author st55431
  11.  */
  12. public class Matice {
  13.  
  14.     public final static int MaxRadek = 10;
  15.     public final static int MaxSloupec = 10;
  16.     public final int[][] pole; //lock data.
  17.     public int[][] a;
  18.     public int[][] b;
  19.     private final int pocetRadku;
  20.     private final int pocetSloupcu;
  21.  
  22.     public Matice(int pocetRadku, int pocetSloupcu) {
  23.         if (0 < pocetRadku && 0 < pocetSloupcu && pocetRadku <= MaxRadek && pocetSloupcu <= MaxSloupec) {
  24.             this.pole = new int[pocetRadku][pocetSloupcu];
  25.             this.pocetRadku = pocetRadku;
  26.             this.pocetSloupcu = pocetSloupcu;
  27.         } else {
  28.             this.pole = null;
  29.             this.pocetRadku = 0;
  30.             this.pocetSloupcu = 0;
  31.         }
  32.  
  33.     }
  34.  
  35.     public Matice(int rozmer) {
  36.         this(rozmer, rozmer);
  37.     }
  38.  
  39.     public int getPocetRadku() {
  40.         return pocetRadku;
  41.     }
  42.  
  43.     public int getPocetSloupcu() {
  44.         return pocetSloupcu;
  45.     }
  46.  
  47.     public String toString(int[][] toPrint) {
  48.         StringBuilder str = new StringBuilder();
  49.         for (int i = 0; i < pocetRadku; i++) {
  50.             for (int j = 0; j < pocetSloupcu; j++) {
  51.                 str.append(String.format("%3d ", toPrint[i][j]));
  52.             }
  53.             str.append('\n');
  54.         }
  55.         return str.toString();
  56.     }
  57.  
  58.     @Override
  59.     public String toString() {
  60.         StringBuilder str = new StringBuilder();
  61.         for (int i = 0; i < pocetRadku; i++) {
  62.             for (int j = 0; j < pocetSloupcu; j++) {
  63.                 str.append(String.format("%4d ", pole[i][j]));
  64.             }
  65.             str.append('\n');
  66.         }
  67.         return str.toString();
  68.     }
  69.  
  70.     public int[][] vynulujDiagonalu(int[][] in) {
  71.         for (int i = 0; i < in.length; i++) {
  72.             in[i][i] = 0;
  73.         }
  74.         return in;
  75.     }
  76.  
  77.     public int[][] vynulujSloupec(int sloupec, int[][] in) {
  78.         for (int i = 0; i < in.length; i++) {
  79.             in[i][sloupec] = 0;
  80.         }
  81.         return in;
  82.     }
  83.  
  84.     public String otocMatici() {
  85.         StringBuilder str = new StringBuilder();
  86.         for (int i = 0; i < pocetRadku; i++) {
  87.             for (int j = 0; j < pocetSloupcu; j++) {
  88.                 str.append(String.format("%3d ", pole[j][i]));
  89.             }
  90.             str.append('\n');
  91.         }
  92.         return str.toString();
  93.     }
  94.  
  95.     public int generujCislo(int min, int max) {
  96.         return (int) Math.round(Math.random() * (max - min) + min);
  97.     }
  98.  
  99.     public void naplnNahodne(int min, int max) {
  100.         for (int i = 0; i < pole.length; i++) {
  101.             for (int j = 0; j < pole[i].length; j++) {
  102.                 pole[i][j] = generujCislo(min, max);
  103.             }
  104.         }
  105.     }
  106.  
  107.     static Matice vytvor(int[][] data) {
  108.         Matice m = new Matice(data.length, data[1].length);
  109.         for (int i = 0; i < data.length; i++) {
  110.             System.arraycopy(data[i], 0, m.pole[i], 0, m.pocetSloupcu);
  111.         }
  112.         return m;
  113.     }
  114.  
  115.     public Matice plus(Matice m2) {
  116.         Matice m1 = this; //Referenční promněná
  117.         try {
  118.             Matice m3 = new Matice(pocetRadku, pocetSloupcu);
  119.             for (int i = 0; i < pocetRadku; i++) {
  120.                 for (int j = 0; j < pocetSloupcu; j++) {
  121.                     m3.pole[i][j] = m1.pole[i][j] + m2.pole[i][j];
  122.                 }
  123.             }
  124.             return m3;
  125.         } catch (Exception e) {
  126.             return null;
  127.         }
  128.     }
  129.  
  130.     public Matice minus(Matice m2) {
  131.         Matice m1 = this; //Referenční promněná
  132.         try {
  133.             Matice m3 = new Matice(pocetRadku, pocetSloupcu);
  134.             for (int i = 0; i < pocetRadku; i++) {
  135.                 for (int j = 0; j < pocetSloupcu; j++) {
  136.                     m3.pole[i][j] = m1.pole[i][j] - m2.pole[i][j];
  137.                 }
  138.             }
  139.             return m3;
  140.         } catch (Exception e) {
  141.             return null;
  142.         }
  143.     }
  144.  
  145.     public Matice vynasob(Matice m2) {
  146.         Matice m1 = this; //Referenční promněná
  147.         Matice m3 = new Matice(m1.pole.length, m2.pole[0].length);
  148.         if (m1.pole.length == m2.pole[0].length) {
  149.             for (int i = 0; i < m1.pole.length; i++) {
  150.                 for (int j = 0; j < m2.pole[0].length; j++) {
  151.                     int pom = 0;
  152.                     for (int k = 0; k < m2.pole.length; k++) {
  153.                         pom += (m1.pole[i][k] * m2.pole[k][j]);
  154.                     }
  155.                     m3.pole[i][j] = pom;
  156.                 }
  157.             }
  158.             return m3;
  159.         } else {
  160.             return null;
  161.         }
  162.     }
  163.  
  164.     public int najdiMaxNadVedlejsiDiagonalou() {
  165.         int max = Integer.MIN_VALUE; //Nastavení minimální hodnoty
  166.         for (int i = 0; i < pocetRadku - 1; i++) {
  167.             for (int j = 0; j < pocetSloupcu - (i + 1); j++) {
  168.                 if (pole[i][j] > max) {
  169.                     max = pole[i][j];
  170.                 }
  171.             }
  172.         }
  173.  
  174.         return max;
  175.     }
  176.  
  177.     public int najdiMinPodHlavniDiagonalou() {
  178.         int min = Integer.MAX_VALUE; //Nastavení minimální hodnoty
  179.         for (int i = 1; i < pocetRadku; i++) {
  180.             for (int j = 0; j < i; j++) {
  181.                 if (pole[i][j] < min) {
  182.                     min = pole[i][j];
  183.                 }
  184.             }
  185.         }
  186.  
  187.         return min;
  188.     }
  189.  
  190.     public int najdiMaxNadHlavniDiagonalou() {
  191.         int max = Integer.MIN_VALUE; //Nastavení minimální hodnoty
  192.         for (int i = 0; i < pocetRadku - 1; i++) {
  193.             for (int j = i + 1; j < pocetSloupcu; j++) {
  194.                 if (pole[i][j] > max) {
  195.                     max = pole[i][j];
  196.                 }
  197.             }
  198.         }
  199.  
  200.         return max;
  201.     }
  202.  
  203.     public int najdiMinPodVedlejsiDiagonalou() {
  204.         int min = Integer.MAX_VALUE; //Nastavení minimální hodnoty
  205.         for (int i = 1; i < pocetRadku; i++) {
  206.             for (int j = pocetSloupcu - i; j < pocetSloupcu; j++) {
  207.                 if (pole[i][j] < min) {
  208.                     min = pole[i][j];
  209.                 }
  210.             }
  211.         }
  212.  
  213.         return min;
  214.     }
  215.  
  216.     public void prictiRadek(int kam, int odkud) {
  217.         if (kam < pocetRadku && odkud < pocetRadku) {
  218.             System.out.println("Přičtení řádku " + odkud + " do: " + kam + "\n");
  219.             for (int i = 0; i < pocetSloupcu; i++) {
  220.                 pole[kam][i] += pole[odkud][i];
  221.             }
  222.         } else {
  223.             System.out.println("Index řádků je mimo index pole! Pole zůstáva bezezměny: ");
  224.         }
  225.  
  226.     }
  227.  
  228.     public void prictiSloupec(int kam, int odkud) {
  229.         if (kam < pocetRadku && odkud < pocetRadku) {
  230.             System.out.println("Přičtení sloupce " + odkud + " do: " + kam + "\n");
  231.             for (int i = 0; i < pocetRadku; i++) {
  232.                 pole[i][kam] += pole[i][odkud];
  233.             }
  234.         } else {
  235.             System.out.println("Index sloupců je mimo index pole! Pole zůstáva bezezměny: ");
  236.         }
  237.  
  238.     }
  239.  
  240.     int[] dejRadekSMaxSouctem() {
  241.         int max[] = new int[pocetSloupcu];
  242.         int maxSoucet = Integer.MIN_VALUE;
  243.         int soucet;
  244.         int radek = 0;
  245.        
  246.         for (int i = 0; i < pocetRadku; i++) {
  247.             soucet = 0;
  248.             for (int j = 0; j < pocetSloupcu; j++) {
  249.                 soucet += pole[i][j];
  250.             }
  251.             if (soucet > maxSoucet) {
  252.                 radek = i;
  253.                 maxSoucet = soucet;
  254.             }
  255.         }
  256.         System.arraycopy(pole[radek], 0, max, 0, pocetSloupcu);
  257.  
  258.         return max;
  259.     }
  260.    
  261.     public int[] hlavniDiagonala(){
  262.         //Lokální proměná
  263.         int delka = (pocetRadku<pocetSloupcu)?pocetRadku:pocetSloupcu; //podmínka zkráceně.
  264.         //Referenční promněná
  265.         int[] poleDiagonala = new int[delka];
  266.         for (int i = 0; i<delka;i++)
  267. {
  268.             poleDiagonala[i] = this.pole[i][i];
  269.         }
  270.         return poleDiagonala;
  271.     }
  272.    
  273.     public int[] vedlejsiDiagonala(){
  274.         //Lokální proměná
  275.         int delka = (pocetRadku<pocetSloupcu)?pocetRadku:pocetSloupcu; //podmínka zkráceně.
  276.         //Referenční promněná
  277.         int[] poleDiagonala = new int[delka];
  278.         int y = 0;
  279.         for (int i = 0; i < delka-1; i++) {
  280.             y = delka - i-1;
  281.             poleDiagonala[i] = this.pole[i][y];
  282.         }
  283.         return poleDiagonala;
  284.     }
  285.    
  286.     public int[][] transponujMatici() {
  287.         if (pocetRadku == pocetSloupcu) {
  288.          Matice n = new Matice(pocetRadku, pocetSloupcu);
  289.          for (int i = 0; i < pocetRadku; i++) {
  290.             for (int j = 0; j < pocetSloupcu; j++) {
  291.                 n.pole[j][i] = this.pole[i][j];
  292.             }
  293.         }  
  294.          return n.pole;
  295.         }
  296.         else
  297.         {
  298.             return null;
  299.         }
  300.     }
  301.  
  302. }
Add Comment
Please, Sign In to add comment