Ласло Краус |
СИ2ОО2 Испит 6. 7. 2007. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња везана за језик Java:
а) Какво може бити право приступа типовима садржаним у пакету? Којим типовима имају право приступа типови из угнеждених пакета?
б) Шта означава модификатор final
за атрибут, методу, односно класу?
Написати на језику Java следећи пакет типова:
(
вредност)
, где се вредност обележава са T
или F
.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња везана за језик Java:
а) Како се прослеђују параметри конструктору наткласе дате анонимне класе?
б) Шта се догађа када се за нит у блокираном стању позове метод interrupt()
?
Коришћењем типова из првог дела, написати на језику Java следећи пакет типова:
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња везана за језик C#:
а) Која су основне разлике наредбе switch
у односу на исту у језику Јава?
б) Који све типови спадају у вредносне, а који у указане типове?
Коришћењем класа из првог и другог дела, написати на језику Java следећи пакет типова:
Label
кад год се затражи израчунавање вредности излаза. Име, врста и вредност графичког елемента се добија од садржаног елемента. Приказује се текстуални опис и врста садржаног елемента као и текстуални описи елемената који представљају улазе садржаног елемента.
Kreni
треба да је онемогућено.
// Elem.java package logika; public abstract class Elem { private char ime; protected Elem[] ulazi; public Elem (char iime, int brUl) { ime=iime; if (brUl != 0) ulazi = new Elem[brUl]; } public char ime () { return ime; } public abstract String vrsta (); public abstract boolean vrednost (); public String toString () { return ime + " (" + (vrednost()?"T":"F") + ")"; } } // Izvor.java package logika; public class Izvor extends Elem { private boolean vr; public Izvor (char ime) { super (ime, 0); } public void postavi (boolean v) { vr = v; } public boolean vrednost () { return vr; } public String vrsta () { return "izvor"; } } // Ne.java package logika; public class Ne extends Elem { public Ne (char ime, Elem a) { super (ime, 1); ulazi[0] = a; } public boolean vrednost () { return ! ulazi[0].vrednost (); } public String vrsta () { return "ne"; } } // I.java package logika; public class I extends Elem { public I (char ime, Elem a, Elem b) { super(ime,2); ulazi[0]=a; ulazi[1]=b; } public boolean vrednost () { return ulazi[0].vrednost() && ulazi[1].vrednost(); } public String vrsta () { return "i"; } }
// GIndeks.java package logika; public class GIndeks extends Exception { public String toString () { return "*** Indeks izvan opsega!"; } } // GPocetak.java package logika; public class GPocetak extends Exception { public String toString () { return "*** Nedoszoljena pocetna vrednost!"; } } // Brojac.java package logika; public class Brojac { private Izvor[] izlazi; private int ciklus, vrednost; public Brojac (int brIzl) { izlazi = new Izvor [brIzl]; ciklus = 1 << brIzl; } public Brojac povezi (int ind, Izvor izv) throws GIndeks { if (ind<0 || ind>=izlazi.length) throw new GIndeks (); izlazi[ind] = izv; return this; } private void postaviIzlaze () { int k = vrednost; for (int i=izlazi.length-1; i>=0; i--) { if (izlazi[i] != null) izlazi[i].postavi ((k&1)==1); k >>= 1; } } public Brojac postavi (int k) throws GPocetak { if (k<0 || k>=ciklus) throw new GPocetak (); vrednost = k; postaviIzlaze (); return this; } public Brojac povecaj () { vrednost = (vrednost == ciklus-1) ? 0 : vrednost+1; postaviIzlaze (); return this; } public Brojac smanji () { vrednost = (vrednost == 0) ? ciklus-1 : vrednost-1; postaviIzlaze (); return this; } } // Analizator.java package logika; public class Analizator extends Thread { private Brojac brojac; private Elem elem; private boolean radi = false; private int dt = 300; public Analizator (Brojac br, Elem el) { brojac = br; elem = el; start (); } public Analizator postaviDt (int d) { dt = d; return this; } public void run () { try { while (! interrupted ()) { if(!radi) synchronized(this) {wait();} sleep (dt); brojac.povecaj (); elem.vrednost (); } } catch (InterruptedException g) {} } public synchronized void kreni () { try { brojac.postavi (0); elem.vrednost (); radi = true; notify (); } catch (GPocetak g) {} } public synchronized void stani () { radi = false; } public void zavrsi () { interrupt (); } }
// GraElem.java package logika; import java.awt.Label; public class GraElem extends Elem { private Elem elem; private Label natpis; private void prikazi () { if (natpis != null) { String s = elem + " [ " + vrsta(); if (elem.ulazi != null) { s += " : "; for (int i=0; i<elem.ulazi.length; i++) { if (i>0) s += ", "; s += elem.ulazi[i]; } } natpis.setText (s + " ]"); } } public GraElem (Elem el, Label ntp) { super (el.ime(), 0); elem = el; natpis = ntp; prikazi (); } public boolean vrednost () { boolean vr = elem.vrednost (); prikazi (); return vr; } public String vrsta () { return elem.vrsta (); } public String toString () { return elem.toString (); } } // Program.java package logika; import java.awt.*; import java.awt.event.*; public class Program extends Frame { private Label[] natpisi; private Analizator analiz; private Button dgmKreni=new Button("Kreni"), dgmStani=new Button("Stani"); private void napraviMrezu () { Brojac bro = new Brojac (3); Izvor p = new Izvor ('a'); Izvor q = new Izvor ('b'); Izvor r = new Izvor ('c'); try { bro.povezi(0,p).povezi(1,q).povezi(2,r); } catch (GIndeks g) {} natpisi = new Label [6]; for (int i=0; i<natpisi.length; natpisi[i++]=new Label()); Elem a = new GraElem (p, natpisi[0]); Elem b = new GraElem (q, natpisi[1]); Elem c = new GraElem (r, natpisi[2]); Elem d = new GraElem (new I ('d',a,b), natpisi[3]); Elem e = new GraElem (new Ne('e',c), natpisi[4]); Elem f = new GraElem (new I ('f',d,e), natpisi[5]); analiz = new Analizator (bro, f); } private void omoguci (boolean da) { dgmKreni.setEnabled (da); dgmStani.setEnabled (! da); dgmKorak.setEnabled (da); } private void popuniProzor () { Panel plo = new Panel (new GridLayout (0,1)); add (plo, "Center"); for (int i=0; i<natpisi.length; plo.add(natpisi[i++])); add (plo = new Panel (), "South"); plo.add (new Label ("dt", Label.CENTER)); final TextField tksDt = new TextField ("300", 4); plo.add (tksDt); tksDt.addTextListener (new TextListener(){ public void textValueChanged (TextEvent d) { try { analiz.postaviDt (Integer.parseInt(tksDt.getText())); } catch (NumberFormatException g) {} } }); plo.add (dgmKreni); dgmKreni.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { omoguci (false); analiz.kreni (); } }); plo.add (dgmStani); dgmStani.setEnabled (false); dgmStani.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d){ omoguci (true); analiz.stani (); } }); } public Program () { super ("Kombinaciona mreza"); setSize (240, 170); napraviMrezu (); popuniProzor(); setVisible (true); addWindowListener (new WindowAdapter () { public void windowClosing(WindowEvent d){ analiz.zavrsi (); dispose (); } }); } public static void main (String[] varg) { new Program (); } }(⇒ почетак)
Copyright © 2007, Laslo Kraus
Последња ревизија: 7.9.2007.