Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
1

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

07.12.2012, 23:36. Просмотров 1654. Ответов 10
Метки нет (Все метки)

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

Транспонировать матрицу, используя вспомогательную переменную
n = int(input("n => ")) # ввод матрицы, элементы в строке вводятся через...

Как можно транспонировать матрицу NxM из одномерного массива?
Задача была вывести из одномерного массива длинной в 30 символов матрицу,...

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

Сформировать квадратную матрицу; транспонировать матрицу и инвертировать порядок элементов каждой ее строки
Заданы два одномерных массива одинаковой длины: R и S.Сформировать квадратную...

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива.
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала...

10
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:44 2
Если вам уж очень нужен вспомогательный массив, то можно просто сделать массив, который необходимо транспонировать, в 2 раза больше и работать с неиспользуемой при вводе частью.
0
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:50  [ТС] 3
Мне наоборот, НЕ нужен вспомогательный массив
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:51 4
VladosLancer, Если вы можете написать со вспомогательным, то можно от него избавиться, используя вместо вспомагательного массив А.
0
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:55  [ТС] 5
А можно полный код программы, а то не совсем понимаю как это сделать. Если Вам не трудно, конечно...
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 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];
0
(SkyNet)
22 / 40 / 15
Регистрация: 25.10.2011
Сообщений: 175
08.12.2012, 00:01 7
Без вспомогательного можно только квадратную, вы сначала Векторную алгебру посмотрите
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
08.12.2012, 00:04 8
Как показывает практика, то нет
0
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];
Вот теперь проверьте
0
activnaya
256 / 46 / 4
Регистрация: 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;
}
1
VladosLancer
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
08.12.2012, 00:46  [ТС] 11
activnaya, а у меня не правильно?
0
08.12.2012, 00:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2012, 00:46

Циклический сдвиг массива без использования вспомогательного массива
Ребят, помогите пожадуйста написать лабу...Времени ктастрофически не хватает,...

Транспонировать матрицу
Как задать двумерный массив 3 на 3? Поменять строки и столбцы местами, строки...

Транспонировать матрицу [3][4] в [4][3]
Здравствуйте Подскажите как транспортировать матрицу #define SIZE1 3 #define...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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