Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
1

Зеркально отразить элементы матрицы относительно главной диагонали

14.05.2012, 01:39. Показов 8678. Ответов 9
Метки нет (Все метки)

Дана квадратная матрица A порядка M. Зеркально отразить ее элементы относительно главной диагонали (при этом элементы главной диагонали останутся на прежнем месте, элемент A1,2 поменяется местами с A2,1, элемент A1,3 — с A3,1 и т. д.). Вспомогательную матрицу не использовать.
Вот код:
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
int main()
{ 
    setlocale(LC_ALL, "");
    srand(time(NULL));
    int m,n;
    cout<<"Введите размер матрицы M: "; cin>>m;
    int **C = new int*[m],i,j;
    cout<<"Исходная матрица равна: "<<endl;
    for (i=0;i<m;i++)
    {
        *(C+i)=new int[m];
        for (j=0;j<m;j++)
        {
            *(*(C+i)+j)=rand()%21;
            cout<<*(*(C+i)+j)<<"\t";
        }
        cout<<endl;
    }
    int x;
    for(i=0; m-1; ++i)
    {
        for(j=0; m-i; ++j)
        {
            x=C[i][j];
            C[i][j]=C[m-j+1][m-i+1];
            C[m-j+1][m-i+1]=x;
        }
    } 
    for(i=1; i<m; ++i)
    {
        for(j=1; j<m; ++j)
        {
            cout<<C[i][j]<<"\t";
        }
        cout<<endl;
    } 
    return 0;
}
При компиляции, завершается окно cmd(
Вот тот же код, только на паскале:
https://www.cyberforum.ru/pascal/thread295229.html
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2012, 01:39
Ответы с готовыми решениями:

Зеркально отразить элементы матрицы относительно главной диагонали используя указатели
Помогите решить эту задачу с помощью указателей. Ниже приведен решение без указателей. Попробовал...

Зеркально отразить элементы матрицы относительно побочной диагонали
Дана квадратная матрица NxN, состоящая из натуральных чисел.Зеркально отразить ее элементи...

Зеркально отразить элементы матрицы относительно побочной диагонали
Заданная квадратная матрица (n × n). Зеркально отразить ее элементы относительно побочной диагонали...

Зеркально отразить матрицу относительно главной диагонали и найти строки, элементы которой образуют последовательность
Задана матрица A(n,n). Зеркально отразить ее относительно главной диагонали. В преобразованной...

9
DU
1493 / 1139 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
14.05.2012, 01:43 2
ну программа отрабатывает и все, завершается на этом.
в конце перед return 0; нужно поставить какой-нибудь getch() или system("pause") чтобы программа остановилась и ждала нажатия какой-нибудь кнопки и только после этого нажатия завершалась.
0
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 01:45  [ТС] 3
DU, Если бы...она просто завершается, выводит исходную матрицу, думает, и потом завершается!
0
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 01:46  [ТС] 4
Вот скрин:
0
Миниатюры
Зеркально отразить элементы матрицы относительно главной диагонали  
156 / 156 / 27
Регистрация: 29.03.2012
Сообщений: 418
14.05.2012, 01:54 5
здесь явно что-то упустили в условии циклов =)
C++
1
2
3
4
5
6
for(i=0; m-1; ++i)  
   {       
  for(j=0; m-i; ++j)     
    {             x=C[i][j];        
     C[i][j]=C[m-j+1][m-i+1];       
      C[m-j+1][m-i+1]=x;         }
0
DU
1493 / 1139 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
14.05.2012, 01:55 6
ну да. там при первой итерации идет выход за пределы массива С[m-0+1][m-0+1]
Вот попробуйте:
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
int main()
{ 
    setlocale(LC_ALL, "");
    srand(time(NULL));
    int m = 3;
    //cout<<"Введите размер матрицы M: "; cin>>m;
 
    int **C = new int*[m],i,j;
    cout<<"Исходная матрица равна: "<<endl;
    for (i=0;i<m;i++)
    {
        *(C+i)=new int[m];
        for (j=0;j<m;j++)
        {
            *(*(C+i)+j)=rand()%21;
            cout<<*(*(C+i)+j)<<"\t";
        }
        cout<<endl;
    }
 
    // тут првда диагональные элементы тоже как бы отображаются. если хочется оптимизировать
    // то проход нужно долеть от второго до последнего в первом цикле и от нуля до i-1 во втором.
    for(i=0; i < m; ++i)
    {
        for(j=0; j < i; ++j)
        {
            const int x=C[i][j];
            C[i][j]=C[j][i];
            C[j][i]=x;
        }
    }
     /*
    // вот так:
    for(i=1; i < m; ++i)
    {
        for(j=0; j < i-1; ++j)
        {
            const int x=C[i][j];
            C[i][j]=C[j][i];
            C[j][i]=x;
        }
    }
    */
    
 
    cout << "!!!!!!!!!!!" << endl;
    for(i=0; i<m; ++i)
    {
        for(j=0; j<m; ++j)
        {
            cout<<C[i][j]<<"\t";
        }
        cout<<endl;
    } 
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 02:05  [ТС] 7
да, но теперь в другом проблема, вот скрин:
0
Миниатюры
Зеркально отразить элементы матрицы относительно главной диагонали  
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 02:07  [ТС] 8
DU, Спасибо, разобрался!
0
DU
1493 / 1139 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
14.05.2012, 02:09 9
ну если вы оставили свой последний цикл вывода то понятно. я и его исправил тоже.
C++
1
2
3
4
5
6
7
8
9
    // вот это выводит матрицу на еденицу меньшую по ширине и высоте. гляньте в мой код
    for(i=1; i<m; ++i)
    {
        for(j=1; j<m; ++j)
        {
            cout<<C[i][j]<<"\t";
        }
        cout<<endl;
    }
0
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 02:24  [ТС] 10
DU, да, а мне как раз нужно, что бы и диагональные элементы были видны, т.к. нагляднее получается!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2012, 02:24

Зеркально отразить матрицу относительно главной диагонали.
Задана матрица A(n,n). Зеркально отразить ее относительно главной диагонали. В преобразованной...

Отразить элементы матрицы симметрично относительно главной диагонали
Сформировать квадратный массив целых чисел размерности nxn, где n&lt;10 – вводится с клавиатуры,...

Зеркально отразить ее элементы относительно побочной диагонали.
Дана квадратная матрица A порядка M. Зеркально отразить ее элементы относительно побочной...

Транспонировать матрицу и зеркально отразить ее элементы относительно побочной диагонали
Сначала транспонировать квадратный целочисленный массив matrix, а затем его элементы отразить...


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

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

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