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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:36     Транспонировать матрицу, не используя вспомогательного массива #1
Здравствуйте. Помогите, пожалуйста, написать программу: задана матрица (двумерный массив) вещественных чисел размерностью MxN. Транспонировать матрицу, не используя вспомогательного массива. Результат вывести на экран. Матрица должна вводиться с клавиатуры. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 23:36     Транспонировать матрицу, не используя вспомогательного массива
Посмотрите здесь:

C++ транспонировать матрицу
транспонировать произвольную матрицу C++
C++ Транспонировать матрицу
C++ удаление лишних пробелов с помощью вспомогательного массива
Циклический сдвиг массива без использования вспомогательного массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:44     Транспонировать матрицу, не используя вспомогательного массива #2
Если вам уж очень нужен вспомогательный массив, то можно просто сделать массив, который необходимо транспонировать, в 2 раза больше и работать с неиспользуемой при вводе частью.
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:50  [ТС]     Транспонировать матрицу, не используя вспомогательного массива #3
Мне наоборот, НЕ нужен вспомогательный массив
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:51     Транспонировать матрицу, не используя вспомогательного массива #4
VladosLancer, Если вы можете написать со вспомогательным, то можно от него избавиться, используя вместо вспомагательного массив А.
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:55  [ТС]     Транспонировать матрицу, не используя вспомогательного массива #5
А можно полный код программы, а то не совсем понимаю как это сделать. Если Вам не трудно, конечно...
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:58     Транспонировать матрицу, не используя вспомогательного массива #6
C++
1
2
3
for (int i=0; i<n; ++i)
for (int j=0; j<m; ++j)
  b[i][j] = a[j][i];
Только вместо массива B прикрутить что-то вроде (не говорю, что это правильно, т.к. пишу тут):
C++
1
2
3
for (int i=0; i<n; ++i)
for (int j=0; j<m; ++j)
  a[n+i][ j] = a[j][i];
(SkyNet)
 Аватар для (SkyNet)
22 / 40 / 6
Регистрация: 25.10.2011
Сообщений: 175
08.12.2012, 00:01     Транспонировать матрицу, не используя вспомогательного массива #7
Без вспомогательного можно только квадратную, вы сначала Векторную алгебру посмотрите
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
08.12.2012, 00:04     Транспонировать матрицу, не используя вспомогательного массива #8
Как показывает практика, то нет
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
08.12.2012, 00:28  [ТС]     Транспонировать матрицу, не используя вспомогательного массива #9
Ну вот, кое-что попробовал написать. Проверьте, пожалуйста, правильно ли, я тут вроде как не использовал вспомогательный массив, или я не прав?
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
#include <iostream>
#include <iomanip.h>
using namespace std;
const int size1 = 5;
const int size2 = 5;
void print(int [][size2]);
int main()
{
int array[size1][size2] = {{ 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}};
int temp;
cout << "Ishodnaya matrica: " << endl << endl;
print(array);
cout << endl;
for(int i = 0; i < size1; i++)
{
for(int j = i; j < size2; j++)
{
temp = array[i][j];
array[i][j] = array[j][i];
array[j][i] = temp;
}
}
cout << "Transponirovannaya matrica: " << endl << endl;
print(array);
cout << endl;
int transpArray[size1][size2];
for(int i = 0; i < size1; i++)
for(int j = 0; j < size2; j++)
transpArray[j][i] = array[i][j];
cout << "Transponirovannaya matrica: " << endl << endl;
print(transpArray);
cout << endl;
}
void print (int array[][size2])
{
for(int i = 0; i < size1; i++)
{
for(int j = 0; j < size2; j++)
{
cout << setw(2) <<
array[i][j] << " ";
}
cout << endl << endl;
}
 system("pause");
}
Добавлено через 6 минут
Хотя стоп, немного не то. Вот так
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
#include <iostream>
#include <iomanip.h>
using namespace std;
const int size1 = 5;
const int size2 = 5;
void print(int [][size2]);
int main()
{
int array[size1][size2] =
{{ 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}};
int temp;
cout << "Ishodnaya matrica: " << endl << endl;
print(array);
cout << endl;
for(int i = 0; i < size1; i++)
{
for(int j = i; j < size2; j++)
{
temp = array[i][j];
array[i][j] = array[j][i];
array[j][i] = temp;
}
}
cout << "Transponirovannaya matrica: " << endl << endl;
print(array);
cout << endl;
cout << "Transponirovannaya matrica: " << endl << endl;
cout << endl;
}
void print (int array[][size2])
{
for(int i = 0; i < size1; i++)
{
for(int j = 0; j < size2; j++)
{
cout << setw(2) <<
array[i][j] << " ";
}
cout << endl << endl;
}
 system("pause");
}
Вобщем, вот эти строки не нужны
C++
1
2
3
4
int transpArray[size1][size2];
for(int i = 0; i < size1; i++)
for(int j = 0; j < size2; j++)
transpArray[j][i] = array[i][j];
Вот теперь проверьте
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 00:38     Транспонировать матрицу, не используя вспомогательного массива #10
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
#include <iostream>
#include <vector>
#include <iomanip>
 
const int n = 10;
const int m = 10;
 
int main()
{
    std::vector<int*> matrix(n);
    std::vector<int> nums(m * n);
 
    for (int i = 0; i < n; ++i)
        matrix[ i ] = &nums[i * m];
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            matrix[i][j] = (i + j);
            std::cout << std::setw(3) << matrix[i][j];
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            std::cout << std::setw(3) << matrix[j][i];
        std::cout << std::endl;
    }
    std::cout << std::endl;
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2012, 00:46     Транспонировать матрицу, не используя вспомогательного массива
Еще ссылки по теме:

Транспонировать квадратную матрицу, используя только оператор for. Новой матрицы не создавать. Вывести исходную и транспониро-ванную матрицы C++
Как можно транспонировать матрицу NxM из одномерного массива? C++
C++ Транспонировать матрицу

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

Или воспользуйтесь поиском по форуму:
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
08.12.2012, 00:46  [ТС]     Транспонировать матрицу, не используя вспомогательного массива #11
activnaya, а у меня не правильно?
Yandex
Объявления
08.12.2012, 00:46     Транспонировать матрицу, не используя вспомогательного массива
Ответ Создать тему
Опции темы

Текущее время: 02:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru