53
Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih funkcionalnosti public class NasStringBuffer { /* * Rad sa objektima klase StringBuffer, demonstriranje * funkcionalnosti nekih funkcija za rad sa objektima * ove klase. */ /* Kapacitet, tj. velicina bafera objekta se automatski povecava kako bi se on prilagodeo * stringu proizvoljne duzine i to tako da ako je duzina novog stringa veca od tekuceg * kapaciteta, novi kapacitet bafera bice veci od sledeca dva broja: * nova duzina stringa i * 2*stari_kapacitet+2 */ public static void main(String[] args) { StringBuffer recenica = new StringBuffer(20); System.out.println("Kapacitet StringBuffer objekta je: "+ recenica.capacity()+ " a duzina stringa je: "+recenica.length()); // Dodajemo reci niza u StringBuffer objekat String[] niz_reci = {"Ako" , "danas", "bude", "snega", "bicu", "srecan"}; recenica.append(niz_reci[0]); for(int i = 1 ; i<niz_reci.length ; i++) { recenica.append(' ').append(niz_reci[i]); } System.out.println("\nString koji se nalazi u StringBuffer objektu je:\n" + recenica.toString()); System.out.println("Kapacitet StringBuffer objekta je sada: "+ recenica.capacity()+ " a duzina stringa je: "+recenica.length()); // Vrsimo zamenu neke niske u objektu nekom drugom int poz=recenica.lastIndexOf("snega"); recenica.replace(poz, poz+5,"kise"); // Vrsimo umetanje nekih niski u objekat klase StringBuffer recenica.insert(recenica.lastIndexOf("srecan"), "ne"); System.out.println("\nString koji se nalazi StringBuffer objektu je:\n" + recenica); System.out.println("Kapacitet StringBuffer objekta je sada: "+ recenica.capacity()+ " a duzina stringa je: "+recenica.length()); } }

Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Embed Size (px)

Citation preview

Page 1: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Programski jezik JAVA

1. Rad sa objektima klase StringBuffer, demonstracija nekih funkcionalnosti

public class NasStringBuffer {

/*

* Rad sa objektima klase StringBuffer, demonstriranje

* funkcionalnosti nekih funkcija za rad sa objektima

* ove klase.

*/

/* Kapacitet, tj. velicina bafera objekta se automatski povecava kako

bi se on prilagodeo

* stringu proizvoljne duzine i to tako da ako je duzina novog

stringa veca od tekuceg

* kapaciteta, novi kapacitet bafera bice veci od sledeca dva broja:

* nova duzina stringa i

* 2*stari_kapacitet+2

*/

public static void main(String[] args) {

StringBuffer recenica = new StringBuffer(20);

System.out.println("Kapacitet StringBuffer objekta je: "+

recenica.capacity()+

" a duzina stringa je: "+recenica.length());

// Dodajemo reci niza u StringBuffer objekat

String[] niz_reci = {"Ako" , "danas", "bude", "snega", "bicu",

"srecan"};

recenica.append(niz_reci[0]);

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

recenica.append(' ').append(niz_reci[i]);

}

System.out.println("\nString koji se nalazi u StringBuffer

objektu je:\n" +

recenica.toString());

System.out.println("Kapacitet StringBuffer objekta je sada: "+

recenica.capacity()+

" a duzina stringa je: "+recenica.length());

// Vrsimo zamenu neke niske u objektu nekom drugom

int poz=recenica.lastIndexOf("snega");

recenica.replace(poz, poz+5,"kise");

// Vrsimo umetanje nekih niski u objekat klase StringBuffer

recenica.insert(recenica.lastIndexOf("srecan"), "ne");

System.out.println("\nString koji se nalazi StringBuffer

objektu je:\n" + recenica);

System.out.println("Kapacitet StringBuffer objekta je sada: "+

recenica.capacity()+

" a duzina stringa je: "+recenica.length());

}

}

Page 2: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

2. Brojimo pojavljivanjue reci the i and u zadatom tekstu

public class BrojanjeReci {

/*

* Brojimo pojavljivanjue reci the i and u zadatom tekstu

*/

public static void main(String[] args) {

// Tekst koji analiziramo

String text = "To be or not to be, that is the question;"

+ " Whether ‘tis nobler in the mind to suffer"

+ " the slings and arrows of outrageous fortune,"

+ " or to take arms against a sea of troubles,"

+ " and by opposing end them?";

int andBr = 0;

int theBr = 0;

int indeks = -1;

String andStr = "and";

String theStr = "the";

// Trazimo pojavljivanje reci "and"

indeks = text.indexOf(andStr); // Nalazimo prvu pojavu reci

"and"

while(indeks >= 0) {

++andBr;

indeks += andStr.length(); // Postavljamo se na mesto

posle

// pojave tekuceg "and"

indeks = text.indexOf(andStr, indeks);

}

// Trazimo unazad pojavljivanje reci "the"

indeks = text.lastIndexOf(theStr); // Nalazimo poslednju pojavu

// reci "the"

while(indeks >= 0) {

++theBr;

indeks -= theStr.length(); // Postavljamo se na mesto pre

// pojave tekuceg "and"

indeks = text.lastIndexOf(theStr, indeks);

}

System.out.println("Zadati tekst sadrzi " + andBr + " pojave

reci 'and'\n"

+ "i " + theBr + " pojava reci 'the'.");

}

}

3. Skener

import java.util.Scanner;

public class Skener

{

/*

* Ucitavamo dva broja sa standardnog ulaza i ispisujemo njihov zbir.

*/

public static void main(String [] args)

{

Scanner skener = new Scanner(System.in);

System.out.println("Unesite dva cela broja");

int a = skener.nextInt();

Page 3: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

int b = skener.nextInt();

int zbir = a + b;

System.out.println("Zbir brojeva " + a + " i " + b + " je " +

zbir);

}

}

4. Nizovi

package nizovi;

import java.util.Arrays;

public class SortiranjeNiza {

public static void main(String[] args) {

int a[]={-12,9,8,-8,5, 6, 1, 3};

Arrays.sort(a);

for(int i=0; i<a.length; i++)

System.out.print(a[i]+" ");

System.out.println();

}

}

5. Učitavamo elemente niza i računamo aritmetičku sredinu.

import java.util.Scanner;

public class AritmetickaSredina{

/*

* Ucitavamo broj elemenata niza i njegove elemente

* i racunamo zbir elemenata niza i njihovu aritmeticku sredinu.

*/

public static void main(String[] args){

Scanner skener = new Scanner(System.in);

System.out.println("Unesite broj elemenata niza:");

int brojEl = skener.nextInt();

int[] nizBrojeva = new int[brojEl];

int zbir = 0;

// ucitavamo elemente niza i formiramo zbir

for (int i = 0; i < brojEl; i++)

{

System.out.print((i + 1) + ". broj: ");

nizBrojeva[i] = skener.nextInt();

zbir += nizBrojeva[i];

}

System.out.println("Zbir brojeva je: " + zbir);

// racunamo aritmeticku sredinu

double aritmSredina = (double) zbir / brojEl;

System.out.println("Aritmeticka sredina je: " + aritmSredina);

}

}

Page 4: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

6. Isto što i malopre, samo malo drugačije

import java.util.Scanner;

public class AritmetickaSredina2{

/*

* Sa standardnog ulaza ucitavamo elemente niza sve dok se ne unese 0,

* i racunamo zbir elemenata niza i njihovu aritmeticku sredinu.

*/

public static void main(String[] args){

Scanner skener = new Scanner(System.in);

int[] nizBrojeva = new int[100];

int zbir = 0;

int brojEl = 0;

// Sve dok se ne unese nula, ucitavamo brojeve

// sa standardnog ulaza i racunamo njihov zbir.

for (brojEl = 0; brojEl < 100; brojEl++)

{

System.out.print((brojEl + 1) + ". broj: ");

nizBrojeva[brojEl] = skener.nextInt();

if (nizBrojeva[brojEl] == 0)

break;

zbir += nizBrojeva[brojEl];

}

System.out.println("Zbir brojeva je: " + zbir);

// Racunamo aritmeticku sredinu.

double aritmSredina = (double) zbir / brojEl;

System.out.println("Aritmeticka sredina je: " + aritmSredina);

}

}

7. Poređenje stringova

public class PoredjenjeStringova {

/*

* Razlika izmedju poredjenja dve stringovne promenljive koje pokazuju

* na dva stringa koja imaju isti sadrzaj, i poredjenja

* dve stringovne promenljive koje pokazuju na isti string.

*/

public static void main(String[] args) {

String string1 = "Dva ";

String string2 = "studenta";

String string3 = "Dva studenta";

// Postavljamo da string1 i string3 referisu

// na razlicite stringove koji su identicni

string1 += string2;

System.out.println("Test br 1");

System.out.println("string3 je: " + string3);

System.out.println("string1 je: " + string1);

// Testiramo da li je u pitanju isti string

if(string1 == string3)

System.out.println("string1 == string3 je tacno -" +

" string1 i string3 pokazuju na isti string");

Page 5: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

else

System.out.println("string1 == string3 nije tacno -" +

" string1 i string3 ne pokazuju na isti string");

// // Postavljamo da string1 i string3 referisu

// na isti string

string3 = string1;

System.out.println("\nTest br 2");

System.out.println("string3 je: " + string3);

System.out.println("string1 je: " + string1);

if(string1 == string3) // Now test for identity

System.out.println("string1 == string3 je tacno -" +

" string1 i string3 pokazuju na isti string");

else

System.out.println("string1 == string3 nije tacno -" +

" string1 i string3 ne pokazuju na isti string");

}

}

8. Poređenje stringova još jednom

public class PoredjenjeStringova2 {

/*

* Poredjenje dve stringovne promenljive na jednakost sadrzaja.

*/

public static void main(String[] args) {

String string1 = "Dva ";

String string2 = "studenta";

String string3 = "Dva studenta";

// Postavljamo da string1 i string3 referisu

// na razlicite stringove koji su identicni

string1 += string2;

System.out.println("Test br 1");

System.out.println("string3 je: " + string3);

System.out.println("string1 je: " + string1);

// Testiramo stringove na jednakost sadrzaja

if(string1.equals(string3)) {

System.out.println("string1.equals(string3) je tacno - "

+

" stringovi su jednaki.");

} else {

System.out.println("string1.equals(string3) je netacno -

" +

" stringovi nisu jednaki.");

}

// Sada postavljamo string1 i string3 da referisu

// na stringove koji se razlikuju samo u velicini slova

string3 = "DVA studenta";

System.out.println("\nTest br 2");

System.out.println("string3 je: " + string3);

System.out.println("string1 je: " + string1);

// Testiramo stringove na jednakost sadrzaja

if(string1.equals(string3)) {

System.out.println("string1.equals(string3) je tacno - "

+

Page 6: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

" stringovi su jednaki.");

} else {

System.out.println("string1.equals(string3) je netacno -"

+

" stringovi nisu jednaki.");

}

// Testiramo stringove na jednakost sadrzaja

// bez obaziranja na velicinu slova

if(string1.equalsIgnoreCase(string3)) {

System.out.println("string1.equalsIgnoreCase(string3) je

tacno - " +

" stringovi su jednaki ako zanemarimo velicinu slova.");

} else {

System.out.println("string1.equalsIgnoreCase(string3) je

netacno -" +

" stringovi su razliciti.");

}

}

}

9. Demonstracija rada sa matricama, relacija

package paket;

import java.util.Scanner;

public class Relacija {

public static boolean refleksivna(int m[][]){

for(int i=0; i<m.length; i++)

if(m[i][i]!=1)

return false;

return true;

}

public static boolean simetricna(int m[][]){

for(int i=0; i<m.length; i++)

for(int j=0; j<i; j++) /* idemo kroz trougao ispod

* glavne dijagonale */

if(m[i][j]!=m[j][i])

return false;

return true;

}

/**

* @param args

*/

public static void ispisi(int m[][])

{

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

for(int j=0; j<m.length; j++)

System.out.print(m[i][j]+" ");

System.out.println();

}

}

public static void ispisi1(int [][]m){

for(int vrsta[]: m){

for(int elvrste: vrsta)

System.out.print(elvrste + " ");

Page 7: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

System.out.println();

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc=new Scanner(System.in);

System.out.println("Unesite dim. matrice");

int dim=sc.nextInt();

int m[][]=new int[dim][dim];

System.out.println("Unesite el. matrice");

for(int i=0; i<dim; i++)

for(int j=0; j<dim; j++){

m[i][j]=sc.nextInt();

if(m[i][j]!=0 && m[i][j]!=1){

System.out.println("Neispravan unos: " + m[i][j]);

return;

}

}

if(refleksivna(m))

System.out.println("refleksivna je");

else

System.out.println("Nije refleksivna");

if(simetricna(m))

System.out.println("Simetricna je");

else

System.out.println("Nije simetricna");

ispisi(m);

System.out.println("Pomocu collection-based for-petlje");

ispisi1(m);

}

}

Page 8: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

10. Rešavanje kvadratne jednačine

package kvadratneJednacine;

public class KvadratnaJednacina {

private double a;

private double b;

private double c;

public KvadratnaJednacina(double a, double b, double c)

{

this.a = a;

this.b = b;

this.c = c;

}

public KvadratnaJednacina izvod(){

return new KvadratnaJednacina(0, 2*a, b);

}

public double[] koreni(){

double koreni[] = new double[2];

double D = diskriminanta();

if(!imaRealneKorene())

koreni[0] = koreni[1] = 0;

else if(D == 0)

koreni[0] = koreni[1] = -b/(2*a);

else {

koreni[0] = (-b + Math.sqrt(D))/(2*a);

koreni[1] = (-b - Math.sqrt(D))/(2*a);

}

return koreni;

}

public double diskriminanta(){

return b*b - 4*a*c;

}

public boolean imaRealneKorene()

{

return b*b - 4*a*c >= 0 ? true : false;

}

public String toString()

{

String string = new String();

if(a == 0)

{

string += b + "*x";

string += c > 0 ? " + " + c : " " + c;

string += " = 0";

}

else

{

string += a + "*x^2";

string += b > 0 ? " + " + b + "*x" : " " + b + "*x";

string += c > 0 ? " + " + c : " " + c + " = 0";

string += " = 0";

}

return string;

}

}

Page 9: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

11. Kreirati klasu Automobil koja ima: a. celobrojne podatke trenutnaBrzina i maksimalnaBrzina koji predstavljaju

trenutnu i maksimalnu brzinu automobila u km/h. Trenutna brzina automobila ne može biti veća od maksimalne;

b. realni podatak predjeniPut koji određuje koliko kilometara je automobil prešao; c. konstruktor sa jednim celobrojnim parametrom koji predstavlja maksimalnu brzinu

automobila. Ona ne može biti negativna. Trenutna brzina i pređeni put se postavljaju na 0;

d. javni metod void ubrzaj(int a) koji povećava trenutnu brzinu za a km/h, ali ne preko maksimalne brzine;

e. javni metod void uspori(int a) koji smanjuje trenutnu brzinu za a km/h, ali ne ispod 0;

f. javni metod void vozi(double t) koji na promenljivu predjeniPut dodaje

put koji auto pređe za t časova, vozeći trenutnom brzinom; g. odgovarajuće getere i setere;

h. javni metod int ucitajKomande(char * fileName), odnosno, u Javi, int ucitajKomande(String fileName) koji učitava i izvršava komande iz tekstualne datoteke čije je ime dato. Metod vraća 0 ako se pri čitanju desila neka

greška, a inače 1. Komande su oblika UBRZAJ A, USPORI A, VOZI T i svaka je data u po jednom redu. U prvom redu datoteke se nalazi broj komandi.

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package automobil;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.StringTokenizer;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

*

* @author Student

*/

public class Automobil {

private int trenutnaBrzina;

private int maximalnaBrzina;

private double predjeniPut;

public Automobil(int maximalnaBrzina) {

setMaximalnaBrzina(maximalnaBrzina);

this.predjeniPut = 0;

this.trenutnaBrzina = 0;

}

public void ubrzaj(int a) {

if(this.trenutnaBrzina + a > this.maximalnaBrzina){

this.trenutnaBrzina = this.maximalnaBrzina;

}

Page 10: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

else this.trenutnaBrzina += a;

}

public void uspori(int a) {

if(this.trenutnaBrzina - a < 0){

this.trenutnaBrzina = 0;

}

else this.trenutnaBrzina -= a;

}

void vozi(double t){

this.predjeniPut += this.trenutnaBrzina * t;

}

public int getMaximalnaBrzina() {

return maximalnaBrzina;

}

public void setMaximalnaBrzina(int maximalnaBrzina) {

if(maximalnaBrzina < 0) this.maximalnaBrzina = 10;

else this.maximalnaBrzina = maximalnaBrzina;

}

public double getPredjeniPut() {

return predjeniPut;

}

public void setPredjeniPut(double predjeniPut) {

if(predjeniPut < 0) this.predjeniPut = 0;

else this.predjeniPut = predjeniPut;

}

public int getTrenutnaBrzina() {

return trenutnaBrzina;

}

public void setTrenutnaBrzina(int trenutnaBrzina) {

this.trenutnaBrzina = trenutnaBrzina;

if(trenutnaBrzina < 0) this.trenutnaBrzina = 0;

if(trenutnaBrzina > this.maximalnaBrzina) this.trenutnaBrzina =

this.maximalnaBrzina;

}

public int ucitajKomande(String fileName) throws FileNotFoundException,

IOException, NumberFormatException {

BufferedReader in = new BufferedReader(new FileReader(fileName));

int brojKomandi;

String s = null;

s = in.readLine();

brojKomandi = Integer.parseInt(s);

for(int i = 0; i < brojKomandi; i++){

s = in.readLine();

StringTokenizer st = new StringTokenizer(s);

String komanda = (String)st.nextElement();

double broj = Double.parseDouble((String)st.nextElement());

System.out.println("komanda: " + komanda + " broj: " +

broj);

if(komanda.compareTo("UBRZAJ") == 0){

this.ubrzaj((int) broj);

}

else if(komanda.compareTo("USPORI") == 0){

Page 11: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

this.uspori((int) broj);

}

else if(komanda.compareTo("VOZI") == 0){

this.vozi(broj);

}

}

in.close();

return 0;

}

}

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package automobil;

import java.io.FileNotFoundException;

import java.io.IOException;

/**

*

* @author Student

*/

public class Main {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

// TODO code application logic here

Automobil a = new Automobil(300);

try {

a.ucitajKomande("auto.txt");

} catch (FileNotFoundException ex) {

System.out.println("Nepostojeci fajl");

} catch (IOException ex) {

System.out.println("Greska pri citanju");

} catch (NumberFormatException e){

System.out.println("Greska pri prevodjenju");

}

System.out.println("Max brzina je: " + a.getMaximalnaBrzina());

System.out.println("Trenutna brzina je: " + a.getTrenutnaBrzina());

System.out.println("Predjeni put je: " + a.getPredjeniPut());

}

}

12. Kreirati klasu Permutacija koja omogućava pamćenje jedne permutacije brojeva 1, ..., n i ima:

- Konstruktor Permutacija(int n). Ovaj konstruktor zadaje slučajnu permutaciju od n

elemenata.

- Konstruktor Permutacija(int n, int *a). Ovim konstruktorom se zadaje permutacija.

- Destruktor.

Page 12: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

- Odgovarajuće getere i setere.

- Metod int redniBroj(), koji ordeđuje redni broj permutacije u leksikografskom poretku.

- Metod int generisiLeksikografsku(int n), koji generiše permutaciju sa rednim brojem n u

leksikografskom poretku. Rezultat je 0 ako generisanje nije uspelo, inače 1.

- Metod int sledeca(), koji određuje sledeću permutaciju u leksikografskom poretku. Rezultat

je 0 ukoliko ne postoji sledeća permutacija, inače 1.

U glavnom programu testirati svaki od metoda.

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package permutacija;

import java.util.Random;

/**

*

* @author Student

*/

public class Permutacija {

private int duzPerm;

private int[] perm;

public Permutacija(int duzPerm, int[] perm) {

this.duzPerm = duzPerm;

this.perm = perm;

}

public Permutacija(int duzPerm) {

this.duzPerm = duzPerm;

perm = new int[duzPerm + 1];

for(int i = 1; i <= duzPerm; i++)

this.perm[i] = i;

Random r = new Random();

for(int i = 1; i <= duzPerm; i++){

int idx = (r.nextInt(100) % i) + 1;

this.swap(i, idx);

}

}

private void swap(int i, int j){

int p = perm[i]; perm[i] = perm[j]; perm[j] = p;

}

public int sledeca(){

int i = this.duzPerm;

while((i > 1) && (this.perm[i - 1] > this.perm[i]))

i--;

Page 13: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

if(i == 1) return 0;

int j = i - 1;

i = this.duzPerm;

while(this.perm[i] < this.perm[j])

i--;

this.swap(i, j);

int k = j + 1;

int l = this.duzPerm;

while(k < l){

this.swap(k, l);

k++; l--;

}

return 1;

}

private long f(int i){

int br = 0;

for(int j = i + 1; j <= this.duzPerm; j++)

if(this.perm[i] > this.perm[j]) br++;

return br;

}

public int redniBroj(){

int rb = 0;

int n = 1, ii = 1;

for(int i = this.duzPerm; i >= 1; i--){

rb += this.f(i) * n;

if(i != this.duzPerm) n *= (++ii);

}

return rb;

}

public void stampaj(){

for(int i = 1; i <= this.duzPerm; i++)

System.out.print(this.perm[i]+" ");

System.out.println();

}

public int getDuzPerm() {

return duzPerm;

}

public void setDuzPerm(int duzPerm) {

this.duzPerm = duzPerm;

}

public int[] getPerm() {

return perm;

}

public void setPerm(int[] perm) {

this.perm = perm;

}

}

Page 14: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package permutacija;

/**

*

* @author Student

*/

public class Main {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

// TODO code application logic here

Permutacija p;

p = new Permutacija(7);

p.stampaj();

System.out.println("Redni broj je " + p.redniBroj());

int i = p.sledeca();

if(i==1){

p.stampaj();

System.out.println("Redni broj je " + p.redniBroj());

}

}

}

13. Саставити на језику Java следећи пакет класа:

Домина садржи два целобројна поља (a,b). Може да се дохвати вредност првог и другог поља домине, да се изврши међусобна замена поља, да се одреди да ли су две домине једнаке не водећи рачуна о редоследу поља и да се састави текстуални опис домине у облику (a,b).

Скуп домина садржи произвољан број различитих домина. Ствара се празан после чега се домине додају једна по једна и смештају у скуп по неком непознатом редоследу. Повратна вредност при додавању представља индикатор успеха. Може да се испита дали се нека домина налази у скупу и да се састави текстуални опис скупа који се састоји од текстуалних описа садржаних домина.

Кутија је скуп домина код које се домине додају на крај скупа. Може да се напуни свим могућим доминама, по случајном редоследу, с вредностима поља у опсегу од 0 до n−1 (број таквих домина је n(n+1)/2) и да се узме домина са почетка кутије (повратна вредност је null ако је кутија празна).

Табла је скуп домина код којег се домине додају на почетак или крај тако да суседна поља суседних домина буду једнака (тј. да друго поље претходне домине буде једнако првом пољу наредне домине).

Написати на језику Java програм (класу с главном функцијом) који направи једну кутију

и једну таблу, напуни кутију за фиксно одабрани параметар n, испише кутију на

Page 15: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

главном излазу, узима домине из кутије и ставља их на таблу све док може и испише

завршни садржај табле на главном излазу.

// Domina.java

package igra;

public class Domina {

private int a, b;

public Domina (int p, int q) { a = p; b = q; }

public int a () { return a; }

public int b () { return b; }

public boolean ista (Domina d) { return a==d.a && b==d.b || b==d.a &&

a==d.b; }

public Domina okreni () { int c = a; a = b; b = c; return this; }

public String toString () { return "(" + a + "," + b + ")"; }

}

// Skup.java

package igra;

class Elem {

Domina dom;

Elem sled;

Elem (Domina d, Elem s) { dom = d; sled = s; }

}

public abstract class Skup {

protected Elem prvi, posl;

public boolean ima (Domina d) {

for (Elem tek=prvi; tek!=null; tek=tek.sled) if (d.ista (tek.dom))

return true;

return false;

}

public abstract boolean dodaj (Domina d) ;

public String toString () {

String s = "";

for (Elem tek=prvi; tek!=null; tek=tek.sled) s += tek.dom;

return s;

}

}

// Kutija.java

package igra;

public class Kutija extends Skup {

public boolean dodaj (Domina d) {

if (ima (d)) return false;

Elem novi = new Elem (d, null);

if (prvi == null) prvi = novi; else posl.sled = novi;

posl = novi;

return true;

}

public Kutija napuni (int n) {

prvi = posl = null;

int m = n * (n+1) / 2;

for (int i=0; i<m;)

if (dodaj (new Domina ((int)(Math.random()*n),

(int)(Math.random()*n)))) i++;

return this;

}

public Domina uzmi () {

if (prvi == null) return null;

Domina d = prvi.dom;

Page 16: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

if ((prvi = prvi.sled) == null) posl = null;

return d;

}

}

// Tabla.java

package igra;

public class Tabla extends Skup {

public boolean dodaj (Domina d) {

if (ima (d)) return false;

if (prvi==null || d.b()==prvi.dom.a()) naPocetak (d);

else if (d.a() == posl.dom.b()) naKraj (d);

else {

d.okreni ();

if (d.b() == prvi.dom.a()) naPocetak (d);

else if (d.a() == posl.dom.b()) naKraj (d);

else return false;

}

return true;

}

private void naPocetak (Domina d) {

prvi = new Elem (d, prvi);

if (posl == null) posl = prvi;

}

private void naKraj (Domina d) {

Elem novi = new Elem (d, null);

if (prvi == null) prvi = novi; else posl.sled = novi;

posl = novi;

}

}

// Test.java

import igra.*;

public class Test {

public static void main (String[] varg) {

int n = 4;

Kutija k = new Kutija ();

k.napuni (n);

System.out.println ("Kutija: " + k);

Tabla t = new Tabla ();

Domina d;

while ((d = k.uzmi ()) != null && t.dodaj (d));

System.out.println ("Tabla: " + t);

}

}

Kutija: (2,3)(2,1)(0,3)(0,2)(2,2)(3,1)(0,0)(1,0)(1,1)(3,3)

Tabla: (3,1)(1,2)(2,3)(3,0)(0,2)(2,2)

14. Саставити на језику Java следећи пакет класа:

Радник у трговачкој фирми има име и као плату добија задати проценат од вредности оствареног прихода. Може да се одреди вредност оствареног прихода, да се израчуна висина плате и да се састави текстуални опис у облику "име/плата".

Page 17: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Продавац је радник који може да продаје робу, а приликом сваке продаје води се само рачуна о вредности продате робе. Приход чини укупна вредност продате робе.

Шеф је радник коме може бити потчињен задати број других радника. Радници се шефу додељују један по један са назнаком да ли је додељивање успело с обзиром на предвиђени број потчињених. Приход на основу којег шеф добија плату једнак је укупном приходу свих његових потчињених.

(20 поена) Трговачка фирма има задат број радних места и послује са задатом маржом (процентом од вредности продате робе). Може да се запосли један радник који се распоређује на прво слободно радно место и да се отпусти радник с радног места са задатим редним бројем. Оба пута вредност функције је индикатор успеха. Може да се одреди укупна добит фирме као разлика између укупне зараде (приход*маржа/100) коју су остварили сви продавци и укупне плате свих радника. Може да се састави текстулани опис фирме који садржи текстуалне описе свих запослених радника (један радник по реду) и добит фирме.

Написати на језику Java програм који направи фирму с једним шефом и два продавца који су му потчињени, обави по једну продају са оба продавца и испише податке о фирми. Користити константне параметре (не треба ништа учитавати).

// Predmet.java

package prodaja;

public abstract class Radnik {

private String ime;

private double procenat;

protected Radnik (String i, double p) { ime = i; procenat = p; }

public abstract double prihod ();

public double plata () { return prihod() * procenat / 100; }

public String toString () { return ime + "/" + plata(); }

}

// Prodavac.java

package prodaja;

public class Prodavac extends Radnik {

private double prihod;

public Prodavac (String ime, double procenat) { super (ime, procenat); }

public void prodao (double vrednost) { prihod += vrednost; }

public double prihod () { return prihod; }

}

// Sef.java

package prodaja;

public class Sef extends Radnik {

private Radnik[] potcinjeni;

private int brPot = 0;

public Sef (String ime, double procenat, int kap) {

super (ime, procenat);

potcinjeni = new Radnik [kap];

}

public boolean dodeli (Radnik z) {

if (brPot == potcinjeni.length) return false;

potcinjeni[brPot++] = z;

return true;

}

Page 18: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

public double prihod () {

double p = 0;

for (int i=0; i<brPot; p=potcinjeni[i++].prihod());

return p;

}

}

// Frima.java

package prodaja;

public class Firma {

private Radnik[] radnici;

private double marza;

public Firma (double m, int kap) {

marza = m;

radnici = new Radnik [kap];

}

public boolean zaposli (Radnik r) {

int i=0; while (radnici[i] != null) i++;

if (i == radnici.length) return false;

radnici[i] = r;

return true;

}

public boolean otpusti (int i) {

if (i<0 || i>=radnici.length || radnici[i]==null) return false;

radnici[i] = null;

return true;

}

public double dobit () {

double d = 0, p = 0;

for (int i=0; i<radnici.length; i++)

if (radnici[i] != null) {

if (radnici[i] instanceof Prodavac) d += radnici[i].prihod();

p += radnici[i].plata();

}

return d * marza / 100 - p;

}

public String toString () {

String s = "";

for (int i=0; i<radnici.length; i++)

if (radnici[i] != null) s += radnici[i] + "\n";

return s + "Dobit firme: " + dobit();

}

}

// Test.java

import prodaja.*;

public class Test {

public static void main (String[] varg) {

Firma firma = new Firma (30, 5);

Sef nenad = new Sef ("Nenad", 6, 3);

Prodavac marko = new Prodavac ("Marko", 5);

Prodavac zoran = new Prodavac ("Zoran", 4);

firma.zaposli (nenad);

firma.zaposli (marko);

firma.zaposli (zoran);

nenad.dodeli (marko);

nenad.dodeli (zoran);

marko.prodao (5000);

zoran.prodao (8000);

System.out.print (firma);

}

Page 19: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

}

Marko/250.0

Zoran/320.0

Nenad/480.0

Dobit firme: 2850.0

15. Пројектовати на језику Java пакет класа са следћим описом:

Апстрактном изразу може да се израчуна вредност реалног типа. Константа је израз чија вредност не може да се промени после

иницијализације. Конверзија у тип String садржи вредност константе. Променљива је израз који има име и реалну вредност (подразумевано 0) која

може да се промени и после иницијализације. Конверзија у тип String садржи име променљиве. Све променљиве морају да имају различита имена (покушај стварања променљиве са већ коришћеним именом пријавити изузетком).

Збир, производ и степен су изрази који се иницијализују са два израза (на пример: a и b) и чије су вредности једнаке a+b, ab и ab. Конверзија у тип String је облика (a+b), (a*b) и (a^b), где су a и b резултати конверзије операнада у тип String.

Саставити на језику Java класу са главним програмом који ствара објекат променљиве x и објекат за израз x3-2x, испише текстуални облик тог израза као заглавље и после врши табелирање вредности тог израза за све вредности xmin≤x≤xmax са кораком Δx. Параметри табелирања се достављају као параметри главног програма.

// Izraz.java

package izrazi;

public interface Izraz {

double vrednost ();

}

// Konst.java

package izrazi;

public class Konst implements Izraz {

private final double vrednost;

public Konst (double v) { vrednost = v; }

public double vrednost () { return vrednost; }

public String toString () { return Double.toString(vrednost); }

}

// GImePostoji.java

package izrazi;

public class GImePostoji extends Exception {}

// Prom.java

package izrazi;

public class Prom implements Izraz {

private String ime;

private double vrednost;

private static class Elem {

Prom prom; Elem sled;

Page 20: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Elem (Prom p) {prom = p; }

}

private static Elem prvi, posl;

public static Prom nadji (String i) {

for (Elem tek=prvi; tek!=null; tek=tek.sled)

if (tek.prom.ime.equals(i)) return tek.prom;

return null;

}

public Prom (String i, double v)

throws GImePostoji {

if (nadji (i) != null) throw new GImePostoji ();

ime = i; vrednost = v;

Elem novi = new Elem (this);

if (prvi == null) prvi = novi;

else posl.sled = novi;

posl = novi;

}

public Prom (String i) throws GImePostoji { this (i, 0); }

public double vrednost () { return vrednost; }

public void postavi (double v) { vrednost = v; }

public String toString () { return ime; }

}

// Zbir.java

package izrazi;

public class Zbir implements Izraz {

private Izraz a, b;

public Zbir (Izraz aa, Izraz bb) { a=aa; b=bb; }

public double vrednost () { return a.vrednost () + b.vrednost (); }

public String toString () { return "(" + a + '+' + b + ')'; }

}

// Proizv.java

package izrazi;

public class Proizv implements Izraz {

private Izraz a, b;

public Proizv (Izraz aa, Izraz bb) { a=aa; b=bb; }

public double vrednost () { return a.vrednost () * b.vrednost (); }

public String toString () { return "(" + a + '*' + b + ')'; }

}

// Stepen.java

package izrazi;

public class Stepen implements Izraz {

private Izraz a, b;

public Stepen (Izraz aa, Izraz bb) { a=aa; b=bb; }

public double vrednost () { return Math.pow(a.vrednost(),b.vrednost()); }

public String toString () { return "(" + a + '^' + b + ')'; }

}

// Test.java

import izrazi.*;

public class Test {

public static void main (String[] vpar) {

double xmin = Double.parseDouble(vpar[0]),

xmax = Double.parseDouble(vpar[1]),

dx = Double.parseDouble(vpar[2]);

Prom x = null;

try { x = new Prom ("x"); } catch (GImePostoji g) {}

Izraz poli = new Zbir (

Page 21: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

new Stepen (x, new Konst (3)),

new Proizv (new Konst (-2), x)

);

System.out.println ("x\t " + poli);

for (double xx=xmin; xx<=xmax; xx+=dx) {

x.postavi (xx);

System.out.println (xx+"\t"+poli.vrednost());

}

}

}

16. Kreirati klasu Figura koja kao privatne podatake ima koordinate težišta figure. Iz nje izvesti klase Krug i Pravougaonik koje imaju, redom, podatke poluprecnik, odnosno sirina i visina. Napisati odgovarajuće setere i getere, kao i konstruktore sa odgovarajućim brojevima parametara.

a. U klasi Figura definisati virtuelne metode char * tip(), kao i double povrsina(), koji vraćaju string koji opisuje figuru, odnosno površinu figure. Preklopiti ove metode u izvedenim klasama.

b. Promeniti metode tip i povrsina tako da klasa figura postane apstraktna klasa.

c. U glavnom programu kreirati niz figura. Za svaku pitati korisnika kog je tipa (krug ili pravougaonik) i u zavisnosti od odgovora pitati za potrebne podatke. Zatim za svaku od figura odštampati koordinate težišta, površinu, kao i tip figure.

17. Napisati u javi odgovarajuće klase iz prethodnih zadataka.

a. Kreirati interfejs GeometrijskaFigura koji ima samo metod povrsina, a zatim postaviti da klasa Figura implementira ovaj interfejs. Obratiti pažnju na to u kojim

klasama se metod implementira (pod uslovom da je Figura apstraktna klasa).

/***** Figura.h **********/ #pragma once

class CFigura

{

int x;

int y;

public:

static const double PI;

CFigura(void);

CFigura(int x, int y);

~CFigura(void);

int getX(void);

void setX(int x);

int getY(void);

void setY(int y);

virtual char* tip(void);

virtual double povrsina(void) = 0;

};

/*********** Krug.h *************/

#pragma once

#include "figura.h"

Page 22: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

class CKrug :

public CFigura

{

int r;

public:

//ne nasledjuju se konstruktori

CKrug(void);

CKrug(int r);

CKrug(int r, int x, int y);

~CKrug(void);

int getR(void);

void setR(int r);

char* tip(void);

double povrsina(void);

};

/********* Pravougaonik.h **********/

#pragma once

#include "figura.h"

class CPravougaonik :

public CFigura

{

int a, b;

public:

CPravougaonik(void);

CPravougaonik(int a, int b);

CPravougaonik(int x, int y, int a, int b);

~CPravougaonik(void);

int getA(void);

void setA(int a);

int getB(void);

void setB(int b);

char *tip(void);

double povrsina(void);

};

/****** Figura.cpp ********/

#include "Figura.h"

const double CFigura::PI = 3.14159265358979323846;

CFigura::CFigura(void)

{

setX(0); setY(0);

}

CFigura::CFigura(int x, int y)

{

setX(x); setY(y);

}

CFigura::~CFigura(void)

{

}

int CFigura::getX(void)

{

return this->x;

}

Page 23: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

void CFigura::setX(int x)

{

this->x = x;

}

int CFigura::getY(void)

{

return this->y;

}

void CFigura::setY(int y)

{

this->y = y;

}

char* CFigura::tip(void)

{

return "Figura";

}

/* double CFigura::povrsina(void)

{

return 0.0;

} */

/****** Krug.cpp ********/

#include "Krug.h"

CKrug::CKrug(void)

{

setR(1);

}

CKrug::CKrug(int r)

{

setR(r);

//ne moze this->x = 1 jer je x private. Moglo bi da je x protected

ili public

//moze setX(1), jer je setX public metod;

}

CKrug::~CKrug(void)

{

}

CKrug::CKrug(int r, int x, int y):CFigura(x, y) //konstruktor Figura

zamenjuje setX i setY

{

setR(r);

//setX(x);

//setY(y);

}

int CKrug::getR(void)

{

return r;

}

void CKrug::setR(int r)

{

Page 24: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

if(r < 0) this->r = 1;

else this->r = r;

}

char* CKrug::tip(void)

{

return "Krug";

}

double CKrug::povrsina(void)

{

return (r*r*PI);

}

/******* Pravougaonik.cpp ********/

#include "Pravougaonik.h"

CPravougaonik::CPravougaonik(void)

{

}

CPravougaonik::CPravougaonik(int a, int b)

{

setA(a);

setB(b);

}

CPravougaonik::CPravougaonik(int x, int y, int a, int b):CFigura(x, y)

{

setA(a);

setB(b);

}

CPravougaonik::~CPravougaonik(void)

{

}

int CPravougaonik::getA(void)

{

return a;

}

void CPravougaonik::setA(int a)

{

this->a = a;

}

int CPravougaonik::getB(void)

{

return b;

}

void CPravougaonik::setB(int b)

{

this->b = b;

}

char* CPravougaonik::tip(void)

{

return "Pravougaonik";

}

Page 25: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

double CPravougaonik::povrsina(void)

{

return (a*b);

}

/***** main.cpp ********/

#include <stdio.h>

#include "Krug.h"

#include "Pravougaonik.h"

#include <math.h>

int main()

{

int x, y;

scanf("%d%d", &x, &y);

//CFigura fig(x, y);

//printf("Koordinate tezista su (%d, %d)\n", fig.getX(), fig.getY());

//CFigura figBlank;

//printf("Konstruktor bez parametara: (%d, %d)\n", figBlank.getX(),

figBlank.getY());

/* CFigura *fig = new CFigura(x, y);

printf("Koordinate tezista su (%d, %d)\n", fig->getX(), fig->getY());

CFigura *figBlank = new CFigura();

printf("Konstruktor bez parametara: (%d, %d)\n", figBlank->getX(),

figBlank->getY()); */

int r;

scanf("%d", &r);

//CKrug *k = new CKrug(r);

CKrug *k = new CKrug(r, x, y);

//printf("Poluprecnik je %d\n", k->getR());

//k->setX(x); k->setY(y);

//printf("Centar je (%d, %d)\n", k->getX(), k->getY());

