Računalništvo 1 (PRA)

lekcije / Tabele in zanka for

Tabele in zanka for

Tabele

Kot smo že omenili, so tabele posebna vrsta tipov. Vsaka tabela ima velikost v njej pa je spravljenih toliko vrednosti, kot je njena velikost. Na primer, če je x tabela celih števil in je njena velikost x.length == 10, so vrednosti, ki so shranjene v tabeli x
x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9]
Tabela x Tabelo deklariramo tako, da napišemo oglate oklepaje za tip. Na primer:
int[] x;
double[] y;
Prva vrstica pomeni "naj bo x tabela celih števil", druga vrstica pa "naj bo y tabela realnih števil". S tema dvema ukazoma še nismo naredili tabel, ampak smo samo povedali, da sta x in y tabeli. Novo tabelo pa naredimo z ukazom new:
x = new int[200];
y = new double[10];
Prva vrstica pomeni "naj bo x nova tabela 200 celih števil". Podobno druga vrstica pomeni "naj bo y nova tabela 10 realnih števil." Java je pri tem samodejno nastavila vseh dvesto vrednosti za x na 0 in vseh deset vrednosti za y na 0.0.
Seveda pa nam ni treba pisati najprej int x[]; in nato še x = new int[200];, ampak to lahko opravimo v eni vrstici:
int[] x = new int[200];
To pomeni "naj bo x tabela celih števil, in sicer naj bo enaka novi tabeli 200 celih števil (ki jih Java nastavi na 0)."
Včasih poznamo elemente tabele, ko pišemo program (bolj pogosto pa jih izračuna program sam, ali pa jih preberemo s standardnega vhoda ali z datoteke). V tem primeru lahko vrednosti v tabeli naštejemo v zavitih oklepajih, takole:
int[] dolgiMeseci = { 1, 3, 5, 7, 8, 10, 12 };
Tabela dolgiMeseci ima 7 elementov in sicer zaporedna števila mesecev, ki imajo 31 dni.
Če želimo peti element tabele dolgiMeseci to zapišemo z dolgiMeseci[5]. Elementi v tabelah se štejejo od ničtega dalje, zato je dolgiMeseci[5] == 10. Zapomnimo si:
  1. Tabela elementov tipa t ima tip t[].
  2. Novo tabelo tipa t[] velikost n naredimo z ukazom new t[n].
  3. V tabeli x je k-ti element x[k]. Pri tem se k imenuje indeks.
  4. Elementi v tabeli se začenjo šteti z indeksom 0.
  5. Velikost tabele x je x.length.
  6. Zadnji element tabele x je x[x.length - 1].
Oglejmo si, kako tabele uporabimo v programu. Napišimo program, ki prebere s standardnega vhoda pet nizov in jih izpiše v obratnem vrstnem redu.
Obratno.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.io.*;

