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

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

Войти
Регистрация
Восстановить пароль
 
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
#1

Проверка матрицы на симетричность относительно побочной диагонали - C++

06.09.2012, 08:07. Просмотров 1002. Ответов 14
Метки нет (Все метки)

проверка матрици на симетричность относительно побочной диагонали?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 08:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка матрицы на симетричность относительно побочной диагонали (C++):

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

Относительно побочной диагонали матрицы отобразить часть, находящуюся выше неё - C++
Относительно побочной диагонали отобразить часть, находящуюся выше неё, отобразить ниже, а часть, назодящуюся ниже неё, отобразить выше, ну...

Поменять местами элементы матрицы, расположенные симметрично относительно побочной диагонали - C++
Поменять местами элементы матрицы, расположенные симметрично относительно побочной диагонали

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

Отобразить матрицу симетрично относительно побочной диагонали - C++
Помогите. Нужно в c++ заполнить матрицу случайными числами. Отобразить ее симетрично относительно побочной диагонали !!!

Отразить матрицу симметрично относительно побочной диагонали - C++
Никак не могу решить задачку: заполнить матрицу случайными числами, отобразить матрицу симметрично относительно побочной диагонали. вот,...

14
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
06.09.2012, 08:12 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
int main(int argc, char argv[]) 
{    
    const int HEIGHT  = 4;
    const int WIDTH = 4;
    int arr [HEIGHT] [WIDTH] =    { {1,1,1,1}, {1,1,1,0}, {1,1,0,0}, {1,0,0,0 } };
    bool flag = true;
    for (int i = 0; i < HEIGHT; ++i)
    {
        for(int j = 0; j < WIDTH; ++j)
            std::cout << arr[i][j] << ' ';
        std::cout << std::endl;
    }
    for (int i = 1; i < HEIGHT - 1; ++i)
        for (int j = i; j < WIDTH -1; ++j)
            if(arr[i][j] != arr[j][i])
                flag = false;
    std::cout << (flag ? "Matrix is symmetric" : "Not symmetric");
    std::cin.get();
    return 0;
}
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 08:15  [ТС] #3
а в это задачи не надо делалать ввод с клавиатуры
0
cmath
Модератор
2444 / 1685 / 134
Регистрация: 11.08.2012
Сообщений: 3,346
Завершенные тесты: 6
06.09.2012, 08:22 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
float Matrix[Dim][Dim];
//типо заполнили элементами где-то здесь :)
bool symm = true;// если не симметрична, то на выходе станет false
bool br = false;
for(int i = 0; i <= Dim-1; i++)
{
for(int j = Dim-1; j >= 0; j--)
{
 if(Matrix[i][j] != Matrix[j][i])// смысл в том, чтобы начинать движение не из левого, 
{//а из правого верхнего угла
symm = false; 
br = true; 
break;
}
}
if(br)break;
}
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 08:24  [ТС] #5
Это правельно
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
#include <iostream>
using namespace std;
const int MAX = 100;
int main() 
{    
    int arr [MAX] [MAX];
    int n, m;
    cout << "M = ";
    cin >> m;
    cout << "N = ";
    cin >> n;
    bool flag = true;
    for (int i = 0; i < m; ++i)
    {
        for(int j = 0; j < n; ++j)
            cout << arr[i][j] << ' ';
            cout << endl;
    }
    for (int i = 1; i < m - 1; ++i)
        for (int j = i; j < n -1; ++j)
            if(arr[i][j] != arr[j][i])
                flag = false;
    cout << (flag ? "Matrix is symmetric" : "Not symmetric");
    system("pause");
    return 0;
}
0
cmath
Модератор
2444 / 1685 / 134
Регистрация: 11.08.2012
Сообщений: 3,346
Завершенные тесты: 6
06.09.2012, 08:27 #6
Цитата Сообщение от Sylar9 Посмотреть сообщение
for (int i = 1; i < HEIGHT - 1; ++i)
for (int j = i; j < WIDTH -1; ++j)
if(arr[i][j] != arr[j][i])
flag = false;
Вы проверяете относительно главной диагонали, а не побочной
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 08:28  [ТС] #7
Цитата Сообщение от Hydrogen Посмотреть сообщение
Вы проверяете относительно главной диагонали, а не побочной
я что то не могу понят что надо ?
0
cmath
Модератор
2444 / 1685 / 134
Регистрация: 11.08.2012
Сообщений: 3,346
Завершенные тесты: 6
06.09.2012, 08:30 #8
Цитата Сообщение от Sylar9 Посмотреть сообщение
я что то не могу понят что надо ?
Вы движетесь из левого верхнего угла, т.е. по направлению главной диагонали, а надо из верхнего правого. Я выше уже отписал, как это устроить.
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 08:31  [ТС] #9
Цитата Сообщение от Hydrogen Посмотреть сообщение
Вы движетесь из левого верхнего угла, т.е. по направлению главной диагонали, а надо из верхнего правого. Я выше уже отписал, как это устроить.
вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
float Matrix[Dim][Dim];
//типо заполнили элементами где-то здесь :)
bool symm = true;// если не симметрична, то на выходе станет false
bool br = false;
for(int i = 0; i <= Dim-1; i++)
{
for(int j = Dim-1; j >= 0; j--)
{
 if(Matrix[i][j] != Matrix[j][i])// смысл в том, чтобы начинать движение не из левого, 
{//а из правого верхнего угла
symm = false; 
br = true; 
break;
}
}
if(br)break;
}
0
cmath
Модератор
2444 / 1685 / 134
Регистрация: 11.08.2012
Сообщений: 3,346
Завершенные тесты: 6
06.09.2012, 08:35 #10
Цитата Сообщение от Sylar9 Посмотреть сообщение
вот это
Да, это
смотрите на параметры цикла
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 08:35  [ТС] #11
Цитата Сообщение от Hydrogen Посмотреть сообщение
Вы проверяете относительно главной диагонали, а не побочной
Вот я доделал код
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
#include <iostream>
using namespace std;
const int MAX = 100;
int main() 
{    
    float Matrix[Dim][Dim];
    int n, m;
    cout << "M = ";
    cin >> m;
    cout << "N = ";
    cin >> n;
    for (int i=0; i<m; i++)
    for(int j=0; j<n; j++)
    {
      cout << "a[" << i << "][" << j << "] = ";
      cin >> Matrix[i][j];
    }
bool symm = true;
bool br = false;
for(int i = 0; i <= MAX-1; i++)
{
for(int j = MAX-1; j >= 0; j--)
{
 if(Matrix[i][j] != Matrix[j][i])
symm = false; 
br = true; 
break;
}
}
if(br)break;
}
правельно?а как сделать ввывод(ответ)
0
cmath
Модератор
2444 / 1685 / 134
Регистрация: 11.08.2012
Сообщений: 3,346
Завершенные тесты: 6
06.09.2012, 08:49 #12
Цитата Сообщение от Sylar9 Посмотреть сообщение
правельно?а как сделать ввывод(ответ)
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста

А symm как вы думаете, зачем? Если матрица симметрична, то на выходе из цикла symm = true, в противном случае false. Догадываетесь, на что намекаю?

Добавлено через 1 минуту
Да и еще, вам нужен проверять, является ли матрица квадратной, а то говорить про симметрию здесь просто смешно

Добавлено через 4 минуты
еще кое-что: в вашем коде есть еще ошибки (правда не алгоритмические)
здесь
C++
1
float Matrix[Dim][Dim];
а также здесь
C++
1
i <= MAX-1
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 08:51  [ТС] #13
Если не сложно напиши код полностью, очень надо
0
cmath
Модератор
2444 / 1685 / 134
Регистрация: 11.08.2012
Сообщений: 3,346
Завершенные тесты: 6
06.09.2012, 08:59 #14
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
#include <iostream>
using namespace std;
const int MAX = 100;
int main() 
{    
    float Matrix[MAX][MAX];
    int n, m;
    cout << "M = ";
    cin >> m;
    cout << "N = ";
    cin >> n;
    for (int i=0; i<m; i++)
    for(int j=0; j<n; j++)
    {
      cout << "a[" << i << "][" << j << "] = ";
      cin >> Matrix[i][j];
    }
bool symm = true;
bool br = false;
if(n==m)
{
for(int i = 0; i <= n-1; i++)
{
 for(int j = n-1; j >= 0; j--)
 {
   if(Matrix[i][j] != Matrix[j][i])
   {
   symm = false; 
   br = true; 
   break;
   }
 }
 if(br)break;
}
}
else symm=false;
cout << (symm ? "Matrix is symmetric" : "Not symmetric") << endl;
system("pause");
return 0;
}
p.s. не забудьте проверить на синтаксические ошибки (отсутствие скобок, запятых и т.п.)
1
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,942
Записей в блоге: 1
06.09.2012, 09:00  [ТС] #15
огромное спасбо
0
06.09.2012, 09:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 09:00
Привет! Вот еще темы с ответами:

Отобразить матрицу симметрично относительно побочной диагонали - C++
Как отобразить матрицу симметрично относительно побочной диагонали в с++?

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

Определить является ли массив симметричным относительно побочной диагонали - C++
дан двухмерный квадратный массив целых чисел. определить является ли массив симметричным относительно побочной диагонали

Определить является ли массив симметричным относительно побочной диагонали - C++
дан квадратный массив целых(вещественных) чисел. Определить является ли массив симметричным относительно побочной (вспомогательной)...


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

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

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