Форум программистов, компьютерный форум CyberForum.ru

Как умножить матрицу на матрицу? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка http://www.cyberforum.ru/cpp-beginners/thread95461.html
Прогамма должна запрашивать данные: ко-во пройденных км, и сколько было затраченно лт. Потом она должна перевести данные в "х литров на 100 км", а затем перевести их в "х миль на галлон". Программа работет, но после того как выведет результат, сразу же вырубается... Что делать? #include <iostream>; using namespace std; main () { cout<<"Enter the length of the trip in km: _____\b\b\b\b\b";...
C++ Количество пар в массиве Есть массив n= 1, -1, 1, 1, -1, 1 Надо подсчитать кол-во пар вида (1,-1) либо (-1,1) и "расстояние" между парами: (-1,1) и (-1,1) либо (1,-1) и (1,-1) т.е расстояние надо находить ТОЛЬКО между одинаковыми парами если пару образует (n n) и (n n) то "расстояние" = 1, если (n n) и (n n) то =1 В данном случае меня в 1-ю очередь интересует вопрос как разбить на пары и найти между ними ... http://www.cyberforum.ru/cpp-beginners/thread95454.html
C++ Как перегрузить оператор в виртуальном классе
Помогите пожалста разобраться с перегрузкой операторов в абстрактных классах!!!! Есть чисто виртуальный класс физических величин Fiz_value { private: float value; public: Fiz_value(){value=0.0;...} virtual void func1()=0;
Алгебраические дополнения C++
Здравствуйте. Возникла такая проблема, как нахождение обратной матрицы. Но необходимо её найти методом, который к сожалению я не где не встретил:( В методе необходимо найти определитель матрицы, найти алгебраические дополнения, транспонировать матрицу с получившимися алгебраическими дополнениями и разделить полученную матрицу на определитель. Матрица может быть максимум 5x5; Помогите...
C++ Создание проекта Hello, World! http://www.cyberforum.ru/cpp-beginners/thread95438.html
скачал десять компиляторов,нужен просто компилятро для с и с++ две кнопки вкл и выкл. типа блокнота. Есть такой?(и чтоб библиотеки дописывать докопировать не надо было) заранее спасибо
C++ динамичекий двумерный мас type *mass здрасти товарищи кодеры, нужны вашы знания в созданиях двумерного массива, но есть условие, создавать не как обычно type **mass ,а работая через type *mass гуглил гуглил не выгуглил, примеры уж больно не завершонные кто может киньте код на создания такого массива и записи в него нескольких элементов подробнее

Показать сообщение отдельно
cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
17.02.2010, 15:56     Как умножить матрицу на матрицу?
а я когдато писал такую
C++
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
 
void main()
{
int i,j,    // индекы элементов матрици а (строка,столбец соответственно)
    i1,j1,  // индекы элементов матрици b (строка,столбец соответственно)
    n,m,    // размерность матрицы а      (строка,столбец соответственно)
    k,l;    // размерность матрицы b      (строка,столбец соответственно)
const int N1=10,M1=10,Z1=100;  //  максимально домустимые размеры массивов (ЗАДАЮТСЯ КАК КОНСТАНТЫ)
int a[N1][M1],b[N1][M1],c[Z1];  // массивы
system("title произведение мариц");  // название программы в заголовке окна
 
 
system("echo введите количество строк и столбцов матрицы а");
scanf("%d%d",&n,&m);   // присваивание значений размеров матрицы а, введенных с клавиатуры
system("echo введите количество строк и столбцов матрицы b");
scanf("%d%d",&k,&l);   // присваивание значений размеров матрицы b, введенных с клавиатуры
if(n<1 || m<1 || k<1 || l<1) // проверка правильности введенных значений размеров матриц
{
system("echo количество строк и столбцов не может быть меньше хотябы одного элемента!!!");
system("echo.");  // пустая строка.
system("pause");  // ожидание нажатия любой клавиши
exit(2);      // выход из программы
}
 
if(m !=k)     // проверка на возможность перемножения матриц
{
system("echo количество столбцов матрицы а должно быть равно количеству строк матрицы b");
system("echo.");
system("pause");
exit(2);
}
 
system("echo введите элементы матрицы а"); // формирование матрицы а
for(i=0;i<n;i++)    //строки
 for(j=0;j<m;j++)      // столбцы
 scanf("%d",&a[i][j]);         // присвоение массиву элементов введенных с клавиатуры
system("echo введите элементы матрицы b"); // формирование матрицы b
for(i1=0;i1<k;i1++)
 for(j1=0;j1<l;j1++)
 scanf("%d",&b[i1][j1]);
 
system("cls");        // очистка экрана
system("echo исходные матрицы:");
system("echo.");
                                // контрольный вывод на экран сформированных матриц
system("echo матрица а:");
for(i=0;i<n;printf("\n"),i++)
 for(j=0;j<m;j++)
 printf("%4d",a[i][j]);
system("echo матрица b:");
for(i1=0;i1<k;printf("\n"),i1++)
 for(j1=0;j1<l;j1++)
 printf("%4d",b[i1][j1]);
 
int h=0,s=0;           // переменная массива b, переменная суммы
 
 for(i=0;i<n;i++)
 for(j1=0;j1<l;j1++)
 {
  for(i1=0;i1<k;i1++)
  {
  int r=a[i][i1];
  int e=b[i1][j1];
   int s=s+r*e;            // суммирование произведений элементов строки матрицы а на элементы столбца матрицы b
   if(i1==k-1)     // если строка матрицы а закончена,
   {
   c[h]=s;         // то полученную сумму произведений присваиваем массиву с,
   s=0;            // переменную суммы сбрасываем на исходное значение
   h++;            // и увеличиваем индекс массива с на еденицу
   }
  }
 }
 
 
 system("echo матрица с:"); // вывод полученного одномерного массива в виде двумерного
 for(h=0;h<l*n;h++)     // здесь l*n означает максимальную длинну массива(размерность полученной матрицы) n строк на l столбцов
 {
  printf("%5d",c[h]);      // вывод элементов массива на эеран
  if(h%l==1)       // если строка закончена
  printf("\n");    // новая строка
 }
 getch();
}
Добавлено через 1 минуту
тут немного более надежно...единственное это то что писал под целочисленную матрицу. )

Добавлено через 8 минут
гдето еще была не с выходом при ошибке ввода и при окончании работы, а с возможностью повтора, найти не могу.... ну там принцип такой типа "повторить? 1-да 2-нет" основывал на операторе do...while... если найду выложу
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru