Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package MSLab3;
- import javax.swing.*;
- import javax.swing.table.DefaultTableCellRenderer;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Random;
- public class MSLab3 extends JFrame {
- JTextField takty;
- JTextField Z0,Z1,Z2,Z3,Z4,Z5;
- JTextField lZ0,lZ1,lZ2,lZ3,lZ4,lZ5;
- JTable tableP;
- int SIZE = 6;
- public Double P[][] = new Double[SIZE][SIZE];
- Double B[][] = new Double[SIZE][SIZE];
- Double output[] = new Double[SIZE];
- Double stan[] = new Double[SIZE];
- public MSLab3() {
- super("Імітаційне моделювання процесу функціонування скінченного дискретного стохастичного автомата");
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- setInterface();
- setVisible(true);
- setSize(500, 420);
- setLocationRelativeTo(null);
- }
- public void setInterface() {
- JLabel l1, l3, l5;
- l1 = new JLabel("Матриця Р:");
- l3 = new JLabel("Таблиця виходів:");
- l5 = new JLabel("Кількість тактів:");
- takty = new JTextField(6);
- Box full = Box.createHorizontalBox();
- full.add(Box.createHorizontalStrut(50));
- Box box = Box.createVerticalBox();
- box.add(Box.createVerticalStrut(20));
- box.add(l1);
- box.add(Box.createVerticalStrut(5));
- box.add(createTableP());
- box.add(Box.createVerticalStrut(50));
- box.add(l3);
- box.add(Box.createVerticalStrut(5));
- JPanel outl = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0));
- setZL();
- outl.add(lZ0); outl.add(lZ1);outl.add(lZ2);outl.add(lZ3);outl.add(lZ4);outl.add(lZ5);
- JPanel out = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0));
- initialiseZ();
- out.add(Z0); out.add(Z1);out.add(Z2);out.add(Z3);out.add(Z4);out.add(Z5);
- box.add(outl);
- box.add(out);
- box.add(Box.createVerticalStrut(20));
- JPanel count = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));
- count.add(l5); count.add(takty);
- box.add(count);
- JPanel buttons = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));
- JButton go = new JButton("Порахувати");
- go.setSize(120,30);
- go.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- calculate();
- }
- });
- JButton fill = new JButton("Заповнити");
- fill.setSize(120,30);
- fill.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- for (int i = 0; i < SIZE; i++){
- for(int j = 0; j < SIZE; j++){
- tableP.setValueAt(0, 0, 0); tableP.setValueAt(0.3, 0, 1); tableP.setValueAt(0.2, 0, 2); tableP.setValueAt(0.5, 0, 3);
- tableP.setValueAt(0, 0, 4); tableP.setValueAt(0, 0, 5);
- tableP.setValueAt(0, 1, 0); tableP.setValueAt(0.5, 1, 1); tableP.setValueAt(0.2, 1, 2); tableP.setValueAt(0.3, 1, 3);
- tableP.setValueAt(0, 1, 4); tableP.setValueAt(0, 1, 5);
- tableP.setValueAt(0, 2, 0); tableP.setValueAt(0, 2, 1); tableP.setValueAt(0, 2, 2); tableP.setValueAt(0, 2, 3);
- tableP.setValueAt(0.5, 2, 4); tableP.setValueAt(0.5, 2, 5);
- tableP.setValueAt(0, 3, 0); tableP.setValueAt(0.1, 3, 1); tableP.setValueAt(0.1, 3, 2); tableP.setValueAt(0.3, 3, 3);
- tableP.setValueAt(0.5, 3, 4); tableP.setValueAt(0, 3, 5);
- tableP.setValueAt(0, 4, 0); tableP.setValueAt(0, 4, 1); tableP.setValueAt(0, 4, 2); tableP.setValueAt(0.2, 4, 3);
- tableP.setValueAt(0, 4, 4); tableP.setValueAt(0.8, 4, 5);
- tableP.setValueAt(0, 5, 0); tableP.setValueAt(0, 5, 1); tableP.setValueAt(0, 5, 2); tableP.setValueAt(0, 5, 3);
- tableP.setValueAt(1, 5, 4); tableP.setValueAt(0, 5, 5);
- Z0.setText("0"); Z1.setText("1");Z2.setText("1");Z3.setText("1");Z4.setText("0");Z5.setText("0");
- takty.setText("10000");
- }
- }
- }
- });
- JButton exit = new JButton("Вихід");
- exit.setSize(120, 30);
- exit.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- System.exit(0);
- }
- });
- buttons.add(go);
- buttons.add(fill);
- buttons.add(exit);
- box.add(buttons);
- full.add(box);
- full.add(Box.createHorizontalStrut(50));
- setContentPane(full);
- }
- private void calculate() {
- for (int i = 0; i < SIZE; i++){
- for(int j = 0; j < SIZE; j++){
- P[i][j] = Double.valueOf(tableP.getValueAt(i, j).toString());
- }
- }
- for (int i = 0; i < SIZE; i++){
- for(int j = 0; j < SIZE; j++){
- System.out.print(P[i][j] + " ");
- }
- System.out.println();
- }
- double random;
- double currentSUM = 0.0;
- int pos = 1; // current row position
- int TAKTY = Integer.valueOf(takty.getText());
- for(int i = 0; i < SIZE; i++)
- for (int j = 0; j < SIZE; j++)
- B[i][j] = 0.0;
- for (int t = 0; t < TAKTY; t++)
- {
- random = new Random().nextDouble();
- System.out.println("random is: "+ random + " ");
- for (int j = 1; j < SIZE; j++)
- {
- currentSUM += P[pos][j];
- if (currentSUM > random ) // higher sum is found, then
- {
- System.out.println("currentSUM = " + currentSUM + " > random = "+ random+" ");
- B[pos][j] += 1; //mark appropriate Bmatrix cell and
- pos = j; // jump to the position of j column
- currentSUM = 0.0; // make sum zero and repeat until TAKTY
- break;
- }
- if (random == currentSUM) // sum equals the generated num
- {
- System.out.println("currentSUM = " + currentSUM + " == random = "+ random+" ");
- B[pos - 1][j] += 1; // mark Bmatrix cell in previous row but still in the same column
- pos = j; // jumo to the postion of j column
- currentSUM = 0.0; // make sum zero and repeat until TAKTY
- break;
- }
- }
- }
- for(int i = 0; i < SIZE; i++)
- stan[i] = 0.0;
- //some shit with stany
- for(int i = 0; i < SIZE; i++)
- for(int j = 0; j < SIZE; j++) {
- stan[i] += B[j][i];
- }
- for (int i = 0; i < SIZE; i++)
- stan[i] = stan[i] / TAKTY;
- double stateCURR = 0.0;
- output[0] = Double.valueOf(Z0.getText());
- output[1] = Double.valueOf(Z1.getText());
- output[2] = Double.valueOf(Z2.getText());
- output[3] = Double.valueOf(Z3.getText());
- output[4] = Double.valueOf(Z4.getText());
- output[5] = Double.valueOf(Z5.getText());
- for (int i = 0; i < SIZE; i++)
- if (output[i] == 1.0)
- stateCURR += stan[i];
- new MyResult(this, B, stateCURR, stan);
- }
- private void initialiseZ() {
- int size = 3;
- Z0 = new JTextField(size);
- Z1 = new JTextField(size);
- Z2 = new JTextField(size);
- Z3 = new JTextField(size);
- Z4 = new JTextField(size);
- Z5 = new JTextField(size);
- }
- private void setZL() {
- int size = 3;
- lZ0 = new JTextField(size);
- lZ1 = new JTextField(size);
- lZ2 = new JTextField(size);
- lZ3 = new JTextField(size);
- lZ4 = new JTextField(size);
- lZ5 = new JTextField(size);
- lZ0.setText("Z0");
- lZ0.setEditable(false);
- lZ1.setText("Z1");
- lZ1.setEditable(false);
- lZ2.setText("Z2");
- lZ2.setEditable(false);
- lZ3.setText("Z3");
- lZ3.setEditable(false);
- lZ4.setText("Z4");
- lZ4.setEditable(false);
- lZ5.setText("Z5");
- lZ5.setEditable(false);
- }
- private JScrollPane createTableP() {
- String[] columnNames = {
- "Z0", "Z1","Z2","Z3","Z4","Z5"
- };
- tableP = new JTable(P, columnNames);
- tableP.setModel(new javax.swing.table.DefaultTableModel(P, columnNames));
- tableP.setDefaultRenderer(tableP.getColumnClass(1), new DefaultTableCellRenderer() {
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- super.setHorizontalAlignment(SwingConstants.CENTER);
- super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
- return this;
- }
- });
- tableP.getModel().addTableModelListener(tableP);
- JScrollPane scrollPane = new JScrollPane(tableP, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- scrollPane.setSize(20,30);
- return scrollPane;
- }
- public static void main(String[] args) {
- new MSLab3();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement