martaczaska

Licz_22_11

Nov 23rd, 2020
727
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package eti.radio.pr_inz;
  2.  
  3. import javax.imageio.ImageIO;
  4. import javax.swing.*;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.event.MouseListener;
  7. import java.awt.geom.*;
  8. import java.lang.Math;
  9. import java.awt.*;
  10. import java.awt.event.ActionEvent;
  11. import java.awt.event.ActionListener;
  12. import java.awt.image.BufferedImage;
  13. import java.io.File;
  14. import java.io.IOException;
  15.  
  16. public class Licz extends JPanel implements ActionListener, MouseListener {
  17.  
  18.     private JButton wykresy;
  19.     private JButton wyjscie;
  20.     private JLabel tytul6, l_BS0, l_BS1, l_BS2, l_BS3, l_BS4, l_BS5, l_BS6, l_UT;
  21.     public double xp = 0, yp = 85; //xp = 470, yp = 315;
  22.     public Integer[] x = {0, -170, -170, 0, 170, 170, 0};
  23.     public Integer[] y = {0, -80, 77, 170, 77, -80, -170};
  24.     public BufferedImage tlo_dane;
  25.     private int UT_x, UT_y;
  26.     String str_UT = "";
  27.  
  28.     int nw = 0, s = 1;
  29.     double f_c = 2.6; // [GHz] *Math.pow(10, 9);
  30.     double d_2D = 100; //m
  31.  
  32.     int d_2D_IN = 1;
  33.     int h_BS = 25, h_UT = 1;  ///zrobić jako Slidery
  34.     int h_E = 1; // 1m
  35.     int h = 5; //w metrach, do RMa
  36.     int W = 20; //w metrach, do RMa
  37.  
  38.     double sigma_LOS, sigma_NLOS;
  39.     double PL_LOS, PL_NLOS, PL_NLOS2, PL_LOS_O2I, PL_NLOS_O2I;
  40.     double d_BP, d2_BP;
  41.     double d_3D = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d_2D, 2) );
  42.     public Double[] p = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
  43.     public Double[] d2D = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
  44.     public Double[] d = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
  45.     public Double[] radius = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  46.     public Double[] SNR = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  47.     public Double[] SNR_WAT = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  48.     public double I_suma = 0;
  49.     //double SINR = 1, SINR_dB = 1, N = -174;
  50.     //Double[] SINR = new Double[170];
  51.     //Double[] SINR_dB = new Double[170];
  52.     double N = -174;
  53.     double N_W = Math.pow(10, (N/10 - 3));
  54.  
  55.     Wykresy rysuj_wykresy;
  56.  
  57.     public Licz(Wykresy rysuj_wykresy){
  58.         setLayout(null);
  59.         this.rysuj_wykresy = rysuj_wykresy;
  60.  
  61.         File zdj_menu = new File("zdjecia/strona_logo.png");
  62.         try{ tlo_dane = ImageIO.read(zdj_menu); }
  63.         catch(IOException e){ System.err.println("Blad odczytu obrazków"); }
  64.  
  65.         wyjscie = new JButton("Wyjście");
  66.         wyjscie.addActionListener(this);
  67.         wyjscie.setBounds(100, 620, 200, 60);
  68.         wyjscie.setFont(new Font("Sitka Text", Font.BOLD, 25));
  69.         wyjscie.setBackground(Color.white);
  70.  
  71.         wykresy = new JButton("Wykresy");
  72.         wykresy.addActionListener(this);
  73.         wykresy.setBounds(724, 620, 200, 60);
  74.         wykresy.setFont(new Font("Sitka Text", Font.BOLD, 25));
  75.         wykresy.setBackground(Color.white);
  76.  
  77.         System.out.println("Wybrany model: " + s);
  78.         System.out.println("Wybrany scenariusz O2I: " + nw);
  79.  
  80.         tytul6 = new JLabel( "Wskaż położenie terminala użytkownika w komórce zerowej", JLabel.CENTER);
  81.         tytul6.setSize(1000, 100);
  82.         tytul6.setLocation(5, 50);
  83.         tytul6.setFont(new Font("Sitka Text", Font.BOLD, 23));
  84.  
  85.         l_BS0 = new JLabel( "BS0", JLabel.CENTER);
  86.         l_BS0.setFont(new Font("Sitka Text", Font.BOLD, 23));
  87.         l_BS1 = new JLabel( "BS1", JLabel.CENTER);
  88.         l_BS1.setFont(new Font("Sitka Text", Font.BOLD, 23));
  89.         l_BS2 = new JLabel( "BS2", JLabel.CENTER);
  90.         l_BS2.setFont(new Font("Sitka Text", Font.BOLD, 23));
  91.         l_BS3 = new JLabel( "BS3", JLabel.CENTER);
  92.         l_BS3.setFont(new Font("Sitka Text", Font.BOLD, 23));
  93.         l_BS4 = new JLabel( "BS4", JLabel.CENTER);
  94.         l_BS4.setFont(new Font("Sitka Text", Font.BOLD, 23));
  95.         l_BS5 = new JLabel( "BS5", JLabel.CENTER);
  96.         l_BS5.setFont(new Font("Sitka Text", Font.BOLD, 23));
  97.         l_BS6 = new JLabel( "BS6", JLabel.CENTER);
  98.         l_BS6.setFont(new Font("Sitka Text", Font.BOLD, 23));
  99.         l_UT = new JLabel( "UT", JLabel.CENTER);
  100.         l_UT.setFont(new Font("Sitka Text", Font.BOLD,23));
  101.         l_UT.setForeground(Color.RED);
  102.  
  103.         if(s == 1){ //model Indoor Hotspot - InH
  104.             PL_LOS = 32.4 + 17.3*Math.log10(d_3D) + 20*Math.log10(f_c);     //- path loss for LOS
  105.             PL_NLOS2 = 38.3*Math.log10(d_3D) + 17.3 + 24.9*Math.log10(f_c);
  106.             PL_NLOS = Math.max(PL_LOS, PL_NLOS2);                           //- path loss for NLOS
  107.             sigma_LOS = 3; //dB
  108.             sigma_NLOS = 8.03; //dB
  109.             //wylicz_zasięg(PL_LOS, 1000);
  110.         }
  111.         else if(s == 2 || s == 3){ //model Urban Macro- UMa
  112.             if( d_2D >= 10 && d_2D <= d_BP){
  113.                 PL_LOS = 28 + 22*Math.log10(d_3D) + 20*Math.log10(f_c);
  114.                 PL_NLOS2 = 13.54 + 39.08*Math.log10(d_3D) + 20*Math.log10(f_c) -6*(h_UT-1.5);
  115.                 PL_NLOS = Math.max(PL_LOS, PL_NLOS2);
  116.             }
  117.             else if(d_2D >= d_BP && d_2D <= 5000){
  118.                 PL_LOS = 28 + 40*Math.log10(d_3D) + 20*Math.log10(f_c) -9*(Math.pow(d_BP,2) + Math.pow((h_BS + h_UT),2));
  119.                 PL_NLOS2 = 13.54 + 39.08*Math.log10(d_3D) + 20*Math.log10(f_c) -6*(h_UT-1.5);
  120.                 PL_NLOS = Math.max(PL_LOS, PL_NLOS2);
  121.             }
  122.             sigma_LOS = 4; //dB
  123.             sigma_NLOS = 6; //dB
  124.  
  125.             if(s == 3) {
  126.                 PL_LOS = PL_O2I(nw, PL_LOS);
  127.                 PL_NLOS = PL_O2I(nw, PL_NLOS);
  128.                 /*PL_LOS_O2I = PL_O2I(nw, PL_LOS);
  129.                 PL_NLOS_O2I = PL_O2I(nw, PL_NLOS);*/
  130.             }
  131.         }
  132.         else if(s == 4 || s == 5){ //model Urban Micro- UMi
  133.             if( d_2D >= 10 && d_2D <= d_BP){
  134.                 PL_LOS = 32.4 + 21*Math.log10(d_3D) + 20*Math.log10(f_c);
  135.                 PL_NLOS2 = 22.4 + 35.3*Math.log10(d_3D) + 21.3*Math.log10(f_c) -0.3*(h_UT-1.5);
  136.                 PL_NLOS = Math.max(PL_LOS, PL_NLOS2);
  137.             }
  138.             else if(d_2D >= d_BP && d_2D <= 5000){
  139.                 PL_LOS = 32.4 + 40*Math.log10(d_3D) + 20*Math.log10(f_c) -9.5*(Math.pow(d_BP,2) + Math.pow((h_BS + h_UT),2));
  140.                 PL_NLOS2 = 22.4 + 35.3*Math.log10(d_3D) + 21.3*Math.log10(f_c) -0.3*(h_UT-1.5);
  141.                 PL_NLOS = Math.max(PL_LOS, PL_NLOS2);
  142.             }
  143.             sigma_LOS = 4; //dB
  144.             sigma_NLOS = 7.82; //dB
  145.  
  146.             if(s == 5) {
  147.                 PL_LOS = PL_O2I(nw, PL_LOS);
  148.                 PL_NLOS = PL_O2I(nw, PL_NLOS);
  149.                 /*PL_LOS_O2I = PL_O2I(nw, PL_LOS);
  150.                 PL_NLOS_O2I = PL_O2I(nw, PL_NLOS);*/
  151.             }
  152.         }
  153.  
  154.         else if(s == 6 || s == 7){ //model Rural Macro- RMa
  155.             if( d_2D >= 10 && d_2D <= d2_BP){
  156.                 PL_LOS = 2*Math.log10((40*Math.PI*d_3D*f_c)/3) + Math.min(Math.pow(0.03*h, 1.72), 10)*Math.log10(d_3D) - Math.min(Math.pow(0.044*h, 1.72), 14.77) + 0.002*Math.log10(h)*d_3D;
  157.                 PL_NLOS2 = 161.04-7.1*Math.log10(W)+7.5*Math.log10(h)-(24.37-3.7*Math.pow(h/h_BS,2)*Math.log10(h_BS) +(43.42-3.1*Math.log10(h_BS))*(Math.log10(d_3D)-3) + 20*Math.log10(f_c)- (3.2*(Math.log10(11.75*h_UT)-4.97)));
  158.                 PL_NLOS = Math.max(PL_LOS, PL_NLOS2);
  159.                 sigma_LOS = 4; //dB
  160.             }
  161.             else if(d_2D >= d2_BP && d_2D <= 21000) {
  162.                 PL_LOS = 2*Math.log10((40*Math.PI*d2_BP*f_c)/3) + Math.min(Math.pow(0.03*h, 1.72), 10)*Math.log10(d2_BP) - Math.min(Math.pow(0.044*h, 1.72), 14.77) + 0.002*Math.log10(h)*d2_BP +40*Math.log10(d_3D/d2_BP);
  163.                 PL_NLOS2 = 161.04-7.1*Math.log10(W)+7.5*Math.log10(h)-(24.37-3.7*Math.pow(h/h_BS,2)*Math.log10(h_BS) +(43.42-3.1*Math.log10(h_BS))*(Math.log10(d_3D)-3) + 20*Math.log10(f_c)- (3.2*(Math.log10(11.75*h_UT)-4.97)));
  164.                 PL_NLOS = Math.max(PL_LOS, PL_NLOS2);
  165.                 sigma_LOS = 6; //dB
  166.             }
  167.             sigma_NLOS = 8; //dB
  168.  
  169.             if(s == 7) {
  170.                 PL_LOS= PL_O2I(nw, PL_LOS);
  171.                 PL_NLOS = PL_O2I(nw, PL_NLOS);
  172.                 /*PL_LOS_O2I = PL_O2I(nw, PL_LOS);
  173.                 PL_NLOS_O2I = PL_O2I(nw, PL_NLOS);*/
  174.                 System.out.println("Udało się, yaaaaaaaaaaaaaaaaaaaaaaaaay!");
  175.             }
  176.         }
  177.  
  178.         add(tytul6); add(l_BS0); add(l_BS1); add(l_BS2); add(l_BS3); add(l_BS4); add(l_BS5); add(l_BS6); add(l_UT); add(wyjscie); add(wykresy);
  179.         addMouseListener(this);
  180.     }
  181.  
  182.     public double PL_O2I(int n, double pl){
  183.         double L_szklo = 2 + 0.2*f_c; //dB
  184.         double L_beton = 5 + 4*f_c; //dB
  185.         double PL_przeniki = 0;
  186.         double PL_tw, PL_in, sigma_P;
  187.         double N = 5;  // !!!!!!!!!!!!!!!!!!! ZMIENIĆ
  188.         PL_in = 0.5*d_2D_IN;
  189.  
  190.         if(n == 0){ //nisko stratny model
  191.             PL_tw = 5 - Math.log10(0.3*Math.pow(10, (-L_szklo/10)) + 0.7*Math.pow(10, (-L_beton/10)));
  192.             sigma_P = 4.4; //dB
  193.             PL_przeniki = pl + PL_tw + PL_in; // + N;
  194.         }
  195.         else if(n == 1){ ////wysoko stratny model
  196.             PL_tw = 5 - Math.log10(0.7*Math.pow(10, (-L_szklo/10)) + 0.3*Math.pow(10, (-L_beton/10)));
  197.             sigma_P = 4.4; //dB
  198.             PL_przeniki = pl + PL_tw + PL_in; // + N;
  199.         }
  200.         return PL_przeniki;   //WYWALA BŁĄD, CZEMU?
  201.     }
  202.  
  203.  
  204.     public void actionPerformed(ActionEvent e){
  205.         Object source = e.getSource();
  206.         if(source == wykresy){
  207.             CardLayout CL =(CardLayout)(Main.noweOkno.karty.getLayout());
  208.             CL.show(Main.noweOkno.karty, "rysuj_wykresy");
  209.         }
  210.         else if(source == wyjscie){
  211.             System.exit(0);
  212.         }
  213.     }
  214.  
  215.     public void mouseClicked(MouseEvent e) {}
  216.  
  217.     public void mousePressed(MouseEvent e) {
  218.         UT_x = e.getX();
  219.         UT_y = e.getY();
  220.         str_UT = "UT";
  221.         System.out.println("Nacisnięty punkt: x = " + UT_x + " y = " + UT_y);
  222.         repaint();
  223.     }
  224.  
  225.     public void mouseReleased(MouseEvent e) {}
  226.     public void mouseEntered(MouseEvent e) {}
  227.     public void mouseExited(MouseEvent e) {}
  228.  
  229.     public void paintComponent(Graphics graphic) {
  230.         int R = Math.round(Math.abs(3)*125);
  231.         Graphics2D g2d = (Graphics2D) graphic;
  232.         g2d.drawImage(tlo_dane, 0, 0, this);
  233.  
  234.         Ellipse2D circle0 = new Ellipse2D.Double(370, 300, 200, 200);
  235.         Rectangle2D BS0 = new Rectangle2D.Double((int)circle0.getCenterX(), (int)circle0.getCenterY(), 5, 5);
  236.         l_BS0.setBounds((int)BS0.getX()-15, (int)BS0.getY()-15, 100, 50);
  237.  
  238.  
  239.         Ellipse2D circle1 = new Ellipse2D.Double(200, 380, 200, 200);
  240.         Rectangle2D BS1 = new Rectangle2D.Double((int)circle1.getCenterX(), (int)circle1.getCenterY(), 5, 5);
  241.         l_BS1.setBounds((int)BS1.getX()-15, (int)BS1.getY()-15, 100, 50);
  242.  
  243.         Ellipse2D circle2 = new Ellipse2D.Double(200, 213, 200, 200);
  244.         Rectangle2D BS2 = new Rectangle2D.Double((int)circle2.getCenterX(), (int)circle2.getCenterY(), 5, 5);
  245.         l_BS2.setBounds((int)BS2.getX()-15, (int)BS2.getY()-15, 100, 50);
  246.  
  247.         Ellipse2D circle3 = new Ellipse2D.Double(370, 130, 200, 200);
  248.         Rectangle2D BS3 = new Rectangle2D.Double((int)circle3.getCenterX(), (int)circle3.getCenterY(), 5, 5);
  249.         l_BS3.setBounds((int)BS3.getX()-15, (int)BS3.getY()-15, 100, 50);
  250.  
  251.         Ellipse2D circle4 = new Ellipse2D.Double(540, 213, 200, 200);
  252.         Rectangle2D BS4 = new Rectangle2D.Double((int)circle4.getCenterX(), (int)circle4.getCenterY(), 5, 5);
  253.         l_BS4.setBounds((int)BS4.getX()-15, (int)BS4.getY()-15, 100, 50);
  254.  
  255.         Ellipse2D circle5 = new Ellipse2D.Double(540, 380, 200, 200);
  256.         Rectangle2D BS5 = new Rectangle2D.Double((int)circle5.getCenterX(), (int)circle5.getCenterY(), 5, 5);
  257.         l_BS5.setBounds((int)BS5.getX()-15, (int)BS5.getY()-15, 100, 50);
  258.  
  259.         Ellipse2D circle6 = new Ellipse2D.Double(370, 470,200, 200);
  260.         Rectangle2D BS6 = new Rectangle2D.Double((int)circle6.getCenterX(), (int)circle6.getCenterY(), 5, 5);
  261.         l_BS6.setBounds((int)BS6.getX()-15, (int)BS6.getY()-15, 100, 50);
  262.  
  263.         Ellipse2D UT = new Ellipse2D.Double(UT_x, UT_y, 5, 5);
  264.         l_UT.setBounds((int)UT.getX()-15, (int)UT.getY()-15, 80, 50);
  265.  
  266.         g2d.draw(UT); g2d.draw(BS0); g2d.draw(BS1); g2d.draw(BS2); g2d.draw(BS3); g2d.draw(BS4); g2d.draw(BS5); g2d.draw(BS6);
  267.         g2d.draw(circle0); g2d.draw(circle1); g2d.draw(circle2); g2d.draw(circle3); g2d.draw(circle4); g2d.draw(circle5); g2d.draw(circle6);
  268.     }
  269.  
  270.     /*public void wylicz_zasięg(double d_2D) {
  271.         //Double[] d_3D = {85.0, 237.0, 170.0, 85.0, 170.0, 237.0, 255.0};
  272.  
  273.         Double[] S = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, PathL1 = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, PathL2 = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, PathL = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  274.         Double[] I_W = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; //inerferencje w watach
  275.         double S_0;
  276.         for (int i = 0; i < 7; i++) {
  277.             radius[i] = Math.sqrt( Math.pow((x[i] - xp), 2) + Math.pow((y[i] - yp), 2));
  278.         }
  279.  
  280.         for (int i = 0; i < 7; i++) {
  281.             d2D[i] = (radius[i] * d_2D) / radius[0];
  282.             System.out.println("Odległość stacji bazowej BS[" + i + "] od danego punktu P : " + d2D[i]);
  283.             d[i] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[i], 2) );
  284.  
  285.             PathL1[i] = 32.4 + 21*Math.log10(d[i]) +20*Math.log10(f_c +0.1*i);  // d_BP < 832
  286.             //PathL1[i] = 32.4 + 21*Math.log10(d[i]) +20*Math.log10(f_c +0.1*i)- 9.5*Math.log10(832^2 + 23^2); // d_BP < 832
  287.             PathL2[i] = 22.4 + 35.3*Math.log10(d[i]) + 21.3*Math.log10(f_c +0.1*i) -0.3*(h_UT -1.5); // d_BP > 832
  288.             PathL[i] = Math.max(PathL1[i], PathL2[i]);
  289.  
  290.             S[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PathL[i]);
  291.         }
  292.  
  293.         S_0 = Math.pow(10, (S[0]/10 - 3)); // z dBm na waty
  294.         I_W[0] = 0.0;
  295.         I_suma = 0.0;
  296.         for(int j=1; j < 7; j++){
  297.             I_W[j] = Math.pow(10, (S[j]/10 - 3)); // z dBm na waty
  298.             I_suma = I_suma + I_W[j];
  299.         }
  300.  
  301.         SINR = S_0 / ( I_suma + N_W);
  302.         SINR_dB = Math.log10(SINR); //na dB
  303.  
  304.         System.out.println("Wartości sygnałów : "+ S[0] + " "+ S[1] + " " + S[2] + " "+ S[3] + " "+ S[4] + " "+ S[5] + " "+ S[6]);
  305.         System.out.println("SINR w jednoskach: " + SINR);
  306.         System.out.println("SINR w decybelach: " + SINR_dB);
  307.     }*/
  308.  
  309.     public double licz_sygnal_odebrany(double P_T, double G_TX, double L_FTX, double G_RX, double L_FRX, double PathL){
  310.         //SINR = P_T + G_TX - L_FTX + (PL +I) + G_RX - L_FRX - N - F - IM
  311.         int IM = 2;
  312.         double S, t_e = 1, t_o = 290, N, F;
  313.         //double k = 1.38*Math.pow(10, (-38));
  314.         //N = 10*Math.log10(k * t_o * pasmo);
  315.  
  316.         //N = -174; // [dBm]
  317.         F = 6 ;
  318.         S = P_T + G_TX - L_FTX - PathL + G_RX - L_FRX - F - IM; // [dBm]
  319.  
  320.         return S;
  321.     }
  322.  
  323.     public void licz_SINR(double d_2D){
  324.         Double[] S = new Double[7]; Double[] PathL1 = new Double[7]; Double[] PathL2 = new Double[7] ; Double[] PathL = new Double[7];
  325.         Double[] I_W = new Double[7]; //inerferencje w watach
  326.         Double[] S_0 = new Double[850];
  327.         yp = 0;
  328.         for(int t=0; t < 850; t++){
  329.  
  330.             for (int i = 0; i < 7; i++) {
  331.                 radius[i] = Math.sqrt( Math.pow((x[i] - xp), 2) + Math.pow((y[i] - yp), 2));
  332.             }
  333.  
  334.             for (int i = 0; i < 7; i++) {
  335.                 d2D[i] = (radius[i] * d_2D) / radius[0];
  336.                 System.out.println("Odległość stacji bazowej BS[" + i + "] od danego punktu P : " + d2D[i]);
  337.                 d[i] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[i], 2) );
  338.  
  339.                 PathL1[i] = 32.4 + 21*Math.log10(d[i]) +20*Math.log10(f_c +0.1*i);  // d_BP < 832
  340.                 //PathL1[i] = 32.4 + 21*Math.log10(d[i]) +20*Math.log10(f_c +0.1*i)- 9.5*Math.log10(832^2 + 23^2); // d_BP < 832
  341.                 PathL2[i] = 22.4 + 35.3*Math.log10(d[i]) + 21.3*Math.log10(f_c +0.1*i) -0.3*(h_UT -1.5); // d_BP > 832
  342.                 PathL[i] = Math.max(PathL1[i], PathL2[i]);
  343.  
  344.                 S[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PathL[i]);
  345.             }
  346.  
  347.             S_0[t] = Math.pow(10, (S[0]/10 - 3)); // z dBm na waty
  348.             I_W[0] = 0.0;
  349.             I_suma = 0.0;
  350.             for(int j=1; j < 7; j++){
  351.                 I_W[j] = Math.pow(10, (S[j]/10 - 3)); // z dBm na waty
  352.                 I_suma = I_suma + I_W[j];
  353.             }
  354.  
  355.             rysuj_wykresy.SINR[t] = S_0[t] / ( I_suma + N_W);
  356.             rysuj_wykresy.SINR_dB[t] = Math.log10(rysuj_wykresy.SINR[t]); //na dB
  357.  
  358.             yp = yp + 0.1;
  359.         }
  360.         rysuj_wykresy.dane();
  361.         rysuj_wykresy.Rysuj_wykres();
  362.     }
  363. }
  364.  
RAW Paste Data