Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.74 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 semestralni.prace.pkg2014;
  7.  
  8. /**
  9. *
  10. * @author Tegaf
  11. */
  12. import java.io.FileInputStream;
  13. import java.io.FileWriter;
  14. import java.io.IOException;
  15. import java.io.PrintWriter;
  16. import java.util.Locale;
  17. import java.util.Random;
  18. import java.util.Scanner;
  19. import static semestralni.prace.pkg2014.SemestralniPrace2014.transponuj;
  20. import static semestralni.prace.pkg2014.SemestralniPrace2014.vypis;
  21.  
  22. public class novyMain {
  23.  
  24. private static double[][] matice = null;
  25. private static double[][] matice1 = null;
  26. private static double[][] matice2 = null;
  27. private static double[][] maticeVysledna = null;
  28. private static boolean sKolika;
  29. private static boolean zapis;
  30. private static double det;
  31.  
  32. public static void main(String[] args) {
  33. System.out.println("-------------------------------------------");
  34. System.out.println("|Vítejte v programu na operace s maticemi!|");
  35. centralniCyklus:
  36. do {
  37. /* V tedo metode zadejMatici vybirame, odkud matici chceme vzít.
  38. Můžeme si vybrat mezi: ze souboru, ručně nebo náhodně*/
  39. zadejMaticiProPracu();
  40.  
  41. /* V tedo metode zpracovaniZadanychMatic vybirame, co chceme
  42. s danou maticí/maticemi dělat. Menu nám automatovky vybírá pouze ty
  43. operace, ktere dana matice může vykonat*/
  44. zpracovaniZadanychMatic();
  45. /* V tedo metode ulozitMaticiAVybratCoDal vybirame, jak chceme provedene
  46. operace ukončit.Buď uložíme matici, nebo začneme znova nebo ukoncime program*/
  47. ulozitMaticiAVybratCoDal();
  48. } while (true);
  49. }
  50.  
  51. private static void ulozitMaticiAVybratCoDal() {
  52. ulozitMaticiAVybratCoDal:
  53. do {
  54. System.out.println("Nakonec vyberte co na záver chcete udělat:");
  55. System.out.println("1 -> Uložit výslednou matici\n"
  56. + "2 -> Zadat novou matici\n"
  57. + "3 -> Konec programu");
  58. System.out.println("");
  59. System.out.print("Vybírám si:");
  60. switch (nactiInt()) {
  61. case 1:
  62. System.out.println("Zadej jaké má mít soubor jméno:");
  63. zapis = zapisMaticiDoSouboru(nactiString(), maticeVysledna);
  64. break;
  65. case 2:
  66. double[][] matice = null;
  67. double[][] matice1 = null;
  68. double[][] matice2 = null;
  69. double[][] maticeVysledna = null;
  70. break ulozitMaticiAVybratCoDal;
  71. case 3:
  72. System.out.println("-------------------------------------------");
  73. System.out.println(" Nashle příště! ");
  74. System.out.println("-------------------------------------------");
  75. System.out.println("| THE END |");
  76. System.out.println("-------------------------------------------");
  77. System.exit(0);
  78. default:
  79. System.out.println("___________________________________________");
  80. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  81. break;
  82. }
  83. } while (true);
  84. }
  85.  
  86. private static void zadejMaticiProPracu() {
  87. uzProvedUkon: //Cyklus pro presunuti na vypocty
  88. do {
  89.  
  90. hlavniCyklus: //Cyklus pro zadání matice
  91. do {
  92. System.out.println("-------------------------------------------");
  93. System.out.println("");
  94. System.out.println("HLAVNÍ MENU");
  95. System.out.println("Zadejte, kde budeme matici hledat:");
  96. System.out.println("1 -> Ze souboru\n"
  97. + "2 -> Ručně \n"
  98. + "3 -> Náhodně\n"
  99. + "4 -> Konec programu");
  100. System.out.println("");
  101. System.out.print("Vybírám si:");
  102. switch (nactiInt()) {
  103. case 1:
  104. souborCyklus: //Cyklus pro nacitani ze souboru
  105. do {
  106. System.out.println("-------------------------------------------");
  107. System.out.println("");
  108. System.out.println("MENU NAČÍTÁNÍ");
  109. System.out.println("Nyní musíme upřesnit zadání:");
  110. System.out.println("1 -> Zadat jméno souboru\n"
  111. + "2 -> Zjistit požadovaný formát souboru \n"
  112. + "3 -> Vrátit se do hlavního menu\n"
  113. + "4 -> Konec programu");
  114. System.out.println("");
  115. System.out.print("Vybírám si:");
  116. switch (nactiInt()) {
  117.  
  118. case 1:
  119. sKolika = vyber1nebo2();
  120. if (sKolika == true) {
  121. System.out.println("-------------------------------------------");
  122. System.out.println("Soubor s maticí:");
  123. matice = nactiZeSouboru(nactiString());
  124. if (matice == null) {
  125. break;
  126. }
  127. break uzProvedUkon;
  128. } else {
  129. System.out.println("-------------------------------------------");
  130. System.out.println("Soubor s první maticí:");
  131. matice1 = nactiZeSouboru(nactiString());
  132. if (matice1 == null) {
  133. break;
  134. }
  135. System.out.println("Soubor kde mám druhou matici:");
  136. matice2 = nactiZeSouboru(nactiString());
  137. if (matice2 == null) {
  138. break;
  139. }
  140. break uzProvedUkon;
  141. }
  142.  
  143. case 2:
  144. System.out.println("-------------------------------------------");
  145. System.out.println("Spravny format souboru je, že čísla jsou oddělena\n"
  146. + " mezerami a co řádek v souboru, to řádek matice.");
  147. System.out.println("Příklad:");
  148. System.out.println("");
  149. System.out.println("3.3 5 7 1 5");
  150. System.out.println("2.7 5 6 7 5");
  151.  
  152. break;
  153. case 3:
  154. break souborCyklus;
  155.  
  156. case 4:
  157. break hlavniCyklus;
  158. default:
  159. System.out.println("___________________________________________");
  160. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  161.  
  162. }
  163. } while (true);
  164. break;
  165. case 2:
  166.  
  167. sKolika = vyber1nebo2();
  168. if (sKolika == true) {
  169. matice = rucneMatici();
  170. break uzProvedUkon;
  171. } else {
  172. matice1 = rucneMatici();
  173. matice2 = rucneMatici();
  174. break uzProvedUkon;
  175. }
  176. case 3:
  177. sKolika = vyber1nebo2();
  178. if (sKolika == true) {
  179. matice = vygenMatici();
  180. while (matice == null) {
  181. matice = vygenMatici();
  182. }
  183. break uzProvedUkon;
  184. } else {
  185. matice1 = vygenMatici();
  186. while (matice1 == null) {
  187. matice1 = vygenMatici();
  188. }
  189. matice2 = vygenMatici();
  190. while (matice2 == null) {
  191. matice2 = vygenMatici();
  192. }
  193. break uzProvedUkon;
  194. }
  195. case 4:
  196. break hlavniCyklus;
  197. default:
  198. System.out.println("___________________________________________");
  199. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  200.  
  201. }
  202.  
  203. } while (true);
  204.  
  205. System.out.println("-------------------------------------------");
  206. System.out.println(" Nashle příště! ");
  207. System.out.println("-------------------------------------------");
  208. System.out.println("| THE END |");
  209. System.out.println("-------------------------------------------");
  210. System.exit(0);
  211.  
  212. } while (true);
  213.  
  214. }
  215.  
  216. private static void zpracovaniZadanychMatic() {
  217. if (sKolika == true) //*Pracujeme s jednou maticí
  218. {
  219. System.out.println("");
  220. System.out.println("");
  221. System.out.println("-------------------------------------------");
  222. System.out.println("-- Jdeme na práci s maticí --");
  223. System.out.println("-------------------------------------------");
  224. System.out.println("");
  225. System.out.println("MATICE");
  226. vypis(matice);
  227. System.out.println("");
  228. System.out.println("-------------------------------------------");
  229. boolean ctvercova = jeCtvercova(matice);
  230. if (ctvercova == true)//Nase jedna matice je čtvercová
  231. {
  232. if (determinant(matice) == 0)// Naše jedna čtvercová matice je singularní
  233. {
  234. jednaCtvercovaSing();
  235. } else// Naše jedna čtvercová matice je regulerni
  236. {
  237. jednaCtvercovaReg();
  238.  
  239. }
  240. } else // Naše jedna obdélníková matice
  241. {
  242. jednaObd();
  243.  
  244. }
  245.  
  246. } else if (sKolika == false) //Počítáme se dvěmi maticemi
  247. {
  248. int radkyM1 = matice1[0].length;
  249. int sloupceM1 = matice1.length;
  250. int radkyM2 = matice2[0].length;
  251. int sloupceM2 = matice2.length;
  252. System.out.println("");
  253. System.out.println("");
  254. System.out.println("-------------------------------------------");
  255. System.out.println("-- Jdeme na práci s maticemi --");
  256. System.out.println("-------------------------------------------");
  257. System.out.println("");
  258. System.out.println("MATICE A");
  259. vypis(matice1);
  260. System.out.println("MATICE B");
  261. vypis(matice2);
  262. System.out.println("");
  263. System.out.println("-------------------------------------------");
  264. System.out.println("MENU OPERACÍ");
  265. if (radkyM1 == radkyM2 && sloupceM1 == sloupceM2) //Matice se velikosti rovnaji
  266. {
  267. dveCtvercova();
  268.  
  269. } else if (radkyM2 == sloupceM1) //podminka nasobeni B*A
  270. {
  271. dveNasobBA();
  272.  
  273. } else if (radkyM1 == sloupceM2) //Podmínka násobení A*B
  274. {
  275. dveNasobAB();
  276.  
  277. } else {
  278.  
  279. ostatniMatice();//ostatní
  280.  
  281. }
  282. } else {
  283. System.out.println("-------------------------------------------");
  284. System.out.println(" Vyskytla se divná věc.. ");
  285. System.out.println("-------------------------------------------");
  286. System.out.println("| THE END |");
  287. System.out.println("-------------------------------------------");
  288. System.exit(0);
  289. }
  290.  
  291. }
  292.  
  293. private static void ostatniMatice() {
  294. ostatni:
  295. do {
  296. System.out.println("");
  297. System.out.println("S temito maticemi nemůžu provést další operace...");
  298. System.out.println("");
  299. System.out.println("1 -> Uložit matice a ukončit program\n"
  300. + "2 -> Konec programu");
  301. System.out.println("");
  302. System.out.print("Vybírám si:");
  303. switch (nactiInt()) {
  304. case 1:
  305. System.out.println("Zadej jaké má mít soubor MATICE A jméno:");
  306. zapis = zapisMaticiDoSouboru(nactiString(), matice1);
  307. System.out.println("");
  308. System.out.println("Zadej jaké má mít soubor MATICE B jméno:");
  309. zapis = zapisMaticiDoSouboru(nactiString(), matice2);
  310.  
  311. System.out.println("-------------------------------------------");
  312. System.out.println(" Nashle příště! ");
  313. System.out.println("-------------------------------------------");
  314. System.out.println("| THE END |");
  315. System.out.println("-------------------------------------------");
  316. System.exit(0);
  317. case 2:
  318. System.out.println("-------------------------------------------");
  319. System.out.println(" Nashle příště! ");
  320. System.out.println("-------------------------------------------");
  321. System.out.println("| THE END |");
  322. System.out.println("-------------------------------------------");
  323. System.exit(0);
  324. default:
  325. System.out.println("___________________________________________");
  326. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  327. break;
  328. }
  329. } while (true);
  330. }
  331.  
  332. private static void jednaCtvercovaSing() {
  333. jedCtSi:
  334. do {
  335. System.out.println("MENU OPERACÍ");
  336.  
  337. System.out.println("Co chceš s touto čvercovou maticí udělat:");
  338. System.out.println("1 -> Vypočítat determinant\n"
  339. + "2 -> Transponovat matici\n"
  340. + "3 -> Uložit matici\n"
  341. + "4 -> Konec programu");
  342. System.out.println("");
  343. System.out.print("Vybírám si:");
  344.  
  345. switch (nactiInt()) {
  346. case 1:
  347. det = determinant(matice);
  348. System.out.println("Dereminant matice je:" + det);
  349. System.out.println("S derminantem již není co udělat."
  350. + " Zadej co chceš udělat s původní maticí:");
  351. System.out.println("");
  352. break;
  353. case 2:
  354. matice = transponujMatici(matice);
  355. System.out.println("Transponovaná matice:");
  356. vypis(matice);
  357. break jedCtSi;
  358. case 3:
  359. System.out.println("Zadej jaké má mít soubor jméno:");
  360. zapis = zapisMaticiDoSouboru(nactiString(), matice);
  361.  
  362. break;
  363. case 4:
  364. System.out.println("-------------------------------------------");
  365. System.out.println(" Nashle příště! ");
  366. System.out.println("-------------------------------------------");
  367. System.out.println("| THE END |");
  368. System.out.println("-------------------------------------------");
  369. System.exit(0);
  370. default:
  371. System.out.println("___________________________________________");
  372. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  373. break;
  374. }
  375. } while (true);
  376.  
  377. }
  378.  
  379. private static void jednaCtvercovaReg() {
  380. jedCtRe:
  381. do {
  382. System.out.println("MENU OPERACÍ");
  383. System.out.println("Co chceš s touto čvercovou maticí udělat:");
  384. System.out.println("1 -> Vypočítat determinant\n"
  385. + "2 -> Vypočítat inverzní matici\n"
  386. + "3 -> Transponovat matici\n"
  387. + "4 -> Uložit matici\n"
  388. + "5 -> Konec programu");
  389. System.out.println("");
  390. System.out.print("Vybírám si:");
  391.  
  392. switch (nactiInt()) {
  393. case 1:
  394. det = determinant(matice);
  395. System.out.println("Dereminant matice je:" + det);
  396. System.out.println("S derminantem již není co udělat."
  397. + " Zadej co chceš udělat s původní maticí:");
  398. System.out.println("");
  399. break;
  400. case 2:
  401. matice = inverzniMatice(matice);
  402. System.out.println("Inverzní matice:");
  403. vypis(matice);
  404. break jedCtRe;
  405. case 3:
  406. matice = transponujMatici(matice);
  407. System.out.println("Transponovaná matice:");
  408. vypis(matice);
  409. break jedCtRe;
  410. case 4:
  411. System.out.println("Zadej jaké má mít soubor jméno:");
  412. zapis = zapisMaticiDoSouboru(nactiString(), matice);
  413.  
  414. break;
  415. case 5:
  416. System.out.println("-------------------------------------------");
  417. System.out.println(" Nashle příště! ");
  418. System.out.println("-------------------------------------------");
  419. System.out.println("| THE END |");
  420. System.out.println("-------------------------------------------");
  421. System.exit(0);
  422. default:
  423. System.out.println("___________________________________________");
  424. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  425. break;
  426. }
  427. } while (true);
  428. }
  429.  
  430. private static void jednaObd() {
  431. jednaObd:
  432. do {
  433. System.out.println("MENU OPERACÍ");
  434. System.out.println("Co chceš s touto obdelníkovou maticí udělat:");
  435. System.out.println("1 -> Transponovat matici\n"
  436. + "2 -> Uložit matici\n"
  437. + "3 -> Konec programu");
  438. System.out.println("");
  439. System.out.print("Vybírám si:");
  440. switch (nactiInt()) {
  441. case 1:
  442. matice = transponujMatici(matice);
  443. System.out.println("Transponovaná matice:");
  444. vypis(matice);
  445. break jednaObd;
  446. case 2:
  447. System.out.println("Zadej jaké má mít soubor jméno:");
  448. zapis = zapisMaticiDoSouboru(nactiString(), matice);
  449. break;
  450. case 3:
  451. System.out.println("-------------------------------------------");
  452. System.out.println(" Nashle příště! ");
  453. System.out.println("-------------------------------------------");
  454. System.out.println("| THE END |");
  455. System.out.println("-------------------------------------------");
  456. System.exit(0);
  457.  
  458. default:
  459. System.out.println("___________________________________________");
  460. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  461. break;
  462. }
  463. } while (true);
  464. }
  465.  
  466. private static void dveCtvercova() {
  467. dveCtvercova:
  468. do {
  469. System.out.println("1 -> Sčítání dvou matic\n"
  470. + "2 -> Odčítání matice A od B\n"
  471. + "3 -> Odčítání matice B od A\n"
  472. + "4 -> Násonbení matice A * matice B\n"
  473. + "5 -> Násonbení matice B * matice A\n"
  474. + "6 -> Uložit matice\n"
  475. + "7 -> Konec programu");
  476. System.out.println("");
  477. System.out.print("Vybírám si:");
  478. switch (nactiInt()) {
  479. case 1:
  480. maticeVysledna = sectiMatice(matice1, matice2);
  481. System.out.println("Sečtené matice dávají matici:");
  482. vypis(maticeVysledna);
  483. break dveCtvercova;
  484. case 2:
  485. maticeVysledna = odectiMatice(matice1, matice2);
  486. System.out.println("Odečtené matice dávají matici:");
  487. vypis(maticeVysledna);
  488. break dveCtvercova;
  489. case 3:
  490. maticeVysledna = odectiMatice(matice2, matice1);
  491. System.out.println("Odečtené matice dávají matici:");
  492. vypis(maticeVysledna);
  493. break dveCtvercova;
  494. case 4:
  495. maticeVysledna = nasobMatice(matice1, matice2);
  496. System.out.println("Znásobené matice dávají matici:");
  497. vypis(maticeVysledna);
  498. break dveCtvercova;
  499. case 5:
  500. maticeVysledna = nasobMatice(matice2, matice1);
  501. System.out.println("Znásobené matice dávají matici:");
  502. vypis(maticeVysledna);
  503. break dveCtvercova;
  504. case 6:
  505. System.out.println("Zadej jaké má mít soubor MATICE A jméno:");
  506. zapis = zapisMaticiDoSouboru(nactiString(), matice1);
  507. System.out.println("");
  508. System.out.println("Zadej jaké má mít soubor MATICE B jméno:");
  509. zapis = zapisMaticiDoSouboru(nactiString(), matice2);
  510. break;
  511. case 7:
  512. System.out.println("-------------------------------------------");
  513. System.out.println(" Nashle příště! ");
  514. System.out.println("-------------------------------------------");
  515. System.out.println("| THE END |");
  516. System.out.println("-------------------------------------------");
  517. System.exit(0);
  518. default:
  519. System.out.println("___________________________________________");
  520. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  521. break;
  522. }
  523. } while (true);
  524. }
  525.  
  526. private static void dveNasobAB() {
  527. dveNasobAB:
  528. do {
  529. System.out.println("1 -> Násonbení matice A * matice B\n"
  530. + "2 -> Uložit matice\n"
  531. + "3 -> Konec programu");
  532. System.out.println("");
  533. System.out.print("Vybírám si:");
  534. switch (nactiInt()) {
  535. case 1:
  536. maticeVysledna = nasobMatice(matice1, matice2);
  537. System.out.println("Znásobené matice dávají matici:");
  538. vypis(maticeVysledna);
  539. break dveNasobAB;
  540. case 2:
  541. System.out.println("Zadej jaké má mít soubor MATICE A jméno:");
  542. zapis = zapisMaticiDoSouboru(nactiString(), matice1);
  543. System.out.println("");
  544. System.out.println("Zadej jaké má mít soubor MATICE B jméno:");
  545. zapis = zapisMaticiDoSouboru(nactiString(), matice2);
  546. break;
  547. case 3:
  548. System.out.println("-------------------------------------------");
  549. System.out.println(" Nashle příště! ");
  550. System.out.println("-------------------------------------------");
  551. System.out.println("| THE END |");
  552. System.out.println("-------------------------------------------");
  553. System.exit(0);
  554. default:
  555. System.out.println("___________________________________________");
  556. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  557. break;
  558. }
  559. } while (true);
  560. }
  561.  
  562. private static void dveNasobBA() {
  563. dveNasobBA:
  564. do {
  565. System.out.println("1 -> Násonbení matice B * matice A\n"
  566. + "2 -> Uložit matice\n"
  567. + "3 -> Konec programu");
  568. System.out.println("");
  569. System.out.print("Vybírám si:");
  570. switch (nactiInt()) {
  571. case 1:
  572. maticeVysledna = nasobMatice(matice2, matice1);
  573. System.out.println("Znásobené matice dávají matici:");
  574. vypis(maticeVysledna);
  575. break dveNasobBA;
  576. case 2:
  577. System.out.println("Zadej jaké má mít soubor MATICE A jméno:");
  578. zapis = zapisMaticiDoSouboru(nactiString(), matice1);
  579. System.out.println("");
  580. System.out.println("Zadej jaké má mít soubor MATICE B jméno:");
  581. zapis = zapisMaticiDoSouboru(nactiString(), matice2);
  582. break;
  583. case 3:
  584. System.out.println("-------------------------------------------");
  585. System.out.println(" Nashle příště! ");
  586. System.out.println("-------------------------------------------");
  587. System.out.println("| THE END |");
  588. System.out.println("-------------------------------------------");
  589. System.exit(0);
  590. default:
  591. System.out.println("___________________________________________");
  592. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  593. break;
  594. }
  595. } while (true);
  596. }
  597.  
  598. private static double determinant(double[][] ctvercovaMatice) {
  599. double det = 0;
  600. if (ctvercovaMatice.length == 1) {
  601. det = ctvercovaMatice[0][0];
  602. return det;
  603. }
  604. if (ctvercovaMatice.length == 2) {
  605. det = ctvercovaMatice[0][0] * ctvercovaMatice[1][1] - ctvercovaMatice[0][1] * ctvercovaMatice[1][0];
  606. return det;
  607. }
  608. for (int j = 0; j < ctvercovaMatice.length; j++) {
  609. double a[][] = new double[ctvercovaMatice.length - 1][ctvercovaMatice[0].length - 1];
  610. for (int k = 1; k < ctvercovaMatice.length; k++) {
  611. for (int l = 0; l < ctvercovaMatice[0].length; l++) {
  612. if (l < j) {
  613. a[k - 1][l] = ctvercovaMatice[k][l];
  614. } else if (l > j) {
  615. a[k - 1][l - 1] = ctvercovaMatice[k][l];
  616. }
  617. }
  618. }
  619. det += ctvercovaMatice[0][j] * Math.pow(-1, (double) j) * determinant(a);
  620. }
  621. return det;
  622. }
  623.  
  624. private static double[][] inverzniMatice(double[][] m) {
  625. int a = 1;
  626. int radky = m.length;
  627. int sloupce = m[radky - 1].length;
  628. double deSub = 0;
  629. double p[][] = new double[radky][sloupce];
  630. double det = determinant(m);//determinant matice
  631.  
  632. for (int r = 0; r < sloupce; r++) {
  633. for (int s = 0; s < radky; s++) {
  634. deSub = determinant(subMatice(m, r, s));/*determinant
  635. ze submatice a submatice z z radku a sloupce ktery vynecháme
  636. */
  637.  
  638. double f = ((deSub / det)) * 100;
  639. f = Math.round(f);
  640. f = f / 100;
  641. p[r][s] = f * a;
  642. a = -a;//kazdy koeficient mění zneménko
  643. }
  644. }
  645. p = transponujMatici(p);//nakonec se matice transponuje
  646. return p;
  647. }
  648.  
  649. private static boolean jeCtvercova(double[][] m) {
  650. if (m.length != m[0].length) {
  651. return false;
  652. }
  653. return true;
  654. }
  655.  
  656. private static int nactiInt() {
  657. Scanner sc = new Scanner(System.in);
  658. while (!sc.hasNextInt()) {
  659. System.out.println("Buďto jste nezadal/a číslo nebo je zadané číslo mimo dovolené meze. Zadejte nové.");
  660. sc.nextLine();
  661. }
  662. int cislo = sc.nextInt();
  663. sc.nextLine();
  664. return cislo;
  665. }
  666.  
  667. private static double[][] nasobMatice(double[][] m1, double[][] m2) {
  668. double[][] znasobeno = new double[m1.length][m2[0].length];
  669. for (int j = 0; j < m1.length; j++) {
  670. for (int k = 0; k < m2[0].length; k++) {
  671. znasobeno[j][k] = 0;
  672. for (int l = 0; l < m1[0].length; l++) {
  673. znasobeno[j][k] += m1[j][l] * m2[l][k];
  674. }
  675. }
  676. }
  677. return znasobeno;
  678. }
  679.  
  680. private static double nactiDouble() {
  681. Scanner sc = new Scanner(System.in);
  682. while (!sc.hasNextDouble()) {
  683. System.out.println("Buďto jste nezadal/a číslo nebo je zadané číslo mimo dovolené meze. Zadejte nové.");
  684. sc.nextLine();
  685. }
  686. double cislo = sc.nextDouble();
  687. sc.nextLine();
  688. return cislo;
  689. }
  690.  
  691. private static String nactiString() {
  692. Scanner sc = new Scanner(System.in);
  693. return sc.nextLine();
  694. }
  695.  
  696. private static double[][] nactiZeSouboru(String jmenoSouboru) {
  697. try {
  698. FileInputStream fis = new FileInputStream(jmenoSouboru);
  699. Scanner sc = new Scanner(fis);
  700. sc.useLocale(Locale.US);
  701. int pocetRadku = sc.nextInt();
  702. int pocetSloupcu = sc.nextInt();
  703. double[][] matice = new double[pocetRadku][pocetSloupcu];
  704. for (int r = 0; r < pocetRadku; r++) {
  705. for (int s = 0; s < pocetSloupcu; s++) {
  706. sc.useLocale(Locale.US);
  707. matice[r][s] = sc.nextDouble();
  708. }
  709. }
  710. System.out.println("==============================");
  711. vypis(matice);
  712. System.out.println("==============================");
  713.  
  714. fis.close();
  715. return matice;
  716. } catch (IOException ex) {
  717. System.out.println("__________________________________________");
  718. System.out.println("Soubor s tímto jménem neexistuje");
  719.  
  720. return null;
  721. }
  722. }
  723.  
  724. private static double[][] odectiMatice(double[][] m1, double[][] m2) {
  725.  
  726. double[][] odecteno = new double[m1.length][m1[0].length];
  727. for (int j = 0; j < m1.length; j++) {
  728. for (int k = 0; k < m1[0].length; k++) {
  729. odecteno[j][k] = m1[j][k] - m2[j][k];
  730. }
  731. }
  732. return odecteno;
  733. }
  734.  
  735. private static double[][] rucneMatici() {
  736. double[][] m;
  737. System.out.println("-------------------------------------------");
  738. System.out.println("Nezapomente,desetiné číslo je s čárkou 3,3");
  739. System.out.println("Matice má:");
  740. System.out.println("");
  741. int a, b;
  742. System.out.print("Řádků:");
  743. a = nactiInt();
  744. System.out.print("Sloupců:");
  745. b = nactiInt();
  746.  
  747. while (a <= 0 || b <= 0) {
  748. System.out.println("__________________________________________");
  749. System.out.println("Čísla musí být větší než 0. Znova.");
  750. System.out.print("Řádků:");
  751. a = nactiInt();
  752. System.out.print("Sloupců:");
  753. b = nactiInt();
  754. }
  755. System.out.println("-------------------------------------------");
  756. System.out.println("Nyní zadej " + (a * b) + " čísel/a (zadáváte v řádkách)");
  757. m = new double[a][b];
  758. System.out.println("První řádek:");
  759. for (int r = 0; r < a; r++) {
  760. for (int s = 0; s < b; s++) {
  761. m[r][s] = nactiDouble();
  762.  
  763. }
  764. if (r == a - 1) {
  765. } else {
  766. System.out.println("Další řádek");
  767. }
  768.  
  769. }
  770. System.out.println("==============================");
  771. vypis(m);
  772. System.out.println("==============================");
  773. return m;
  774. }
  775.  
  776. public static double[][] sectiMatice(double[][] m1, double[][] m2) {
  777. double[][] secteno = new double[m1.length][m2[0].length];
  778. for (int j = 0; j < m1.length; j++) {
  779. for (int k = 0; k < m1[0].length; k++) {
  780. secteno[j][k] = m1[j][k] + m2[j][k];
  781. }
  782. }
  783. return secteno;
  784. }
  785.  
  786. private static double[][] subMatice(double[][] m, int R, int S) {
  787. double[][] vysledna = new double[m.length - 1][m[0].length - 1];
  788. int k = 0, l = 0;
  789. for (int r = 0; r < m.length; r++) {
  790. if (r != R) {
  791. for (int s = 0; s < m[0].length; s++) {
  792. if (s != S) {
  793. vysledna[k][l++] = m[r][s];
  794. }
  795. }
  796. l = 0;
  797. k++;
  798. }
  799. }
  800. return vysledna;
  801. }
  802.  
  803. public static double[][] transponujMatici(double[][] m) {
  804. double[][] transponovanaMatice = new double[m[0].length][m.length];
  805. for (int r = 0; r < transponovanaMatice.length; r++) {
  806. for (int s = 0; s < transponovanaMatice[r].length; s++) {
  807. transponovanaMatice[r][s] = m[s][r];
  808. }
  809. }
  810. return transponovanaMatice;
  811. }
  812.  
  813. private static double[][] vygenMatici() {
  814. Random rd = new Random();
  815. int a, b;
  816. double rozsahD = 0;
  817. int rozsahI = 0;
  818. double[][] matice = null;
  819. System.out.println("-------------------------------------------");
  820. System.out.println("1 -> Chci celočíselnou matici\n2 -> Chci matici s reálnými čísly");
  821. System.out.println("");
  822. System.out.print("Vybírám si:");
  823. switch (nactiInt()) {
  824. case 1:
  825. System.out.println("");
  826. System.out.print("Řádků:");
  827. a = nactiInt();
  828. System.out.print("Sloupců:");
  829. b = nactiInt();
  830. System.out.print("Rozsah: 0 ----> vaše číslo:");
  831. rozsahI = nactiInt();
  832. while (a <= 0 || b <= 0 || rozsahI <= 0) {
  833. System.out.println("__________________________________________");
  834. System.out.println("Čísla musí být větší než 0. Znova.");
  835. System.out.print("Řádků:");
  836. a = nactiInt();
  837. System.out.print("Sloupců:");
  838. b = nactiInt();
  839. System.out.print("Rozsah: 0 ----> >vaše číslo<:");
  840. rozsahI = nactiInt();
  841. }
  842. matice = new double[a][b];
  843. for (int r = 0; r < a; r++) {
  844. for (int s = 0; s < b; s++) {
  845. matice[r][s] = (double) rd.nextInt(rozsahI);
  846. }
  847. }
  848.  
  849. break;
  850. case 2:
  851. System.out.println("");
  852. System.out.print("Řádků:");
  853. a = nactiInt();
  854. System.out.print("Sloupců:");
  855. b = nactiInt();
  856. System.out.print("Rozsah: 0 ----> vaše číslo:");
  857. rozsahD = nactiDouble();
  858. while (a <= 0 || b <= 0 || rozsahD <= 0) {
  859. System.out.println("__________________________________________");
  860. System.out.println("Čísla musí být větší než 0. Znova.");
  861. System.out.print("Řádků:");
  862. a = nactiInt();
  863. System.out.print("Sloupců:");
  864. b = nactiInt();
  865. System.out.print("Rozsah: 0 ----> >vaše číslo<:");
  866. rozsahD = nactiDouble();
  867. }
  868. matice = new double[a][b];
  869. for (int r = 0; r < a; r++) {
  870. for (int s = 0; s < b; s++) {
  871. double f = (Math.random() * rozsahD) * 100;
  872. f = Math.round(f);
  873. matice[r][s] = f / 100;
  874. }
  875. }
  876. break;
  877. default:
  878. System.out.println("___________________________________________");
  879. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  880. return null;
  881. }
  882.  
  883. System.out.println("==============================");
  884. vypis(matice);
  885. System.out.println("==============================");
  886. return matice;
  887.  
  888. }
  889.  
  890. private static boolean vyber1nebo2() {
  891. VyberCyklus:
  892. do {
  893. System.out.println("-------------------------------------------");
  894. System.out.println("Budeš pracovat s jednou nebo se dvěmi maticemi?\n"
  895. + "1 -> S jednu\n"
  896. + "2 -> Se dvěmi");
  897. System.out.println("");
  898. System.out.print("Vybírám si:");
  899. switch (nactiInt()) {
  900. case 1:
  901. return true;
  902.  
  903. case 2:
  904. return false;
  905.  
  906. default:
  907. System.out.println("___________________________________________");
  908. System.out.println("Zvolená možnost není platná. Zadejte novou.");
  909. break;
  910. }
  911. } while (true);
  912.  
  913. }
  914.  
  915. private static void vypis(double[][] m) {
  916. for (int i = 0; i < m.length; i++) {
  917. for (int j = 0; j < m[0].length; j++) {
  918. System.out.print("[" + m[i][j] + "] ");
  919. }
  920. System.out.println();
  921. }
  922. }
  923.  
  924. private static boolean zapisMaticiDoSouboru(String jmenoSouboru, double[][] m) {
  925. PrintWriter out = null;
  926. try {
  927. out = new PrintWriter(new FileWriter(jmenoSouboru));
  928. out.print(m.length + " " + m[0].length + "\n\n");
  929. for (int r = 0; r < m.length; r++) {
  930. for (int s = 0; s < m[r].length; s++) {
  931. out.print(m[r][s] + " ");
  932. }
  933. out.println();
  934. }
  935. System.out.println("Uložená matice:");
  936. System.out.println("==============================");
  937. vypis(m);
  938. System.out.println("==============================");
  939. return true;
  940. } catch (IOException ex) {
  941. System.out.println("Chyba zapisu do souboru!");
  942. return false;
  943. } finally {
  944. out.close();
  945. }
  946. }
  947.  
  948. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement