Advertisement
ithoran

PJ Lab 3

Mar 29th, 2016
468
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.52 KB | None | 0 0
  1. // KvadratnaMatrica
  2. import java.io.IOException;
  3.  
  4. public interface KvadratnaMatrica {
  5.     public abstract double det();
  6.     public abstract void ucitaj() throws IOException;
  7.     public abstract void stampaj();
  8.     public abstract void uctaijIzFajla(String ImeFajla) throws IOException;
  9.     public abstract void upisiUFajl(String ImeFajla) throws IOException;
  10. }
  11.  
  12. // PunaMatrica
  13. import java.io.*;
  14.  
  15. public class PunaMatrica implements KvadratnaMatrica {
  16.     private int n;
  17.     private double[][] mat;
  18.    
  19.     public PunaMatrica(int x) throws Exception{
  20.         if (x <= 0 )
  21.             throw new Exception("Vrste i kolone moraju imati vecu vrednost od 0!");
  22.         n = x;
  23.         mat = new double[n][n];
  24.     }
  25.  
  26.     public double det() {
  27.         if (n == 1) {
  28.             return mat[0][0];
  29.         }
  30.         if (n == 2) {
  31.             return mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
  32.         }
  33.         double vrednost = 0;
  34.         double znak = -1;
  35.         for (int i = 0; i < n; i++) {
  36.             double[][] temp = new double[n-1][n-1];
  37.             int iP = -1;
  38.             for (int iT = 0; iT < n; iT++) {
  39.                 if (iT == i)
  40.                     continue;
  41.                 iP++;
  42.                 int jP = -1;
  43.                 for (int jT = 1; jT < n; jT++) {
  44.                     jP++;
  45.                     temp[iP][jP] = mat[iT][jT];
  46.                 }
  47.             }
  48.             znak = znak * -1;
  49.             vrednost = vrednost + detGlavna(temp, n - 1) * znak * mat[i][0];
  50.            
  51.         }
  52.         return vrednost;
  53.     }
  54.    
  55.     private double detGlavna(double[][] matrica, int m) {
  56.         if (m == 2) {
  57.             return matrica[0][0] * matrica[1][1] - matrica[0][1] * matrica[1][0];
  58.         }
  59.         double vrednost = 0;
  60.         double znak = -1;
  61.         for (int i = 0; i < m; i++) {
  62.             double[][] temp = new double[m-1][m-1];
  63.             int iP = -1;
  64.             for (int iT = 0; iT < m; iT++) {
  65.                 if (iT == i)
  66.                     continue;
  67.                 iP++;
  68.                 int jP = -1;
  69.                 for (int jT = 1; jT < m; jT++) {
  70.                     jP++;
  71.                     temp[iP][jP] = matrica[iT][jT];
  72.                 }
  73.             }
  74.             znak = znak * -1;
  75.             vrednost = vrednost + detGlavna(temp, m - 1) * znak * matrica[i][0];
  76.         }
  77.         return vrednost;
  78.     }
  79.  
  80.     public void ucitaj() throws IOException {
  81.         InputStreamReader isr = new InputStreamReader(System.in);
  82.         BufferedReader bfr = new BufferedReader(isr);
  83.         System.out.print("Unesite ");
  84.         System.out.print(n);System.out.print("*");System.out.print(n);
  85.         System.out.println(" elemenata:");
  86.         String samoC;
  87.         for (int i = 0; i < n; i++) {
  88.             for (int j = 0; j < n; j++) {
  89.                 samoC = bfr.readLine();
  90.                 mat[i][j] = Double.valueOf(samoC);
  91.             }
  92.         }
  93.     }
  94.  
  95.     public void stampaj() {
  96.         for (int i = 0; i < n; i++) {
  97.             for (int j = 0; j < n; j++) {
  98.                 System.out.print(mat[i][j]);
  99.                 System.out.print(" ");
  100.             }
  101.             System.out.println();
  102.         }
  103.     }
  104.  
  105.     public void uctaijIzFajla(String ImeFajla) throws IOException {
  106.         FileInputStream fin = new FileInputStream(ImeFajla);
  107.         DataInputStream din = new DataInputStream(fin);
  108.         for (int i = 0; i < n; i++) {
  109.             for (int j = 0; j < n; j++) {
  110.                 mat[i][j] = din.readDouble();
  111.             }
  112.         }
  113.         din.close();
  114.         fin.close();
  115.     }
  116.    
  117.     public void upisiUFajl(String imeFajla) throws IOException {
  118.         FileOutputStream fos = new FileOutputStream(imeFajla);
  119.         DataOutputStream dos = new DataOutputStream(fos);
  120.         for (int i = 0; i < n; i++) {
  121.             for (int j = 0; j < n; j++) {
  122.                 dos.writeDouble(mat[i][j]);
  123.             }
  124.         }
  125.         dos.close();
  126.         fos.close();
  127.     }
  128.  
  129. }
  130.  
  131. // main
  132. import java.io.IOException;
  133.  
  134. public class mejn {
  135.  
  136.     public static void main(String[] args) throws Exception {
  137.         try{
  138.             KvadratnaMatrica k = new PunaMatrica(3);
  139.             k.uctaijIzFajla("lezgo");
  140.             k.stampaj();
  141.             System.out.print(k.det());
  142.     }
  143.         catch (IOException e) {
  144.             System.out.println(e);
  145.         }
  146.         catch (Exception e) {
  147.             System.out.print(e);
  148.         }
  149.     }
  150.  
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement