Ласло Краус |
ИР2ОО2 Други колоквијум 8. 7. 2005. |
---|
У пакету statistika
постоје класе за рад са случајним бројевима које су приказане на слици. Ове класе није потребно реализовати.
(55 поена) Реализовати на језику Java програм са графичком корисничком површи, према приложеној слици, којим може да се одређује одабрани статистички показатељ задатог броја случајних бројева генерисаних по одабраној расподели са задатим параметрима. Поруке о грешкама приказивати у ознаци за приказ резултата.
(15 поена) Обраду у претходном програму остварити унутар засебне нити. Дугме Radi треба да је онемогућено за време рада нити.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Која је функција методе start()
активног објекта и да ли се из програма позива методa run()
?
б) Како извор догађаја у језику Javа зна које ослушкиваче треба да позове да обраде догађај?
в) Која је принципијелна разлика између типова int
у језицима Javа и C#?
///////////////// Не припада решењу колоквијума /////////////////////// /// // GParam.java /// package statistika; /// public class GParam extends Exception { /// public String toString () { return "Neispravan parametar!"; } /// } /// /// // Slucajni.java /// package statistika; /// public interface Slucajni { /// double slBroj (); /// String toString (); /// } /// /// // Unif.java /// package statistika; /// public class Unif implements Slucajni { /// private double min, max; /// public Unif (double mi, double ma) throws GParam { /// if (mi > ma) throw new GParam (); /// min = mi; max = ma; /// } /// public double slBroj () /// { return min + Math.random () * (max - min); } /// public String toString () { return "Uniformna"; } /// } /// /// // Eksp.java /// package statistika; /// public class Eksp implements Slucajni { /// private double sr; /// public Eksp (double s) throws GParam { /// if (s <= 0) throw new GParam (); /// sr = s; /// } /// public double slBroj () /// { return - sr * Math.log (1 - Math.random ()); } /// public String toString(){ return "Eksponencijalna"; } /// } /// /// // Gaus.java /// package statistika; /// public class Gaus implements Slucajni { /// private double sr, dev; /// public Gaus (double s, double d) throws GParam { /// if (d <= 0) throw new GParam (); /// sr = s; dev = d; /// } /// public double slBroj () { /// double z = 0; /// for (int i=0; i<12; i++) z+=Math.random(); /// return sr + dev * (z - 6); /// } /// public String toString () { return "Gausova"; } /// } /// /// // Analizator.java /// package statistika; /// public interface Analizator { /// void dodaj (double slBr); /// double vrednost (); /// String toString (); /// } /// /// // Min.java /// package statistika; /// public class Min implements Analizator { /// double min; boolean prvi = true; /// public void dodaj (double slBr) { /// if (prvi) { min = slBr; prvi = false; } /// else if (slBr < min) min = slBr; /// } /// public double vrednost () { return min; } /// public String toString () { return "Minimum"; } /// } /// /// // SrVr.java /// package statistika; /// public class SrVr implements Analizator { /// double zbir; int n; /// public void dodaj (double slBr) { zbir += slBr; n++; } /// public double vrednost () { return n>0 ? zbir/n : 0; } /// public String toString () { return "Srednja vrednost"; } /// } /// /// ///////////////// Не припада решењу колоквијума /////////////////////// // Statistika.java import statistika.*; import java.awt.*; import java.awt.event.*; public class Statistika extends Frame { private Label rez = new Label ("???", Label.CENTER); private List rasp = new List (), analiz = new List (); private TextField brUzor = new TextField ("1000"), par1 = new TextField ("-5"), par2 = new TextField ("5"); private Button radi = new Button ("Radi"); private Statistika () { super ("Statistika"); setBounds (100, 100, 320, 150); setResizable (false); addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent d) { dispose (); } }); add (rez, "North"); try { rasp.add (new Unif(0,1).toString()); rasp.add (new Eksp(1).toString()); rasp.add (new Gaus(0,1).toString()); } catch (GParam g) {} rasp.select (0); rasp.addItemListener (new ItemListener () { public void itemStateChanged (ItemEvent d) { par2.setEnabled (rasp.getSelectedIndex() != 1); } }); add (rasp, "West"); analiz.add (new Min().toString()); analiz.add (new SrVr().toString()); analiz.select (1); add (analiz, "East"); Panel plo = new Panel (new GridLayout (3,1,4,4)); add (plo, "Center"); plo.add (brUzor); plo.add (par1); plo.add (par2); radi.addActionListener (new RadiAkcija ()); add (plo = new Panel(), "South"); plo.add (radi); } // konstruktor private void prikazi (double vr) { rez.setText (Double.toString(vr)); radi.setEnabled (true); } private class RadiAkcija implements ActionListener { public void actionPerformed (ActionEvent d) { try { Slucajni gen = null; switch (rasp.getSelectedIndex()) { case 0: gen = new Unif (Double.parseDouble (par1.getText()), Double.parseDouble (par2.getText())); break; case 1: gen = new Eksp (Double.parseDouble (par1.getText())); break; case 2: gen = new Gaus (Double.parseDouble (par1.getText()), Double.parseDouble (par2.getText())); break; } Analizator anl = null; switch (analiz.getSelectedIndex()) { case 0: anl = new Min (); break; case 1: anl = new SrVr (); break; } int n = Integer.parseInt (brUzor.getText()); if (n <= 0) throw new GParam (); radi.setEnabled (false); new Radnik (gen, anl, n).start (); } catch (GParam g) { rez.setText (g.toString()); } catch (NumberFormatException g) { rez.setText ("Neispravan broj!"); } } } // class RadiAkcija private class Radnik extends Thread { private Slucajni sluc; private Analizator analiz; private int n; public Radnik (Slucajni s, Analizator a, int k) { sluc = s; analiz = a; n = k; } public void run () { for (int i=0; i<n; i++) analiz.dodaj (sluc.slBroj()); prikazi (analiz.vrednost ()); } } // class Radnik public static void main (String[] varg) { new Statistika ().setVisible (true); } }(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.