public class Obratno {
    public static void main(String[] args) throws IOException {
	final int N = 5;
	BufferedReader vhod =
	    new BufferedReader(new InputStreamReader(System.in));
	String[] a = new String[N];
	int k = 0;
	while (k < N) {
	    System.out.print(k + ". stevilo: ");
	    a[k] = vhod.readLine();
	    k = k + 1;
	}
	int j = N - 1;
	while (j >= 0) {
	    System.out.println(a[j]);
	    j = j - 1;
	}
    }
}
> javac Obratno.java
> java Obratno
0. stevilo: 12
1. stevilo: 8
2. stevilo: 292
3. stevilo: 1
4. stevilo: 123833
123833
1
292
8
12
V 8. vrstici naredimo novo tabelo a celih števil z N elementi, pri čemer je konstanta N enaka 5. Mimogrede, definirali smo konstantoN = 5 in jo uporabili, namesto da bi povsod kar napisali 5. Zakaj? Zato, ker je tako napisan program lažje spremeniti. Če si premislimo, in želimo prebrati 7 števil namesto 5, preprosto spremenimo vrednost konstante N na enem mestu. Če pa bi povsod pisali 5, bi morali ob vsaki spremembi pregledati ves program in ugotoviti, kje so potrebni popravki. Seveda bi lahko namesto N povsod uporabili a.length.
V 17. vrstici nastavimo vrednost k-tega elementa tabele a na celo število, ki ga preberemo s standardnega vhoda. Pri tem je 17. vrstica del zanke while, ki šteje od 0 do N-1.
V 25. vrstici pa izpišemo vrednost j-tega elementa tabele. Pri tem je 25. vrstica del zanke while, ki šteje od N-1 do 0.
Naloga 1
Namig
1
2
3
4
5
6
7
8
9
10
public class Najmanjsi {
  public static void main(String[] args) {
    int a[] = {12, 4, 5, 10, 2, 8, 105};
    int m = (ustrezna zacetna vrednost);
    for (int i = 1; i < a.length; i = i + 1) {
      (tu nekaj naredimo)
    }
    System.out.println("Najmanjsi element je " + m);
  }
}
[rešitev]
Naloga 2
Namig
1
2
3
4
5
6
7
8
9
10
public class IndeksNajmanjsega {
  public static void main(String[] args) {
    int a[] = {12, 4, 5, 10, 2, 8, 105};
    int k = (ustrezna zacetna vrednost);
    for (int i = 1; i < a.length; i = i + 1) {
      (tu nekaj naredimo)
    }
    System.out.println("Najmanjsi element je " + k + "-tem mestu.");
  }
}
[rešitev]

Tabela argumentov iz ukazne vrstice

Verjetno ste se že spraševali, kaj pomeni tisti String[] args, ki ga vedno napišemo pri definiciji metode main.
Ko poženemo program v Javi z ukazne vrstice, lahko podamo tako imenovane argumente. Na primer, ko napišemo ukaz
> java NekiProgram foo bla 12 tralala
se bo pognal program NekiProgram, ki smo mu podali argumente "foo", "bla", "12" in "tralala". Java argumente z ukazne vrstice spravi v tabelo String[] args, ki jo nato lahko uporabimo v metodi main.
Napišimo program, ki izpiše vse argumente iz ukazne vrstice:
Argumenti.java
1
2
3
4
5
6
7
public class Argumenti {
    public static void main(String[] args) {
	for (int i = 0; i < args.length; i = i + 1) {
	    System.out.println("Argument " + i + ": " + args[i]);
	}
    }
}
> java Argumenti foo bar 123 tralala
Argument 0: foo
Argument 1: bar
Argument 2: 123
Argument 3: tralala
Argumenti so vedno nizi znakov, tudi če natipkamo 123.
Naloga 3
[rešitev]
Mimogrede omenimo, da se tabela argumentov ponavadi imenuje args, vendar pa to ni nujno. Lahko jo poimenujemo poljubno.

Zanka for

Na tem mestu velja omeniti novo vrsto zanke, zanko for, ker se pogosto uporablja v zvezi s tabelami. Pri uporabi tabel namreč pogosto naletimo na zanke, pri katerih z neko spremenljivko, denimo i, štejemo od spodnje meje, denimo 0, do zgornje meje, denimo N-1. Z zanko while to že znamo narediti:
1
2
3
4
5
int i = 0;
while (i < N) {
   (tu nekaj naredimo)
   i = i + 1;
}
To isto lahko napišemo z zanko for takole:
1
2
3
for (int i = 0; i < N; i = i + 1) {
   (tu nekaj naredimo)
}
Ideja je v tem, da je zanka for (v nekaterih primerih) bolj čitljiva kot pa zanka while, saj so vsi ukazi v zvezi s števcem i zbrani na enem mestu na začetku zanke. Splošna oblika zanke for je:
for (A; p; B) {
  C;
}
To preberemo takole: "Izvedi ukaz A. Dokler je pogoj p enak true ponavljaj: izvedi C in nato še B". Shematični prikažemo zanko for takole: Zanka forPozor! Čeprav je v zanki for ukaz B napisan pred ukazom C, se najprej izvede C in šele nato B! To začetnike pogosto moti, zato bodite posebej pozorni, kako uporabljate zanke for. Ukaz B se v praksi uporablja večinoma za to, da se poveča števec, s katerim štejemo ponovitve zanke.
Naloga 4
V programu Obratno.java nadomesti zanke while z zankami for.
Namig
Prvo zanko predelamo takole:
for (int k = 0; k < N; k = k + 1) {
  System.out.print(k + ". stevilo: ");

  a[k] = Integer.parseInt(vhod.readLine());
}
[rešitev]
Naloga 5
[rešitev]
Naloga 6
Namig
Uporabimo spremenljivko String prva (sam ugotovi, kakšna naj bo njena začetna vrednost). Nato za vsak argument args[i] preveri, ali je po abecedi pred trenutno vrednostjo spremenljivke prva in če je, nastavi prva na args[i]. Na koncu izpiši prva.
[rešitev]
Napišimo program, ki računa Pascalov trikotnik:
          1
        1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5  10  10   5   1
Na robovih so enice. Vsako število, ki ni na robu, pa je vsota dveh števil nad njim. Za programiranje je nekoliko lažje, če trikotnik narišemo takole:
1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5  10  10   5   1
Najprej moramo ugotoviti, kako se iz trenutne vrstice števil, na primer
1   4   6   4   1
izračuna naslednja. Če si mislimo, da je trenutna vrstica tabela p, potem izračunamo novo vrstico v tabelo n po predpisu:
To prevedemo v Javo:
1
2
3
4
5
6
7
8
9
int[] n = int[p.length + 1];

n[0] = 1;

for (int i = 1; i < n.length - 1; i = i + 1) {
  n[i] = p[i-1] + p[i];
}

n[n.length - 1] = 1;
To je seveda samo delček programa, ki ga pišemo. Struktura celotnega programa je taka: Koliko časa pa naj ponavljamo ta postopek? Na primer N = 10 krat. Ko zložimo skupaj vse dele, dobimo program Pascal.java:
Pascal.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Pascal {
    public static void main(String[] args) {
	final int N = 10;
	int[] p = { 1 };
	for (int j = 0; j < N; j = j + 1) {
	    // izpisemo p
	    for (int k = 0; k < p.length; k = k + 1) {
		System.out.print(p[k] + " ");
	    }
	    System.out.println();
	    // izracunamo novo vrstico
	    int[] n = new int[p.length + 1];
	    n[0] = 1;
	    for (int i = 1; i < n.length - 1; i = i + 1) {
		n[i] = p[i-1] + p[i];
	    }
	    n[n.length - 1] = 1;
	    // nastavimo p na novo vrstico
	    p = n;
	}
    }
}
> javac Pascal.java
> java Pascal
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1
Naloga 7
Namig
int N = Integer.parseInt(args[0]);
[rešitev]

Dvojne tabele

Dvojna tabela je tabela tabel, na primer
int[][] a = { {1, 2}, {3, 4, 5}, {6, 7, 8, 9} };
je tabela tabel celih števil. Dolžina tabele a je 3. Elementi tabele a so:
a[0] == {1, 2}
a[1] == {3, 4, 5}
a[2] == {6, 7, 8, 9}
Vidimo torej, da je a[0] tabela velikosti 2, a[1] je tabela velikosti 3 in a[2] je tabela velikosti 4. Če želimo ničti element tabele a[2], ga dobimo tako, da napišemo a[2][0]. Vrednost a[2][0] je 6. Velikost dvojne tabele int[][] a je a.length in nam pove, koliko tabel vsebuje tabela a. Dolžine posameznih tabel so a[0].length, a[1].length, ..., a[a.length-1].length.
Novo dvojno tabelo celih števil int[][] x velikosti n naredimo z ukazom
int[][] x = new int[n][];
Seveda moramo potem še narediti tabele x[0], ..., x[n-1] s primernimi ukazi x[i] = new int[...];.
Na primer, da želimo narediti tabelo tabel int[][] a, ki vsebuje 100 tabel, pri čemer ima i-ta tabela velikost 2 * i + 1. To naredimo z naslednjimi ukazi:
1
2
3
4
int[]][] a = new int[100][];
for (int i = 0; i < 100; i = i + 1) {
  a[i] = new int[2 * i + 1];
}
S tem smo naredili dvojno tabelo a, ki ima naslednje elemente:
a[0][0]
a[1][0], a[1][1], a[1][2]
a[2][0], a[2][1], a[2][2], a[2][3], a[2][4]
a[3][0], a[3][1], a[3][2], a[3][3], a[3][4], a[3][5], a[3][6]
...
a[99][0], a[99][1], ..., a[99][199], a[99][200]
  1. Dvojna tabela je tabela tabel.
  2. Novo dvojno tabelo t[][] x velikost n naredimo z ukazom x = new t[n][];. Posamezne tabele x[0], ..., x[n-1] naredimo z ukazom x[i] = new t[...];.
  3. x[n] pomeni "n-ta tabela v tabeli tabel x."
  4. x[n][m] pomeni "m-ti element tabele x[n]."
  5. x.length je število tabel, ki so v tabeli x.
  6. x[n].length je dolžina tabele x[n].
Naloga 8
[rešitev]
Naloga 9
[rešitev]
Naloga 10
[rešitev]

Matrike

Dvojni tabeli a, v kateri so vse tabele a[0], ..., a[a.length-1] enako velike, pravimo matrika.
  1. Matrika je dvojna tabela, v kateri imajo vse enojne podtabele enako velikost.
  2. Število vrstic v matriki a je a.length.
  3. Število stolpcev v matriki a je a[0].length.
  4. Matriko z n vrsticami in m stolpci, ki vsebuje elemente tipa t, naredimo z ukazom new t[n][m].
Napišimo program, ki sešteje matriki
 1  2  3  4  5
-1  0  0  2  7
 3  4  1  6  8
 1  6  6  1  0
 3  1  2  4  2
in
 1  1  0  0  0
 1  1  1  0  0
 0  1  1  1  0
 0  0  1  1  1
 0  0  0  1  1
Program naredi novo matriko c in nato v dvojni zanki for napolni njene elemente z ustreznimi vrednostmi:
Vsota.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Vsota {
    public static void main(String[] args) {
	int[][] a = {
	    { 1,  2,  3,  4,  5}, 
	    {-1,  0,  0,  2,  7},
	    { 3,  4,  1,  6,  8},
	    { 1,  6,  6,  1,  0},
	    { 3,  1,  2,  4,  2}
	};

	int[][] b = {
	    { 1,  1,  0,  0,  0},
	    { 1,  1,  1,  0,  0},
	    { 0,  1,  1,  1,  0},
	    { 0,  0,  1,  1,  1},
	    { 0,  0,  0,  1,  1}
	};

	int n = a.length;    // Stevilo vrstic
	int m = a[0].length; // Stevilo stolpcev

	int[][] c = new int[n][m]; // c = a + b

	// sestejemo a in b v c
	for (int i = 0; i < n; i = i + 1) {
	    for (int j = 0; j < m; j = j + 1) {
		c[i][j] = a[i][j] + b[i][j];
	    }
	}

	// izpisemo matriko c
	for (int i = 0; i < c.length; i = i + 1) {
	    for (int j = 0; j < c[i].length; j = j + 1) {
		System.out.print(c[i][j] + " ");
	    }
	    System.out.println();
	}
    }
}
Naloga 11
[rešitev]

Naloge za predavanja in vaje

Naloga 12
Naloga 13
Naloga 14
Naloga 15
Naloga 16
Naloga 17
Naloga 18
Naloga 19
Naloga 20
Naloga
Naloga 21

Rešitve nalog

Naloga 1

Najmanjsi.java
1
2
3
4
5
6
7
8
9
10
11
12
public class Najmanjsi {
    public static void main(String[] args) {
	int a[] = {12, 4, 5, 10, 2, 8, 105};
	int m = a[0];
	for (int i = 1; i < a.length; i = i + 1) {
	    if (a[i] < m) {
		m = a[i];
	    }
	}
	System.out.println("Najmanjsi element je " + m);
    }
}

Naloga 2

IndeksNajmanjsega.java
1
2
3
4
5
6
7
8
9
10
11
12
public class IndeksNajmanjsega {
    public static void main(String[] args) {
	int a[] = {12, 4, 5, 10, 2, 8, 105};
	int k = 0;
	for (int i = 1; i < a.length; i = i + 1) {
	    if (a[i] < a[k]) {
		k = i;
	    }
	}
	System.out.println("Najmanjsi element je na " + k + "-tem mestu.");
    }
}

Naloga 3

Sestej.java
1
2
3
4
5
6
7
public class Sestej {
    public static void main(String args[]) {
	int x = Integer.parseInt(args[0]);
	int y = Integer.parseInt(args[1]);
	System.out.println(x + y);
    }
}

Naloga 4

Obratno2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.*;

public class Obratno2 {
    public static void main(String[] args) throws IOException {
	final int N = 5;

	BufferedReader vhod =
	    new BufferedReader(new InputStreamReader(System.in));

	int[] a = new int[N];

	for (int k = 0; k < N; k = k + 1) {
	    System.out.print(k + ". stevilo: ");

	    a[k] = Integer.parseInt(vhod.readLine());
	}

	for (int j = N - 1; j >= 0; j = j - 1) {
	    System.out.println(a[j]);
	}
    }
}

Naloga 5

Crke.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Crke {
    public static void main(String[] args) {
	String[] crke = { "A", "B", "C", "D", "E", "F", "G" };

	for (int i = 0; i < crke.length; i = i + 1) {

	    for (int j = i; j < crke.length; j = j + 1) {
		System.out.print(crke[j]);
	    }

	    for (int k = 0; k < i; k = k + 1) {
		System.out.print(crke[k]);
	    }

	    System.out.println();
	}
    }
}
> javac Crke.java
> java Crke
ABCDEFG
BCDEFGA
CDEFGAB
DEFGABC
EFGABCD
FGABCDE
GABCDEF
Na tem mestu lahko omenimo tudi alternativno rešitev, ki nam pokaže zakaj je dobro, da se indeksi v tabeli začnejo z 0 (in ne 1, kot je v nekaterih drugih jezikih).
Crke2.java
1
2
3
4
5
6
7
8
9
10
11
12
public class Crke2 {
    public static void main(String[] args) {
	String[] crke = { "A", "B", "C", "D", "E", "F", "G" };

	for (int i = 0; i < crke.length; i++) {
	    for (int j = 0; j < crke.length; j++) {
		System.out.print(crke[(j+i)%crke.length]);
	    }
	    System.out.println();
	} //for
    } //main
} //Crke2

Naloga 6

Prva.java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Prva {
    public static void main(String[] args) {
	String prva = args[0];

	for (int i = 1; i < args.length; i++) {
	    if (prva.compareTo(args[i]) > 0) {
		prva = args[i];
	    }
	}

	System.out.println(prva);
    }
}
> javac Prva.java
> java Prva blah aaaa a 123 poppop
123
> java Prva A a AA aa
A
> java Prva Micka micka mICKA 
Micka
> java Prva micka mICKA Micka
micka
Poglejmo še, kaj gre lahko narobe:
> java Prva
java.lang.ArrayIndexOutOfBoundsException
        at Prva.main(Prva.java:3)

Naloga 7

Pascal2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Pascal2 {
    public static void main(String[] args) {
	int N = Integer.parseInt(args[0]);

	int[] vrstica = { 1 };

	for (int j = 0; j < N; j = j + 1) {

	    // izpisemo vrstica
	    for (int k = 0; k < vrstica.length; k = k + 1) {
		System.out.print(vrstica[k] + " ");
	    }
	    System.out.println();

	    // izracunamo novo vrstico

	    int[] nova = new int[vrstica.length + 1];

	    nova[0] = 1;

	    for (int i = 1; i < nova.length - 1; i = i + 1) {
		nova[i] = vrstica[i-1] + vrstica[i];
	    }

	    nova[nova.length - 1] = 1;

	    // nastavimo vrstica na novo vrstico

	    vrstica = nova;
	}
    }
}
> javac Pascal2.java
> java Pascal2 4
1 
1 1 
1 2 1 
1 3 3 1 
> java Pascal2 13
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1 
1 10 45 120 210 252 210 120 45 10 1 
1 11 55 165 330 462 462 330 165 55 11 1 
1 12 66 220 495 792 924 792 495 220 66 12 1

Naloga 8

Dvojna.java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Dvojna {
    public static void main(String[] args) {
	int[][] a = new int[100][];
	for (int i = 0; i < 100; i = i + 1) {
	    // naredimo i-to tabelo velikosti 100-i
	    a[i] = new int[100 - i];
	    // nastavimo vrednosti tabele a[i]
	    for (int j = 0; j < a[i].length; j++) {
		a[i][j] = i + j;
	    }
	}
    }
}

Naloga 9

IzpisiTabelo.java
1
2
3
4
5
6
7
8
9
10
11
12
public class IzpisiTabelo {
    public static void main(String[] args) {
	int[][] a = { {1, 2}, {3, 4, 5}, {6, 7, 8, 9} };

	for (int i = 0; i < a.length; i = i + 1) {
	    for (int j = 0; j < a[i].length; j = j + 1) {
		System.out.print(a[i][j] + " ");
	    }
	    System.out.println();
	}
    }
}
> java IzpisiTabelo
1 2 
3 4 5 
6 7 8 9

Naloga 10

Pascal3.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Pascal3 {
    public static void main(String[] args) {
	int n = Integer.parseInt(args[0]);

	int[][] pascal = new int[n][];

	for (int j = 0; j < n; j = j + 1) {
	    // naredimo j-to vrstico

	    pascal[j] = new int[j+1];

	    // izracunamo j-to vrstico
	    pascal[j][0] = 1;

	    for (int i = 1; i < j; i = i + 1) {
		pascal[j][i] = pascal[j-1][i-1] + pascal[j-1][i];
	    }

	    pascal[j][j] = 1;
	}
	
	// izpisemo tabelo pascal

	for (int j = 0; j < pascal.length; j = j + 1) {
	    for (int i = 0; i < pascal[j].length; i = i + 1) {
		System.out.print(pascal[j][i] + " ");
	    }
	    System.out.println();
	}

    }
}

Naloga 11

Matrike.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Matrike {
    public static void main(String[] args) {
	int[][] a = {
	    { 1,  2,  3,  4,  5}, 
	    {-1,  0,  0,  2,  7},
	    { 3,  4,  1,  6,  8},
	    { 1,  6,  6,  1,  0},
	    { 3,  1,  2,  4,  2}
	};

	int[][] b = {
	    { 1,  1,  0,  0,  0},
	    { 1,  1,  1,  0,  0},
	    { 0,  1,  1,  1,  0},
	    { 0,  0,  1,  1,  1},
	    { 0,  0,  0,  1,  1}
	};

	int n = a.length;    // Stevilo vrstic matrike c
	int m = b[0].length; // Stevilo stolpcev matrike c

	int[][] c = new int[n][m];

	// zmnozimo a in b

	for (int i = 0; i < n; i = i + 1) {
	    for (int j = 0; j < m; j = j + 1) {
		c[i][j] = 0;
		for (int k = 0; k < b.length; k = k + 1) {
		    c[i][j] = c[i][j] + a[i][k] * b[k][j];
		}
	    }
	}

	// izpisemo matriko c

	for (int i = 0; i < c.length; i = i + 1) {
	    for (int j = 0; j < c[i].length; j = j + 1) {
		System.out.print(c[i][j] + " ");
	    }
	    System.out.println();
	}
    }
}
> javac Matrike.java
> java Matrike
3 6 9 12 9 
-1 -1 2 9 9 
7 8 11 15 14 
7 13 13 7 1 
4 6 7 8 6