Высокоуровневые методы программирования

Автор работы: Пользователь скрыл имя, 03 Декабря 2011 в 13:26, курсовая работа

Описание работы

Описать класс, реализующий тип данных «квадратная вещественная матрица третьего порядка» и работу с ним. Класс должен реализовывать вычисление определителя матрицы, обратной матрицы, деление матриц и вывод матрицы на форму.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

Содержание работы

Задание 3
Описание классов 4
Текст программы 8
Вид приложения 15

Файлы: 1 файл

Марина Курсовая работа высокоуровнеые методы.docx

— 784.53 Кб (Скачать файл)

                        JOptionPane.showMessageDialog(null,new Matrix(em.getArray()).det());

                  }

            });

 

            reserve.addActionListener(new ActionListener(){

                  public void actionPerformed(ActionEvent e) {

                        Matrix m = new Matrix(em.getArray()).reverse();

                        if (m!=null){

                              m.show();

                        }else {

                              JOptionPane.showMessageDialog(null,"Определитель = 0");

                        }

                  }});

 

            mult.addActionListener(new ActionListener(){

                  public void actionPerformed(ActionEvent e) {

                        Matrix.multiply(new Matrix(em.getArray()), new Matrix(em2.getArray())).show();

                  }

            });

 

            div.addActionListener(new ActionListener(){

                  public void actionPerformed(ActionEvent e) {

                        Matrix.division(new Matrix(em.getArray()), new Matrix(em2.getArray())).show();

                  }

            });

 

      }

}

 

Листинг 3. Класс EnterMatrix

import java.awt.TextField;

import javax.swing.Box;

import javax.swing.JPanel;

 
 

public class EnterMatrix extends JPanel{

      TextField[][] tfArray = new TextField[3][3];

 

      EnterMatrix(){

            Box panel = Box.createVerticalBox();

            JPanel[] panel2 = new JPanel[3];

            for (int i =0;i<3;i++){

                  panel2[i] = new JPanel();

                  for (int j =0;j<3;j++){

                        tfArray[i][j] = new TextField();

                        tfArray[i][j].setText("");

                        panel2[i].add(tfArray[i][j]);

                  }

                  panel.add(panel2[i]);

            }

            this.add(panel);

      }

 

      double[][] getArray(){

            double[][] temp = new double[3][3];

            for (int i =0;i<3;i++){

                  for (int j =0;j<3;j++){

                        if(tfArray[i][j].getText()==""){

                              temp[i][j] = 0.0;

                        }else {

                              temp[i][j] = Double.parseDouble(tfArray[i][j].getText());

                        }

                  }

            }

 

            return temp;

      }

}

Листинг 4. Класс Matrix

import java.awt.TextField;

import javax.swing.Box;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

 

public class Matrix {

      private double[][] data ;

 

      Matrix(double[][] a){

            data = a;

      }

 
 

      double det (){

            if (data.length == 3){

                  return data[0][0]*data[1][1]*data[2][2]+data[0][1]*data[1][2]*data[2][0]+data[1][0]*data[2][1]*data[0][2]-data[0][2]*data[1][1]*data[2][0]-data[0][0]*data[2][1]*data[1][2]-data[2][2]*data[1][0]*data[0][1];

            } else if (data.length==2){

                  return data[0][0]*data[1][1]-data[0][1]*data[1][0];

            }

            return 0;

      }

 

      void show(){

            Box panel = Box.createVerticalBox();

            JLabel[] label = new JLabel[data.length];

            for (int i =0 ; i<data.length; i++ ){

                  label[i] = new JLabel();

                  for (int j=0; j< data.length; j++){

                        System.out.println(i+" "+ j + " " +data[i][j]);

                        label[i].setText(label[i].getText()+"  "+data[i][j]);

                        panel.add(label[i]);

                  }

            }

            JOptionPane.showMessageDialog(null,panel);

      }

 

      Matrix transposition(){

            double [][] tempData = new double[3][3];

 

            for (int i =0; i<3; i++){

                  for (int j =0; j<3; j++){

                        tempData[i][j]=data[j][i];

                  }

            }

 

            return new Matrix(tempData);

      }

 

      static Matrix multiply(Matrix a, Matrix b){

            double [][] dataA = a.data;

            double [][] dataB = b.data;

            double [][] dataC = new double[3][3];

 

            for (int i =0; i<3; i++){

                  for (int j =0; j<3; j++){

                        double s = 0;

                        for (int k = 0; k<3; k++){

                              s += dataA[i][k]*dataB[k][j];

                        }

                        dataC[i][j] = s;

                  }

            }

 
 
 

            return new Matrix(dataC);

      }

 

      Matrix minor(int i, int j){

 

            double[][] tempData = new double[data.length-1][data.length-1];

 

            int k=0;

            int l=0;

            for (int I=0;I<3;I++){

                  l=0;

 

                  for (int J=0;J<3;J++){

                        if (!((i==I) || (j==J))){

                              tempData[k][l] = data[I][J];

                              l++;

                        }

                  }

                  if (I!=i){k++;}

            }

 
 

            return new Matrix(tempData);

 

      }

 
 

      Matrix reverse(){

            if (det()==0){

                  return null;

            }

            double[][] minorsData = new double[data.length][data.length];

 

            for (int i =0; i<data.length; i++){

                  for (int j =0; j<data.length; j++){

                        if ((i+j)%2==0){

                              minorsData[i][j]=this.minor(i,j).det();

                        } else {

                              minorsData[i][j]=-this.minor(i,j).det();

                        }

                  }

            }

 

            Matrix m = new Matrix(minorsData).transposition();

            double mDet = this.det();

            double [][] mData = m.data;

            for (int i =0; i<mData.length; i++){

                  for (int j =0; j<mData.length; j++){  

                        mData[i][j]=mData[i][j]/mDet;

                  }

            }

            m = new Matrix(mData);

 
 

            return m;

      }

 

      static Matrix division(Matrix a, Matrix b){

            return Matrix.multiply(b.reverse(), a);

      }

 

}

Вид приложения

Общий вид

Общий вид с добавленной второй матрицей

 Результат перемножения матриц

Информация о работе Высокоуровневые методы программирования