package matrice; import citeste.*; public class matrice { private int n, m; private double x[][]; public matrice() { n = m =2; x = new double[2][2]; } public matrice(int no, int mo) { if(no <= 0 || mo <= 0) System.out.println("Numar de linii sau de coloane incorect"); else { n = no; m = mo; x = new double[n][m]; } } //fc. care returneaza nr de coloane public int coloane() { return m; } //fc. care returneaza nr de linii public int linii() { return n; } //fc. care returneaza un element public double element(int i, int j) { return x[i][j]; } //functie pentru citirea de la tastatura a unei matrice public void citire() { n = citeste.intreg("Numar linii n = "); m = citeste.intreg("Numar coloane m = "); x = new double[n][m]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) x[i][j] = citeste.real("x[" + i + "][" + j + "]="); } //functie pentru afisarea unei matrice public void afisare() { for(int i = 0; i < n; i++) { System.out.println("\n"); for(int j = 0; j < m; j++) System.out.print(x[i][j] + " "); } } //fc. pentru inmultirea cu o constanta a unei matrice public void inmultire_cta(double numar) { for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) x[i][j] *= numar; } //fc. care returneaza transpusa unei matrice public matrice transpusa() { matrice t = new matrice(m, n); for(int i = 0; i < this.n; i++) for(int j = 0; j < this.m; j++) t.x[i][j] = this.x[j][i]; return t; } //fc. care returneaza elementul maxim de pe o linie si coloana pe care se afla public double[] max_linie(int i) { double max[] = new double[2] ; int poz = 0; max[0] = x[i][0]; for(int j = 0; j < m; j++) if(x[i][j] > max[0]) { max[0] = x[i][j]; poz = j; } max[1] = poz; return max; } //fc. care afiseaza elementele maxime de pe linii public void maxim_linii() { double m[] = new double[2]; for(int i = 0; i < n; i++) { m = max_linie(i); System.out.println("Elementul maxim pe linia " + i + " este " + "x[" + i + "][" + m[1] + "]= " + m[0]); } } //fc. care verifica daca o matrice este simetrica public int matrice_simetrica() { matrice t = new matrice(m, n); if(n != m) { System.out.println("Matricea nu este patratica!"); return 0; } t = this.transpusa(); for(int i = 0; i < this.n; i++) for(int j = 0; j < this.m; j++) if(x[i][j] != t.x[i][j]) return 0; return 1; } //fc. pentru calculul sumei elementelor de sub diagonla principala public double suma_sub_diagonala() { double suma = 0; if(n != m) { System.out.println("Matricea nu este patratica!"); return 0; } for(int i = 1; i < n; i++) for(int j = 0; j < i; j++) suma += x[i][j]; return suma; } //fc. pentru calculul sumei elementelor aflate in triunghiul superior //marginit de cele doua diagonale public double suma_deasupra_diagonale() { double suma = 0; if(n != m) { System.out.println("Matricea nu este patratica!"); return 0; } for(int i = 0; i < (n/2); i++) for(int j = i + 1; j < m - i - 1; j++) suma += x[i][j]; return suma; } //fc. pentru adunarea a doua matrice public matrice adunare(matrice x) { matrice suma = new matrice(n, m); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) suma.x[i][j] = this.x[i][j] + x.x[i][j]; return suma; } //fc. pentru scaderea a doua matrice public matrice scadere(matrice x) { matrice d = new matrice(n, m); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) d.x[i][j] = this.x[i][j] - (x.x[i][j]); return d; } //fc. pentru inmultirea a doua matrice public matrice inmultire(matrice x) { matrice prod = new matrice(this.linii(), x.coloane()); int k = 0, i = 0, j = 0; double s = 0; for(i = 0; i < prod.linii(); i++) for(j = 0; j < prod.coloane(); j++) { s = 0; for(k = 0; k < x.coloane(); k++) s += this.x[i][k] * (x.x[k][j]); prod.x[i][j] = s; } return prod; } //fc. pentru crearea unei matrice unitate public static matrice matrice_unitate(int g) { matrice u = new matrice(g, g); for(int i = 0; i < g; i++) for(int j = 0; j < g; j++) if(i == j) u.x[i][j] = 1; else u.x[i][j] = 0; return u; } }