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 - Наставнички портал JAVA.pdf · 2013. 6. 7. · Programski jezik JAVA 1. Rad sa objektima klase StringBuffer, demonstracija nekih funkcionalnosti

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

  • 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

  • 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();

  • 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

  • 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");

  • 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 - "

    +

  • " 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

  • 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

  • 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;

    }

    }

  • 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;

    }

  • 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){

  • 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.

  • - 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 this.perm[i]))

    i--;

  • 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.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

  • /*

    * 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, испише кутију на

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

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

    // 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

  • 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 следећи пакет класа:

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

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

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

    (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;

    }

  • public double prihod () {

    double p = 0;

    for (int i=0; i

  • }

    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;

  • 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 (

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

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

    );

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

    for (double xx=xmin; xx

  • 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;

    }

  • 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)

    {

  • 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";

    }

  • double CPravougaonik::povrsina(void)

    {

    return (a*b);

    }

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

    #include

    #include "Krug.h"

    #include "Pravougaonik.h"

    #include

    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++)

  • {

    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;

  • /**

    *

    * @author Student

    */

    public class Robot {

    private VektorURavni pozicija;

    private VektorURavni smer;

    private int brzina;

    public Vector nizKomandi;

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

    Vector 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 getNizKomandi() {

    return nizKomandi;

    }

    public void setNizKomandi(Vector nizKomandi) {

    this.nizKomandi = nizKomandi;

    }

    public VektorURavni getPozicija() {

    return pozicija;

    }

    public void setPozicija(VektorURavni pozicija) {

    this.pozicija = pozicija;

    }

  • 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;

    }

    }

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

  • /*

    * 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();

  • }

    }

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

    /*

    * 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

  • 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;

    /**

    *

  • * @author Student

    */

    public class VozniPark {

    private int brojVozila;

    private Vector 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

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

    package voznipark;

    /**

    *

    * @author Student

    */

    public abstract class Vozilo implements Comparable {

    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;

  • 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;

  • }

    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 следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

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

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

  • Храна је намирница која се задаје тежином дате намернице израженом у грамима (реалан број) и процентуалним уделом беланчевина, масти и угљених хидрата (реални бројеви) у укупној тежини. Могу да се дохвате тежински удео беланчевина, масти и угљених хидрата и укупна тежина. Енергетска вредност 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!"; }

    }

  • // 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 {

  • 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

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

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

    Обрада садржи матрицу реалних бројева. Сваки елемент те матрице се замењује резултатом задате функције примењене на низ који се састоји од тог елемента и његових суседних елемената у матрици по хоризонтали и по вертикали (број сус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

  • return m;

    } catch (CloneNotSupportedException g) { return null; }

    }

    public String toString() {

    String s = "";

    for (int v=0; v

  • 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

  • 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; }

    }

    }

  • // 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

  • return p;

    }

    public String toString () {

    String s = "[";

    for (int i=0; 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;

  • 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 класу са главним програмом који преко главног

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

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

    носивости.

    // 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 +

  • "=" + 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

  • }

    }

    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 + ")"; }

    }

  • // 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; }

  • }

    // 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

  • 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); }

    }

  • // 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

  • 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);

    }

    }

    }