Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/55: Рейтинг темы: голосов - 55, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 20
1

Класс: Матрица (n x m). Поля: размерность и значение матрицы. Реализовать методы сложения и умножения матриц

30.05.2016, 17:41. Показов 11184. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно сделать с использованием конструкторов и методов доступа, а я не могу понять как это, помогите пожалуйста.
Вот что у меня.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package PZ22;
import java.util.*; 
public class Matrix {
    
    public Scanner scan;
    public int matrix1[][], matrix2[][], sum[][], multi[][];
    public int row, column;
 
    void create() {
        
        scan = new Scanner(System.in);
        System.out.println("Введите количество строк и столбцов");
        row = Integer.parseInt(scan.nextLine());
        column = Integer.parseInt(scan.nextLine());
        
        matrix1 = new int[row][column];
        matrix2 = new int[row][column];
        sum = new int[row][column];
        multi = new int[row][column];
        
        // Заполнение 1-й матрицы 
        System.out.println("Введите данные 1-й матрицы :");
        for(int i=0; i<row; i++) {  
            for(int j=0; j<column; j++) {       
                matrix1[i][j] = scan.nextInt();
            }
        }
        // Заполнение 2-й матрицы         
        System.out.println("Введите данные 2-й матрицы :");
 
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                matrix2[i][j] = scan.nextInt();
            }
        }
    }
    
    void display() {
        
        System.out.println("\nПервая матрица :");
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                System.out.print("\t" + matrix1[i][j]);
            }
            System.out.println();
        }
        
        System.out.println("\nВторая матрица :");
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                System.out.print("\t" + matrix2[i][j]);
            }
            System.out.println();
        }
    }   
    void add() {
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                sum[i][j] = matrix1[i][j] + matrix2[i][j];
            }
        }       
        System.out.println("\nСумма матриц :");
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                System.out.print("\t" + sum[i][j]);
            }
            System.out.println();
        }
    }
    void multi() {
        if (row==column){
    
        for(int i=0; i<row; i++) {
        
            for(int j=0; j<column; j++) {
                
                for (int k=0; k<column; k++){
            
                multi[i][j] = multi[i][j]+matrix1[i][k] * matrix2[k][j];
            }
        }
    }
        System.out.println("\nПроизведение матриц :");
    
        for(int i=0; i<row; i++) {
        
            for(int j=0; j<column; j++) {
                
            
                System.out.print("\t" + multi[i][j]);
            }
            System.out.println();
        }
        }
        else System.out.println("\nПеремножение матриц не возможно");
    }
}
А вот класс Main

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
package PZ22;
 
public class MainClass {
        
        public static void main(String args[]) {
            
            Matrix obj = new Matrix();
            obj.create();
            obj.display();
            obj.add();
            obj.multi();
        }
}
Добавлено через 21 минуту
Вот полное задание

Создать класс, описание которого приведен ниже, в классе определить конструкторы и методы доступа к полям класса, поля класса должны быть Private, предусмотреть ввода / вывода результатов на консоль.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2016, 17:41
Ответы с готовыми решениями:

Написать свой класс, реализующий матричную арифметику, операции сложения и умножения матриц. Сложения матрицы с числом и
Написать свой класс, реализующий матричную арифметику, операции сложения и умножения матриц....

Ввести класс для работы с прямоугольной матрицей, реализовать операции сложения и умножения матриц
Кто-нибудь подскажите, пожалуйста написать программу в С++. Ввести класс для работы с...

Написать процедуру для сложения, умножения квадратных матриц N*N, и умножения матрицы на вектор
Написать процедуру для сложения, умножения квадратных матриц N*N, и умножения матрицы на вектор

Реализовать функции сложения, вычитания и умножения матриц
Задание: Разработать программу для работы с двумя матрицами. Реализовать функции сложения,...

8
27 / 27 / 24
Регистрация: 23.04.2011
Сообщений: 64
30.05.2016, 21:58 2
Попробуйте так, уровень доступа у объектов и переменных private, и создание массивов в конструкторе.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import java.util.*; 
public class Matrix {
    
    private Scanner scan;
    private int matrix1[][], matrix2[][], sum[][], multi[][];
    private int row, column;
    
    Matrix() {
        scan = new Scanner(System.in);
        System.out.println("Введите количество строк и столбцов");
        row = Integer.parseInt(scan.nextLine());
        column = Integer.parseInt(scan.nextLine());
        
        matrix1 = new int[row][column];
        matrix2 = new int[row][column];
        sum = new int[row][column];
        multi = new int[row][column];
    }
 
    void create() {
        
               
        // Заполнение 1-й матрицы 
        System.out.println("Введите данные 1-й матрицы :");
        for(int i=0; i<row; i++) {  
            for(int j=0; j<column; j++) {       
                matrix1[i][j] = scan.nextInt();
            }
        }
        // Заполнение 2-й матрицы       
        System.out.println("Введите данные 2-й матрицы :");
 
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                matrix2[i][j] = scan.nextInt();
            }
        }
    }
    
    void display() {
        
        System.out.println("\nПервая матрица :");
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                System.out.print("\t" + matrix1[i][j]);
            }
            System.out.println();
        }
        
        System.out.println("\nВторая матрица :");
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                System.out.print("\t" + matrix2[i][j]);
            }
            System.out.println();
        }
    }   
    void add() {
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                sum[i][j] = matrix1[i][j] + matrix2[i][j];
            }
        }       
        System.out.println("\nСумма матриц :");
        
        for(int i=0; i<row; i++) {
            
            for(int j=0; j<column; j++) {
                
                System.out.print("\t" + sum[i][j]);
            }
            System.out.println();
        }
    }
    void multi() {
        if (row==column){
    
        for(int i=0; i<row; i++) {
        
            for(int j=0; j<column; j++) {
                
                for (int k=0; k<column; k++){
            
                multi[i][j] = multi[i][j]+matrix1[i][k] * matrix2[k][j];
            }
        }
    }
        System.out.println("\nПроизведение матриц :");
    
        for(int i=0; i<row; i++) {
        
            for(int j=0; j<column; j++) {
                
            
                System.out.print("\t" + multi[i][j]);
            }
            System.out.println();
        }
        }
        else System.out.println("\nПеремножение матриц не возможно");
    }
}
1
0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 20
31.05.2016, 22:49  [ТС] 3
Вот преподаватель подсказал как, но тут проблема, вводит какие то непонятные матрицы, не те что я ввожу в консоле.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package PZ2;
 
import java.util.Scanner;
 
final public class Matrix {
    private int M;             
    private int N;             
    private int[][] data; 
 
    public Matrix(int M, int N, int type_m) {
        Scanner scan = new Scanner(System.in);
        this.M = M;
        this.N = N;
        data = new int[M][N];
         for (int i = 0; i < M; i++)
            for (int j = 0; j < N; j++)
                if (type_m==0) this.data[i][j]=0;
                else this.data[i][j] = scan.nextInt();
        }
    
 
    //C = A + B
    public Matrix plus(Matrix B) {
        Matrix A = this;
        if (B.M != A.M || B.N != A.N) throw new RuntimeException("Сложение не возможно");
        Matrix C = new Matrix(M, N,0);
        for (int i = 0; i < M; i++)
            for (int j = 0; j < N; j++)
                C.data[i][j] = A.data[i][j] + B.data[i][j];
         return C;
    }
 
    // C = A * B
    public Matrix times(Matrix B) {
        Matrix A = this;
        if (A.N != B.M) throw new RuntimeException("Умножение не возможно");
        Matrix C = new Matrix(A.M, B.N,0);
        for (int i = 0; i < C.M; i++)
            for (int j = 0; j < C.N; j++)
                for (int k = 0; k < A.N; k++)
                   C.data[i][j] += (A.data[i][k] * B.data[k][j]);
         return C;
    }
 
    public String toString() {
        String S="";
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) 
                S+='\t'+ data[i][j];
            S+='\n';
        }
       return S;
    }
 
}


А вот Main
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package PZ2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
     public static void main(String[] args) throws NumberFormatException, IOException {
            BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
            int N;
            int M;
     System.out.println("Введите n и m для матрицы А:");
          N = Integer.parseInt(br.readLine());
          M = Integer.parseInt(br.readLine());
     System.out.println("Введите значения для матрицы А:"); 
            Matrix A = new Matrix(N,M,1);
            
     System.out.println("Введите n и m для матрицы Б:");
          N = Integer.parseInt(br.readLine());
          M = Integer.parseInt(br.readLine());
     System.out.println("Введите значения для матрицы Б:");     
            Matrix B =new Matrix(N, M,1);
     System.out.println("\nМатрица А:\n"+A);          
     System.out.println("\nМатрица Б:\n"+B);
 
     System.out.println("\nСумма:\n"+ A.plus(B));
     System.out.println("\nПроизведение:\n"+ B.times(A));
     
     
        }
    }