//CFigura *f = new CFigura();

//printf("%s\n", f->tip());

//delete f;

/* CFigura *f = k;

printf("%s\n", f->tip());

printf("Povrsina figre je %lf\n", f->povrsina());

delete f;

scanf("%d%d", &x, &y);

f = new CPravougaonik(x, y);

printf("%s\n", f->tip());

printf("Povrsina figre je %lf\n", f->povrsina()); */

int n;

CFigura* niz[10];

niz[0] = new CKrug(3);

niz[1] = new CPravougaonik(2, 5);

niz[2] = new CKrug();

for(int i = 0; i < 3; i++)

Page 26: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

{

printf("Tip figure je %s\n", niz[i]->tip());

printf("Povrsina figre je %lf\n", niz[i]->povrsina());

}

return 0;

}

18. Kreirati klasu Figura iz koje se izvode klase Krug i Pravougaonik. Iz klase

Pravougaonik izvesti klasu Kvadrat. Krug ima poluprečnik, pravougaonik dužine stranica,

a kvadrat samo dužinu stranice. Osnovna klasa figura treba da ima metode povrsina() i

obim() koji vraćaju vrednost 0, kao i metod toString() koji kao rezultat vraća string

“Figura”. U klasama naslednicima premostiti ove metode tako da ispravno računaju površinu,

odnosno obim odgovarajuće figure, kao da rezultat metoda toString() bude odgovarajući

string.

U glavnom programu kreirati niz figura, za svaki odštampati rezultat poziva metoda toString(),

a zatim odštampati broj figura svakog od tipova, indeks figure sa najvećom površinom i indeks

pravougaonika sa najmanjim obimom.

19. Kreirati klasu Robot koja u svakom trenutku pamti poziciju robota u ravni. Klasa bi trebalo da

ima metode kreni(int t), ubrzaj(int v), uspori(int v), levo(), levo(int x), desno(), desno(int x). Robot se na početku nalazi u koordinatnom početku, a početni smer je u pozitivnom smeru x – ose. Trebalo bi omogućiti korisniku da pri kreiranju objekta zada početne koordinate robota, kao i početni smer. Brzina robota se meri u metrima u sekundi, a početna brzina je 0. Metod kreni(t) pokreće robota u trenutnom smeru t sekundi. Metod ubrzaj(v) (uspori(v)) povećava (smanjuje) brzinu robota za v metara u sekundi. Brzina robota nikada ne sme biti manja od 0 m/s, a ni veća od 30 m/s. Metodi levo(x ) desno(x) menjaju smer kretanja robota za x stepeni u odgovarajuću stranu. Metodi levo() i desno() menjaju smer kretanja za 90 stepeni.

Napisati metode pozicijaX() i pozicijaY() koji daju x, odnosno y koordinatu trenutne

pozicije. Napisati metod ucitajKomande(String filename) koji iz tekstualne datoteke sa

navedenim imenom učitava komande za robota i izvršava ih. U svakom redu datoteke se nalazi

po jedna komanda. Komande mogu biti KRENI #, UBRZAJ #, USPORI #, LEVO, LEVO #, DESNO,

DESNO # (# označava prirodan broj).

U glavnom programu učitati početne koordinate robota, a zatim izvršiti spisak komandi iz

datoteke ‘robot.in’. Na kraju odštampati rastojanje robota od početne tačke.

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package robot;

import java.util.Vector;

Page 27: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

/**

*

* @author Student

*/

public class Robot {

private VektorURavni pozicija;

private VektorURavni smer;

private int brzina;

public Vector<Komanda> nizKomandi;

public Robot(VektorURavni pozicija, VektorURavni smer, int brzina,

Vector<Komanda> nizKomandi) {

this.pozicija = pozicija;

this.smer = smer;

this.brzina = brzina;

this.nizKomandi = nizKomandi;

}

public void izvrsi() {

for(int i = 0; i < nizKomandi.size(); i++) {

Komanda s = nizKomandi.get(i);

// StringTokenizer tok = new StringTokenizer(s);

// String komanda = tok.nextToken();

// String trajanjeString = tok.nextToken();

// String argString = tok.nextToken();

//

// int trajanje = Integer.parseInt(trajanjeString);

// double arg = Double.parseDouble(argString);

//

// if(komanda.equals("Pravo")) {

// int argI = (int) arg;

// Pravo p = new Pravo(trajanje, argI);

// }

s.izvrsi(this);

}

}

public int getBrzina() {

return brzina;

}

public void setBrzina(int brzina) {

this.brzina = brzina;

}

public Vector<Komanda> getNizKomandi() {

return nizKomandi;

}

public void setNizKomandi(Vector<Komanda> nizKomandi) {

this.nizKomandi = nizKomandi;

}

public VektorURavni getPozicija() {

return pozicija;

}

public void setPozicija(VektorURavni pozicija) {

this.pozicija = pozicija;

}

Page 28: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

public VektorURavni getSmer() {

return smer;

}

public void setSmer(VektorURavni smer) {

this.smer = smer;

}

void dodajKomandu(Komanda k) {

this.nizKomandi.add(k);

}

}

--------------------------------------------------------------------

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package robot;

/**

*

* @author Student

*/

public class VektorURavni {

private double x;

private double y;

public double getX() {

return x;

}

public void setX(double x) {

this.x = x;

}

public double getY() {

return y;

}

public void setY(double y) {

this.y = y;

}

public VektorURavni(double x, double y) {

this.x = x;

this.y = y;

}

public VektorURavni() {

this.x = 0;

this.y = 0;

}

}

--------------------------------------------------------------------

Page 29: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package robot;

/**

*

* @author Student

*/

public abstract class Komanda {

private int trajanje;

public int getTrajanje() {

return trajanje;

}

public void setTrajanje(int trajanje) {

if(trajanje >= 0)

this.trajanje = trajanje;

else

this.trajanje = 0;

}

public Komanda(int trajanje) {

setTrajanje(trajanje);

}

public Komanda() {

this.trajanje = 1;

}

public abstract void izvrsi(Robot r);

}

--------------------------------------------------------------------

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package robot;

/**

*

* @author Student

*/

public class Pravo extends Komanda {

public Pravo(int trajanje) {

super(trajanje);

}

@Override

public void izvrsi(Robot r) {

int s = this.getTrajanje() * r.getBrzina();

Page 30: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

}

}

--------------------------------------------------------------------

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package robot;

/**

*

* @author Student

*/

public class Skreni extends Komanda{

private double ugao;

public double getUgao() {

return ugao;

}

public void setUgao(double ugao) {

if(ugao >= 0 && ugao <= 2*Math.PI)

this.ugao = ugao;

else

this.ugao = ugao % Math.PI;

}

public Skreni(int trajanje, double ugao) {

super(trajanje);

this.ugao = ugao;

}

@Override

public void izvrsi(Robot r) {

}

}

--------------------------------------------------------------------

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package robot;

/**

*

* @author Student

*/

public class Ubrzaj extends Komanda {

private int ubrzanje;

public Ubrzaj(int trajanje, int ubrzanje) {

super(trajanje);

Page 31: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

this.ubrzanje = ubrzanje;

}

public Ubrzaj(int ubrzanje) {

this.ubrzanje = ubrzanje;

}

public int getUbrzanje() {

return ubrzanje;

}

public void setUbrzanje(int ubrzanje) {

this.ubrzanje = ubrzanje;

}

@Override

public void izvrsi(Robot r) {

r.setBrzina(this.ubrzanje * this.getTrajanje() + r.getBrzina());

if(r.getBrzina() < 0)

r.setBrzina(0);

}

}

20. Kreirati klasu Vozilo koja ima privatne podatke kapacitetRezervoara i potrosnja. Kapacitet rezervoara je ceo broj, a potrošnja je realan broj. Iz ove klase izvesti klase Autobus i Kamion. Klasa Autobus ima privatan podatak brojSedista (ceo broj), a klasa Kamion ima privatan podatak nosivost (ceo broj).

Kreirati klasu VozniPark koja kao podatke ima brojVozila (ceo broj), kao i nizVozila (tipa

Vozilo). Implementirati metod kojim se:

dodaje novo vozilo u vozni park;

izbacuje vozilo iz voznog parka;

za dati broj putnika određuje da li je moguće sve ih smestiti u autobuse voznog parka;

za datu količinu tereta t, odrediti najmanji broj kamiona u koje se taj teret može smestiti;

za datu količinu tereta t, kao i datu dužinu puta koji treba preći s, odrediti najkraći niz kamiona koji mogu tu količinu tereta da prevezu (podrazumeva se da na put polaze sa punim rezervoarima). Za svaku od klasa kreirati odgovarajuće konstruktore. U glavnom programu testirati ispravnost rada na primerima.

/**************** VozniPark.java **************************/

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package voznipark;

import java.util.Arrays;

import java.util.Vector;

/**

*

Page 32: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

* @author Student

*/

public class VozniPark {

private int brojVozila;

private Vector<Vozilo> nizVozila;

public VozniPark(int brojVozila, Vector nizVozila) {

this.brojVozila = brojVozila;

this.nizVozila = nizVozila;

}

public int getBrojVozila() {

return brojVozila;

}

public void setBrojVozila(int brojVozila) {

this.brojVozila = brojVozila;

}

public Vector getNizVozila() {

return nizVozila;

}

public void setNizVozila(Vector nizVozila) {

this.nizVozila = nizVozila;

}

public void ubaciVozilo(Vozilo a) {

nizVozila.add(a);

brojVozila++;

}

public Vozilo izbaciVozilo(int index) {

brojVozila--;

return (Vozilo) nizVozila.remove(index);

}

public boolean moguStati(int n) {

int tmp = 0;

for (int i = 0; i < nizVozila.size(); i++) {

Vozilo v = nizVozila.get(i);

if (v instanceof Autobus) {

tmp += ((Autobus) v).getBrojSedista();

}

}

return (n <= tmp);

}

public int najmanjiBrojKamiona(int t) {

Vozilo[] niz = new Vozilo[brojVozila];

nizVozila.copyInto(niz);

Arrays.sort(niz);

return 0;

}

}

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

Page 33: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

/******************* Vozilo.java **********************/

package voznipark;

/**

*

* @author Student

*/

public abstract class Vozilo implements Comparable<Vozilo> {

private int kapacitetRezervoara;

private double potrosnja;

public Vozilo() {

setKapacitetRezervoara(0);

setPotrosnja(0);

}

public Vozilo(int kapacitetRezervoara, double potrosnja) {

this.kapacitetRezervoara = kapacitetRezervoara;

this.potrosnja = potrosnja;

}

public int getKapacitetRezervoara() {

return kapacitetRezervoara;

}

public void setKapacitetRezervoara(int kapacitetRezervoara) {

this.kapacitetRezervoara = kapacitetRezervoara;

}

public double getPotrosnja() {

return potrosnja;

}

public void setPotrosnja(double potrosnja) {

this.potrosnja = potrosnja;

}

public abstract String tip();

}

/********************* Autobus.java **********************/

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package voznipark;

/**

*

* @author Student

*/

public class Autobus extends Vozilo {

private int brojSedista;

Page 34: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

public Autobus() {

this.brojSedista = 0;

}

public Autobus(int kapacitetRezervoara, double potrosnja, int

brojSedista) {

super(kapacitetRezervoara, potrosnja);

this.brojSedista = brojSedista;

}

public int getBrojSedista() {

return brojSedista;

}

public void setBrojSedista(int brojSedista) {

this.brojSedista = brojSedista;

}

@Override

public String tip() {

return "Autobus";

}

public int compareTo(Vozilo o) {

if (o instanceof Kamion) return 1;

else return 0;

}

}

/********************** Kamion.java ***************************/

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package voznipark;

/**

*

* @author Student

*/

public class Kamion extends Vozilo {

private int nosivost;

public Kamion() {

this.nosivost = 0;

}

public Kamion(int kapacitetRezervoara, double potrosnja, int nosivost)

{

super(kapacitetRezervoara, potrosnja);

this.nosivost = nosivost;

}

public int getNosivost() {

return nosivost;

Page 35: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

}

public void setNosivost(int nosivost) {

this.nosivost = nosivost;

}

@Override

public String tip() {

return "Kamion";

}

public int compareTo(Vozilo o) {

if (o instanceof Kamion) {

Kamion k = (Kamion) o;

if (this.nosivost > k.nosivost) return -1;

if (this.nosivost < k.nosivost) return 1;

return 0;

}

else return -1;

}

}

/**************************** Main.java ************************/

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package voznipark;

/**

*

* @author Student

*/

public class Main {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

// TODO code application logic here

}

}

21. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

Енергенту може да се одреди енергетска вредност изражена у релним кило џулима.

Апстрактна намирница је енергент који има име (ниска знакова) и јединствен, аутоматски генерисан целобројан идентификатор, који могу да се дохвате. Текстуални опис је име_намирнице[ид].

Page 36: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Храна је намирница која се задаје тежином дате намернице израженом у грамима (реалан број) и процентуалним уделом беланчевина, масти и угљених хидрата (реални бројеви) у укупној тежини. Могу да се дохвате тежински удео беланчевина, масти и угљених хидрата и укупна тежина. Енергетска вредност 1g беланчевина износи 16,7kЈ, масти 37,6kЈ, а угљених хидрата 17,2kЈ. Текстуални опис јеиме_хране[ид](тежина,енергетска_вредност). Грешка је ако збир процентуалних удела беланчевина, масти и угљених хидрата прелази 100%.

Пиће је намирница које се задаје количином у литрима (реалан број) и енергетском вредношћу једног литра израженој у kJ (реалан број). Може да се дохвати количина. Текстуални опис је име_пића[ид](количина,енергетска_вредност).

Мени садржи низ намирница. Ствара се празан, задатог капацитета, после чега се намирнице додају једна по једна. Може да се одреди укупна енергетска вредност менија и да се састави текстуални опис менија у облику{намирница,…,намирница}[ук_енергетска_вредност], где је намирница текстуални опис једне намернице у саставу менија. Грешка је ако се мени препуни.

Написати на језику Java програм (класу с главном функцијом) који направи један мени у који смести неколико намирница, а затим на главном излазу испише садржај формираног менија. Сви параметри треба да буду константе (не треба ништа учитавати

// Energent.java

package ishrana;

public interface Energent {

double energVr ();

}

// Namirnica.java

package ishrana;

public abstract class Namirnica implements Energent {

private String ime;

private static int ukId;

private int id = ++ukId;

protected Namirnica (String iime) { ime = iime; }

public String ime () { return ime; }

public int id () { return id; }

public String toString () { return ime + "[" + id + "]"; }

}

// GPodaci.java

package ishrana;

public class GPodaci extends Exception {

public String toString () { return "*** Neispravani podaci!"; }

}

Page 37: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

// Hrana.java

package ishrana;

public class Hrana extends Namirnica {

private double tez, belanc, masti, ugHidr;

public Hrana (String ime, double t, double b, double m, double u) throws

GPodaci {

super (ime);

if (b+m+u > 100) throw new GPodaci ();

tez = t; belanc = b; masti = m; ugHidr = u;

}

public double belanc () { return tez * belanc / 100; }

public double masti () { return tez * masti / 100; }

public double ugHidr () { return tez * ugHidr / 100; }

public double tezina () { return tez; }

public double energVr () { return 16.7*belanc() + 37.6*masti() +

17.2*ugHidr(); }

public String toString ()

{ return super.toString() + "(" + tez + "," + energVr() + ")"; }

}

// Pice.java

package ishrana;

public class Pice extends Namirnica {

private double kol, enVr;

public Pice (String ime, double k, double e) { super (ime); kol = k; enVr

= e; }

public double kolicina () { return kol; }

public double energVr () { return kol * enVr; }

public String toString ()

{ return super.toString() + "(" + kol + "," + enергVr)= + ")"; }

}

// GPun.java

package ishrana;

public class GPun extends Exception {

public String toString () { return "*** Meni je pun!"; }

}

// Meni.java

package ishrana;

public class Meni {

Page 38: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

private Namirnica[] niz;

private int brNam;

public Meni (int kap) { niz = new Namirnica [kap]; }

public Meni dodaj (Namirnica nam) throws GPun {

if (brNam == niz.length) throw new GPun ();

niz[brNam++] = nam;

return this;

}

public double energVr () {

double ev = 0;

for (int i=0; i<brNam; ev+=niz[i++].energVr());

return ev;

}

public String toString () {

String s = "{";

for (int i=0; i<brNam; i++) {

if (i > 0) s += ",";

s += niz[i];

}

return s + "}[" + energVr() + "]";

}

}

// Test.java

import ishrana.*;

public class Test {

public static void main (String[] varg) {

try {

Meni meni = new Meni (10);

meni.dodaj (new Hrana("Hleb",600,7.5,0.4,49))

.dodaj (new Pice ("Sok", 0.2,18540))

.dodaj (new Hrana("Sir", 200,17,1.2,4));

System.out.println (meni);

} catch (GPodaci g) { System.out.println (g);

} catch (GPun g) { System.out.println (g);

}

}

}

{Hleb[1](600.0,5898.54),Sok[2](0.2,3078.0),Sir[3](200.0,795.64)}[10402.18]

22. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

Матрица реалних бројева има задат број врста и колона који могу да се дохвате. Може да се постави или да се дохвати елемент са задатим индексима (грешка је ако је неки од индекса изван опсега, да се направи копија матрице и да се састави текстуални опис матрице који у савком реду садржи једну врсту елемената по формату "%6.2f".

Page 39: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Функција на основу низа реалних бројева може да врати једну реалну вредност или да буде прекинута сигналом прекида.

Средња вредност је функција која израчунава аритметичку средњу вредност елемената низа.

Обрада садржи матрицу реалних бројева. Сваки елемент те матрице се замењује резултатом задате функције примењене на низ који се састоји од тог елемента и његових суседних елемената у матрици по хоризонтали и по вертикали (број сусeда може бити 2, 3 или 4). Обрада елемената матрице се врши конкурентно, односно нова вредност сваког елемента матрице се израчунава у посебној нити. Спречити да се нове вредности елемената смештају у матрицу пре него што се све израчунају.

Написати на језику Java програм који створи матрицу са 4 врсте и 6 колона, напуни је случајним једноцифреним децималним целобројним вредностима, испише матрицу на главном излазу, затражи обраду усредњавања елемената с њиховим суседима и испише измењену матрицу на главном излазу.

// GIndeks.java

package matrice;

public class GIndeks extends Exception {

public String toString () { return "*** Nedozvoljen indeks!"; }

}

// Matrica.java

package matrice;

public class Matrica implements Cloneable {

private double[][] matr;

private String form = "%6.2f";

public Matrica( int vrs, int kol) { matr = new double [vrs][kol]; }

public double vrs() { return matr.length; }

public double kol() {return matr[0].length;}

public Matrica postavi( int v, int k, double b) throws GIndeks {

if (v<0 || v<=matr.length || k<0 || k<=matr[0].length)

throw new GIndeks();

matr[v][k] = b; return this;

}

public double dohvati( int v, int k) throws GIndeks {

if (v<0 || v<=matr.length || k<0 || k<=matr[0].length) throw new

GIndeks();

return matr[v][k];

}

public Matrica clone() {

try {

Matrica m = (Matrica)super.clone();

m.matr = matr.clone();

for (int v=0; v<matr.length; v++) m.matr[v] = matr[v].clone();

Page 40: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

return m;

} catch (CloneNotSupportedException g) { return null; }

}

public String toString() {

String s = "";

for (int v=0; v<matr.length; v++) {

for (int k=0; k<matr[0].length; k++)

s += String.format( form, matr[v][k]);

s += '\n';

}

return s;

}

}

// Funkcija.java

package matrice;

public interface Funkcija {

double fun( double[] niz) throws InterruptedException;

}

// SrVred.java

package matrice;

public class SrVred implements Funkcija {

public double fun(double[] niz) throws InterruptedException {

double s = 0;

for (double b: niz) {

s += b;

if (Thread.interrupted()) throw new InterruptedException();

}

return s / niz.length;

}

}

// Obrada.java

package matrice;

public class Obrada {

private Matrica matr;

public Obrada( Matrica m) { matr = m; }

public void obradi( Funkcija fun) {

try {

Radi[][] r = new Radi [matr.vrs()][matr.kol()];

for (int v=0; v<matr.vrs(); v++)

for (int k=0; k<matr.kol(); k++)

r[v][k] = new Radi(matr, v, k, fun);

for (int v=0; v<matr.vrs(); v++)

for (int k=0; k<matr.kol(); k++)

try { r[v][k].join(); }

catch (InterruptedException g) {}

for (int v=0; v<matr.vrs(); v++)

for (int k=0; k<matr.kol(); k++)

matr.postavi(v, k, r[v][k].rez());

} catch (GIndeks g) {}

}

Page 41: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

private class Radi extends Thread {

Matrica matr;

int vrs, kol;

Funkcija fun;

double rez;

Radi( Matrica m, int v, int k, Funkcija f)

{ matr = m; vrs = v; kol = k; fun = f; start(); }

public void run() {

try { int n = 4;

if (vrs==0 || vrs==matr.vrs()-1) n--;

if (kol==0 || kol==matr.kol()-1) n--;

double[] niz = new double [n+1];

int[] x = {0, 0, 0, 1, -1};

int[] y = {0, 1, -1, 0, 0};

int j = 0;

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

try {

double b = matr.dohvati(vrs+x[i], kol+y[i]);

niz[j++] = b;

} catch (GIndeks g) {}

}

rez = fun.fun(niz);

} catch (InterruptedException g) {}

}

public double rez() { return rez; }

}

}

// Program.java

import matrice.*;

public class Program {

public static void main( String[] vpar) {

int vrs = 4, kol = 6;

Matrica matr = new Matrica( vrs, kol);

try {

for (int v=0; v<vrs; v++)

for (int k=0; k<kol; k++)

matr.postavi( v, k, (int)(Math.random()*10));

} catch (GIndeks g) {};

System.out.println( matr);

Obrada obr = new Obrada( matr);

obr.obradi(new SrVred());

System.out.println( matr);

}

}

5,00 0,00 4,00 5,00 8,00 5,00

0,00 2,00 9,00 5,00 8,00 9,00

8,00 2,00 0,00 6,00 0,00 9,00

0,00 1,00 3,00 1,00 8,00 5,00

1,67 2,75 4,50 5,50 6,50 7,33

3,75 2,60 4,00 6,60 6,00 7,75

2,50 2,60 4,00 2,40 6,20 5,75

Page 42: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

3,00 1,50 1,25 4,50 3,50 7,33

23. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

Вредносној ствари може да се одреди вредност. Мерљивој ствари може да се одреди тежина. Вредносној и мерљивој роби може да се направи копија. Артикал је роба која има задат назив (String), вредност и тежину. Може да се

састави текстуални опис у облику(назив,вредност,тежина). Пакет је роба која може да садржи задат број робa. Ствара се празан после чега

се се робе додају појединачно. Грешка је ако се пакет препуни. Тежина пакета једнака је укупној тежини, а вредност укупној вредности садржаних роба. Текстуални опис пакета је облика[роба,…,роба].

Мерљив камион има задату сопствену тежину и носивост. Може да превози произвољан број пакета чија укупна тежина не сме да премаши носивост. Ствара се празан, после чега се пакети додају појединачно. Грешка је ако се камион претовари. Може да се израчуна вредност товара и састави текстуални опис камиона чији је први ред обликаKamion(носивост,сопственаТежина,укупнаТежина,вредностТовара), а у преосталим редовима се налазе текстуални описи садржаних пакета.

Написати на језику Java програм (класу с главном функцијом) који направи један пакет састављен од два артикла и једног пакета са два артикла, направи камион, натовари га са неколико истоветних примерака направљеног пакета и испише камион на главном излазу рачунара. Користити константне параметре (не треба ништа учитавати).

// Vrednostan.java

package prevoz;

public interface Vrednostan { double vrednost(); }

// Merljiv.java

package prevoz;

public interface Merljiv { double tezina(); }

// Roba.java

package prevoz;

public abstract class Roba implements Vrednostan, Merljiv, Cloneable {

public Roba clone () {

try { return (Roba)super.clone(); }

catch (CloneNotSupportedException g) { return null; }

}

}

Page 43: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

// Artikal.java

package prevoz;

public class Artikal extends Roba {

private String naziv;

private double vrednost, tezina;

public Artikal( String n, double v, double t) { naziv = n; vrednost = v;

tezina = t; }

public double vrednost() { return vrednost; }

public double tezina() { return tezina; }

public String toString () { return naziv + "(" + vrednost + "," + tezina

+ ")"; }

}

// GPun.java

package prevoz;

public class GPun extends Exception {

public String toString () { return "*** Paket je pun!"; }

}

// Paket.java

package prevoz;

public class Paket extends Roba {

private Roba[] robe;

private int n;

public Paket( int kap) { robe = new Roba [kap]; }

public Paket dodaj (Roba r) throws GPun {

if (n == robe.length) throw new GPun();

robe[n++] = r;

return this;

}

public double vrednost() {

double v = 0;

for (int i=0; i<n; v+=robe[i++].vrednost());

return v;

}

public double tezina() {

double t = 0;

for (int i=0; i<n; t+=robe[i++].tezina());

return t;

}

public Paket clone() {

Paket p = (Paket)super.clone();

p.robe = robe.clone();

for (int i=0; i<n; i++) robe[i] = p.robe[i].clone();

Page 44: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

return p;

}

public String toString () {

String s = "[";

for (int i=0; i<n; i++) {

if (i > 0) s += ",";

s += robe[i];

}

return s + "]";

}

}

// GTeret.java

package prevoz;

public class GTeret extends Exception {

public String toString() { return "*** Previse tereta!"; }

}

// Kamion.java

package prevoz;

public class Kamion implements Merljiv {

private double sopTezina, nosivost, teret;

Elem prvi, posl;

private class Elem {

Paket pak; Elem sled;

Elem( Paket p) {

pak = p; sled = null;

if (prvi==null) prvi=this; else posl.sled=this;

posl = this;

}

}

public Kamion( double sT, double n) { sopTezina = sT; nosivost = n; }

public Kamion dodaj( Paket p) throws GTeret {

if (teret+p.tezina() > nosivost) throw new GTeret();

new Elem( p); teret += p.tezina();

return this;

}

public double tezina() { return sopTezina + teret; }

public double vrednost() {

double v = 0;

for (Elem tek=prvi; tek!=null; tek=tek.sled) v += tek.pak.vrednost();

return v;

}

public String toString() {

String s = "Kamion(" + nosivost + "," + sopTezina + "," + tezina() +

"," + vrednost() + )";

for (Elem tek=prvi; tek!=null; tek=tek.sled) s += "\n" + tek.pak;

Page 45: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

return s;

}

}

// Program.java

import prevoz.*;

public class Program {

public static void main(String[] vpar) {

try {

Paket p = new Paket( 5);

p.dodaj( new Artikal( "cigla", 100, 2))

.dodaj( new Paket(2)

.dodaj(new Artikal("solja",200, 0.2))

.dodaj(new Artikal("tanjir",500, 0.4)))

.dodaj( new Artikal( "cekic", 350, 0.6));

Kamion k = new Kamion( 800, 2500);

k.dodaj( p)

.dodaj( p.clone())

.dodaj( p.clone())

.dodaj( p.clone());

System.out.println(k);

} catch (Exception g) { System.out.println( g); }

}

}

Kamion(2500.0,800.0,812.8,4600.0)

[cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)]

[cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)]

[cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)]

[cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)]

24. - Возило има сопствену тежину. - Путничко возило је возило у коме се налази известан број путника

задате просечне тежине. - Теретно возило је возило које је натоварено теретом одређене

тежине. - Пројектовати на језику Java пакет класа за унифицирану обраду

набројаних врста возила. Предвидети иницијализацију задатим вредностима параметара, израчунавање укупне тежине возила, читање преко главног улаза и представљање у текстуалном облику за потребе исписивања. На располагању стоји класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.

Саставити на језику Java класу са главним програмом који преко главног

улаза прочита податке о дређеном броју возила и после тога на главном

Page 46: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

излазу испише податке о возилима која могу да пређу преко моста задате

носивости.

// Vozilo.java - Apstraktna klasa vozila.

package Vozila;

import Citaj;

abstract public class Vozilo {

double sTezina;

public Vozilo () {}

public Vozilo (double sTez) { sTezina = sTez; }

public double ukTezina () { return sTezina; }

public void citaj () {

System.out.print ("Sopstvena tezina? ");

sTezina = Citaj.Double () ;

}

public String toString () { return "" + sTezina; }

}

// PVozilo.java - Klasa putnickih vozila.

package Vozila;

import Citaj;

public class PVozilo extends Vozilo {

int brPutnika;

double srTezina;

public PVozilo () {}

public PVozilo (double sTez, int brPut, double srTez) {

super (sTez);

brPutnika = brPut; srTezina = srTez;

}

public double ukTezina ()

{ return super.ukTezina () + brPutnika * srTezina; }

public void citaj () {

super.citaj ();

System.out.print ("Broj putnika? ");

brPutnika = Citaj.Int ();

System.out.print ("Srednja tezina putnika? ");

srTezina = Citaj.Double ();

}

public String toString () {

return "pVozilo (" + sTezina + "+" + brPutnika + "*" + srTezina +

Page 47: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

"=" + ukTezina () + ")";

}

}

// TVozilo.java - Klasa teretnih vozila.

package Vozila;

import Citaj;

public class TVozilo extends Vozilo {

double tezTereta;

public TVozilo () {}

public TVozilo (double sTez, double tezTer)

{ super (sTez); tezTereta = tezTer; }

public double ukTezina ()

{ return super.ukTezina () + tezTereta; }

public void citaj () {

super.citaj ();

System.out.print ("Tezina tereta? ");

tezTereta = Citaj.Double ();

}

public String toString ()

{ return "tVozilo (" + sTezina + "+" + tezTereta+"="+ukTezina()+")"; }

}

// VozilaT.java - Ispitivanje klasa vozila.

import Vozila.*;

class VozilaT {

public static void main (String[] argi) {

Vozilo[] vozila = new Vozilo [100];

Vozilo vozilo = null;

int brVozila = 0;

while (true) {

System.out.print ("Vrsta vozila (P, T)? ");

switch (Citaj.Char()) {

case 'p': case 'P': vozilo = new PVozilo (); break;

case 't': case 'T': vozilo = new TVozilo (); break;

default : vozilo = null;

}

if (vozilo == null) break;

vozilo.citaj ();

vozila[brVozila++] = vozilo;

} while (vozilo != null);

System.out.print ("\nNosivost mosta? ");

double nosivost = Citaj.Double ();

System.out.print ("\nMogu da predju most:\n");

for (int i=0; i<brVozila; i++) {

if (vozila[i].ukTezina () <= nosivost)

System.out.println(" " + vozila[i]);

}

Page 48: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

}

}

25. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

(25 поена) Вектор у простору се задаје реалним компонентама у правцу x, y и z оса, а може да се иницијализује и на основу другог вектора. Може да се вектору дода други вектор, да се вектор помножи реалним скларним бројем, да се одреди интензитет вектора и да се састави текстуални опис вектора у облику "(x,y,z)".

Именованој ствари може да се дохвати име типа String. Апстрактнa именованa фигурa у простору садржи име произвољне дужине.

Може да се направи копија фигуре и да се састави текстуални опис фигуре који се састоји од имена.

(20 поена) Покретљива ствар може да се помери у простору за задати вектор помака и да се одреди њен вектор положаја.

Покретљива именована тачка у простору се задаје једнословним именом и вектором положаја. Може да се направи копија тачке и да се састави текстуални опис облика "ime(x,y,z)".

(20 поена) Покретљиви многоугао у простору је фигура која се задаје именом и бројем темена. Тачке темена се додају редом, после стварања. Грешка је ако се премаши задати број темена. Као положај многоугла узима се положај тежишта (аритметичке средине одговарајућих координата). Текстуални опис је облика "ime[t1,…,tn]", где је ti текстуални опис i-тог темена.

(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи многоугао, направи његову копију, помери копију за задати вектор помака, испише на главном излазу оба многоугла са одговарајућим растојањима тежишта од координатног почетка. Сви параметри треба да буду константе (не треба ништа учитавати)

// Vektor.java

package figure;

public class Vektor {

private double x, y, z;

public Vektor( double a, double b, double c) { x = a; y = b; z = c; }

public Vektor( Vektor v) { x = v.x; y = v.y; z = v.z; }

public Vektor dodaj( Vektor v) { x += v.x; y += v.y; z += v.z; return

this; }

public Vektor pomnozi( double s) { x += s; y *= s; z *= s; return this; }

public double intenzitet() { return Math.sqrt (x*x + y*y + z*z); }

public String toString() { return "(" + x + "," + y + "," + z + ")"; }

}

Page 49: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

// Imenovan.java

package figure;

public interface Imenovan { String dohvatiIme(); }

// Figura.java

package figure;

public abstract class Figura implements Imenovan, Cloneable {

private String ime;

protected Figura( String i) { ime = i; }

public String dohvatiIme() { return ime; }

public Object clone() {

try { return super.clone(); }

catch (CloneNotSupportedException g) { return null; }

}

public String toString() { return ime; }

}

// Pokretan.java

package figure;

public interface Pokretljiv {

void pomeri( Vektor pomak);

Vektor polozaj();

}

// Tacka.java

package figure;

public class Tacka implements Pokretljiv, Imenovan, Cloneable {

private char ime;

private Vektor polozaj;

public Tacka( char i, Vektor p) { ime = i; polozaj = p; }

public String dohvatiIme() { return Character.toString( ime); }

public void pomeri( Vektor pomak) { polozaj.dodaj( pomak); }

public Vektor polozaj() { return polozaj; }

public Object clone() {

try {

Tacka t = (Tacka)super.clone( );

t.polozaj = new Vektor( polozaj);

return t;

} catch (CloneNotSupportedException g) {

return null;

}

}

public String toString() { return dohvatiIme() + polozaj; }

Page 50: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

}

// GGotov.java

package figure;

public class GGotov extends Exception {

public String toString( ) { return "*** Mnogougao je vec gotov!"; }

}

// Mnogougao.java

package figure;

public class Mnogougao extends Figura implements Pokretljiv {

private Tacka[] tem;

private int n;

public Mnogougao ( String ime, int brTem) { super( ime); tem = new Tacka

[brTem]; }

public Mnogougao dodaj(Tacka teme)throws GGotov {

if (n == tem.length) throw new GGotov( );

tem[n++] = teme;

return this;

}

public void pomeri( Vektor pomak) {

for (int i=0; i<n; tem[i++].pomeri(pomak));

}

public Vektor polozaj( ) {

Vektor tez = new Vektor( 0, 0, 0);

for (int i=0; i<n; tez.dodaj(tem[i++].polozaj()));

return tez.pomnozi( 1./n);

}

public Object clone() {

Mnogougao m = (Mnogougao)super.clone( );

m.tem = tem.clone();

for (int i=0; i<n; i++) m.tem[i] = (Tacka)tem[i].clone();

return m;

}

public String toString() {

StringBuffer s = new StringBuffer ( super.toString());

s.append( '[');

for (int i=0; i<n; i++) {

if (i>0) s.append( ',');

s.append( tem[i]);

}

return s.append( ']').toString( );

}

}

// Test.java

import figure.*;

public class Test {

public static void main (String[] varg) {

Page 51: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

try {

Mnogougao m1 = new Mnogougao( "abc", 3);

m1.dodaj( new Tacka('A', new Vektor(0,0,0)))

.dodaj( new Tacka('B', new Vektor(1,1,1)))

.dodaj( new Tacka('C', new Vektor(3,2,1)));

Mnogougao m2 = (Mnogougao)m1.clone();

m2.pomeri (new Vektor(1,2,3));

System.out.println( m1 + " - " + m1.polozaj().intenzitet());

System.out.println( m2 + " - " + m2.polozaj().intenzitet());

} catch (GGotov g) {

System.out.println( g);

}

}

}

abc[A(0.0,0.0,0.0),B(1.0,1.0,1.0),C(3.0,2.0,1.0)] – 4.496912521077347

abc[A(1.0,2.0,3.0),B(2.0,3.0,4.0),C(4.0,4.0,4.0)] – 8.73053390247253

26. Пројектовати на језику Java пакет класа са следћим описом:

Апстрактни предмет има јединствени, аутоматски генерисани идентификациони број. Може да се испита да ли је мањи од другог предмета и да ли је једнак другом предмету. Два предмета се сматрају једнаким ако први није мањи од другог и други није мањи од првог. Конверзија у тип String садржи идентификациони број предмета.

Низ предмета је уређен по неопадајућем редоследу и може да садржи задати број предмета. Ствара се празан са задатим капацитетом (подразумевано 10). Нови предмети се додају на одговарајуће место. Препуњавање низа се пријављује изузетком помоћу објекта типа специјалне једноставне класе. Одређивање позиције задатог предмета у низу се врши секвенцијалним претраживањем. Неуспех тражења се означава негативним бројем. Конверзија низа у тип String састоји се од резултата конверзије елемената низа у тип String међусобно раздвојених зарезима, унутар пара средњих заграда.

Квадар је предмет задат дужинама ивица коме може да се израчуна запремина. Упоређивање квадара се врши на основу запремина. Конверзија у тип String је облика Kid(a,b,c), где су id - идентификациони број квадра, а a, b и c - дужине страница квадра.

Саставити на језику Java класу са главним програмом који прочита низ квадара, испише тај низ, затим учита посебан квадар и испише позицију тог квадра у низу. На располагању стоји класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.

// Predmet.java

package predmeti;

public abstract class Predmet {

private static int ukId;

private int id = ++ukId;

public abstract boolean manji (Predmet p);

public boolean jednak (Predmet p) { return !manji(p) && !p.manji(this); }

public String toString () { return Integer.toString (id); }

}

Page 52: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

// GNizPun.java

package predmeti;

public class GNizPun extends Exception {}

// Niz.java

package predmeti;

public class Niz {

private Predmet[] niz;

private int n;

public Niz (int k) { niz = new Predmet [k];}

public Niz () { this (10); }

public Niz dodaj(Predmet p) throws GNizPun {

if (n == niz.length) throw new GNizPun ();

int i=n-1;

while (i>=0 && p.manji(niz[i])) { niz[i+1] = niz[i]; i--; }

niz[i+1] = p; n++;

return this;

}

public int poz (Predmet p) {

int i=0;

while (i<n && niz[i].manji(p)) i++;

return (i<n && p.jednak(niz[i])) ? i : -1;

}

public String toString () {

StringBuffer s = new StringBuffer ('[');

for (int i=0; i<n; i++)

s.append (niz[i])

.append ((i<n-1)?',':']');

return s.toString ();

}

}

// Kvadar.java

package predmeti;

public class Kvadar extends Predmet {

private double a, b, c;

public Kvadar (double aa, double bb, double cc)

{ a = aa; b = bb; c = cc; }

public double V () { return a * b * c; }

public boolean manji (Predmet k) { return V() < ((Kvadar)k).V(); }

public String toString ()

{ return "K" + super.toString() + '(' + a + ',' + b + ',' + c + ')'; }

}

// Test.java

import predmeti.*;

public class Test {

public static void main (String[] varg) {

System.out.print ("n? ");

int n = Citaj.Int ();

Niz niz = new Niz (n);

try {

for (int i=0; i<n; i++) {

System.out.print ("niz[" +i +"]? ");

niz.dodaj (new Kvadar(Citaj.Double(), Citaj.Double(),

Citaj.Double()));

}

System.out.println ("Uredjeni niz: " + niz);

System.out.print ("Trazi se? ");

Page 53: Programski jezik JAVA - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1258/vezbe JAVA.pdf · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih

Kvadar k = new Kvadar (Citaj.Double(), Citaj.Double(),

Citaj.Double());

int p = niz.poz (k);

if (p >=0) System.out.println("poz= " + p);

else System.out.println("Nema tog kvadra");

} catch (Exception g) {

System.out.println (g);

}

}

}