![]() Ласло Краус |
Објектно програмирање 2 - колоквијуми Други колоквијум 19. 1. 2014 |
---|
Написати на језику Java следећи пакет типовa:
Math.random()
, min – најмања вредност, max – највећа вредност, sr – средња вредност, а dev – стандардна девијација генерисаних бројева.
Canvas
. Сваких 5 ms генерише по један псеудослучајан број по некој расподели (подразумевано униформној), броји колико бројева припада појединим од задатог броја (подразумевано n=50) подинтервала унутар опсега између задате најмање (подразумевано xmin=0) и највеће (подразумевано xmax) вредности. Сви параметри расподеле (генератор, n, xmin и xmax) могу да се промене одједном и промене имају тренутно дејство. После сваког изгенерисаног броја исцртава хистограм расподеле (низ попуњених правоугаоника који по ширини попуњавају сав расположив простор а чије висине су пропорционалне броју узорака у поједним подинтервалима; висина највишег правоугаоника увек се поклапа са висином приказне површи). Целобројне координате (a,b) у пикселима за задате реалне координате (x,y) израчунавају се формулама a=(sir−1)(x−xmin)/(xmax−xmin) и b=(vis−1)(ymax−y)/(ymax−ymin), где су sir и vis – ширина и висина компоненте у целобројним пикселима. Нит расподеле може да се покрене, заустви и да се прекине.
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.I:
// Gener.java package slucajni; public interface Gener { double slBroj(); } // Unif.java package slucajni; public class Unif implements Gener { private double min, max; public Unif(double mn, double mx) { min = mn; max = mx; } public Unif() { this(0, 1); } public double slBroj() { return min + (max-min) * Math.random(); } } // Eksp.java package slucajni; public class Eksp implements Gener { private double sr; public Eksp(double s) { sr = s; } public Eksp() { this(1); } public double slBroj() { return -sr * Math.log(1 - Math.random()); } } // Gaus.java package slucajni; public class Gaus implements Gener { private double sr, dev; public Gaus(double s, double d) { sr = s; dev = d; } public Gaus() { this(0, 1); } public double slBroj() { double s = 0; for (int i=0; i<12; i++) s += Math.random(); return (s - 6) * dev + sr; } } // Raspodela.java package slucajni; import java.awt.*; public class Raspodela extends Canvas implements Runnable{ private volatile int n = 50; private double min = 0, max = 1, dx=(max-min)/n; private double[] niz = new double [n]; private Gener gen = new Unif(); Thread nit = new Thread(this); private boolean radi = false; public Raspodela() { nit.start(); } public void postavi(Gener g, double mn, double mx, int nn) { gen = g; dx = ((max=mx) - (min=mn)) / (n = nn); niz = new double [n]; } public void run() { try { while (!Thread.interrupted()) { synchronized (this) { while (!radi) wait(); } int i = (int)((gen.slBroj()-min)/dx); if (i>=0 && i<n) niz[i]++; repaint(); Thread.sleep(5); } } catch (InterruptedException g) {} } public synchronized void kreni() { radi = true; notifyAll(); for (int i=0; i<n; niz[i++]=0); } public synchronized void stani() { radi = false; } public void zavrsi() { nit.interrupt(); } public void paint(Graphics g) { int sir = getWidth(), vis = getHeight(); double dx = (double)sir / n; int idx = (int)dx; double ymax = 0; for (double y: niz) { if (y > ymax) ymax = y; } for (int i=0; i<n; i++) { int idy = (int)(vis * niz[i] / ymax); g.fillRect((int)(i*dx), vis-1-idy, idx, idy); } } } // Program.java package slucajni; import java.awt.*; import java.awt.event.*; public class Program extends Frame { private Raspodela rasp = new Raspodela(); private Checkbox rdgU, rdgE, rdgG; private TextField tksA = new TextField("0", 3), tksB = new TextField("1", 3), tksMin = new TextField("0", 3), tksMax = new TextField("1", 3), tksN = new TextField("50", 3); private Button dgmKreni = new Button("Kreni"), dgmStani = new Button("Stani"); private void popuniProzor() { add(rasp, "Center"); Panel plo = new Panel(new GridLayout(0, 1)); plo.setBackground(Color.LIGHT_GRAY); add(plo, "West"); CheckboxGroup grupa = new CheckboxGroup(); rdgU = new Checkbox("Unif", grupa, true); rdgE = new Checkbox("Eksp", grupa, false); rdgG = new Checkbox("Gaus", grupa, false); plo.add(rdgU); plo.add(rdgE); plo.add(rdgG); plo.add(new Label("min/sr:")); plo.add(tksA); plo.add(new Label("max/dev:")); plo.add(tksB); add(plo = new Panel(), "South"); plo.setBackground(Color.LIGHT_GRAY); plo.add(new Label("x:", Label.RIGHT)); plo.add(tksMin); plo.add(tksMax); plo.add(new Label("n:", Label.RIGHT)); plo.add(tksN); plo.add(dgmKreni); plo.add(dgmStani); dgmKreni.addActionListener(new kreniAkcija()); dgmStani.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d) { rasp.stani(); } }); } private class kreniAkcija implements ActionListener { public void actionPerformed(ActionEvent d) { double a = Double.parseDouble(tksA.getText()), b = Double.parseDouble(tksB.getText()); Gener gen = null; if (rdgU.getState()) gen = new Unif(a, b); if (rdgE.getState()) gen = new Eksp(a); if (rdgG.getState()) gen = new Gaus(a, b); rasp.postavi(gen, Double.parseDouble(tksMin.getText()), Double.parseDouble(tksMax.getText()), Integer.parseInt(tksN.getText())); rasp.kreni(); } } private Program() { super("Raspodele"); setSize(350, 200); popuniProzor(); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent d) { rasp.zavrsi(); dispose(); } }); } public static void main(String[] varg) { new Program(); } }(садржај)
Copyright © 2014, Laslo Kraus
Последња ревизија: 19.1.2014.