Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 20.46 KB | None | 0 0
  1. package ipalp_cv07;
  2.  
  3. import java.util.Arrays;
  4. import java.util.InputMismatchException;
  5. import java.util.Locale;
  6. import java.util.Scanner;
  7.  
  8. /**
  9.  * Zadání:
  10.  * <p>
  11.  * Cílem je naprogramovat jednoduché operace s dvojrozměrným polem. Těmi
  12.  * operacemi bude například sčítání a odečítání dvou dvojrozměrných matic čísel
  13.  * nebo operace matice (2d pole) a 1d pole nebo matice a cislo. Proto, aby se
  14.  * mohly tyto operace uskutečnit je zapotřebí získat rozměry matic a naplnit je
  15.  * hodnotami, takže budou zapotřebí dvě metody, které bezpečně převezmou číselné
  16.  * hodnoty z klávesnice. Dále nezbytnou metodou bude sestavení výstupního textu
  17.  * s obsahem matic.
  18.  * <p>
  19.  *
  20.  * S čím se seznámíte a co bude procvičeno:
  21.  * <ol>
  22.  * <li> Z důvodu postupného seznamování s programováním v Java, bude toto
  23.  * cvičení využívat pouze statické členy třídy. Zřizování instancí a tedy tvorbu
  24.  * instančních metod bude předmětem následujícího cvičení.</li>
  25.  *
  26.  * <li> Rozdělení celkové funkce do metod, kdy každá metoda bude provádět pouze
  27.  * jeden úkol. </li>
  28.  *
  29.  * <li> Metody budou opatřeny modifikátorem <code>static</code>. Bude se tedy
  30.  * jednat o metody třídy. </li>
  31.  *
  32.  * <li>
  33.  * Ověření některých metod bude přloženým JUnit testem v Test Packages. Budou se
  34.  * testovat pouze metody, které nejsou součástí uživatelského rozhraní.
  35.  *
  36.  * <li> Ostatní metody, to jsou ty co komunikují s uživatelem, se ověří v hlavní
  37.  * metodě main.</li>
  38.  *
  39.  * </ol>
  40.  *
  41.  * @author karel@simerda.cz
  42.  */
  43. public class IpalpCv07 {
  44.  
  45.     private static final Scanner input = new Scanner(System.in);
  46.  
  47.     public static void main(String[] args) {
  48.         input.useLocale(Locale.ENGLISH);
  49.         System.out.println("Zadejte počet řádků a počet sloupců matice");
  50.         int pocetRadku = nactiCeleKladneCislo("Zadej počet řádků:");
  51.         int pocetSloupcu = nactiCeleKladneCislo("Zadej počet sloupců:");
  52.  
  53.         double pocetRadkuRealneCislo = nactiRealneCislo("Zadej počet řádků reálná čísla:");
  54.         double pocetSloupcuRealneCislo = nactiRealneCislo("Zadej počet sloupců reálná čísla:");
  55.  
  56.         double[][] m1 = nactiMatici("Zadej prvky matice M1\n", pocetRadkuRealneCislo, pocetSloupcuRealneCislo);
  57.  
  58.         double[][] m2 = nactiMatici("Zadej prvky matice M2\n", pocetRadku, pocetSloupcu);
  59.  
  60.         double[][] m3 = secti(m1, m2);
  61.  
  62.         System.out.println("Matice M1\n" + matice2string(m1, "%4.1f "));
  63.         System.out.println("Matice M2\n" + matice2string(m2, "%4.1f "));
  64.         System.out.println("Matice M1+M2\n" + matice2string(m3, "%4.1f "));
  65.  
  66.         // TODO Doplňte použití ostatních metod s operacemi
  67.     }
  68.  
  69.     /**
  70.      * Metoda načte celé kladné číslo z klávesnice.
  71.      * <p>
  72.      * Popis činnosti metody:
  73.      * <ol>
  74.      * <li> Nejdřive metoda text z parametru echo.
  75.      *
  76.      * <li> Metoda zavolá metodu nextInt v objektu typu Scanner.
  77.      *
  78.      * <li> Jestliže však bylo na klávesnici zadáno záporné číslo, nula nebo byl
  79.      * porušen formát čísla, tak se před echo předřadí text "Zadej znovu. ",
  80.      * který se vypíše jako nová výzva a čtení čísla se zopakuje.
  81.      *
  82.      * <li>Když je vše v pořádku je metoda ukončena s číselnou hodnotu.
  83.      * </ol>
  84.      *
  85.      * @param echo Textový řetězec s výzvou.
  86.      *
  87.      * @return Vrací celé kladné číslo.
  88.      */
  89.     public static int nactiCeleKladneCislo(String echo) {
  90.         System.out.print(echo);
  91.         while (true) {
  92.             try {
  93.                 int cislo = input.nextInt();
  94.                 if (cislo > 0) {
  95.                     return cislo;
  96.                 }
  97.             } catch (InputMismatchException ex) {
  98.                 System.out.println("Chybný formát čísla.");
  99.                 input.nextLine();
  100.             }
  101.             System.out.print("Zadej znovu. " + echo);
  102.         }
  103.     }
  104.  
  105.     /**
  106.      * Metoda načte reálné číslo z klávesnice.
  107.      *
  108.      * Popis tvorby této metody je shodný s popisem metody
  109.      * <code>nactiCeleKladneCislo</code>
  110.      *
  111.      * @param echo Textový řetězec s výzvou.
  112.      *
  113.      * @return Vrací reálné číslo typu double.
  114.      */
  115.     public static double nactiRealneCislo(String echo) {
  116.         System.out.print(echo);
  117.         while (true) {
  118.             try {
  119.                 double realneCislo = input.nextDouble();
  120.                 if (realneCislo > 0) {
  121.                     return realneCislo;
  122.                 }
  123.             } catch (InputMismatchException ex) {
  124.                 System.out.println("Chybný formát čísla.");
  125.                 input.nextLine();
  126.             }
  127.             System.out.print("Zadej znovu. " + echo);
  128.         }
  129.  
  130.     }
  131.  
  132.     /**
  133.      * Metoda načte z klávesnice hodnoty dvojrozměrného pole reálných čísel.
  134.      * <p>
  135.      * Popis činnosti metody:
  136.      * <ol>
  137.      * <li> Nejprve metoda zkontroluje hodnoty parametrů s počtem řádků a
  138.      * sloupců, zda jsou větší jak nula. </li>
  139.      *
  140.      * <li>Když bude mít alespoň jeden parametr hodnotu nula nebo zápornou,
  141.      * metoda se ukončí návratem s referencí na dvojrozměrné pole o nulových
  142.      * rozměrech. </li>
  143.      *
  144.      * <li>Když je vše v pořádku, vypíše metoda textový řetězec v parametru
  145.      * <code>vyzva</code>. Výzva může být prázdná nebo žádná tj.
  146.      * <code>null</code> ale potom se nic nevypíše.</li>
  147.      *
  148.      * <li>Dále je zapotřebí vytvořit nové dvojrozměrné pole o rozměrech dané
  149.      * parametry metody. Referenci na toto pole si metda uloží do lokální
  150.      * proměnné</li>
  151.      *
  152.      * <li> Jádrem metody budou dva do sebe vnořené cykly <code>for</code>.
  153.      * Druhý cyklus bude vnořen do prvního. Tyto dva cykly budou sloužit k
  154.      * postupnému načtení dvojrozměrného pole hodnotami zadávané z klávesnice.
  155.      * </li>
  156.      *
  157.      * <li>Na převzetí čísla z klávesnice metoda použije metodu
  158.      * <code>nactiRealneCislo</code>. </li>
  159.      *
  160.      * <li>Volání metody <code>nactiRealneCislo</code> bude mít tento argument
  161.      * <code>String.format("Zadej prvek matice [%02d][%02d]:", i, j)</code>
  162.      * </li>
  163.      *
  164.      * <li> Po ukončení cyklu se metoda ukončí návratem s referencí na lokální
  165.      * proměnnou s naplněným dvojrozměrným polem reálných čísel.</li>
  166.      * </ol>
  167.      *
  168.      * @param vyzva Textový řetězec, který se vypíše před načítáním jednotlivých
  169.      * prvků pole.
  170.      * @param pocetRadku Počet řádků dvojrozměrného pole.
  171.      * @param pocetSloupcu Počet sloupců dvojrozměrného pole.
  172.      *
  173.      * @return Vrací referenci na dvojrozměrné pole reálných čísel podle toho,
  174.      * jak se dopadla kontrola vstupních parametrů.
  175.      */
  176.     public static double[][] nactiMatici(String vyzva, double pocetRadkuRealneCislo, double pocetSloupcuRealneCislo) {
  177.  
  178.         if (pocetSloupcuRealneCislo <= 0 && pocetRadkuRealneCislo <= 0) {
  179.             return new double[0][0];
  180.         }
  181.  
  182.         System.out.println(vyzva);
  183.         double[][] matice = new double[pocetRadkuRealneCislo][pocetSloupcuRealneCislo];
  184.  
  185.         double temp;
  186.  
  187.         for (int i = 0; i < pocetRadkuRealneCislo; i++) {
  188.             for (int j = 0; j < pocetSloupcuRealneCislo; j++) {
  189.                 temp = nactiRealneCislo(String.format("Zadej prvek matice [%02d][%02d]:", i, j));
  190.                 matice[i][j] = temp;
  191.  
  192.             }
  193.         }
  194.         return matice;
  195.     }
  196.  
  197.     /**
  198.      * Metoda sestaví textový řetězec z obsahu matice reálných čísel po řádcích
  199.      * a každou hodnotu prvku matice zformátuje podle parametru s formátem.
  200.      * <p>
  201.      * Popis činnosti metody:
  202.      * <ol>
  203.      * <li>Nejprve metoda překontroluje, zda parametry neobsahují
  204.      * <code>null</code>.
  205.      * </li>
  206.      *
  207.      * <li>Když ano, metoda se ukončí s návratem tohoto hlášení:
  208.      * <p>
  209.      * "Chybí reference na matici nebo na formát."
  210.      * </li>
  211.      *
  212.      * <li>Když bude vše v pořádku, tak metoda vytvoří instance
  213.      * <code>StringBuilder</code> pro uchování dílčích textů s hodnotami prvků
  214.      * matice.</li>
  215.      *
  216.      * <li>Potom metdase dvojitým cyklem <code>for</code> postupně převedou
  217.      * číselné hodnoty prvků matice na text tímto:
  218.      * <p>
  219.      * <code>String.format(Locale.ENGLISH, format, matice[i][j])</code> a dílčí
  220.      * řetězce se přidají do instance třídy  <code>StringBuilder</code>.
  221.      * </li>
  222.      *
  223.      * <li>Při přechodu z jednoho řádku matice na druhý se provede přidání do
  224.      * instance třídy  <code>StringBuilder</code> přechod na nový řádek. </li>
  225.      *
  226.      * <li>Po ukončení cyklů metoda převede obsah instance
  227.      * <code>StringBuilder</code> na jeden textový řetězec a reference na tento
  228.      * řetězec metoda použije při návratu.</li>
  229.      * </ol>
  230.      *
  231.      *
  232.      * @param matice Reference na dvojrozměrné pole reálných čísel.
  233.      * @param format Řetězec s formátem převodu jednoho reálného čísla z prvků
  234.      * matice.
  235.      *
  236.      * @return Vrací textový řetězec s převedeným obsahem matice raálných čísel.
  237.      */
  238.     public static String matice2string(double[][] matice, String format) {
  239.         if (matice == null || format == null) {
  240.             return ("Chybí reference na matici nebo na formát.");
  241.         } else {
  242.             StringBuilder strBuilder = new StringBuilder();
  243.  
  244.             for (int i = 0; i < matice.length; i++) {
  245.                 for (int j = 0; j < matice[i].length; j++) {
  246.                     strBuilder.append(String.format(Locale.ENGLISH, format, matice[i][j]));
  247.                 }
  248.                 strBuilder.append("\n");
  249.             }
  250.             String vysledek = new String(strBuilder);
  251.             return vysledek;
  252.         }
  253.  
  254.     }
  255.  
  256.     /**
  257.      * Metoda sečte dvě 2d pole (matice) stejného rozměru.
  258.      * <p>
  259.      * Sčítanec + sčítanec = součet
  260.      **<p>
  261.      * Popis činnosti metody:
  262.      * <ol>
  263.      * <li>Metoda nejdříve provede kontrolu, zda obě vstupní 2d pole mají stejné
  264.      * rozměry.</li>
  265.      *
  266.      * <li>Když se rozměr nebude shodovat, tak se metoda ukončí s referencí na
  267.      * 2d pole s nulovou velikostí v každém rozměru. </li>
  268.      *
  269.      * <li>Pokud se rozměry shodují, vytvoří metoda nové dvojrozměrné pole,
  270.      * stejného typu jako jsou vstupní pole.</li>
  271.      *
  272.      * <li> Metoda uloží referenci na nově 2d pole do lokální proměnné
  273.      * <code>soucet</code>.</li>
  274.      *
  275.      * <li>Potom pomocí dvou vnořených cyklů <code>for</code> metoda do nového
  276.      * 2d pole provede výpočet součtu stejnolehlých prvků vstupních 2d polí.
  277.      * </li>
  278.      *
  279.      * <li>Po ukončení cyklů se metoda ukončí návratem s referencí na 2d pole
  280.      * <code>soucet</code>.</li>
  281.      * </ol>
  282.      *
  283.      * @param m1 2d pole (matice) jako levý operand (sčítanec) součtu.
  284.      * @param m2 2d pole (matice) jako pravý operand (sčítanec) součtu.
  285.      *
  286.      * @return Vrací součet dvou 2d polí (matic). Pokud nejsou operandy stejného
  287.      * rozměru, vrací se 2d pole o rozměru double [0][0].
  288.      */
  289.     public static double[][] secti(double[][] m1, double[][] m2) {
  290.  
  291. //        int pocetRadku = m1.length;
  292. //        int pocetSloupcu = m1[0].length;
  293.         if (m1.length != m2.length || m1[0].length != m2[0].length) {
  294.             return new double[0][0];
  295.         } else {
  296.             double soucet[][] = new double[m1.length][m1[0].length];
  297.  
  298.             for (int i = 0; i < m1.length; i++) {
  299.                 for (int j = 0; j < m1[i].length; j++) {
  300.                     soucet[i][j] = m1[i][j] + m2[i][j];
  301.                 }
  302.             }
  303.  
  304.             return soucet;
  305.         }
  306.  
  307.     }
  308.  
  309.     /**
  310.      * Metoda odečte 2d pole (matici od matice) stejného rozměru.
  311.      * <p>
  312.      * Menšenec - menšitel = rozdíl
  313.      * <p>
  314.      * <ol>
  315.      * <li>Metoda nejdříve provede kontrolu, zda obě vstupní 2d pole mají stejný
  316.      * rozměr.</li>
  317.      *
  318.      * <li>Když se rozměry nebudou shodovat, tak se metoda ukončí referencí na
  319.      * 2d pole (matici) s nulovou velikostí v každém rozměru. </li>
  320.      *
  321.      * <li>Pokud se rozměry shodují, vytvoří metoda nové dvojrozměrné pole,
  322.      * stejného typu jako jsou vstupní 2d pole.
  323.      *
  324.      * <li> Metoda referenci na nové 2d pole uloží do lokální proměnné
  325.      * <code>rozdil</code>. </li>
  326.      *
  327.      * <li>Potom metoda pomocí dvou vnořených cyklů <code>for</code> do nového
  328.      * 2d pole provede výpočet rozdílu stejnolehlých prvků vstupních matic.</li>
  329.      *
  330.      * <li>Po ukončení cyklů se metoda ukončí návratem s referencí na nové 2d
  331.      * pole <code>rozdíl</code>.</li>
  332.      *
  333.      * @param m1 2d pole (matice) jako levý operadd (menšenec) rozdílu.
  334.      * @param m2 2d pole (matice) jako pravý operand (menšitel) rozdílu.
  335.      *
  336.      * @return Vrací 2d pole jako rozdíl dvou matic. Pokud nejsou operandy
  337.      * stejného rozměru, vrací se 2d pole o rozměru double [0][0].
  338.      */
  339.     public static double[][] odecti(double[][] m1, double[][] m2) {
  340.         if (m1.length != m2.length || m1[0].length != m2[0].length) {
  341.             return new double[0][0];
  342.         } else {
  343.  
  344.             double odecti[][] = new double[m1.length][m1[0].length];
  345.  
  346.             for (int i = 0; i < m1.length; i++) {
  347.                 for (int j = 0; j < m1[0].length; j++) {
  348.                     odecti[i][j] = m1[i][j] - m2[i][j];
  349.                 }
  350.             }
  351.  
  352.             return odecti;
  353.         }
  354.  
  355.     }
  356.  
  357.     /**
  358.      * Metoda vynásobí hodnotou v parametru všechny hodnoty dvojrozměrného pole.
  359.      *
  360.      *
  361.      * Popis činnosti metody:
  362.      * <ol>
  363.      * <li>Metoda vytvoří nové pole o shodných rozměrech se vstupním polem.</li>
  364.      *
  365.      * <li>Do každého prvku nového 2d pole metoda vloží stejnolehlý prvek
  366.      * vstupního pole, který bude vynásoben konstantou k.</li>
  367.      * </ol>
  368.      *
  369.      * @param m1 Vstupní 2d pole
  370.      * @param k Konstanta na vynásobení prvků matice
  371.      * @return Nové 2d pole s vynásobeným obsahem
  372.      */
  373.     public static double[][] vynasobCislem(double[][] m1, double k) {
  374.  
  375.         double nasobeni[][] = new double[m1.length][m1[0].length];
  376.  
  377.         for (int i = 0; i < m1.length; i++) {
  378.             for (int j = 0; j < m1[0].length; j++) {
  379.                 nasobeni[i][j] = m1[i][j] * k;
  380.             }
  381.         }
  382.  
  383.         return nasobeni;
  384.     }
  385.  
  386.     /**
  387.      * Metoda vydělí hodnotou v parametru všechny hodnoty dvojrozměrného pole.
  388.      *
  389.      *
  390.      * Popis činnosti metody:
  391.      * <ol>
  392.      * <li>Metoda vytvoří nové pole o shodných rozměrech se vstupním polem.</li>
  393.      *
  394.      * <li>Do každého prvku nového pole metoda vloží stejnolehlý prvek vstupního
  395.      * pole, který bude vydělen konstantou k.</li>
  396.      * </ol>
  397.      *
  398.      * @param m1 Vstupní 2d pole
  399.      * @param k Konstanta na vynásobení prvků matice
  400.      * @return Nové 2D pole s vyděleným obsahem
  401.      */
  402.     public static double[][] vydelCislem(double[][] m1, double k) {
  403.  
  404.         double deleni[][] = new double[m1.length][m1[0].length];
  405.  
  406.         for (int i = 0; i < m1.length; i++) {
  407.             for (int j = 0; j < m1[0].length; j++) {
  408.                 deleni[i][j] = m1[i][j] / k;
  409.             }
  410.         }
  411.  
  412.         return deleni;
  413.     }
  414.  
  415.     /**
  416.      * Metoda přičte jednorozměrné pole k řádku dvojrozměrného pole.
  417.      *
  418.      * Popis činnosti metody:
  419.      * <ol>
  420.      * <li>Metoda nejříve zkontroluje rozměry 2d a 1d vstupních polí, zda
  421.      * vyhovují operaci pričtení řádku.</li>
  422.      *
  423.      * <li>Metoda vytvoří nové 2d pole o shodných rozměrech se vstupním 2d
  424.      * polem.</li>
  425.      *
  426.      * <li>Do nového 2d pole metoda zkopíruje vstupní pole m1. </li>
  427.      *
  428.      * <li>Do nového 2d pole metoda k řádku daného indexem v parametru radek
  429.      * přičte stejnolehlé hodnoty z jednorozměrného pole.</li>
  430.      *
  431.      * <li>Referenci na nové 2d pole metda předá v návratové hodnotě.</li>
  432.      * </ol>
  433.      *
  434.      * @param m1 Vstupní 2d pole
  435.      * @param pole Jednorozměrné pole
  436.      * @param radek Index řádku ke kterému se přičte pole
  437.      *
  438.      * @return Nové 2D pole s přičteným řádkem
  439.      */
  440.     public static double[][] prictiRadek(double[][] m1, double[] pole, int radek) {
  441.  
  442.         if (m1[0].length == pole.length) {
  443.  
  444.             for (int i = 0; i < m1[0].length; i++) {
  445.                 m1[radek][i] = m1[radek][i] + pole[i];
  446.             }
  447.             return m1;
  448.         } else {
  449.             return new double[0][0];
  450.         }
  451.  
  452.     }
  453.  
  454.     /**
  455.      * Metoda odečte jednorozměrné pole od řádku dvojrozměrného pole.
  456.      *
  457.      *
  458.      * Popis činnosti metody:
  459.      * <ol>
  460.      * <li>Metoda nejříve zkontroluje rozměry 2d a 1d polí, zda vyhovují operaci
  461.      * odečtení řádku.</li>
  462.      *
  463.      * <li>Metoda vytvoří nové 2d pole o shodných rozměrech se vstupním 2d
  464.      * polem.</li>
  465.      *
  466.      * <li>Do nového 2d pole metoda zkopíruje vstupní pole m1. </li>
  467.      *
  468.      * <li>Do nového 2d pole metoda k řádku daného indexem v parametru radek
  469.      * odečte stejnolehlé hodnoty z jednorozměrného pole.</li>
  470.      *
  471.      * <li>Reference na nové 2d pole se předá v návratové hodnotě metody.</li>
  472.      * </ol>
  473.      *
  474.      * @param m1 Vstupní 2d pole
  475.      * @param pole Vstupní 1d pole
  476.      * @param radek Index řádku od kterého se odečte 1d pole
  477.      *
  478.      * @return Nové 2d pole s odečteným řádkem
  479.      */
  480.     public static double[][] odectiRadek(double[][] m1, double[] pole, int radek) {
  481.         if (m1[0].length == pole.length) {
  482.  
  483.             for (int i = 0; i < m1[0].length; i++) {
  484.                 m1[radek][i] = m1[radek][i] - pole[i];
  485.             }
  486.             return m1;
  487.         } else {
  488.             return new double[0][0];
  489.         }
  490.     }
  491.  
  492.     /**
  493.      * Metoda přičte k vybranému sloupci 2d pole 1d pole.
  494.      *
  495.      * Popis činnosti metody:
  496.      * <ol>
  497.      * <li>Metoda nejříve zkontroluje rozměry 2d a 1d polí, zda vyhovují operaci
  498.      * přičtení sloupce.</li>
  499.      *
  500.      * <li>Metoda vytvoří nové 2d pole o shodných rozměrech se vstupním 2d
  501.      * polem.</li>
  502.      *
  503.      * <li>Do nového 2d pole metoda zkopíruje vstupní pole m1. </li>
  504.      *
  505.      * <li>Do nového 2d pole metoda k sloupci daného indexem v parametru sloupec
  506.      * přičte stejnolehlé hodnoty z jednorozměrného pole.</li>
  507.      *
  508.      * <li>Reference na nové 2d pole metoda předá v návratové hodnotě.</li>
  509.      * </ol>
  510.      *
  511.      * @param m1 Vstupmí 2d pole
  512.      * @param pole Vstupní 1d pole
  513.      * @param sloupec Index sloupce ke kterému se bude přičítat 1d
  514.      *
  515.      * @return Nové 2D pole s přičteným sloupcem
  516.      */
  517.     public static double[][] prictiSloupec(double[][] m1, double[] pole, int sloupec) {
  518.         if (m1.length == pole.length) {
  519.             for (int i = 0; i < m1.length; i++) {
  520.                 m1[i][sloupec] = m1[i][sloupec]+pole[i];
  521.             }
  522.             return m1;
  523.         } else {
  524.             return new double[0][0];
  525.         }
  526.  
  527.     }
  528.  
  529.     /**
  530.      * Metoda odečte od vybraného sloupce 2d pole 1d pole.
  531.      *
  532.      * Popis činnosti metody:
  533.      * <ol>
  534.      * <li>Metoda nejříve zkontroluje rozměry 2d a 1d polí, zda vyhovují operaci
  535.      * odečtení sloupce.</li>
  536.      *
  537.      * <li>Metoda vytvoří nové 2d pole o shodných rozměrech se vstupním 2d
  538.      * polem.</li>
  539.      *
  540.      * <li>Do nového 2d pole metoda zkopíruje vstupní pole m1. </li>
  541.      *
  542.      * <li>Do nového 2d pole metoda k sloupci daného indexem v parametru sloupec
  543.      * odečte stejnolehlé hodnoty z jednorozměrného pole.</li>
  544.      *
  545.      * <li>Reference na nové 2d pole metoda předá v návratové hodnotě.</li>
  546.      * </ol>
  547.      *
  548.      * @param m1 Vstupmí 2d pole
  549.      * @param pole Vstupní 1d pole
  550.      * @param sloupec Index sloupce ke kterému se bude přičítat 1d
  551.      *
  552.      * @return Nové 2D pole s odečteným sloupcem
  553.      */
  554.     public static double[][] odectiSloupec(double[][] m1, double[] pole, int sloupec) {
  555.         if (m1.length == pole.length) {
  556.             for (int i = 0; i < m1.length; i++) {
  557.                 m1[i][sloupec] = m1[i][sloupec]-pole[i];
  558.             }
  559.             return m1;
  560.         } else {
  561.             return new double[0][0];
  562.         }
  563.     }
  564. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement