Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49

Транспонирование матрицы

16.09.2012, 12:08. Показов 1902. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста разобраться.
Транспонирована ли матрица в заданном коде?
Точнее, что является транспонированием в заданном коде.
Буду очень благодарен.

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
#include <iostream.h>
#include <conio.h>
#include <math.h>
main()
{
const int a=3, b=3;
int arr[a][b];
float arr2[a][b];
int x=0, y=0;
float det;
cout<<"\nMatrix:\n";
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\n"<<x+1<<":"<<y+1<<" ";
cin>>arr[x][y];
}
}
cout<<"\n";
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\t"<<arr[x][y];
}
cout<<"\n";
}
cout<<"\n";
det=(arr[0][0]*arr[1][1]*arr[2][2])+(arr[0][1]*arr[1][2]*arr[2][0])+(arr[0][2]*arr[1][0]*arr[2][1])-(arr[0][2]*arr[1][1]*arr[2][0])-(arr[0][1]*arr[1][0]*arr[2][2])-(arr[0][0]*arr[1][2]*arr[2][1]);
arr2[0][0]=((arr[1][1]*arr[2][2])-(arr[1][2]*arr[2][1]))/det;
arr2[0][1]=((arr[1][0]*arr[2][2])-(arr[1][2]*arr[2][0]))/det;
arr2[0][2]=((arr[1][0]*arr[2][1])-(arr[1][1]*arr[2][0]))/det;
arr2[1][0]=((arr[0][1]*arr[2][2])-(arr[0][2]*arr[2][1]))/det;
arr2[1][1]=((arr[0][0]*arr[2][2])-(arr[0][2]*arr[2][0]))/det;
arr2[1][2]=((arr[0][0]*arr[2][1])-(arr[0][1]*arr[2][0]))/det;
arr2[2][0]=((arr[0][1]*arr[1][2])-(arr[0][2]*arr[1][1]))/det;
arr2[2][1]=((arr[0][0]*arr[1][2])-(arr[0][2]*arr[1][0]))/det;
arr2[2][2]=((arr[0][0]*arr[1][1])-(arr[0][1]*arr[1][0]))/det;
for (y=0; b>y; y++)
{
for (x=0; a>x; x++)
{
cout<<"\t"<<arr2[y][x];
}
cout<<"\n";
}
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2012, 12:08
Ответы с готовыми решениями:

Транспонирование матрицы
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void transponirovanie(int**mass1, int stolb, int str) {int **mass2; int i,j; ...

Транспонирование матрицы
Здравствуйте! Помогите пожалуйста! Создать целочисленную матрицу размерностью N=5 строк и M=3 столбцов. Транспонировать матрицу и...

Транспонирование матрицы
В среде MS Visual C++ разработать программу, которая формирует матрицу размером n х m (значения n, m вводятся с клавиатуры), транспонирует...

13
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.09.2012, 13:38
Цитата Сообщение от nikolas982 Посмотреть сообщение
Транспонирована ли матрица в заданном коде?
нет.
здесь вычисляется обратная матрица, повернутая на 90 градусов.
1
145 / 67 / 14
Регистрация: 30.12.2011
Сообщений: 137
16.09.2012, 13:57
Транспонированная матрица имеет вид

C++
1
a[i][j] = b[j][i];
1
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
16.09.2012, 14:53  [ТС]
В моем случае получается:

C++
1
2
3
4
5
6
7
for (int y = 0; b < y; y++) 
    for (int x = 0; a < x; x++) 
    { 
        tmp = a[i][i]; 
        arr[a][b] = arr2[b][a]; 
        arr2[b][a] = tmp; 
    }
И на сколько я понял, писать нужно сразу после вычисление минора?
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
16.09.2012, 15:23
Нужно учесть следующее: если определитель равен 0 (строка 30), то в г**коде строк 31-39 получаем деление на 0.
0
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
16.09.2012, 15:33  [ТС]
Цитата Сообщение от IrineK Посмотреть сообщение
Нужно учесть следующее: если определитель равен 0 (строка 30), то в г**коде строк 31-39 получаем деление на 0.
Речь сейчас не об этом, определитель будет равен нулю при введении определенных чисел.И не обязательно писать г**код, можно просто помочь, а не утыкать носом самоучку.
Я прошу помощи в транспонировании.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
16.09.2012, 15:46
Я уже решала эту задачу для вас: Найти обратную матрицу
Транспонирование: строки 54-59

Насчет самоучек, объем знаний данной категории может быть:
1) меньше
2) равен
3) больше
объему таковых у остальных обучаемых.
Выбирайтесь из подгруппы 1)
1
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
16.09.2012, 15:58  [ТС]
Я запускал то, что Вы писали мне.И очень благодарен.
Но написано уж очень сложно (для меня).
Написал свой код программы, все работает.Буквально пару дней назад, det не мог рассчитать, а тут даже минор нашел.Просто к написанному мною коду, хочу добавить транспонирование.
Возможно ли это без переделки кода?
Уткнувшись в очередной справочник, получилось вот что:

C++
1
2
3
4
5
6
7
for (int y = 0; b < y; y++) 
    for (int x = 0; a < x; x++) 
    { 
        tmp = a[i][i]; 
        arr[a][b] = arr2[b][a]; 
        arr2[b][a] = tmp; 
    }
Думаю написать это после расчета минора.

Стараюсь выбраться из 1 группы)
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.09.2012, 18:22
Цитата Сообщение от nikolas982 Посмотреть сообщение
Просто к написанному мною коду, хочу добавить транспонирование.
Возможно ли это без переделки кода?
возможно:
Сама матрица arr[][] становится транспонированной:
C++
1
2
3
4
5
6
7
for (int x = 1; a > x; x++) 
    for (int y = 0; y < x; y++) 
    { 
        tmp = a[x][y]; 
        arr[x][y] = arr[y][x]; 
        arr[y][x] = tmp; 
    }
Или так: матрица arr2[][] будет транспонированной (только тип ее сделайте не float , а int, как и у матрицы arr[][]):
C++
1
2
3
4
5
for (int y = 0; b > y; y++) 
    for (int x = 0; a > x; x++) 
    {         
        arr2[y][x] = arr[x][y];         
    }
1
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
16.09.2012, 19:18  [ТС]
Спасибо!)
Но как только я изменяю float на int, получается много ошибок.
Написал то, что Вы написали:
C++
1
2
3
4
5
for (int y = 0; b > y; y++) 
    for (int x = 0; a > x; x++) 
    {         
        arr2[y][x] = arr[x][y];         
    }

Вместо вот этого (строки 40-43):
C++
1
2
3
4
for (y=0; b>y; y++)
{
for (x=0; a>x; x++)
{
Возможно я что то не так делаю, может не нужно ничего удалять, а просто добавить пару строк в правильном порядке?Спасибо за то, что помогаете)
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.09.2012, 19:27
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
 
int main()
{
const int a=3, b=3;
int arr[a][b];
int arr2[a][b];
int x=0, y=0;
float det;
cout<<"\nMatrix:\n";
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\n"<<x+1<<":"<<y+1<<" ";
cin>>arr[x][y];
}
}
cout<<"\n";
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\t"<<arr[x][y];
}
cout<<"\n";
}
cout<<endl<<endl;
 
for (int y = 0; b > y; y++) 
    for (int x = 0; a > x; x++) 
    {         
        arr2[y][x] = arr[x][y];         
    }
 
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\t"<<arr2[x][y];
}
cout<<"\n";
}
return 0;
}
1
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
16.09.2012, 19:39  [ТС]
valeriikozlov, спасибо!)
Получается что нахождение det и минора было не важно?
По идее нужно, что бы полученная обратная матрица была транспонированной.

C++
1
2
3
4
5
6
7
8
9
10
det=(arr[0][0]*arr[1][1]*arr[2][2])+(arr[0][1]*arr[1][2]*arr[2][0])+(arr[0][2]*arr[1][0]*arr[2][1])-(arr[0][2]*arr[1][1]*arr[2][0])-(arr[0][1]*arr[1][0]*arr[2][2])-(arr[0][0]*arr[1][2]*arr[2][1]);
arr2[0][0]=((arr[1][1]*arr[2][2])-(arr[1][2]*arr[2][1]))/det;
arr2[0][1]=((arr[1][0]*arr[2][2])-(arr[1][2]*arr[2][0]))/det;
arr2[0][2]=((arr[1][0]*arr[2][1])-(arr[1][1]*arr[2][0]))/det;
arr2[1][0]=((arr[0][1]*arr[2][2])-(arr[0][2]*arr[2][1]))/det;
arr2[1][1]=((arr[0][0]*arr[2][2])-(arr[0][2]*arr[2][0]))/det;
arr2[1][2]=((arr[0][0]*arr[2][1])-(arr[0][1]*arr[2][0]))/det;
arr2[2][0]=((arr[0][1]*arr[1][2])-(arr[0][2]*arr[1][1]))/det;
arr2[2][1]=((arr[0][0]*arr[1][2])-(arr[0][2]*arr[1][0]))/det;
arr2[2][2]=((arr[0][0]*arr[1][1])-(arr[0][1]*arr[1][0]))/det;
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.09.2012, 19:48
Цитата Сообщение от nikolas982 Посмотреть сообщение
По идее нужно, что бы полученная обратная матрица была транспонированной.
хорошо, тогда так:
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
int main()
{
const int a=3, b=3;
int arr[a][b];
float arr2[a][b];
int x=0, y=0;
float det, tmp;
cout<<"\nMatrix:\n";
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\n"<<x+1<<":"<<y+1<<" ";
cin>>arr[x][y];
}
}
cout<<"\n";
for (x=0; a>x; x++)
{
for (y=0; b>y; y++)
{
cout<<"\t"<<arr[x][y];
}
cout<<"\n";
}
cout<<"\n";
det=(arr[0][0]*arr[1][1]*arr[2][2])+(arr[0][1]*arr[1][2]*arr[2][0])+(arr[0][2]*arr[1][0]*arr[2][1])-(arr[0][2]*arr[1][1]*arr[2][0])-(arr[0][1]*arr[1][0]*arr[2][2])-(arr[0][0]*arr[1][2]*arr[2][1]);
arr2[0][0]=((arr[1][1]*arr[2][2])-(arr[1][2]*arr[2][1]))/det;
arr2[0][1]=((arr[1][0]*arr[2][2])-(arr[1][2]*arr[2][0]))/det;
arr2[0][2]=((arr[1][0]*arr[2][1])-(arr[1][1]*arr[2][0]))/det;
arr2[1][0]=((arr[0][1]*arr[2][2])-(arr[0][2]*arr[2][1]))/det;
arr2[1][1]=((arr[0][0]*arr[2][2])-(arr[0][2]*arr[2][0]))/det;
arr2[1][2]=((arr[0][0]*arr[2][1])-(arr[0][1]*arr[2][0]))/det;
arr2[2][0]=((arr[0][1]*arr[1][2])-(arr[0][2]*arr[1][1]))/det;
arr2[2][1]=((arr[0][0]*arr[1][2])-(arr[0][2]*arr[1][0]))/det;
arr2[2][2]=((arr[0][0]*arr[1][1])-(arr[0][1]*arr[1][0]))/det;
for (y=0; b>y; y++)
{
for (x=0; a>x; x++)
{
cout<<"\t"<<arr2[y][x];
}
cout<<"\n";
}
cout<<endl<<endl;
for (x = 1; a > x; x++) 
    for ( y = 0; y < x; y++) 
    { 
        tmp = arr2[x][y]; 
        arr2[x][y] = arr2[y][x]; 
        arr2[y][x] = tmp; 
    }
for (y=0; b>y; y++)
{
for (x=0; a>x; x++)
{
cout<<"\t"<<arr2[y][x];
}
cout<<"\n";
}
return 0;
}
Я писал ранее:
Цитата Сообщение от valeriikozlov Посмотреть сообщение
здесь вычисляется обратная матрица, повернутая на 90 градусов.
на самом деле я немного ошибся.
Ваш начальный код вычисляет обратную матрицу, но не повернутую на 90 градусов, а транспонированную.
Поэтому если Вам нужно:

Цитата Сообщение от nikolas982 Посмотреть сообщение
По идее нужно, что бы полученная обратная матрица была транспонированной.
то Ваш начальный код это и делает
1
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
16.09.2012, 19:53  [ТС]
Большое спасибо, работает на ура!)Вы очень помогли мне.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2012, 19:53
Помогаю со студенческими работами здесь

Транспонирование матрицы
Здравствуйте, не могу разобраться в чем у меня ошибка. Валится на 3 итерации при входных данных 3,2 Восклицательными знаками выделил...

транспонирование матрицы
Имеется матрица размерности(6 на 3) необходимо ее транспонировать! вот мой код count=3; n=6; void __fastcall...

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

Транспонирование матрицы
Транспонировать матрицу x.

Транспонирование матрицы
Транспонировать матрицу(сделать строки столбцами) z = \begin{vmatrix} 2 &amp; 5 &amp; 1 &amp; 0\\ 0 &amp; 3 &amp; 5 &amp; 4\\ 1 &amp; 2 &amp; 0 &amp; 3...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru