С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 30

Перемножение двух матриц.

20.02.2011, 18:40. Показов 3972. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание: Прочитать две матрицы с клавиатуры (используя одну статическую функцию), проверить можно ли их перемножить и перемножить (используя статическую функцию), вывести результат на экран.
Как это сделать? (и что за статические функции?)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2011, 18:40
Ответы с готовыми решениями:

Перемножение двух матриц
Ребята, нужно составить программу перемножения двух матриц. При этом программа обязательно должна состоять из двух классов: Matrix и...

Перемножение прямоугольных матриц
Добрый день! Прошу помочь мне с перемножением двух прямоугольных матриц... Квадратные могу перемножать, а вот с прямоугольными беда... Буду...

Перемножение матриц(квадратных)
Помогите перемножить эти матрицы.Знаю примерный алгоритм,но с реализацией не могу справиться. public class Matrix{ public...

9
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.02.2011, 19:43
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
 
   private final static BufferedReader input = new BufferedReader(
         new InputStreamReader(System.in));
 
   private static void input(int[][] matr) throws NumberFormatException,
         IOException {
      int i, j;
      int n = matr.length, m = matr[0].length;
      System.out.println("Введите матрицу размерности " + n + "X" + m + ":");
      for (i = 0; i < n; ++i)
         for (j = 0; j < m; ++j)
            matr[i][j] = Integer.parseInt(input.readLine());
   }
 
   private static void output(int[][] matr) {
      int i, j;
      int n = matr.length, m = matr[0].length;
      System.out.println("\nМатрица:");
      for (i = 0; i < n; ++i, System.out.println())
         for (j = 0; j < m; ++j)
            System.out.printf("%3d ", matr[i][j]);
   }
 
   private static int[][] mul(int[][] matr1, int[][] matr2) {
      int n1 = matr1.length, m1 = matr1[0].length, n2 = matr2.length, m2 = matr2.length;
      if (m1 != n2) {
         System.err.println("Матрицы нельзя умножить!");
         return new int[1][0];
      }
      int result[][] = new int[n1][m2];
      int i, j, k;
      for (i = 0; i < n1; ++i)
         for (j = 0; j < m2; ++j) {
            result[i][j] = 0;
            for (k = 0; k < m1; ++k)
               result[i][j] = matr1[i][k] * matr2[k][j];
         }
      return result;
   }
 
   public static void main(String[] args) {
 
      int n1 = 1, m1 = 1, n2 = 1, m2 = 1;
      try {
         System.out.println("Введите размер первой матрицы:");
         System.out.print("Количество строк: ");
         n1 = Integer.parseInt(input.readLine());
         System.out.print("Количество столбцов: ");
         m1 = Integer.parseInt(input.readLine());
 
         System.out.println("Введите размер второй матрицы:");
         System.out.print("Количество строк: ");
         n2 = Integer.parseInt(input.readLine());
         System.out.print("Количество столбцов: ");
         m2 = Integer.parseInt(input.readLine());
      } catch (NumberFormatException e1) {
         e1.printStackTrace();
      } catch (IOException e1) {
         e1.printStackTrace();
      }
      int matr1[][] = new int[n1][m1];
      int matr2[][] = new int[n2][m2];
      try {
         input(matr1);
         input(matr2);
      } catch (IOException e) {
      } catch (NumberFormatException e) {
      }
      output(matr1);
      output(matr2);
 
      int res[][] = mul(matr1, matr2);
      output(res);
   }
 
}
1
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 30
20.02.2011, 19:52  [ТС]
M128K145, спасибо тебе большое.
Можешь добавить немного коментов, а то я здесь половину команд не знаю.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.02.2011, 19:57
Mubat, что именно не понятно?
0
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 30
20.02.2011, 20:00  [ТС]
Цитата Сообщение от M128K145 Посмотреть сообщение
Mubat, что именно не понятно?
ну, вот эти выражения:
Java
1
2
3
4
5
6
7
 private final static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
 throws NumberFormatException, IOException;
 Integer.parseInt(input.readLine());
 Integer.parseInt(input.readLine());
 catch (NumberFormatException e1);
 e1.printStackTrace();
 catch (IOException e1);
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.02.2011, 20:52
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private final static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// создание потока для чтения из консоли
 
 throws NumberFormatException, IOException;
// описание метода, которое говорит о бросаемых методом исключениях и которые
// необходимо обрабатывать при вызове
 
 Integer.parseInt(input.readLine());
// Конвертация строки в число
// если в строке содержится не число, то будет брошен NumberFormatException
 
 catch (NumberFormatException e1);
 catch (IOException e1);
// блоки с обработкой исключений типов описанных в параметрах
 
 e1.printStackTrace();
// печать стек-трейса - истории вызовов методов которые вызвали ексепшен
1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
20.02.2011, 20:52
1. Создание переменной для считывания строки из стандартного ввода.
2. Исключения, которые пробрасывает метод.
3.4. Преобразование считанной из стандартного ввода строки в число
5.7. Перехват исключений
6. Вывод стэк-трейса в стандартный вывод ошибок.
1
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 30
20.02.2011, 21:24  [ТС]
спасибо, ребята. Выручили.

Добавлено через 30 минут
M128K145, я запустил на проверку программу и оказалось что она неправильно работает!
Вот что получилось:
Матрица А:
1 2
3 4
5 6

Матрица B:
7 8 11 12
13 14 15 16

Матрица (неправильно):
26 28
52 56
78 84

Должно быть так:
33___36__41__44
73___80__78_100
138_124_145_156

Я вот тут попробовал, но у меня выдает ошибку:
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
import java.util.Scanner;
 
public class prog_1 
{   static Scanner in = new Scanner(System.in);
    public static void main(String[] args) 
    {   System.out.print("Размерность матриц: ");
        int a1=in.nextInt();//количество столбцов матрицы А
        int a2=in.nextInt();//количество строк матрицы А
        int b1=in.nextInt();//количество столбцов матрицы В
        int b2=in.nextInt();//количество строк матрицы В
        if(a2==b1) reshenie(a2,a1,b2,b1);
        else if (a1==b2) reshenie(b1,b2,a1,a2);
            else System.out.print("Error! Incorect Matrix!"); 
    }
//------------------------------------------------------    
static void reshenie(int x1, int y1, int x2, int y2)
    {   double[][] res = new double[x1][y2];
        double[][] A=Matrix(x2,y2);
        double[][] B=Matrix(x1,y1);
        for(int i=0;i<x1;i++)
            for(int k=0; k<y2;k++)
                for(int j=0;j<x2;j++)
                    res[i][k]=res[i][k]+A[i][j]*B[j][k];
        output(res,x1,y1);
    }
//-------------------------------------------------------   
static double[][] Matrix(int n,int m)
    {
        double[][] matr=new double[n][m];
        System.out.println("Значение матриц");
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                matr[i][j]=Math.round(in.nextDouble());
        output(matr,n,m);
        return matr;
    }
//------------------------------------------------------
static void output(double[][] matr,int x,int y)
    {
    for(int i=0;i<x;i++)
        {   for(int j=0; j<y;j++)
            System.out.print(matr[i][j] + " | ");
        System.out.println();
        }
    }
}
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.02.2011, 21:31
Mubat, ну вы бы могли заметить ошибку в 41 строке? Замените строку
Java
1
result[i][j] = matr1[i][k] * matr2[k][j];
на
Java
1
result[i][j] += matr1[i][k] * matr2[k][j];
1
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 30
21.02.2011, 14:33  [ТС]
Все,вопрос снят. Конечный вид программы:

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class jav_1_2 {
 
   private final static BufferedReader input = new BufferedReader(
         new InputStreamReader(System.in));
//----------------------------------------------------------- 
   private static void input(int[][] matr) throws NumberFormatException,
         IOException {
      int i, j;
      int n = matr.length, m = matr[0].length;
      System.out.println("Введите матрицу размерности " + n + "X" + m + ":");
      for (i = 0; i < n; ++i)
         for (j = 0; j < m; ++j)
            matr[i][j] = Integer.parseInt(input.readLine());
   }
//------------------------------------------------------------ 
   private static void output(int[][] matr) {
      int i, j;
      int n = matr.length, m = matr[0].length;
      System.out.println("\nМатрица:");
      for (i = 0; i < n; ++i, System.out.println())
         for (j = 0; j < m; ++j)
            System.out.printf("%3d ", matr[i][j]);
   }
//------------------------------------------------------------
   private static int[][] mul(int[][] matr1, int[][] matr2) {
      int n1 = matr1.length, m1 = matr1[0].length, n2 = matr2.length, m2 = matr2[0].length;
      if (m1 != n2) {
         System.err.println("Матрицы нельзя умножить!");
         return new int[1][0];
      }
      int result[][] = new int[n1][m2];
      int i, j, k;
      for (i = 0; i < n1; ++i)
         for (j = 0; j < m2; ++j) {
            result[i][j] = 0;
            for (k = 0; k < m1; ++k)
               result[i][j] += matr1[i][k] * matr2[k][j];
         }
      return result;
   }
//------------------------------------------------------------
   public static void main(String[] args) {
 
      int n1 = 1, m1 = 1, n2 = 1, m2 = 1;
      try {
         System.out.println("Введите размер первой матрицы:");
         System.out.print("Количество строк: ");
         n1 = Integer.parseInt(input.readLine());
         System.out.print("Количество столбцов: ");
         m1 = Integer.parseInt(input.readLine());
 
         System.out.println("Введите размер второй матрицы:");
         System.out.print("Количество строк: ");
         n2 = Integer.parseInt(input.readLine());
         System.out.print("Количество столбцов: ");
         m2 = Integer.parseInt(input.readLine());
      } catch (NumberFormatException e1) {
         e1.printStackTrace();
      } catch (IOException e1) {
         e1.printStackTrace();
      }
      int matr1[][] = new int[n1][m1];
      int matr2[][] = new int[n2][m2];
      try {
         input(matr1);
         input(matr2);
      } catch (IOException e) {
      } catch (NumberFormatException e) {
      }
      output(matr1);
      output(matr2);
 
      int res[][] = mul(matr1, matr2);
      output(res);
   }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2011, 14:33
Помогаю со студенческими работами здесь

Перемножение двух матриц
Здравствуйте, выполняю для саморазвития не большой пример по перемножению двух матриц на C#. И когда пытаюсь занести в массив рандомные...

Перемножение двух матриц
В шапке ошибся задание : Заменить в строке принятое в Си обозначение символа с заданным кодом (например, \101) на сам символ (в данном...

Перемножение двух матриц
Собственно задачка: Написать программу перемножения двух матриц. Найти вид функции сложности алгоритма. 2 пункт не обязателен, а...

Перемножение двух матриц
Для заданных матриц A и B найти \frac 1 2 \cdot A \cdot B^2 Программу на Си желательно с комментарием ... хочется понять и...

Перемножение двух матриц
int Multiplication(int a, int b) { cout &lt;&lt; &quot;***********Result***********&quot; &lt;&lt; endl; int c; for(int i = 0; i &lt; 5; i++) // i...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru