Professional Documents
Culture Documents
/*
* Rad sa objektima klase StringBuffer, demonstriranje
* funkcionalnosti nekih funkcija za rad sa objektima
* ove klase.
*/
}
2. Brojimo pojavljivanjue reci the i and u zadatom tekstu
/*
* 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";
3. Skener
import java.util.Scanner;
package nizovi;
import java.util.Arrays;
Arrays.sort(a);
}
5. Učitavamo elemente niza i računamo aritmetičku sredinu.
import java.util.Scanner;
}
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;
if (nizBrojeva[brojEl] == 0)
break;
zbir += nizBrojeva[brojEl];
}
7. Poređenje stringova
/*
* 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);
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");
}
}
/*
* 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);
System.out.println("\nTest br 2");
System.out.println("string3 je: " + string3);
System.out.println("string1 je: " + string1);
package paket;
import java.util.Scanner;
/**
* @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();
}
}
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);
}
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;
}
}
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 {
this.predjeniPut = 0;
this.trenutnaBrzina = 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");
}
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.
/*
* 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;
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;
}
}
/*
* 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());
}
}
}
Домина садржи два целобројна поља (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; }
}
// 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;
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)
Радник у трговачкој фирми има име и као плату добија задати проценат од
вредности оствареног прихода. Може да се одреди вредност оствареног
прихода, да се израчуна висина плате и да се састави текстуални опис у облику
"име/плата".
Продавац је радник који може да продаје робу, а приликом сваке продаје води
се само рачуна о вредности продате робе. Приход чини укупна вредност
продате робе.
Шеф је радник коме може бити потчињен задати број других радника. Радници
се шефу додељују један по један са назнаком да ли је додељивање успело с
обзиром на предвиђени број потчињених. Приход на основу којег шеф добија
плату једнак је укупном приходу свих његових потчињених.
(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<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);
}
}
Marko/250.0
Zoran/320.0
Nenad/480.0
Dobit firme: 2850.0
// 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<=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.
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"
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);
};
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);
};
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;
} */
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)
{
}
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);
}
CPravougaonik::CPravougaonik(void)
{
}
CPravougaonik::CPravougaonik(int a, int b)
{
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);
}
int main()
{
int x, y;
scanf("%d%d", &x, &y);
//CFigura figBlank;
//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 = k;
printf("%s\n", f->tip());
printf("Povrsina figre je %lf\n", f->povrsina());
delete f;
int n;
CFigura* niz[10];
niz[0] = new CKrug(3);
niz[1] = new CPravougaonik(2, 5);
niz[2] = new CKrug();
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 {
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 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 {
public Komanda() {
this.trajanje = 1;
}
--------------------------------------------------------------------
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package robot;
/**
*
* @author Student
*/
public class Pravo extends Komanda {
@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{
@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 {
@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:
/*
* 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 {
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/******************* Vozilo.java **********************/
package voznipark;
/**
*
* @author Student
*/
public abstract class Vozilo implements Comparable<Vozilo> {
public Vozilo() {
setKapacitetRezervoara(0);
setPotrosnja(0);
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package voznipark;
/**
*
* @author Student
*/
public class Autobus extends Vozilo {
@Override
public String tip() {
return "Autobus";
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package voznipark;
/**
*
* @author Student
*/
public class Kamion extends Vozilo {
public Kamion() {
this.nosivost = 0;
}
@Override
public String tip() {
return "Kamion";
}
/*
* 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 следећи пакет типова (грешке пријављивати изузецима
опремљеним текстовима порука):
Написати на језику Java програм (класу с главном функцијом) који направи један мени
у који смести неколико намирница, а затим на главном излазу испише садржај
формираног менија. Сви параметри треба да буду константе (не треба ништа учитавати
// Energent.java
package ishrana;
// Namirnica.java
package ishrana;
// GPodaci.java
package ishrana;
package ishrana;
// Pice.java
package ishrana;
public Pice (String ime, double k, double e) { super (ime); kol = k; enVr
= e; }
// GPun.java
package ishrana;
// Meni.java
package ishrana;
// Test.java
import ishrana.*;
{Hleb[1](600.0,5898.54),Sok[2](0.2,3078.0),Sir[3](200.0,795.64)}[10402.18]
22. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима
опремљеним текстовима порука):
Матрица реалних бројева има задат број врста и колона који могу да се
дохвате. Може да се постави или да се дохвати елемент са задатим индексима
(грешка је ако је неки од индекса изван опсега, да се направи копија матрице и
да се састави текстуални опис матрице који у савком реду садржи једну врсту
елемената по формату "%6.2f".
Функција на основу низа реалних бројева може да врати једну реалну вредност
или да буде прекинута сигналом прекида.
Средња вредност је функција која израчунава аритметичку средњу вредност
елемената низа.
Обрада садржи матрицу реалних бројева. Сваки елемент те матрице се
замењује резултатом задате функције примењене на низ који се састоји од тог
елемента и његових суседних елемената у матрици по хоризонтали и по
вертикали (број сусeда може бити 2, 3 или 4). Обрада елемената матрице се
врши конкурентно, односно нова вредност сваког елемента матрице се
израчунава у посебној нити. Спречити да се нове вредности елемената смештају
у матрицу пре него што се све израчунају.
Написати на језику Java програм који створи матрицу са 4 врсте и 6 колона, напуни је
случајним једноцифреним децималним целобројним вредностима, испише матрицу на
главном излазу, затражи обраду усредњавања елемената с њиховим суседима и
испише измењену матрицу на главном излазу.
// GIndeks.java
package matrice;
// Matrica.java
package matrice;
public Matrica( int vrs, int kol) { matr = new double [vrs][kol]; }
// Funkcija.java
package matrice;
// SrVred.java
package matrice;
// Obrada.java
package matrice;
// Program.java
import matrice.*;
23. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима
опремљеним текстовима порука):
Написати на језику Java програм (класу с главном функцијом) који направи један пакет
састављен од два артикла и једног пакета са два артикла, направи камион, натовари га
са неколико истоветних примерака направљеног пакета и испише камион на главном
излазу рачунара. Користити константне параметре (не треба ништа учитавати).
// Vrednostan.java
package prevoz;
// Merljiv.java
package prevoz;
// Roba.java
package prevoz;
package prevoz;
// GPun.java
package prevoz;
// Paket.java
package prevoz;
// GTeret.java
package prevoz;
// Kamion.java
package prevoz;
Elem( Paket p) {
pak = p; sled = null;
if (prvi==null) prvi=this; else posl.sled=this;
posl = this;
}
}
// Program.java
import prevoz.*;
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 у безименом пакету која
садржи заједничке методе за читање свих стандардних типова
података.
package Vozila;
import Citaj;
double sTezina;
public Vozilo () {}
package Vozila;
import Citaj;
int brPutnika;
double srTezina;
public PVozilo () {}
package Vozila;
import Citaj;
double tezTereta;
public TVozilo () {}
import Vozila.*;
class VozilaT {
25. Написати на језику Java следећи пакет типова (грешке пријављивати изузецима
опремљеним текстовима порука):
(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи
многоугао, направи његову копију, помери копију за задати вектор помака, испише на
главном излазу оба многоугла са одговарајућим растојањима тежишта од
координатног почетка. Сви параметри треба да буду константе (не треба ништа
учитавати)
// Vektor.java
package figure;
package figure;
// Figura.java
package figure;
// Pokretan.java
package figure;
// Tacka.java
package figure;
// GGotov.java
package figure;
// Mnogougao.java
package figure;
public Mnogougao ( String ime, int brTem) { super( ime); tem = new Tacka
[brTem]; }
// Test.java
import figure.*;
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
Саставити на језику 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<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? ");
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);
}
}
}