0
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
31.05.2016, 23:33 4
Цитата Сообщение от CoH Посмотреть сообщение
не те что я ввожу в консоле
а какие? Пример ввода - вывода покажите, как-то под вечер с ясновидением плохо... Вот в варианте ниже всё, что вводишь то и отображается.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class MatrixWork {
    private int sizeN;
    private int sizeM;
    private int[][] matrixOne;
    private int[][] matrixTwo;
 
    public void setSizeN(int sizeN) {
            this.sizeN = sizeN;
    }
 
    public void setSizeM(int sizeM) {
        this.sizeM = sizeM;
    }
 
    public void setMatrixOne(int[][] matrixOne) {
        this.matrixOne = matrixOne;
    }
 
    public void setMatrixTwo(int[][] matrixTwo) {
        this.matrixTwo = matrixTwo;
    }
 
    MatrixWork(int n, int m) {
        setSizeN(n);
        setSizeM(m);
    }
 
    MatrixWork(int[][] one, int[][] two) {
        setMatrixOne(one);
        setMatrixTwo(two);
    }
 
    public int[][] createMatrix() {
        int[][] array = new int[sizeN][sizeM];
        for (int[] temp : array) {
            for (int i = 0; i < temp.length; i++) {
                temp[i] = new Scanner(System.in).nextInt();
            }
        }
        return array;
    }
 
    public int[][] getAction(int index) {
        int[][] result = new int[matrixOne.length][matrixOne[0].length];
        if (matrixOne.length == matrixTwo.length && matrixOne[0].length == matrixTwo[0].length) {
            for (int i = 0; i < matrixOne.length; i++) {
                for (int j = 0; j < matrixOne[0].length; j++) {
                    if (index == 0) result[i][j] = matrixOne[i][j] + matrixTwo[i][j];
                    if (index == 1) result[i][j] = matrixOne[i][j] * matrixTwo[i][j];
                }
            }
        } else {
            System.out.println("Действие над матрицами невозможно!");
            return result;
        }
        return result;
    }
 
    public void show(int[][] array) {
        for (int[] temp : array) {
            for (int tmp : temp) {
                System.out.printf("%4d", tmp);
            }
            System.out.println();
        }
    }
}
 
class Realization {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Размеры матрицы:");
        int n = sc.nextInt(), m = sc.nextInt();
        MatrixWork mw = new MatrixWork(n, m);
        System.out.println("====Первая=матрица=======");
        int[][] one = mw.createMatrix();
        mw.show(one);
        System.out.println("====Вторая=матрица=======");
        int[][] two = mw.createMatrix();
        mw.show(two);
        System.out.println("=======Сложение==========");
        MatrixWork action = new MatrixWork(one, two);
        mw.show(action.getAction(0));
        System.out.println("=======Умножение=========");
        mw.show(action.getAction(1));
    }
}
0
0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 20
01.06.2016, 09:19  [ТС] 5
Вот, на 1 я ввожу, а на 2-м что мне выводит.
Миниатюры
Класс: Матрица (n x m). Поля: размерность и значение матрицы. Реализовать методы сложения и умножения матриц   Класс: Матрица (n x m). Поля: размерность и значение матрицы. Реализовать методы сложения и умножения матриц  
0
0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 20
01.06.2016, 09:23  [ТС] 6
И твой пример мне не подходит, т. к. мне нужно с использованием метода String toString.
0
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
01.06.2016, 10:09 7
CoH, замените в Вашем коде аналогичный фрагмент на тот, что приведён ниже:
Java
1
2
3
4
5
6
7
8
9
10
11
    public String toString()
    {
        String S = "";
        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < N; j++)
                S += "\t" + data[i][j];
            S += "\n";
        }
        return S;
    }
1
0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 20
01.06.2016, 10:53  [ТС] 8
НOBATOP, спасибо большое, работает.
Но только выводит сумму и произведение матриц перевернутым, не знаете случайно почему?

Вот тут код, для изменения местами строк i и j, только не могу понять, где его вставить?
Java
1
2
3
4
5
6
// swap rows i and j
    private void swap(int i, int j) {
        double[] temp = data[i];
 data[i] = data[j];
 data[j] = temp;
    }
Изображения
 
0
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
01.06.2016, 11:35 9
CoH,
Цитата Сообщение от CoH Посмотреть сообщение
не знаете случайно почему
потому, что у Вас в решении индексы расставлены неверно
Цитата Сообщение от CoH Посмотреть сообщение
где его вставить
да ни где, замените одну строчку, и не нужно огород городить!
Java
1
C.data[j][i] += (A.data[k][i] * B.data[j][k]);
Удачи!
1
01.06.2016, 11:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2016, 11:35
Помогаю со студенческими работами здесь

Создать класс Matrix и функции умножения и сложения матриц
Создайте класс Matrix на базе вектора vector&lt;vector&lt;int&gt;&gt;. Определите операторную функцию ostream&amp;...

Разработать класс "Матрица" (перегрузить операции сложения, умножения, умножения на число)
Разработать класс матрица. Определить в нем конструктор перегрузить арифметические операции...

Создать класс матриц с целочисленными элементами и определить операции умножения и сложения
Всем привет, помогите с задачей, заранее спасибо. Создать класс матриц с целочисленными элементами...

Реализовать класс векторов, переопределив операции сложения, вычитания, умножения
Реализовать класс векторов, переопределив операции сложения, вычитания, умножения векторов и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru