Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
#1

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

14.05.2012, 01:39. Просмотров 3381. Ответов 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(
Вот тот же код, только на паскале:
http://www.cyberforum.ru/pascal/thread295229.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 01:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Зеркально отразить элементы матрицы относительно главной диагонали (C++):

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

Зеркально отразить элементы матрицы относительно побочной диагонали - C++
Заданная квадратная матрица (n × n). Зеркально отразить ее элементы относительно побочной диагонали const int n = 4; int a; int i,...

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

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

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

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

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

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

Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы - C++
Здравствуйте! Помогите написать 3 программмы на C++ на задачи с двумерными массивами 3. Дана матрица размера M x N. Зеркально...

Зеркально отразить заданную квадратную матрицу относительно побочной диагонали - C++
Задана матрица A размерности n x n. Зеркально отразить ее относительно побочной диагонали.

Зеркально поменять элементы матрицы выше и ниже главной диагонали - C++
Помогите пожалуйста. Каким образом можно поменять элементы матрицы выше и ниже главной диагонали( зеркально). Не могу добиться...


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

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

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