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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 01:39     Зеркально отразить элементы матрицы относительно главной диагонали #1
Дана квадратная матрица 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(
Вот тот же код, только на паскале:
http://www.cyberforum.ru/pascal/thread295229.html
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 01:39     Зеркально отразить элементы матрицы относительно главной диагонали
Посмотрите здесь:

Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы C++
C++ Зеркально отразить элементы матрицы
Зеркально отразить ее элементы относительно побочной диагонали. C++
Зеркально отразить матрицу относительно главной диагонали и найти строки, элементы которой образуют последовательность C++
Зеркально отразить матрицу относительно главной диагонали. C++
Зеркально отразить элементы матрицы элементы относительно горизонтальной оси C++
Зеркально отразить заданную квадратную матрицу относительно побочной диагонали C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.05.2012, 01:43     Зеркально отразить элементы матрицы относительно главной диагонали #2
ну программа отрабатывает и все, завершается на этом.
в конце перед return 0; нужно поставить какой-нибудь getch() или system("pause") чтобы программа остановилась и ждала нажатия какой-нибудь кнопки и только после этого нажатия завершалась.
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 01:45  [ТС]     Зеркально отразить элементы матрицы относительно главной диагонали #3
DU, Если бы...она просто завершается, выводит исходную матрицу, думает, и потом завершается!
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 01:46  [ТС]     Зеркально отразить элементы матрицы относительно главной диагонали #4
Вот скрин:
Миниатюры
Зеркально отразить элементы матрицы относительно главной диагонали  
antoha398
155 / 155 / 3
Регистрация: 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;         }
DU
1478 / 1054 / 45
Регистрация: 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;
}
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 02:05  [ТС]     Зеркально отразить элементы матрицы относительно главной диагонали #7
да, но теперь в другом проблема, вот скрин:
Миниатюры
Зеркально отразить элементы матрицы относительно главной диагонали  
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 02:07  [ТС]     Зеркально отразить элементы матрицы относительно главной диагонали #8
DU, Спасибо, разобрался!
DU
1478 / 1054 / 45
Регистрация: 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;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 02:24     Зеркально отразить элементы матрицы относительно главной диагонали
Еще ссылки по теме:

C++ Зеркально поменять элементы матрицы выше и ниже главной диагонали
Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии C++
C++ Дана квадратная матрица порядка 2n+1 . Зеркально отразить ее элементы относительно горизонтальной оси симметри
C++ Зеркально отразить элементы матрицы относительно главной диагонали используя указатели
C++ Зеркально отразить элементы матрицы относительно побочной диагонали

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

Или воспользуйтесь поиском по форуму:
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
14.05.2012, 02:24  [ТС]     Зеркально отразить элементы матрицы относительно главной диагонали #10
DU, да, а мне как раз нужно, что бы и диагональные элементы были видны, т.к. нагляднее получается!
Yandex
Объявления
14.05.2012, 02:24     Зеркально отразить элементы матрицы относительно главной диагонали
Ответ Создать тему
Опции темы

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