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

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

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

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

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

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

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

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

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

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

10
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:44 #2
Если вам уж очень нужен вспомогательный массив, то можно просто сделать массив, который необходимо транспонировать, в 2 раза больше и работать с неиспользуемой при вводе частью.
0
VladosLancer
1 / 1 / 10
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:50  [ТС] #3
Мне наоборот, НЕ нужен вспомогательный массив
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:51 #4
VladosLancer, Если вы можете написать со вспомогательным, то можно от него избавиться, используя вместо вспомагательного массив А.
0
VladosLancer
1 / 1 / 10
Регистрация: 03.10.2011
Сообщений: 96
07.12.2012, 23:55  [ТС] #5
А можно полный код программы, а то не совсем понимаю как это сделать. Если Вам не трудно, конечно...
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 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,295
Записей в блоге: 2
Завершенные тесты: 1
08.12.2012, 00:04 #8
Как показывает практика, то нет
0
VladosLancer
1 / 1 / 10
Регистрация: 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 / 10
Регистрация: 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...

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

Транспонировать матрицу
Дана действительная квадратная матрица порядка n. Преобразовать матрицу по...


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

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

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