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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Mustakilloff
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 37
#1

Транспонирование матриц. Произведение транспонированных матриц - C++

17.02.2014, 06:44. Просмотров 1617. Ответов 21
Метки нет (Все метки)

Найти матрицу С:

C=ATBTB;

A=http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{bmatrix}1\\ 1\\ 1\end{bmatrix}

B=http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{bmatrix}1 & 2 & 0 \\ 0 & 1 & 2\end{bmatrix}

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
#include <iostream> 
#include <math.h> 
#include <iomanip> 
#include <conio.h> 
using namespace std;
void main(void) 
{ 
//Ввод значений матриц A и B 
    int a[3][1]={{1},{1},{1}}; 
    int b[2][3]={{1,2,0},{0,1,2}}; 
int c[3][1]; 
int k=0;int i=0; int j=0; 
//Вывод матрицы A на экран 
cout<<"matrica A=\n"; 
   cout<<"\n"; 
 for(int j=0,i=0;i<3;i++) 
   { 
   for(j=0;j<1;j++)cout<<a[i][j]<<" "; 
   cout<<"\n\n"; 
      cout<<"\n"; cout<<endl;    } 
//Вывод матрицы B на экран 
   cout<<"matrica B=\n"; 
   cout<<"\n"; 
   for(int j=0,i=0;i<2;i++) 
   { 
   for(j=0;j<3;j++)cout<<b[i][j]<<" "; 
   cout<<"\n\n"; 
      cout<<"\n"; cout<<endl;   } 
//Вывод матрицы С на экран 
  //* cout<<"rezult C="<<"\n"; 
   //for(int i=0,j=0,ik=0,jk=0;i<3;i++) 
     //{ 
     //for(jk=0;jk<1;jk++)    { 
       //for(j=0;j<3;j++) 
//{  k+=b[i][j]*b[i][j]*a[j][jk];} 
 //c[i][jk]=k; 
   //cout<<c[i][jk]<<"\n\n"; 
 // k =0;       } 
//} 
   cout<<"\n"; 
getch();  
}
значение С в комментарий, т.к. не знаю, как вычислить..
Помогите, пожалуйста! Желательно с комментариями. Отблагодарю как смогу )

Добавлено через 20 часов 25 минут
UP^
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 06:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Транспонирование матриц. Произведение транспонированных матриц (C++):

Транспонирование матриц! - C++
Данна матрица 3х6 необходимо ее транспониравать (в 6х3) подскажите функцию.

Транспонирование матриц - C++
//Функция транспонирования void transpr (int mas , int i, int j){ for (i=0; i&lt;=2; i++){ for(j=0; j&lt;=2;j++){ ...

Транспонирование прямоугольных матриц - C++
в данном случае не транспонируются матрицы размерами 3x2 и аналогичные(где строк больше чем столбцов) - транспонирует не правильно...

Матрицы в TC.Транспонирование матриц - C++
Написать программу выполняющую операцию А^t+5B-3C. Полученную матрицу вывести на экран. Ввод матриц с клавиатуры. Со сложением и...

Умножение, сложение и транспонирование матриц - C++
помогите написать программу на языке с++ которая выполняет умножение, сложение и транспонирование матриц

Транспонирование матриц(у меня не стандартный случай) - C++
Не могу разобраться с одной проблемой: Это набор функций, для работы с матрицей ...

21
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
06.03.2014, 17:27 #16
Цитата Сообщение от Mustakilloff Посмотреть сообщение
На мой взгляд, всё идеально
Вообще всё не так, как надо. Начиная с создания пяти квадратных матриц 3Х3, а потом получения как-бы их размеров, заканчивая циклами с пропуском первых элементов и выходом за границу массивов (индексы элементов в массиве начинаются с 0 и заканчиваются количеством элементов минус один). Ну и между делом - поворот точно неправильно сделан, в умножение не вчитывался, но думаю - и там засада...
0
Mustakilloff
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 37
06.03.2014, 17:35  [ТС] #17
И снова Мамонтова оказала медвежью услугу...
Спасибо!) Попробую сделать так, как написали Вы если, конечно, расскажете, как сделать заполнение массива с клавиатуры..)

C++
1
2
3
4
 // заполним для наглядности оригинальную
    for ( int i = 0; i < Y_DIMENSION; ++i )
        for ( int j = 0; j < X_DIMENSION; ++j )
           cin << originMatrix[i][j]
так?)
0
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
06.03.2014, 17:52 #18
Цитата Сообщение от Mustakilloff Посмотреть сообщение
cin << originMatrix[i][j]
Так:
C++
1
cin >> originMatrix[i][j];
Вы считываете данные из входного потока в элемент массива.
1
Mustakilloff
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 37
12.03.2014, 09:34  [ТС] #19
Сделал вот так, компилятор показал около 20 ошибок, вроде бы всё указывал.. Не пойму..
3.cpp(16): error C2057: требуется константное выражение
3.cpp(16): error C2466: невозможно выделить память для массива постоянного нулевого размера
3.cpp(16): error C2057: требуется константное выражение
3.cpp(16): error C2466: невозможно выделить память для массива постоянного нулевого размера
3.cpp(16): error C2087: A: отсутствует индекс
3.cpp(16): error C2133: A: неизвестный размер
3.cpp(22): error C2057: требуется константное выражение
3.cpp(22): error C2466: невозможно выделить память для массива постоянного нулевого размера
3.cpp(22): error C2057: требуется константное выражение
3.cpp(22): error C2466: невозможно выделить память для массива постоянного нулевого размера
3.cpp(22): error C2087: transA: отсутствует индекс
3.cpp(22): error C2133: transA: неизвестный размер
3.cpp(37): error C2065: B: необъявленный идентификатор
3.cpp(39): error C2057: требуется константное выражение
3.cpp(39): error C2466: невозможно выделить память для массива постоянного нулевого размера
3.cpp(39): error C2057: требуется константное выражение
3.cpp(39): error C2466: невозможно выделить память для массива постоянного нулевого размера
3.cpp(39): error C2087: transB: отсутствует индекс
3.cpp(39): error C2133: transB: неизвестный размер
3.cpp(42): error C2065: B: необъявленный идентификатор
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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <stdio.h>
 
using namespace std;
int main() {
                setlocale(LC_ALL, "Russian"); 
 
int x_a, x_b, y_a, y_b, f, p, o, l, k;
cout<<"/n Введите ширину матрицы А";
cin>>x_a;
cout<<"/n Введите высоту матрицы А";
cin>>y_a;
int A[x_a][y_a];
 cout<<"/n Введите матрицу А";
 for ( int i = 0; i < x_a; ++i )
        for ( int j = 0; j < y_a; ++j )
           cin >> A[i][j];
 //транспонирование матрицы А
 int transA[y_a][x_a];
 for ( int i = 0; i < x_a; ++i )
        for ( int j = 0; j < y_a; ++j )
            transA[j][x_a - 1 - i] = A[i][j];
 
 
 
cout<<"/n Введите ширину матрицы B";
cin>>x_b;
cout<<"/n Введите высоту матрицы B";
cin>>y_b;
 
 cout<<"/n Введите матрицу B";
 for ( int i = 0; i < x_b; ++i )
        for ( int j = 0; j < y_b; ++j )
           cin >> B[i][j];
 //транспонирование матрицы B
 int transB[y_b][x_b];
 for ( int i = 0; i < x_b; ++i )
        for ( int j = 0; j < y_b; ++j )
            transB[j][x_b - 1 - i] = B[i][j];
 
 
 cout << "A:" << endl;
    for ( int i = 0; i < x_a; ++i ) {
        for ( int j = 0; j < y_a; ++j )
            cout << A[i][j] << " ";
        cout << endl;
    }
        cout << "transA:" << endl;
    for ( int i = 0; i < y_a; ++i ) {
        for ( int j = 0; j < x_a; ++j )
            cout << transA[i][j] << " ";
        cout << endl;
    }
 
system("pause");
return 0;
}
Хелп! В чем же я не прав!?
0
Ev_Hyper
Заблокирован
12.03.2014, 09:53 #20
Mustakilloff, почитайте про динамические массивы. Но для начала лучше сделайте их статическими:
C++
1
int A[20][20], B[20][20];
0
Mustakilloff
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 37
13.03.2014, 13:21  [ТС] #21
Сделал так:

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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <stdio.h>
 
using namespace std;
int main() {
                setlocale(LC_ALL, "Russian"); 
 
int A[3][1]={{1},{1},{1}};
int B[2][3]={{1,2,0},{0,1,2}}; 
int k=0; 
int i=0;
int j=0;
 
 //транспонирование матрицы А
 int transA[1][3];
 for ( int i = 0; i < 3; ++i )
        for ( int j = 0; j < 1; ++j )
            transA[j][3 - 1 - i] = A[i][j];
 
 
 cout << "A:" << endl;
    for ( int i = 0; i < 3; ++i ) {
        for ( int j = 0; j < 1; ++j )
            cout << A[i][j] << " ";
        cout << endl;
    }
        cout << "transA:" << endl;
    for ( int i = 0; i < 1; ++i ) {
        for ( int j = 0; j < 3; ++j )
            cout << transA[i][j] << " ";
        cout << endl;
    }
    //транспонирование матрицы B
 int transB[3][2];
 for ( int i = 0; i < 2; ++i )
        for ( int j = 0; j < 1; ++j )
            transB[j][2 - 1 - i] = B[i][j];
 
 cout << "B:" << endl;
    for ( int i = 0; i < 2; ++i ) {
        for ( int j = 0; j < 3; ++j )
            cout << B[i][j] << " ";
        cout << endl;}
 cout << "transB:" << endl;
    for ( int i = 0; i < 3; ++i ) {
        for ( int j = 0; j < 2; ++j )
            cout << transB[i][j] << " ";
        cout << endl;}
 
    //Вывод матрицы С на экран 
    
    
      for(int i=0,j=0,ik=0,jk=0;i<3;i++) 
     { 
     for(jk=0;jk<1;jk++)    { 
       for(j=0;j<3;j++) 
{  k+=B[i][j]*transB[i][j]*transA[j][jk];} 
       int *C1=new int[];
  c1[i][jk]=k; 
   cout<<c[i][jk]<<"\n\n"; 
  k =0;       } 
   } 
    std::system("pause");
return 0;
}
Скрестил уроки Мамонтовой и easybudda
и тут ошибка в коде..
Я так и не разобрался с умножением =\..
Помогите, пожалуйста!
0
Mustakilloff
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 37
14.03.2014, 22:15  [ТС] #22
поможете с умножением?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 22:15
Привет! Вот еще темы с ответами:

Транспонирование матриц и сумма положительных элементов по строкам - C++
Помогите разработать программу формирование матриц А(3х3) и С(4х4) путем транспонирования заданных начальными значениями матриц В(3х3) и...

Транспонирование, умножение и вычитание матриц, отчет в Mathcad - C++
Помогите пожалуйста написать программу, нужно в С++ сделать программу транспонирующий, умножающий, вычитающий матрицы и чтобы ответ...

Ввод, транспонирование, умножение и сложение матриц используя функций - C++
Есть две матрицы, каждую из них надо транспонировать и умножить на себя, полученные две матрицы сложить, т.е в конце должна выводиться одна...

Транспонирование матриц. Вынести часть кода в отдельную функцию - C++
/* транспонировать матрицу, используя функции. я матрицу транспонировал, а через функцию не знаю как правильно делать, нужна помощь */ ...


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

Или воспользуйтесь поиском по форуму:
22
Yandex
Объявления
14.03.2014, 22:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru