0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 6
1

Выполнить транспонирование данной матрицы

21.06.2021, 13:18. Показов 1117. Ответов 6
Метки нет (Все метки)

Разработать алгоритм и программу. Дана матрица B размерностью nxm (2<=n,m<=50 – вводятся пользователем). Элементы матрицы bij являются целыми числами, принимающими значения в диапазоне [0, 200]. Заполнение матрицыо существляется в соответствии с выбором пользователя:
- пользовательский ввод с клавиатуры;
- заполнение случайными числами в установленном диапазоне.
Выполнить транспонирование данной матрицы.

Добавлено через 1 час 5 минут
Срочно нужно
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2021, 13:18
Ответы с готовыми решениями:

Выполнить транспонирование диагонали матрицы
Пользователь вводит двумерный массив. Выполнить его транспонирование его диагонали и вывести на...

Выполнить транспонирование квадратной матрицы
Здравствуйте дали такое задание. Объявите двумерный целочисленный массив, в котором n  n...

Транспонирование матрицы
Всем привет есть код транспонирования матрицы. Алгоритм вроде бы рабочий но, почему то не работает...

Транспонирование матрицы
Здравствуйте! Как повернуть не квадратную матрицу? То есть: 3 2 1 4 15 9 3 7...

6
Продавец времени
7112 / 3992 / 919
Регистрация: 12.03.2015
Сообщений: 18,777
21.06.2021, 14:00 2
Прога для вещественных матриц.
Для целых - заменить double на int.
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
#include <stdio.h>
#include <stdlib.h>
double** new_matrix(unsigned rows, unsigned cols)
{
  double** dest = new double*[rows];
  for (int row = 0; row != rows; row++)
  {
    dest[row] = new double[cols];
    for (int col = 0; col != cols; col++)
      dest[row][col] = (50 - rand() % 101) / 100.0;
  }
  return dest;
}
 
double** transp(double** src, unsigned rows, unsigned cols)
{
  double** dest = new double*[cols];
  for (int row = 0; row != cols; row++)
  {
    dest[row] = new double[rows];
    for (int col = 0; col != rows; col++)
      dest[row][col] = src[col][row];
  }
  return dest;
}
 
void print_matrix(double** src, unsigned rows, unsigned cols, const char* header)
{
  printf("\n%s [%d x %d]\n", header, rows, cols);
  for (int row = 0; row != rows; row++)
  {
    for (int col = 0; col != cols; col++) printf(" %5.2lg", src[row][col]);
    printf("\n");  
  }
}
 
void free_matrix(double** src, unsigned rows)
{
  for (int row = 0; row != rows; row++) delete []src[row];
  delete []src;
}
 
#define ROWS  4
#define COLS  7
 
int main()
{
  double** x = new_matrix(ROWS, COLS);
  print_matrix(x, ROWS, COLS, " >> source: ");
  
  double** t = transp(x, ROWS, COLS);
  print_matrix(t, COLS, ROWS, " >> dest: ");
  
  free_matrix(x, ROWS);
  free_matrix(t, COLS);
  return 0;
}
0
427 / 310 / 129
Регистрация: 09.02.2021
Сообщений: 1,094
Записей в блоге: 1
21.06.2021, 14:07 3
Лучший ответ Сообщение было отмечено September__ как решение

Решение

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
#include<iostream>
#include<iomanip>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
    system("chcp 1251>nul");
    srand(time(NULL));
    int n, m;
    do
    {
        cout << "Input n and m:";
        cin >> n>>m;
        if (n > 50 || n < 2 || m>50 || n < 2) cout << "(n,m)Перевишает максимальние размери массива, введите (n,m) еще раз" << endl;
    } while (n > 50 || n < 2||m>50||n<2);
    int** b = new int* [n];
    for (int i = 0; i < n; i++) {
        b[i] = new int[m];
    }
    int k;
    cout << "Input elements or random(1,2): ";
    cin >> k;
    cout << "Matrix:" << endl;
    if (k == 1) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                cout << "b[" << i << "][" << j << "] = "; cin >> b[i][j];
            }
        }
    }
    else if (k == 2) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                b[i][j] = rand() % 201;
                cout << setw(5) << b[i][j];
            }
            cout << endl;
        }
    }
    else {
        cout << "Eror" << endl;
    }
    int **c=new int*[m];
    for (int i = 0; i < m; i++) {
        c[i] = new int[n];
        for (int j = 0; j <n; j++) {
            c[i][j] = b[j][i];
        }
    }
    cout << "Result matrix:" << endl;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cout << setw(5) << c[i][j];
        }
        cout << endl;
    }
    for (int i = 0; i < n; i++) {
        delete c[i];
    }
    delete[]c;
    for (int i = 0; i < n; i++) {
        delete b[i];
    }
    delete[]b;
    system("pause>nul");
    return 0;
}
Добавлено через 32 секунды
Если нужно ,сделаю с функциями немного
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 6
21.06.2021, 17:01  [ТС] 4
Большое спасибо, можно еще блок-схему этого добра, если не сложно

Добавлено через 2 минуты
Для меня чем проще, тем лучше. Если можно упростить этот код, сделать меньше действий, то будет вообще супер.
0
427 / 310 / 129
Регистрация: 09.02.2021
Сообщений: 1,094
Записей в блоге: 1
21.06.2021, 17:17 5
Цитата Сообщение от matviiv Посмотреть сообщение
for (int i = 0; i < n; i++) {
        delete c[i];
    }
сдесь ошибку маленькую сделал там for (int i = 0; i < m; i++) должно бить

Добавлено через 4 минуты
September__,
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
81
82
83
84
85
86
#include<iostream>
#include<iomanip>
#include<ctime>
#include<cstdlib>
using namespace std;
int** trans(int** b, int n, int m, int** c);
void generation(int** b, int n, int m);
void print(int** b, int n, int m);
int main()
{
    system("chcp 1251>nul");
    srand(time(NULL));
    int n, m;
    do
    {
        cout << "Input n and m:";
        cin >> n >> m;
        if (n > 50 || n < 2 || m>50 || n < 2) cout << "(n,m)Перевишает максимальние размери массива, введите (n,m) еще раз" << endl;
    } while (n > 50 || n < 2 || m>50 || n < 2);
    int** b = new int* [n];
    for (int i = 0; i < n; i++) {
        b[i] = new int[m];
    }
    int k;
    cout << "Input elements or random(1,2): ";
    cin >> k;
    cout << "Matrix:" << endl;
    if (k == 1) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                cout << "b[" << i << "][" << j << "] = "; cin >> b[i][j];
            }
        }
    }
    else if (k == 2) {
        generation(b, n, m);
        print(b, n, m);
    }
    else {
        cout << "Eror" << endl;
    }
    int** c = new int* [m];
    for (int i = 0; i < m; i++) {
        c[i] = new int[n];
    }
    trans(b, n, m, c);
    cout << "Result matrix:" << endl;
    print(c, m, n);
    for (int i = 0; i < m; i++) {
        delete c[i];
    }
    delete[]c;
    for (int i = 0; i < n; i++) {
        delete b[i];
    }
    delete[]b;
    system("pause>nul");
    return 0;
}
int** trans(int** b, int n, int m, int** c) {
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            c[i][j] = b[j][i];
        }
    }
    return c;
}
 
void generation(int** b, int n, int m)
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            b[i][j] = rand() % 201;
        }
    }
}
 
void print(int** b, int n, int m)
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << setw(5) << b[i][j];
        }
        cout << endl;
    }
}
Немного добавил функций,ну можно еще,но я уже чтоб не запутать
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 6
21.06.2021, 17:35  [ТС] 6
А можно подписать что делает каждая функция?

Добавлено через 6 минут
Мне просто еще блок-схема нужна, а так тяжеловато будет её сделать
0
427 / 310 / 129
Регистрация: 09.02.2021
Сообщений: 1,094
Записей в блоге: 1
21.06.2021, 17:47 7
September__, ну по названию всьо понятно generation генерирует рандомно, print виводит а trans транспонирует
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2021, 17:47
Помогаю со студенческими работами здесь

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

Транспонирование матрицы
Что нужно изменить, дабы вместо подсчета произведения элементов матрицы, матрица просто...

Транспонирование матрицы
Объясните где ошибка и как ее исправить Задание написать функцию переворачивающие двумерный...

Транспонирование матрицы
Доброго времени суток,я вроде бы написал функцию,которая вроде бы это делает, однако запутался в...

Транспонирование матрицы
int _tmain(int argc, _TCHAR* argv) { const int n=5; int a; srand(GetTickCount()); for (int...

Транспонирование матрицы
Как в C++ сделать транспонированную матрицу?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru