You are on page 1of 20

Tehniki fakultet Biha

Elektrotehnika
Informatika

OSNOVE PROGRAMSKOG JEZIKA JAVA


ZADAA 1

Asistent:
Adnan Ramaki, mr.ra. i inf.

Student:
Hasan Bapi 748
Biha, Decembar 2014.

Napisati klasu Matrica koja treba da ima sljedee:


a) u konstruktoru klase Matrica podesiti dimenzije dvije matrice tako da se vri unos
elemenata sa tastature (koristiti klasu Scanner)
b) implementriati metode:
- matricaSabiranje()
- matricaOduzimanje()
- matricaMnozenje()
koje e izvriti navedene operacije nad prethodno uneenim matricama
c) implementirati metodu matricaSuma() koja e ispisati zbir svih elemenata rezultantne
matrice (dobivene po jednoj od gore navedenih opcija)
d) implementirati metodu sortiranjeMatrice() gdje e se ispisati elementi rezultantne matrice
sortirani po jednom od kriterija (korisnik bira kriterij, od najmanjeg ka najveem ili obrnuto)
e) implementirati metodu invMatrica() koja e od rezultantne matrice napraviti inverznu
f) napisati vlastitu klasu MatricaIzuzetak koja e obraivati izuzetke i ogranienja vezana za
matricu (nekorektne dimenzije)
g) napraviti izbornik koji e omoguiti korisniku da sa tastature odabere eljene operacije sa
matricom
h) klase Matrica i MatricaIzuzetak smjestiti u paket MatricaPaket a testnu klasu TestMatrica
smjestiti u paket pod nazivom PaketTest.
Rad sa programom:
Prilikom pokretanja programa, korisniku e se ponuditi izbornik da odabere eljenu opciju sa
matricama:
1. Sabiranje
2. Oduzimanje
3. Mnoenje
Poslije odabrane opcije, od strane korisnika e se traiti da unese elemente ta dvije matrice.
Nakon izvrene neke od opcija program e pitati korisnika da li eli da ispie sumu svim
elemenata, ili sortirane elemente matrice po nekom od kriterija ili inverznu matricu te
rezultantne matrice. Ukoliko je potvrdan odgovor sa rijeima da ili yes, da isto i uradi.
Ukoliko je rije suprotna od ove dvije rijei prekida se izvravanje programa.
Napomena: detaljno komentarisati program.

package MatricaPaket;
import java.util.*;
import java.lang.String;
public class Matrica{
public static int red1;
public static int kolona1;
public static int red2;
public static int kolona2;
public static float sum=0;
public static float sum1=0;
public static float sum2=0;
public static float br=0;
public static float sorting=0;
float sumamatrica[][]=new float [red1][kolona1];
float razlikamatrica[][]=new float [red1][kolona1];
float matricamnozenje [][]=new float [red1][kolona2];
public static float sm[][]=new float [red1][kolona1];
public static float rm[][]=new float [red1][kolona1];
public static float mm[][]=new float [red1][kolona2];
//konstruktor klase Matrica sluzi za unos broja redova i kolona za nase dvije matrice
public Matrica(){
Scanner in=new Scanner(System.in);
System.out.println("Unesite broj redova prve matrice!");
red1=in.nextInt();
System.out.println("Unesite broj kolona prve matrice!");
kolona1=in.nextInt();

System.out.println("Unesite broj redova druge matrice!");


red2=in.nextInt();
System.out.println("Unesite broj kolona druge matrice!");
kolona2=in.nextInt();}
//kreiranje metode za sabiranje dvije matrice
public void matricaSabiranje()
{
Scanner in=new Scanner(System.in);
try{
if(red1==red2 && kolona1==kolona2){

//try blok koji sluzi za hvatanje izuzetaka

float mat1 [][]=new float [red1][kolona1];


System.out.println("Unesite elemente prve matrice!");
for(int i=0; i<red1; i++){
for(int j=0; j<kolona1; j++){
mat1[i][j]=in.nextInt(); }}
float mat2 [][]=new float [red2][kolona2];
System.out.println("Unesite elemente druge matrice!");
for(int i=0; i<red2; i++) {
for(int j=0; j<kolona2; j++){
mat2[i][j]=in.nextInt();}}
float sumamatrica[][]=new float [red1][kolona1];
for(int i=0; i< red1; i++){
for(int j=0; j< kolona1; j++){
sumamatrica[i][j]=mat1[i][j]+mat2[i][j];
sum=sum+sumamatrica[i][j]; }}
sm=sumamatrica; }
else{
throw new MatricaIzuzetak(); }} // izbacivanje izuzetka

catch(MatricaIzuzetak e){
System.out.println("Greska u dimenzijama.");// ispis nakon sto smo dobili izuzetak
System.exit(0); } }
//kreiranje nove metode za oduzimanje matrica
public void matricaOduzimanje()
{Scanner in=new Scanner(System.in);
try{
if(red1==red2 && kolona1==kolona2){
float mat1 [][]=new float [red1][kolona1];
System.out.println("Unesite elemente prve matrice!");
for(int i=0; i<red1; i++){
for(int j=0; j<kolona1; j++){
mat1[i][j]=in.nextInt(); }}
float mat2 [][]=new float [red2][kolona2];
System.out.println("Unesite elemente druge matrice!");
for(int i=0; i<red2; i++){
for(int j=0; j<kolona2; j++){
mat2[i][j]=in.nextInt(); }}
float razlikamatrica[][]=new float [red1][kolona1];
for(int i=0; i< red1; i++){
for(int j=0; j< kolona1; j++){
razlikamatrica[i][j]=mat1[i][j]-mat2[i][j];
sum1=sum1+razlikamatrica[i][j]; }}
rm=razlikamatrica; }
else{
throw new MatricaIzuzetak();}}

catch(MatricaIzuzetak e){
System.out.println("Greska u dimenzijama.");
System.exit(0); }}
//kreiranje metode za mnozenje dvije matrice
public void matricaMnoenje() {
Scanner in=new Scanner(System.in);
try{
if(kolona1==red2){
float mat1 [][]=new float [red1][kolona1];
System.out.println("Unesite elemente prve matrice!");
for(int i=0; i<red1; i++){
for(int j=0; j<kolona1; j++){
mat1[i][j]=in.nextInt(); }}
float mat2 [][]=new float [red2][kolona2];
System.out.println("Unesite elemente druge matrice!");
for(int i=0; i<red2; i++){
for(int j=0; j<kolona2; j++){
mat2[i][j]=in.nextInt(); }}
float suma=0;
float matricamnozenje [][]=new float [red1][kolona2];
for(int i=0; i<red1; i++){
for(int j=0; j<kolona2; j++){
suma=0;
for(int k=0; k<red2; k++) {
suma=suma+ mat1[i][k]*mat2[k][j]; }
matricamnozenje[i][j]=suma;
sum2=sum2+matricamnozenje[i][j];}}

mm=matricamnozenje;}
else{
throw new MatricaIzuzetak();}}
catch(MatricaIzuzetak e){
System.out.println("Greska u dimenzijama.");
System.exit(0); }}
//metoda za sumiranje svih elemenata rezultantne matrice
public void matricaSuma(float br) {
if(br==1) {
System.out.println("Suma elemenata je: " +sum);}
else if(br==2){
System.out.println("Suma elemenata je: " +sum1); }
if(br==3){
System.out.println("Suma elemenata je: " +sum2); }}
//kreiranje metode za sortiranje rezultantne matrice
public void sortiranjeMatrice(float sorting){
System.out.println("Kako elite da sortirate matricu?");
System.out.println("1. Od najmanjeg ka najveem ");
System.out.println("2. Od najveeg ka najmanjem ");
Scanner in=new Scanner(System.in);
int sort=in.nextInt();
float sumamatrica[][]=new float [red1][kolona1];
if(sorting==1){
sumamatrica=sm;
if(sort== 1){
float niz[]=new float[red1*kolona1];

//pretvaranje matrice u niz


int k=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
niz[k]=sumamatrica[i][j];
//bubble sort
for(int i=0;i<red1*kolona1; i++){

//broj iteracija odgovara broju prolaza

for(int j=0; j<(red1*kolona1)-i-1; j++){ //odgovara broju provjera unutar jednog prolaza
if(niz[j]>niz[j+1]) {
float t=niz[j];
niz[j]=niz[j+1];
niz[j+1]=t; }}}
//pretvaranje niza u matricu
int l=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
sumamatrica[i][j]=niz[l];
l++; }}
for(int i=0; i< red1; i++){
for(int j=0; j< kolona1; j++){
System.out.print(sumamatrica[i][j]);
System.out.print(" ") ;}
System.out.println(); }}
else if(sort== 2){
float niz[]=new float[red1*kolona1];

//pretvaranje matrice u niz


int k=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
niz[k]=sumamatrica[i][j];
k++; }}
//bubble sort
for(int i=0;i<red1*kolona1; i++){//broj iteracija odgovara broju prolaza
for(int j=0; j<(red1*kolona1)-i-1; j++){ //odgovara broju provjera unutar jednog prolaza
if(niz[j]<niz[j+1]){
float t=niz[j];
niz[j]=niz[j+1];
niz[j+1]=t; }}}
//pretvaranje niza u matricu
int l=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
sumamatrica[i][j]=niz[l];
l++; }}
for(int i=0; i< red1; i++){
for(int j=0; j< kolona1; j++){
System.out.print(sumamatrica[i][j]);
System.out.print(" ") ;}
System.out.println(); }}}
else if(sorting==2){
sumamatrica=rm;

if(sort== 1){
float niz[]=new float[red1*kolona1];
//pretvaranje matrice u niz
int k=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
niz[k]=sumamatrica[i][j];
k++; }}
//bubble sort
for(int i=0;i<red1*kolona1; i++){//broj iteracija odgovara broju prolaza
for(int j=0; j<(red1*kolona1)-i-1; j++){//odgovara broju provjera unutar jednog prolaza
if(niz[j]>niz[j+1]) {
float t=niz[j];
niz[j]=niz[j+1];
niz[j+1]=t; }}}
//pretvaranje niza u matricu
int l=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
sumamatrica[i][j]=niz[l];
l++; }}
for(int i=0; i< red1; i++){
for(int j=0; j< kolona1; j++){
System.out.print(sumamatrica[i][j]);
System.out.print(" ") ;}
System.out.println();}}

else if(sort== 2){


float niz[]=new float[red1*kolona1];
//pretvaranje matrice u niz
int k=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
niz[k]=sumamatrica[i][j];
k++; }}
//bubble sort
for(int i=0;i<red1*kolona1; i++){//broj iteracija odgovara broju prolaza
for(int j=0; j<(red1*kolona1)-i-1; j++){//odgovara broju provjera unutar jednog prolaza
if(niz[j]<niz[j+1]){
float t=niz[j];
niz[j]=niz[j+1];
niz[j+1]=t; }}}
//pretvaranje niza u matricu
int l=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona1; j++){
sumamatrica[i][j]=niz[l];
l++; }}
for(int i=0; i< red1; i++){
for(int j=0; j< kolona1; j++){
System.out.print(sumamatrica[i][j]);
System.out.print(" ") ;}
System.out.println();}}}

else if(sorting==3){
sumamatrica=mm;
if(sort== 1) {
float niz[]=new float[red1*kolona1];
//pretvaranje matrice u niz
int k=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona2; j++){
niz[k]=sumamatrica[i][j];
k++; }}
//bubble sort
for(int i=0;i<red1*kolona2; i++){//broj iteracija odgovara broju prolaza
for(int j=0; j<(red1*kolona2)-i-1; j++){//odgovara broju provjera unutar jednog prolaza
if(niz[j]>niz[j+1]){
float t=niz[j];
niz[j]=niz[j+1];
niz[j+1]=t; }}}
//pretvaranje niza u matricu
int l=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona2; j++) {
sumamatrica[i][j]=niz[l];
l++; }}
for(int i=0; i< red1; i++){
for(int j=0; j< kolona2; j++){
System.out.print(sumamatrica[i][j]);
System.out.print(" ") ;}

System.out.println();}}
else if(sort== 2){
float niz[]=new float[red1*kolona2];
//pretvaranje matrice u niz
int k=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona2; j++){
niz[k]=sumamatrica[i][j];
k++; }}
//bubble sort
for(int i=0;i<red1*kolona2; i++){//broj iteracija odgovara broju prolaza
for(int j=0; j<(red1*kolona2)-i-1; j++){//odgovara broju provjera unutar jednog prolaza
if(niz[j]<niz[j+1]){
float t=niz[j];
niz[j]=niz[j+1];
niz[j+1]=t; }}}
//pretvaranje niza u matricu
int l=0;
for(int i=0; i<red1; i ++){
for(int j=0; j<kolona2; j++){
sumamatrica[i][j]=niz[l];
l++; }}
for(int i=0; i< red1; i++){
for(int j=0; j< kolona2; j++){
System.out.print(sumamatrica[i][j]);
System.out.print(" ") ;}
System.out.println(); }}}}}

//kreiranje metode za pronalazak iverzne matrice od nase rezultantne matrice


public static float[][] invMatrica(float a[][]) {
int n = a.length;
float x[][] = new float[n][n];
float b[][] = new float[n][n];
int index[] = new int[n];
try{
if(red1==kolona2){
for (int i=0; i<n; ++i)
b[i][i] = 1;
// Transformisanje matrice u gornje trougaonu uz pomoc gausove metode eliminacije
gaussian(a, index);
// Update the matrix b[i][j] with the ratios stored
for (int i=0; i<n-1; ++i)
for (int j=i+1; j<n; ++j)
for (int k=0; k<n; ++k)
b[index[j]][k]
-= a[index[j]][i]*b[index[i]][k];
// Suprotna zamjena
for (int i=0; i<n; ++i) {
x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1];
for (int j=n-2; j>=0; --j) {
x[j][i] = b[index[j]][i];
for (int k=j+1; k<n; ++k) {
x[j][i] -= a[index[j]][k]*x[k][i]; }
x[j][i] /= a[index[j]][j]; }}
return x; }

else{
throw new MatricaIzuzetak(); }}// izbacivanje izuzetka
catch(MatricaIzuzetak e){
System.out.println("Greska u dimenzijama.");// ispis nakon sto smo dobili izuzetak
System.exit(0);}
return x;}
// Metoda za provoenje Gausove metode eliminacije sa djelimicnim okretanjem
// Ovdje index[] sprema poredak pivota.
public static void gaussian(float a[][], int index[]) {
int n = index.length;
float c[] = new float[n];
// Inicijalizacija index-a
for (int i=0; i<n; ++i)
index[i] = i;
// Pronalazak faktora za reskaliranje, po jedan iz svakog reda
for (int i=0; i<n; ++i) {
float c1 = 0;
for (int j=0; j<n; ++j) {
float c0 = Math.abs(a[i][j]);
if (c0 > c1) c1 = c0; }
c[i] = c1; }
// Potraznja pivota iz svake kolone
int k = 0;
for (int j=0; j<n-1; ++j) {
float pi1 = 0;
for (int i=j; i<n; ++i) {
float pi0 = Math.abs(a[index[i]][j]);

pi0 /= c[index[i]];
if (pi0 > pi1) {
pi1 = pi0;
k = i; }}
// Zamjena redova po redu pivota
int itmp = index[j];
index[j] = index[k];
index[k] = itmp;
for (int i=j+1; i<n; ++i) {
float pj = a[index[i]][j]/a[index[j]][j];
// Spremanje vrijednosti pivota ispod dijagonale
a[index[i]][j] = pj;
// Izmjena i drugih elemenata u skladu stim
for (int l=j+1; l<n; ++l)
a[index[i]][l] -= pj*a[index[j]][l]; }}}}
_______________________________________________________________
package PaketTest;
import java.util.*;
import MatricaPaket.*;
public class TestMatrica {
public static void main(String []argv){
Matrica unos=new Matrica();
System.out.println("Odaberite opciju: ");
System.out.println("1. Sabiranje ");
System.out.println("2. Oduzimanje ");
System.out.println("3. Mnoenje ");
Scanner in=new Scanner(System.in);

int odabir=in.nextInt();
if( odabir ==1){
System.out.println("Odabrali ste sabiranje dvije matrice. ");
unos.matricaSabiranje();
unos.br=1;
unos.sorting=1;
System.out.println("Da li elite neto od ponuenog: ");
System.out.println("1. Ispis sume svih elemenata rezultantne matrice ");
System.out.println("2. Ispis rezultantne sortirane matrice po nekom od kriterija ");
System.out.println("3. Ispis inverzne matrice rezultantne matrice");
System.out.println("Ukoliko elite neto da odradite odgovorite sa 'da' ili 'yes', a ukoliko
neelite odgovorite sa 'ne' ili 'no'");
String odgovor;
Scanner odgo=new Scanner(System.in);
odgovor=odgo.nextLine();
if("da".equals(odgovor) || "yes".equals(odgovor)) {
int broj;
System.out.println("Odaberite broj ispred gore navedenih operacija:");
broj=in.nextInt();
if(broj==1){
unos.matricaSuma(unos.br); }
if(broj==2){
unos.sortiranjeMatrice(unos.sorting);}
if(broj==3){
float a[][]=new float[unos.red1][unos.kolona1];
a=unos.sm;
float d[][] =unos.invMatrica(a);

int n=a.length;
System.out.println("Inverzna matrica je : ");
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j){
System.out.print(d[i][j]+" "); }
System.out.println(); }}}
else if("ne".equals(odgovor) || "no".equals(odgovor)){
System.exit(0);

}}

else if(odabir ==2){


System.out.println("Odabrali ste oduzimanje dvije matrice. ");
unos.matricaOduzimanje();
unos.br=2;
unos.sorting=2;
System.out.println("Da li elite neto od ponuenog: ");
System.out.println("1. Ispis sume svih elemenata rezultantne matrice ");
System.out.println("2. Ispis rezultantne sortirane matrice po nekom od kriterija ");
System.out.println("3. Ispis inverzne matrice rezultantne matrice");
System.out.println("Ukoliko elite neto da odradite odgovorite sa 'da' ili 'yes', a ukoliko
neelite odgovorite sa 'ne' ili 'no'");
String odgovor;
Scanner odgo=new Scanner(System.in);
odgovor=odgo.nextLine();
if("da".equals(odgovor) || "yes".equals(odgovor)){
int broj;
System.out.println("Odaberite broj ispred gore navedenih operacija:");
broj=in.nextInt();
if(broj==1){

unos.matricaSuma(unos.br);}
if(broj==2) {
unos.sortiranjeMatrice(unos.sorting); }
if(broj==3){
float a[][]=new float[unos.red1][unos.kolona1];
a=unos.rm;
float d[][] =unos.invMatrica(a);
int n=a.length;
System.out.println("Inverzna matrica je : ");
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j){
System.out.print(d[i][j]+" "); }
System.out.println(); }}}
else if("ne".equals(odgovor) || "no".equals(odgovor)){
System.exit(0);

}}

