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

Функция транспонирования динамической матрицы N*M - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Renevity
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
15.03.2014, 11:59     Функция транспонирования динамической матрицы N*M #1
Собственно сабж. Если точнее, проблема возникла с не самим алгоритмом транспонирования, а с выводом (сначала выводится обычная). Не получается вывести с помощью функции вывода, матрицу M*N, т.к как понимаю в функции вывода память выделяется соответственно для исходной матрицы N*M. Пытался менять память и присваивать значения, но я такой нуб, что у меня только всё крэшилось.

Добавлено через 17 часов 0 минут
Ап!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_include
Студент
 Аватар для _include
52 / 52 / 12
Регистрация: 17.09.2012
Сообщений: 291
Записей в блоге: 2
Завершенные тесты: 1
15.03.2014, 12:21     Функция транспонирования динамической матрицы N*M #2
Может будет полезно: матрица N*N. Думаю, легко будет преобразовать в нужную вам
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
// 7_1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <locale>
 
using namespace std;
 
#define n 5
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    float matrixOne[n][n];
    cout << "Введите элементы матрицы" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
        cout<< "Matrix A[" << i+1 << "][" << j+1 << "]: " ;
        cin >> matrixOne[i][j];
        cout << endl;
        }
    }
    
    cout << "Matrix A:" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
        cout.width(5);
        cout << " " << matrixOne[i][j];
        }
        cout << endl;
    }
 
    cout << endl << "The transpose:" << endl;
    for ( int j = 0; j < n; j++)
    {
        for (int i = 0; i < n; i++)
        {
            cout.width(5);
            cout << " " << matrixOne[i][j];
        }
        cout << endl;
    }
 
 
    _getch();
    return 0;
}
Renevity
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
16.03.2014, 12:57  [ТС]     Функция транспонирования динамической матрицы N*M #3
С матрицей N*N всё просто. Как преобразовать нужную, т.е чтобы работало с N*M, я не пойму.

Добавлено через 6 часов 34 минуты
Тишина, потому что трудновато или наоборот слишком просто? Подкиньте хотя бы идею, что нужно примерно добавить к алгоритму транспонирования? Чему нужно уделить внимание?

Добавлено через 17 часов 35 минут
Ок. Спасибо.
_include
Студент
 Аватар для _include
52 / 52 / 12
Регистрация: 17.09.2012
Сообщений: 291
Записей в блоге: 2
Завершенные тесты: 1
16.03.2014, 13:17     Функция транспонирования динамической матрицы N*M #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Renevity Посмотреть сообщение
С матрицей N*N всё просто. Как преобразовать нужную, т.е чтобы работало с N*M, я не пойму.
Добавлено через 6 часов 34 минуты
Тишина, потому что трудновато или наоборот слишком просто? Подкиньте хотя бы идею, что нужно примерно добавить к алгоритму транспонирования? Чему нужно уделить внимание?
Добавлено через 17 часов 35 минут
Ок. Спасибо.
Я же не живу в компьютере, правильно?
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
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <iomanip>
 
//----------------
 
int** new2DArray(const int m, const int n)
{
   int** arr = new int*[m];
   for(int i = 0; i < m; ++i)
      arr[i] = new int[n];
   return arr;
}
 
//---------------
void delete2DArray(int** arr, const int m)
{
   for(int i = 0; i < m; ++i)
      delete[] arr[i];
   delete[] arr;
}
 
//--------------- 
 
int** newTransposeMatrix(int** matrix, const int m, const int n) 
{
   int** res = new2DArray(n, m);
   
   for(int i = 0; i < m; ++i)    
      for(int j = 0; j < n; ++j)        
     res[j][i] = matrix[i][j];            
   
   return res;
}
 
//----------------
void print2DArray(int** arr, const int m, const int n)
{
   for(int i = 0; i < m; ++i)
   {
      for(int j = 0; j < n; ++j)
     std::cout << std::setw(4) << arr[i][j];
      std::cout << '\n';
   }   
}
//---------------
 
int main()
{
   // вводим размеры матрицы
   std::cout << "Input m: ";
   int m;
   std::cin >> m;
   
   std::cout << "Input n: ";
   int n;
   std::cin >> n;
   
   // создаём новую матрицу MxN
   int** mtrx = new2DArray(m, n);
 
   // заполняем 
   for(int i = 0; i < m; ++i)   
      for(int j = 0; j < n; ++j)      
     mtrx[i][j] = j;
              
   // выводим
   std::cout << "Matrix\n";
   print2DArray(mtrx, m, n);
 
   // получаем транспонированную матрицу и выводим её на экран
   int** tmtrx = newTransposeMatrix(mtrx, m, n);
   std::cout << "\nTranspose matrix\n";   
   print2DArray(tmtrx, n, m);
 
   // освобождаем выделенную память
   delete2DArray(mtrx, m);
   delete2DArray(tmtrx, n);
 
   return 0;
}
Прежде чем кричать, поискали бы... Код взят отсюда:
Функция транспонирования матрицы
Renevity
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
16.03.2014, 13:28  [ТС]     Функция транспонирования динамической матрицы N*M #5
Цитата Сообщение от _include Посмотреть сообщение
Я же не живу в компьютере, правильно?

Прежде чем кричать, поискали бы... Код взят отсюда:
Функция транспонирования матрицы
Благодарю, пойду вникать в суть, что я делал не так.

Тот топик вроде бы не находил, а до этого весь гугл изнасиловал.
Yandex
Объявления
16.03.2014, 13:28     Функция транспонирования динамической матрицы N*M
Ответ Создать тему
Опции темы

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