else if(odabir ==3) {


System.out.println("Odabrali ste mnoenje dvije matrice. ");
unos.matricaMnoenje();
unos.br=3;
unos.sorting=3;
System.out.println("Da li elite neto od ponuenog: ");
System.out.println("1. Ispis sume svih elemenata rezultantne matrice ");
System.out.println("2. Ispis rezultantne sortirane matrice po nekom od kriterija ");
System.out.println("3. Ispis inverzne matrice rezultantne matrice");
System.out.println("Ukoliko elite neto da odradite odgovorite sa 'da' ili 'yes', a ukoliko
neelite odgovorite sa 'ne' ili 'no'");
String odgovor;

Scanner odgo=new Scanner(System.in);


odgovor=odgo.nextLine();
if("da".equals(odgovor) || "yes".equals(odgovor)){
int broj;
System.out.println("Odaberite broj ispred gore navedenih operacija:");
broj=in.nextInt();
if(broj==1){
unos.matricaSuma(unos.br);}
if(broj==2){
unos.sortiranjeMatrice(unos.sorting); }
if(broj==3){
float a[][]=new float[unos.red1][unos.kolona2];
a=unos.mm;
float d[][] =unos.invMatrica(a);
int n=a.length;
System.out.println("Inverzna matrica je : ");
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j){
System.out.print(d[i][j]+" "); }
System.out.println(); }}}
else if("ne".equals(odgovor) || "no".equals(odgovor)){
System.exit(0);

}}}}

___________________________________________________________
package MatricaPaket;
public class MatricaIzuzetak extends Exception {
public void poruka(){
System.out.println("Izuzetak");}}

You might also like